@loopback/cli 5.1.0 → 5.2.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.
@@ -4,20 +4,18 @@
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
6
  'use strict';
7
- const fs = require('fs');
8
- const util = require('util');
7
+ const {
8
+ openapiSchemaToJsonSchema,
9
+ } = require('@openapi-contrib/openapi-schema-to-json-schema');
10
+ const fs = require('node:fs');
11
+ const util = require('node:util');
12
+ const url = require('node:url');
9
13
  const _ = require('lodash');
10
14
  const json5 = require('json5');
11
- const url = require('url');
12
-
15
+ const debugFactory = require('../../lib/debug');
13
16
  const utils = require('../../lib/utils');
14
- const debug = require('../../lib/debug')('openapi-generator');
15
-
16
- /**
17
- * Convert OpenAPI schema to JSON schema draft 4
18
- */
19
- const oasToJsonSchema4 = require('@openapi-contrib/openapi-schema-to-json-schema');
20
17
 
18
+ const debug = debugFactory('openapi-generator');
21
19
  /**
22
20
  * Convert a string to title case
23
21
  * @param {string} str
@@ -258,7 +256,7 @@ function restoreSpecObject(specObject) {
258
256
  */
259
257
  function toJsonSchema(oasSchema) {
260
258
  oasSchema = restoreSpecObject(oasSchema);
261
- let jsonSchema = oasToJsonSchema4(oasSchema);
259
+ let jsonSchema = openapiSchemaToJsonSchema(oasSchema);
262
260
  delete jsonSchema['$schema'];
263
261
  // See https://json-schema.org/draft-06/json-schema-release-notes.html
264
262
  if (jsonSchema.id) {
package/lib/utils.js CHANGED
@@ -5,35 +5,34 @@
5
5
 
6
6
  'use strict';
7
7
 
8
+ const fs = require('node:fs');
9
+ const path = require('node:path');
10
+ const util = require('node:util');
11
+ const stream = require('node:stream');
12
+ const {spawnSync} = require('node:child_process');
13
+ const readline = require('node:readline');
14
+ const _ = require('lodash');
8
15
  const chalk = require('chalk');
9
- const debug = require('../lib/debug')('utils');
10
- const fs = require('fs');
11
- const path = require('path');
12
- const util = require('util');
13
- const stream = require('stream');
14
- const {spawnSync} = require('child_process');
15
- const readline = require('readline');
16
16
  const semver = require('semver');
17
17
  const regenerate = require('regenerate');
18
- const _ = require('lodash');
19
- const pascalCase = require('change-case').pascalCase;
20
- const lowerCase = require('change-case').lowerCase;
21
- const promisify = require('util').promisify;
22
- const toVarName = require('change-case').camelCase;
18
+ const {pascalCase, lowerCase, camelCase: toVarName} = require('change-case');
23
19
  const pluralize = require('pluralize');
24
- const urlSlug = require('url-slug');
20
+ const {convert: urlSlug} = require('url-slug');
25
21
  const validate = require('validate-npm-package-name');
26
22
  const Conflicter = require('yeoman-environment/conflicter');
23
+ const stringifyObject = require('stringify-object');
24
+ const untildify = require('untildify');
25
+ const tildify = require('tildify');
27
26
  const connectors = require('./connectors.json');
28
27
  const tsquery = require('./ast-helper');
29
- const stringifyObject = require('stringify-object');
28
+ const debugFactory = require('../lib/debug');
29
+
30
+ const debug = debugFactory('utils');
30
31
  const camelCase = _.camelCase;
31
32
  const kebabCase = _.kebabCase;
32
- const untildify = require('untildify');
33
- const tildify = require('tildify');
34
- const readdirAsync = promisify(fs.readdir);
33
+
35
34
  const toFileName = name => {
36
- return kebabCase(name).replace(/\-(\d+)$/g, '$1');
35
+ return kebabCase(name).replace(/-(\d+)$/g, '$1');
37
36
  };
38
37
 
39
38
  const RESERVED_PROPERTY_NAMES = ['constructor'];
@@ -42,7 +41,7 @@ const RESERVED_PROPERTY_NAMES = ['constructor'];
42
41
  * Either a reference to util.promisify or its polyfill, depending on
43
42
  * your version of Node.
44
43
  */
45
- exports.promisify = promisify;
44
+ exports.promisify = util.promisify;
46
45
 
47
46
  /**
48
47
  * Returns a valid variable name regex;
@@ -97,7 +96,7 @@ exports.validateClassName = function (name) {
97
96
  if (name.includes('-')) {
98
97
  return util.format('Class name cannot contain hyphens: %s', name);
99
98
  }
100
- if (name.match(/[\/@\s\+%:]/)) {
99
+ if (name.match(/[\/@\s+%:]/)) {
101
100
  return util.format(
102
101
  'Class name cannot contain special characters (/@+%: ): %s',
103
102
  name,
@@ -162,7 +161,7 @@ exports.validateKeyName = function (name) {
162
161
  if (name.includes('-')) {
163
162
  return util.format('Key name cannot contain hyphens: %s', name);
164
163
  }
165
- if (name.match(/[\/@\s\+%:]/)) {
164
+ if (name.match(/[\/@\s+%:]/)) {
166
165
  return util.format(
167
166
  'Key name cannot contain special characters (/@+%: ): %s',
168
167
  name,
@@ -198,7 +197,7 @@ exports.validateKeyToKeyFrom = function (input, comparedTo) {
198
197
  if (input.includes('-')) {
199
198
  return util.format('Key name cannot contain hyphens: %s', input);
200
199
  }
201
- if (input.match(/[\/@\s\+%:]/)) {
200
+ if (input.match(/[\/@\s+%:]/)) {
202
201
  return util.format(
203
202
  'Key name cannot contain special characters (/@+%: ): %s',
204
203
  input,
@@ -234,7 +233,7 @@ exports.validateRelationName = function (name, type, foreignKeyName) {
234
233
  if (name.includes('-')) {
235
234
  return util.format('Relation name cannot contain hyphens: %s', name);
236
235
  }
237
- if (name.match(/[\/@\s\+%:]/)) {
236
+ if (name.match(/[\/@\s+%:]/)) {
238
237
  return util.format(
239
238
  'Relation name cannot contain special characters (/@+%: ): %s',
240
239
  name,
@@ -248,7 +247,7 @@ exports.validateRelationName = function (name, type, foreignKeyName) {
248
247
  */
249
248
  exports.toClassName = function (name) {
250
249
  if (name === '') return new Error('no input');
251
- if (typeof name != 'string' || name == null) return new Error('bad input');
250
+ if (typeof name != 'string') return new Error('bad input');
252
251
  return pascalCase(camelCase(name));
253
252
  };
254
253
 
@@ -329,7 +328,7 @@ exports.StatusConflicter = class StatusConflicter extends Conflicter {
329
328
  * filetype.
330
329
  * For example, a fileType of "model" will search the target path for matches to
331
330
  * "*.model.js"
332
- * @param {string} path The directory path to search. This search is *not*
331
+ * @param {string} dir The directory path to search. This search is *not*
333
332
  * recursive.
334
333
  * @param {string} artifactType The type of the artifact in string form.
335
334
  * @param {Function=} reader An optional reader function to retrieve the
@@ -337,7 +336,7 @@ exports.StatusConflicter = class StatusConflicter extends Conflicter {
337
336
  * @returns {Promise<string[]>} The filtered list of paths.
338
337
  */
339
338
  exports.findArtifactPaths = async function (dir, artifactType, reader) {
340
- const readdir = reader || readdirAsync;
339
+ const readdir = reader || fs.promises.readdir;
341
340
  debug('Finding %j artifact paths at %s', artifactType, dir);
342
341
 
343
342
  try {
@@ -520,12 +519,12 @@ exports.validateRequiredName = function (name) {
520
519
  if (!name) {
521
520
  return 'Name is required';
522
521
  }
523
- return validateValue(name, /[\/@\s\+%:\.]/);
522
+ return validateValue(name, /[\/@\s+%:.]/);
524
523
  };
525
524
 
526
525
  function validateValue(name, unallowedCharacters) {
527
526
  if (!unallowedCharacters) {
528
- unallowedCharacters = /[\/@\s\+%:\.]/;
527
+ unallowedCharacters = /[\/@\s+%:.]/;
529
528
  }
530
529
  if (name.match(unallowedCharacters)) {
531
530
  return `Name cannot contain special characters ${unallowedCharacters}: ${name}`;
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": "5.1.0",
4
+ "version": "5.2.0",
5
5
  "keywords": [
6
6
  "LoopBack",
7
7
  "CLI",
@@ -9,6 +9,7 @@
9
9
  ],
10
10
  "license": "MIT",
11
11
  "bin": {
12
+ "lb": "bin/cli-main.js",
12
13
  "lb4": "bin/cli-main.js"
13
14
  },
14
15
  "main": "generators/app/index.js",
@@ -40,27 +41,27 @@
40
41
  ],
41
42
  "dependencies": {
42
43
  "@npmcli/map-workspaces": "^3.0.4",
43
- "@npmcli/package-json": "^3.1.1",
44
- "@openapi-contrib/openapi-schema-to-json-schema": "^3.3.2",
45
- "@phenomnomnominal/tsquery": "^5.0.1",
44
+ "@npmcli/package-json": "^4.0.0",
45
+ "@openapi-contrib/openapi-schema-to-json-schema": "^4.0.5",
46
+ "@phenomnomnominal/tsquery": "~5.0.1",
46
47
  "camelcase-keys": "^7.0.2",
47
48
  "chalk": "^4.1.2",
48
49
  "change-case": "^4.1.2",
49
50
  "debug": "^4.3.4",
50
51
  "fs-extra": "^11.1.1",
51
- "glob": "^10.3.1",
52
+ "glob": "^10.3.3",
52
53
  "inquirer-autocomplete-prompt": "^2.0.0",
53
54
  "json5": "^2.2.3",
54
55
  "latest-version": "^5.1.0",
55
56
  "lodash": "^4.17.21",
56
- "minimatch": "^9.0.2",
57
+ "minimatch": "^9.0.3",
57
58
  "minimist": "^1.2.8",
58
59
  "mkdirp": "^3.0.1",
59
60
  "natural-compare": "^1.4.0",
60
61
  "pacote": "^15.2.0",
61
62
  "pluralize": "^8.0.0",
62
63
  "regenerate": "^1.4.2",
63
- "semver": "^7.5.3",
64
+ "semver": "^7.5.4",
64
65
  "slash": "^3.0.0",
65
66
  "spdx-license-list": "^6.6.0",
66
67
  "stringify-object": "^3.3.0",
@@ -70,29 +71,29 @@
70
71
  "tabtab": "^3.0.2",
71
72
  "terminal-link": "^2.1.1",
72
73
  "tildify": "^2.0.0",
73
- "ts-morph": "^17.0.1",
74
- "typescript": "~5.1.5",
74
+ "ts-morph": "^19.0.0",
75
+ "typescript": "~5.1.6",
75
76
  "unicode-10.0.0": "^0.7.5",
76
77
  "untildify": "^4.0.0",
77
78
  "update-notifier": "^5.1.0",
78
- "url-slug": "^3.0.6",
79
+ "url-slug": "^4.0.1",
79
80
  "validate-npm-package-name": "^5.0.0",
80
81
  "write-file-atomic": "^5.0.1",
81
82
  "yeoman-environment": "^3.19.3",
82
83
  "yeoman-generator": "^5.9.0"
83
84
  },
84
85
  "devDependencies": {
85
- "@loopback/build": "^10.1.0",
86
- "@loopback/eslint-config": "^14.0.1",
87
- "@loopback/testlab": "^6.1.0",
86
+ "@loopback/build": "^10.1.1",
87
+ "@loopback/eslint-config": "^14.0.2",
88
+ "@loopback/testlab": "^6.1.1",
88
89
  "@types/ejs": "^3.1.2",
89
90
  "@types/fs-extra": "^11.0.1",
90
91
  "@types/minimatch": "^5.1.2",
91
- "@types/node": "^16.18.37",
92
+ "@types/node": "^16.18.38",
92
93
  "@types/yeoman-environment": "^2.10.8",
93
94
  "@types/yeoman-generator": "^5.2.11",
94
95
  "loopback": "^3.28.0",
95
- "loopback-datasource-juggler": "^4.28.7",
96
+ "loopback-datasource-juggler": "^4.28.8",
96
97
  "mem-fs": "^2.3.0",
97
98
  "mem-fs-editor": "^9.7.0",
98
99
  "mock-stdin": "^1.0.0",
@@ -106,97 +107,97 @@
106
107
  "templateDependencies": {
107
108
  "tslib": "^2.0.0",
108
109
  "@types/mocha": "^10.0.1",
109
- "@types/node": "^14.18.47",
110
+ "@types/node": "^16.18.38",
110
111
  "cross-spawn": "^7.0.3",
111
112
  "debug": "^4.3.4",
112
113
  "fs-extra": "^11.1.1",
113
114
  "mocha": "^10.2.0",
114
115
  "nyc": "^15.1.0",
115
116
  "prettier": "^2.8.8",
116
- "rimraf": "^5.0.0",
117
+ "rimraf": "^5.0.1",
117
118
  "source-map-support": "^0.5.21",
118
- "typescript": "~4.9.5",
119
- "@loopback/authentication": "^10.0.0",
120
- "@loopback/boot": "^6.0.0",
121
- "@loopback/build": "^10.0.0",
122
- "@loopback/cli": "^5.0.0",
123
- "@loopback/context": "^6.0.0",
124
- "@loopback/core": "^5.0.0",
125
- "@loopback/metadata": "^6.0.0",
126
- "@loopback/openapi-spec-builder": "^6.0.0",
127
- "@loopback/openapi-v3": "^9.0.0",
128
- "@loopback/repository-json-schema": "^7.0.0",
129
- "@loopback/repository": "^6.0.0",
130
- "@loopback/rest": "^13.0.0",
131
- "@loopback/testlab": "^6.0.0",
132
- "@loopback/docs": "^6.0.0",
133
- "glob": "^10.2.4",
134
- "@loopback/example-hello-world": "^6.0.0",
135
- "@loopback/example-log-extension": "^6.0.0",
136
- "@loopback/example-rpc-server": "^6.0.0",
137
- "@loopback/example-todo": "^7.0.0",
138
- "@loopback/example-soap-calculator": "^6.0.0",
139
- "@loopback/service-proxy": "^6.0.0",
140
- "@loopback/http-caching-proxy": "^5.0.0",
141
- "@loopback/http-server": "^5.0.0",
142
- "@loopback/example-todo-list": "^7.0.0",
119
+ "typescript": "~5.1.6",
120
+ "@loopback/authentication": "^10.1.1",
121
+ "@loopback/boot": "^6.1.1",
122
+ "@loopback/build": "^10.1.1",
123
+ "@loopback/cli": "^5.2.0",
124
+ "@loopback/context": "^6.1.1",
125
+ "@loopback/core": "^5.1.1",
126
+ "@loopback/metadata": "^6.1.1",
127
+ "@loopback/openapi-spec-builder": "^6.1.1",
128
+ "@loopback/openapi-v3": "^9.1.1",
129
+ "@loopback/repository-json-schema": "^7.1.1",
130
+ "@loopback/repository": "^6.1.1",
131
+ "@loopback/rest": "^13.1.1",
132
+ "@loopback/testlab": "^6.1.1",
133
+ "@loopback/docs": "^6.0.2",
134
+ "glob": "^10.3.3",
135
+ "@loopback/example-hello-world": "^6.1.1",
136
+ "@loopback/example-log-extension": "^6.1.1",
137
+ "@loopback/example-rpc-server": "^6.1.1",
138
+ "@loopback/example-todo": "^7.1.1",
139
+ "@loopback/example-soap-calculator": "^6.1.1",
140
+ "@loopback/service-proxy": "^6.1.1",
141
+ "@loopback/http-caching-proxy": "^5.1.1",
142
+ "@loopback/http-server": "^5.1.1",
143
+ "@loopback/example-todo-list": "^7.1.1",
143
144
  "@loopback/dist-util": "^0.4.0",
144
- "@loopback/rest-explorer": "^6.0.0",
145
- "@loopback/eslint-config": "^14.0.0",
145
+ "@loopback/rest-explorer": "^6.1.1",
146
+ "@loopback/eslint-config": "^14.0.2",
146
147
  "express-composition": "^1.1.0",
147
- "@loopback/example-express-composition": "^6.0.0",
148
- "@loopback/example-greeter-extension": "^6.0.0",
149
- "@loopback/booter-lb3app": "^5.0.0",
150
- "@loopback/example-lb3-application": "^6.0.0",
151
- "eslint": "^8.40.0",
148
+ "@loopback/example-express-composition": "^6.1.1",
149
+ "@loopback/example-greeter-extension": "^6.1.1",
150
+ "@loopback/booter-lb3app": "^5.1.1",
151
+ "@loopback/example-lb3-application": "^6.1.1",
152
+ "eslint": "^8.45.0",
152
153
  "eslint-plugin-mocha": "^10.1.0",
153
- "@loopback/example-greeting-app": "^6.0.0",
154
- "@loopback/example-context": "^6.0.0",
155
- "@typescript-eslint/eslint-plugin": "^5.59.6",
156
- "@typescript-eslint/parser": "^5.59.6",
157
- "eslint-plugin-eslint-plugin": "^5.0.8",
154
+ "@loopback/example-greeting-app": "^6.1.1",
155
+ "@loopback/example-context": "^6.1.1",
156
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
157
+ "@typescript-eslint/parser": "^5.62.0",
158
+ "eslint-plugin-eslint-plugin": "^5.1.0",
158
159
  "eslint-config-prettier": "^8.8.0",
159
- "@loopback/repository-tests": "^0.22.0",
160
- "@loopback/health": "^0.12.0",
161
- "@loopback/authorization": "^0.13.0",
162
- "@loopback/rest-crud": "^0.16.0",
163
- "@loopback/security": "^0.9.0",
164
- "@loopback/authentication-passport": "^6.0.0",
165
- "@loopback/example-metrics-prometheus": "^0.11.0",
166
- "@loopback/metrics": "^0.12.0",
167
- "@loopback/model-api-builder": "^5.0.0",
168
- "@loopback/logging": "^0.10.0",
169
- "@loopback/example-access-control-migration": "^6.0.0",
170
- "@loopback/example-file-transfer": "^5.0.0",
171
- "@loopback/example-rest-crud": "^5.0.0",
172
- "@loopback/apiconnect": "^0.11.0",
173
- "@loopback/example-validation-app": "^5.0.0",
174
- "@loopback/cron": "^0.10.0",
175
- "@loopback/example-multi-tenancy": "^0.14.0",
176
- "@loopback/example-passport-login": "^5.0.0",
177
- "@loopback/authentication-jwt": "^0.13.0",
178
- "@loopback/context-explorer": "^0.9.0",
179
- "@loopback/express": "^6.0.0",
160
+ "@loopback/repository-tests": "^0.23.1",
161
+ "@loopback/health": "^0.13.1",
162
+ "@loopback/authorization": "^0.14.1",
163
+ "@loopback/rest-crud": "^0.17.1",
164
+ "@loopback/security": "^0.10.1",
165
+ "@loopback/authentication-passport": "^6.1.1",
166
+ "@loopback/example-metrics-prometheus": "^0.12.1",
167
+ "@loopback/metrics": "^0.13.1",
168
+ "@loopback/model-api-builder": "^5.1.1",
169
+ "@loopback/logging": "^0.11.1",
170
+ "@loopback/example-access-control-migration": "^6.1.1",
171
+ "@loopback/example-file-transfer": "^5.1.1",
172
+ "@loopback/example-rest-crud": "^5.1.1",
173
+ "@loopback/apiconnect": "^0.12.1",
174
+ "@loopback/example-validation-app": "^5.1.1",
175
+ "@loopback/cron": "^0.11.1",
176
+ "@loopback/example-multi-tenancy": "^0.15.1",
177
+ "@loopback/example-passport-login": "^5.1.1",
178
+ "@loopback/authentication-jwt": "^0.14.1",
179
+ "@loopback/context-explorer": "^0.10.1",
180
+ "@loopback/express": "^6.1.1",
180
181
  "@types/js-yaml": "^3.12.4",
181
182
  "js-yaml": "^3.13.1",
182
- "@loopback/example-todo-jwt": "^5.0.0",
183
- "@loopback/mock-oauth2-provider": "^0.7.0",
183
+ "@loopback/example-todo-jwt": "^5.1.1",
184
+ "@loopback/mock-oauth2-provider": "^0.8.1",
184
185
  "lodash": "^4.17.21",
185
- "@loopback/pooling": "^0.9.0",
186
- "@loopback/typeorm": "^0.8.0",
187
- "@loopback/example-graphql": "^0.8.0",
188
- "@loopback/graphql": "^0.9.0",
189
- "@loopback/filter": "^4.0.0",
190
- "@loopback/rest-msgpack": "^0.9.0",
191
- "@loopback/example-binding-resolution": "^0.8.0",
192
- "@loopback/example-webpack": "^0.9.0",
193
- "@loopback/example-socketio": "^0.7.0",
194
- "@loopback/socketio": "^0.7.0",
186
+ "@loopback/pooling": "^0.10.1",
187
+ "@loopback/typeorm": "^0.9.1",
188
+ "@loopback/example-graphql": "^0.9.1",
189
+ "@loopback/graphql": "^0.10.1",
190
+ "@loopback/filter": "^4.1.1",
191
+ "@loopback/rest-msgpack": "^0.10.1",
192
+ "@loopback/example-binding-resolution": "^0.9.1",
193
+ "@loopback/example-webpack": "^0.10.1",
194
+ "@loopback/example-socketio": "^0.8.1",
195
+ "@loopback/socketio": "^0.7.2",
195
196
  "@loopback/monorepo": "^0.6.0",
196
- "@loopback/tsdocs": "^5.0.0",
197
- "@loopback/example-references-many": "^7.0.0",
198
- "@loopback/sequelize": "^0.3.0"
197
+ "@loopback/tsdocs": "^5.1.1",
198
+ "@loopback/example-references-many": "^7.1.1",
199
+ "@loopback/sequelize": "^0.5.0"
199
200
  }
200
201
  },
201
- "gitHead": "10a8fa7fbd00ac77c4aee3e7f40884b07fe1919c"
202
+ "gitHead": "be0c53e30bbe9edf7753c4fcd7ab3199f7cd3b8c"
202
203
  }