@loopback/cli 4.0.0-alpha.8 → 4.1.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/.yo-rc.json +1719 -0
- package/{generators/project/templates/LICENSE → LICENSE} +2 -1
- package/README.md +44 -43
- package/bin/cli-main.js +61 -0
- package/generators/app/index.js +109 -15
- package/generators/app/templates/.dockerignore +5 -0
- package/generators/app/templates/Dockerfile +28 -0
- package/generators/app/templates/README.md.ejs +130 -0
- package/generators/app/templates/public/index.html.ejs +88 -0
- package/generators/app/templates/{test → src/__tests__}/README.md +0 -1
- package/generators/app/templates/src/__tests__/acceptance/home-page.acceptance.ts.ejs +31 -0
- package/generators/app/templates/src/__tests__/acceptance/ping.controller.acceptance.ts.ejs +21 -0
- package/generators/app/templates/src/__tests__/acceptance/test-helper.ts.ejs +32 -0
- package/generators/app/templates/src/application.ts.ejs +70 -0
- package/generators/app/templates/src/controllers/README.md +6 -0
- package/generators/app/templates/src/controllers/index.ts.ejs +1 -0
- package/generators/app/templates/src/controllers/ping.controller.ts.ejs +55 -0
- package/generators/app/templates/src/datasources/README.md +3 -0
- package/generators/app/templates/src/index.ts.ejs +39 -0
- package/generators/app/templates/src/migrate.ts.ejs +20 -0
- package/generators/app/templates/src/models/README.md +3 -0
- package/generators/app/templates/src/openapi-spec.ts.ejs +23 -0
- package/generators/app/templates/src/sequence.ts.ejs +3 -0
- package/generators/controller/index.js +240 -23
- package/generators/controller/templates/src/controllers/controller-rest-template.ts.ejs +150 -0
- package/generators/controller/templates/src/controllers/{controller-template.ts → controller-template.ts.ejs} +2 -2
- package/generators/copyright/fs.js +46 -0
- package/generators/copyright/git.js +78 -0
- package/generators/copyright/header.js +306 -0
- package/generators/copyright/index.js +230 -0
- package/generators/copyright/license.js +105 -0
- package/generators/datasource/index.js +341 -0
- package/generators/datasource/templates/datasource.ts.ejs +22 -0
- package/generators/discover/import-discovered-model.js +70 -0
- package/generators/discover/index.js +411 -0
- package/generators/example/downloader.js +16 -0
- package/generators/example/index.js +176 -0
- package/generators/extension/index.js +34 -5
- package/generators/extension/templates/README.md.ejs +32 -0
- package/generators/extension/templates/{test → src/__tests__}/acceptance/README.md +0 -0
- package/generators/extension/templates/{test → src/__tests__}/integration/README.md +0 -0
- package/generators/extension/templates/{test → src/__tests__}/unit/README.md +0 -0
- package/generators/extension/templates/src/component.ts.ejs +22 -0
- package/generators/extension/templates/src/controllers/README.md +3 -2
- package/generators/extension/templates/src/decorators/README.md +10 -4
- package/generators/extension/templates/src/index.ts.ejs +3 -0
- package/generators/extension/templates/src/keys.ts.ejs +11 -0
- package/generators/extension/templates/src/mixins/README.md +77 -21
- package/generators/extension/templates/src/providers/README.md +51 -25
- package/generators/extension/templates/src/repositories/README.md +1 -1
- package/generators/extension/templates/src/types.ts.ejs +15 -0
- package/generators/import-lb3-models/index.js +197 -0
- package/generators/import-lb3-models/lb3app-loader.js +31 -0
- package/generators/import-lb3-models/migrate-model.js +249 -0
- package/generators/import-lb3-models/model-names.js +32 -0
- package/generators/interceptor/index.js +178 -0
- package/generators/interceptor/templates/interceptor-template.ts.ejs +62 -0
- package/generators/model/index.js +536 -0
- package/generators/model/property-definition.js +85 -0
- package/generators/model/templates/model.ts.ejs +49 -0
- package/generators/observer/index.js +132 -0
- package/generators/observer/templates/observer-template.ts.ejs +40 -0
- package/generators/openapi/README.md +211 -0
- package/generators/openapi/index.js +535 -0
- package/generators/openapi/schema-helper.js +447 -0
- package/generators/openapi/spec-helper.js +484 -0
- package/generators/openapi/spec-loader.js +75 -0
- package/generators/openapi/templates/src/controllers/controller-template.ts.ejs +43 -0
- package/generators/openapi/templates/src/datasources/datasource.ts.ejs +42 -0
- package/generators/openapi/templates/src/models/model-template.ts.ejs +71 -0
- package/generators/openapi/templates/src/models/type-template.ts.ejs +13 -0
- package/generators/openapi/templates/src/services/service-proxy-template.ts.ejs +55 -0
- package/generators/openapi/utils.js +322 -0
- package/generators/project/templates/.eslintignore +4 -0
- package/generators/project/templates/.eslintrc.js.ejs +3 -0
- package/generators/project/templates/.mocharc.json +5 -0
- package/generators/project/templates/.prettierignore +0 -2
- package/generators/project/templates/.prettierrc +2 -1
- package/generators/project/templates/.vscode/launch.json +38 -0
- package/generators/project/templates/.vscode/settings.json +32 -0
- package/generators/project/templates/.vscode/tasks.json +29 -0
- package/generators/project/templates/DEVELOPING.md +36 -0
- package/generators/project/templates/_.gitignore +3 -5
- package/generators/project/templates/package.json.ejs +175 -0
- package/generators/project/templates/package.plain.json.ejs +176 -0
- package/generators/project/templates/tsconfig.json.ejs +39 -0
- package/generators/relation/base-relation.generator.js +220 -0
- package/generators/relation/belongs-to-relation.generator.js +196 -0
- package/generators/relation/has-many-relation.generator.js +200 -0
- package/generators/relation/has-many-through-relation.generator.js +331 -0
- package/generators/relation/has-one-relation.generator.js +200 -0
- package/generators/relation/index.js +795 -0
- package/generators/relation/references-many-relation.generator.js +142 -0
- package/generators/relation/templates/controller-relation-template-belongs-to.ts.ejs +38 -0
- package/generators/relation/templates/controller-relation-template-has-many-through.ts.ejs +110 -0
- package/generators/relation/templates/controller-relation-template-has-many.ts.ejs +110 -0
- package/generators/relation/templates/controller-relation-template-has-one.ts.ejs +110 -0
- package/generators/relation/utils.generator.js +260 -0
- package/generators/repository/index.js +576 -0
- package/generators/repository/templates/src/repositories/repository-crud-default-template.ts.ejs +21 -0
- package/generators/repository/templates/src/repositories/repository-kv-template.ts.ejs +19 -0
- package/generators/rest-crud/crud-rest-component.js +63 -0
- package/generators/rest-crud/index.js +423 -0
- package/generators/rest-crud/templates/src/model-endpoints/model.rest-config-template.ts.ejs +11 -0
- package/generators/service/index.js +351 -0
- package/generators/service/templates/local-service-class-template.ts.ejs +10 -0
- package/generators/service/templates/local-service-provider-template.ts.ejs +19 -0
- package/generators/service/templates/remote-service-proxy-template.ts.ejs +21 -0
- package/generators/update/index.js +55 -0
- package/intl/cs/messages.json +204 -0
- package/intl/de/messages.json +204 -0
- package/intl/en/messages.json +204 -0
- package/intl/es/messages.json +204 -0
- package/intl/fr/messages.json +204 -0
- package/intl/it/messages.json +204 -0
- package/intl/ja/messages.json +204 -0
- package/intl/ko/messages.json +204 -0
- package/intl/nl/messages.json +204 -0
- package/intl/pl/messages.json +204 -0
- package/intl/pt/messages.json +204 -0
- package/intl/ru/messages.json +204 -0
- package/intl/tr/messages.json +204 -0
- package/intl/zh-Hans/messages.json +204 -0
- package/intl/zh-Hant/messages.json +204 -0
- package/lib/artifact-generator.js +137 -39
- package/lib/ast-helper.js +214 -0
- package/lib/base-generator.js +509 -0
- package/lib/cli.js +233 -0
- package/lib/connectors.json +894 -0
- package/lib/debug.js +16 -0
- package/lib/globalize.js +12 -0
- package/lib/model-discoverer.js +118 -0
- package/lib/project-generator.js +154 -57
- package/lib/tab-completion.js +127 -0
- package/lib/update-index.js +44 -0
- package/lib/utils.js +689 -20
- package/lib/version-helper.js +299 -0
- package/package.json +183 -39
- package/CHANGELOG.md +0 -75
- package/bin/cli.js +0 -66
- package/generators/.DS_Store +0 -0
- package/generators/app/templates/index.js +0 -14
- package/generators/app/templates/src/application.ts +0 -27
- package/generators/app/templates/src/controllers/ping-controller.ts +0 -25
- package/generators/app/templates/src/index.ts +0 -25
- package/generators/app/templates/test/ping-controller.test.ts +0 -46
- package/generators/extension/templates/index.js +0 -8
- package/generators/extension/templates/src/component.ts +0 -14
- package/generators/extension/templates/src/index.ts +0 -6
- package/generators/project/templates/.npmrc +0 -1
- package/generators/project/templates/.yo-rc.json +0 -1
- package/generators/project/templates/README.md +0 -4
- package/generators/project/templates/index.d.ts +0 -6
- package/generators/project/templates/index.ts +0 -11
- package/generators/project/templates/package.json +0 -79
- package/generators/project/templates/package.plain.json +0 -82
- package/generators/project/templates/test/mocha.opts +0 -1
- package/generators/project/templates/tsconfig.json +0 -29
- package/generators/project/templates/tslint.build.json +0 -17
- package/generators/project/templates/tslint.json +0 -33
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
|
|
2
|
+
// Node module: @loopback/cli
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
const ArtifactGenerator = require('../../lib/artifact-generator');
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const debug = require('../../lib/debug')('service-generator');
|
|
10
|
+
const inspect = require('util').inspect;
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const chalk = require('chalk');
|
|
13
|
+
const utils = require('../../lib/utils');
|
|
14
|
+
const g = require('../../lib/globalize');
|
|
15
|
+
|
|
16
|
+
const VALID_CONNECTORS_FOR_SERVICE = ['Model'];
|
|
17
|
+
|
|
18
|
+
const REMOTE_SERVICE_TEMPLATE = 'remote-service-proxy-template.ts.ejs';
|
|
19
|
+
const LOCAL_CLASS_TEMPLATE = 'local-service-class-template.ts.ejs';
|
|
20
|
+
const LOCAL_PROVIDER_TEMPLATE = 'local-service-provider-template.ts.ejs';
|
|
21
|
+
|
|
22
|
+
const PROMPT_MESSAGE_DATA_SOURCE = g.f('Please select the datasource');
|
|
23
|
+
|
|
24
|
+
const ERROR_NO_DATA_SOURCES_FOUND = g.f('No datasources found at');
|
|
25
|
+
|
|
26
|
+
const REMOTE_SERVICE_PROXY = 'proxy';
|
|
27
|
+
const LOCAL_SERVICE_CLASS = 'class';
|
|
28
|
+
const LOCAL_SERVICE_PROVIDER = 'provider';
|
|
29
|
+
|
|
30
|
+
const TEMPLATES = {
|
|
31
|
+
[REMOTE_SERVICE_PROXY]: REMOTE_SERVICE_TEMPLATE,
|
|
32
|
+
[LOCAL_SERVICE_CLASS]: LOCAL_CLASS_TEMPLATE,
|
|
33
|
+
[LOCAL_SERVICE_PROVIDER]: LOCAL_PROVIDER_TEMPLATE,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
module.exports = class ServiceGenerator extends ArtifactGenerator {
|
|
37
|
+
// Note: arguments and options should be defined in the constructor.
|
|
38
|
+
constructor(args, opts) {
|
|
39
|
+
super(args, opts);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
_setupGenerator() {
|
|
43
|
+
this.artifactInfo = {
|
|
44
|
+
type: 'service',
|
|
45
|
+
rootDir: utils.sourceRootDir,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
this.artifactInfo.outDir = path.resolve(
|
|
49
|
+
this.artifactInfo.rootDir,
|
|
50
|
+
utils.servicesDir,
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
this.artifactInfo.datasourcesDir = path.resolve(
|
|
54
|
+
this.artifactInfo.rootDir,
|
|
55
|
+
utils.datasourcesDir,
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
this.option('type', {
|
|
59
|
+
type: String,
|
|
60
|
+
required: false,
|
|
61
|
+
description: g.f('Service type - proxy, class or provider'),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
this.option('datasource', {
|
|
65
|
+
type: String,
|
|
66
|
+
required: false,
|
|
67
|
+
description: g.f('A valid datasource name'),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return super._setupGenerator();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setOptions() {
|
|
74
|
+
return super.setOptions();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
checkLoopBackProject() {
|
|
78
|
+
if (this.shouldExit()) return;
|
|
79
|
+
return super.checkLoopBackProject();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Ask for Service Type
|
|
84
|
+
*/
|
|
85
|
+
async promptServiceType() {
|
|
86
|
+
debug('Prompting for service type');
|
|
87
|
+
if (this.shouldExit()) return;
|
|
88
|
+
|
|
89
|
+
if (this.options.datasource) {
|
|
90
|
+
// The `datasource` option implies remote proxy
|
|
91
|
+
this.artifactInfo.serviceType = REMOTE_SERVICE_PROXY;
|
|
92
|
+
} else if (this.options.type === REMOTE_SERVICE_PROXY) {
|
|
93
|
+
this.artifactInfo.serviceType = REMOTE_SERVICE_PROXY;
|
|
94
|
+
} else if (this.options.type === LOCAL_SERVICE_CLASS) {
|
|
95
|
+
this.artifactInfo.serviceType = LOCAL_SERVICE_CLASS;
|
|
96
|
+
} else if (this.options.type === LOCAL_SERVICE_PROVIDER) {
|
|
97
|
+
this.artifactInfo.serviceType = LOCAL_SERVICE_PROVIDER;
|
|
98
|
+
} else if (this.options.type) {
|
|
99
|
+
this.exit(
|
|
100
|
+
new Error(
|
|
101
|
+
`Invalid service type: ${this.options.type} (${REMOTE_SERVICE_PROXY}, ${LOCAL_SERVICE_CLASS}, or ${LOCAL_SERVICE_PROVIDER}).`,
|
|
102
|
+
),
|
|
103
|
+
);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!this.artifactInfo.serviceType) {
|
|
108
|
+
const prompts = [
|
|
109
|
+
{
|
|
110
|
+
type: 'list',
|
|
111
|
+
name: 'serviceType',
|
|
112
|
+
// capitalization
|
|
113
|
+
message: g.f('%s type:', utils.toClassName(this.artifactInfo.type)),
|
|
114
|
+
choices: [
|
|
115
|
+
{
|
|
116
|
+
name: g.f('Remote service proxy backed by a data source'),
|
|
117
|
+
value: REMOTE_SERVICE_PROXY,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: g.f('Local service class bound to application context'),
|
|
121
|
+
value: LOCAL_SERVICE_CLASS,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: g.f('Local service provider bound to application context'),
|
|
125
|
+
value: LOCAL_SERVICE_PROVIDER,
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
default: 0,
|
|
129
|
+
when: !this.options.datasource && !this.options.local,
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
const props = await this.prompt(prompts);
|
|
133
|
+
Object.assign(this.artifactInfo, props);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
this.artifactInfo.serviceType =
|
|
137
|
+
this.artifactInfo.serviceType || REMOTE_SERVICE_PROXY;
|
|
138
|
+
this.artifactInfo.defaultTemplate =
|
|
139
|
+
TEMPLATES[this.artifactInfo.serviceType];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
_isRemoteProxy() {
|
|
143
|
+
return this.artifactInfo.serviceType === REMOTE_SERVICE_PROXY;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async checkDataSources() {
|
|
147
|
+
if (this.shouldExit()) return;
|
|
148
|
+
if (!this._isRemoteProxy()) return;
|
|
149
|
+
// check for datasources
|
|
150
|
+
if (!fs.existsSync(this.artifactInfo.datasourcesDir)) {
|
|
151
|
+
new Error(
|
|
152
|
+
`${ERROR_NO_DATA_SOURCES_FOUND} ${
|
|
153
|
+
this.artifactInfo.datasourcesDir
|
|
154
|
+
}. ${chalk.yellow(
|
|
155
|
+
'Please visit https://loopback.io/doc/en/lb4/DataSource-generator.html for information on how datasources are discovered',
|
|
156
|
+
)}`,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async promptDataSourceName() {
|
|
162
|
+
debug('Prompting for a datasource ');
|
|
163
|
+
if (this.shouldExit()) return;
|
|
164
|
+
if (!this._isRemoteProxy()) return;
|
|
165
|
+
let datasourcesList;
|
|
166
|
+
|
|
167
|
+
// grab the datasource name from the command line
|
|
168
|
+
const cmdDatasourceName = this.options.datasource
|
|
169
|
+
? utils.toClassName(this.options.datasource) + 'Datasource'
|
|
170
|
+
: '';
|
|
171
|
+
|
|
172
|
+
debug(`command line datasource is ${cmdDatasourceName}`);
|
|
173
|
+
|
|
174
|
+
try {
|
|
175
|
+
datasourcesList = await utils.getArtifactList(
|
|
176
|
+
this.artifactInfo.datasourcesDir,
|
|
177
|
+
'datasource',
|
|
178
|
+
true,
|
|
179
|
+
);
|
|
180
|
+
debug(
|
|
181
|
+
`datasourcesList from ${utils.sourceRootDir}/${utils.datasourcesDir} : ${datasourcesList}`,
|
|
182
|
+
);
|
|
183
|
+
} catch (err) {
|
|
184
|
+
return this.exit(err);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const availableDatasources = datasourcesList.filter(item => {
|
|
188
|
+
debug(
|
|
189
|
+
`inspecting datasource: ${item} for basemodel: ${VALID_CONNECTORS_FOR_SERVICE}`,
|
|
190
|
+
);
|
|
191
|
+
const result = utils.isConnectorOfType(
|
|
192
|
+
VALID_CONNECTORS_FOR_SERVICE,
|
|
193
|
+
this.artifactInfo.datasourcesDir,
|
|
194
|
+
item,
|
|
195
|
+
);
|
|
196
|
+
return result;
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
if (availableDatasources.length === 0) {
|
|
200
|
+
return this.exit(
|
|
201
|
+
new Error(
|
|
202
|
+
`${ERROR_NO_DATA_SOURCES_FOUND} ${
|
|
203
|
+
this.artifactInfo.datasourcesDir
|
|
204
|
+
}. ${chalk.yellow(
|
|
205
|
+
'Please visit https://loopback.io/doc/en/lb4/DataSource-generator.html for information on how datasources are discovered',
|
|
206
|
+
)}`,
|
|
207
|
+
),
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (availableDatasources.includes(cmdDatasourceName)) {
|
|
212
|
+
Object.assign(this.artifactInfo, {
|
|
213
|
+
dataSourceClass: cmdDatasourceName,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
debug(`artifactInfo.dataSourceClass ${this.artifactInfo.dataSourceClass}`);
|
|
218
|
+
|
|
219
|
+
return this.prompt([
|
|
220
|
+
{
|
|
221
|
+
type: 'list',
|
|
222
|
+
name: 'dataSourceClass',
|
|
223
|
+
message: PROMPT_MESSAGE_DATA_SOURCE,
|
|
224
|
+
choices: availableDatasources,
|
|
225
|
+
when: !this.artifactInfo.dataSourceClass,
|
|
226
|
+
default: availableDatasources[0],
|
|
227
|
+
validate: utils.validateClassName,
|
|
228
|
+
},
|
|
229
|
+
])
|
|
230
|
+
.then(props => {
|
|
231
|
+
Object.assign(this.artifactInfo, props);
|
|
232
|
+
this.artifactInfo.dataSourceName = utils.getDataSourceName(
|
|
233
|
+
this.artifactInfo.datasourcesDir,
|
|
234
|
+
this.artifactInfo.dataSourceClass,
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
if (!this.artifactInfo.dataSourceName) {
|
|
238
|
+
throw new Error('Datasource config does not have `name` property');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
this.artifactInfo.dataSourceClassName =
|
|
242
|
+
utils.toClassName(this.artifactInfo.dataSourceName) + 'DataSource';
|
|
243
|
+
|
|
244
|
+
debug(`props after datasource prompt: ${inspect(props)}`);
|
|
245
|
+
return props;
|
|
246
|
+
})
|
|
247
|
+
.catch(err => {
|
|
248
|
+
debug(`Error during datasource prompt: ${err}`);
|
|
249
|
+
return this.exit(err);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Ask for Service Name
|
|
255
|
+
*/
|
|
256
|
+
async promptArtifactName() {
|
|
257
|
+
debug('Prompting for service name');
|
|
258
|
+
if (this.shouldExit()) return;
|
|
259
|
+
|
|
260
|
+
if (this.options.name) {
|
|
261
|
+
Object.assign(this.artifactInfo, {name: this.options.name});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const prompts = [
|
|
265
|
+
{
|
|
266
|
+
type: 'input',
|
|
267
|
+
name: 'name',
|
|
268
|
+
// capitalization
|
|
269
|
+
message: g.f('%s name:', utils.toClassName(this.artifactInfo.type)),
|
|
270
|
+
when: !this.artifactInfo.name,
|
|
271
|
+
validate: utils.validateClassName,
|
|
272
|
+
},
|
|
273
|
+
];
|
|
274
|
+
return this.prompt(prompts).then(props => {
|
|
275
|
+
Object.assign(this.artifactInfo, props);
|
|
276
|
+
return props;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* this method will be in charge of inferring and create
|
|
282
|
+
* the remote interfaces from either SOAP wsdl or REST openApi json
|
|
283
|
+
*
|
|
284
|
+
* TODO: add functionality to inspect service specs to generate
|
|
285
|
+
* strongly-typed service proxies and corresponding model definitions.
|
|
286
|
+
*/
|
|
287
|
+
async inferInterfaces() {
|
|
288
|
+
if (this.shouldExit()) return;
|
|
289
|
+
if (!this._isRemoteProxy()) return;
|
|
290
|
+
const connectorType = utils.getDataSourceConnectorName(
|
|
291
|
+
this.artifactInfo.datasourcesDir,
|
|
292
|
+
this.artifactInfo.dataSourceClass,
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
// connectorType should output soap or rest in this case
|
|
296
|
+
// The base an further work for inferring remote methods
|
|
297
|
+
debug(`connectorType: ${connectorType}`);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
scaffold() {
|
|
301
|
+
if (this.shouldExit()) return false;
|
|
302
|
+
|
|
303
|
+
// Setting up data for templates
|
|
304
|
+
this.artifactInfo.className = utils.toClassName(this.artifactInfo.name);
|
|
305
|
+
this.artifactInfo.fileName = utils.toFileName(this.artifactInfo.name);
|
|
306
|
+
|
|
307
|
+
Object.assign(this.artifactInfo, {
|
|
308
|
+
outFile: utils.getServiceFileName(this.artifactInfo.name),
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
const source = this.templatePath(this.artifactInfo.defaultTemplate);
|
|
312
|
+
|
|
313
|
+
const dest = this.destinationPath(
|
|
314
|
+
path.join(this.artifactInfo.outDir, this.artifactInfo.outFile),
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
debug(`artifactInfo: ${inspect(this.artifactInfo)}`);
|
|
318
|
+
debug(`Copying artifact to: ${dest}`);
|
|
319
|
+
|
|
320
|
+
this.copyTemplatedFiles(source, dest, this.artifactInfo);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
install() {
|
|
325
|
+
if (this.shouldExit()) return false;
|
|
326
|
+
if (!this._isRemoteProxy()) return;
|
|
327
|
+
|
|
328
|
+
this.artifactInfo.dataSourceClassName =
|
|
329
|
+
utils.toClassName(this.artifactInfo.dataSourceName) + 'DataSource';
|
|
330
|
+
debug('install npm dependencies');
|
|
331
|
+
const pkgJson = this.packageJson || {};
|
|
332
|
+
const deps = pkgJson.dependencies || {};
|
|
333
|
+
const pkgs = [];
|
|
334
|
+
|
|
335
|
+
if (!deps['@loopback/service-proxy']) {
|
|
336
|
+
pkgs.push('@loopback/service-proxy');
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (pkgs.length === 0) return;
|
|
340
|
+
|
|
341
|
+
this.pkgManagerInstall(pkgs, {
|
|
342
|
+
npm: {
|
|
343
|
+
save: true,
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
async end() {
|
|
349
|
+
await super.end();
|
|
350
|
+
}
|
|
351
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import {injectable, /* inject, */ BindingScope} from '@loopback/core';
|
|
2
|
+
|
|
3
|
+
@injectable({scope: BindingScope.TRANSIENT})
|
|
4
|
+
export class <%= className %>Service {
|
|
5
|
+
constructor(/* Add @inject to inject parameters */) {}
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Add service methods here
|
|
9
|
+
*/
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {injectable, /* inject, */ BindingScope, Provider} from '@loopback/core';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Fix the service type. Possible options can be:
|
|
5
|
+
* - import {<%= className %>} from 'your-module';
|
|
6
|
+
* - export type <%= className %> = string;
|
|
7
|
+
* - export interface <%= className %> {}
|
|
8
|
+
*/
|
|
9
|
+
export type <%= className %> = unknown;
|
|
10
|
+
|
|
11
|
+
@injectable({scope: BindingScope.TRANSIENT})
|
|
12
|
+
export class <%= className %>Provider implements Provider<<%= className %>> {
|
|
13
|
+
constructor(/* Add @inject to inject parameters */) {}
|
|
14
|
+
|
|
15
|
+
value() {
|
|
16
|
+
// Add your implementation here
|
|
17
|
+
throw new Error('To be implemented');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {inject, Provider} from '@loopback/core';
|
|
2
|
+
import {getService} from '@loopback/service-proxy';
|
|
3
|
+
import {<%= dataSourceClassName %>} from '../datasources';
|
|
4
|
+
|
|
5
|
+
export interface <%= className %> {
|
|
6
|
+
// this is where you define the Node.js methods that will be
|
|
7
|
+
// mapped to REST/SOAP/gRPC operations as stated in the datasource
|
|
8
|
+
// json file.
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class <%= className %>Provider implements Provider<<%= className %>> {
|
|
12
|
+
constructor(
|
|
13
|
+
// <%= dataSourceName %> must match the name property in the datasource json file
|
|
14
|
+
@inject('datasources.<%= dataSourceName %>')
|
|
15
|
+
protected dataSource: <%= dataSourceClassName %> = new <%= dataSourceClassName %>(),
|
|
16
|
+
) {}
|
|
17
|
+
|
|
18
|
+
value(): Promise<<%= className %>> {
|
|
19
|
+
return getService(this.dataSource);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
|
|
2
|
+
// Node module: @loopback/cli
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
const BaseGenerator = require('../../lib/base-generator');
|
|
9
|
+
const g = require('../../lib/globalize');
|
|
10
|
+
const link = require('terminal-link');
|
|
11
|
+
const chalk = require('chalk');
|
|
12
|
+
|
|
13
|
+
module.exports = class UpdateGenerator extends BaseGenerator {
|
|
14
|
+
// Note: arguments and options should be defined in the constructor.
|
|
15
|
+
constructor(args, opts) {
|
|
16
|
+
super(args, opts);
|
|
17
|
+
this.command = 'update';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
_setupGenerator() {
|
|
21
|
+
this.option('semver', {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
required: false,
|
|
24
|
+
default: false,
|
|
25
|
+
description: g.f('Check version compatibility using semver semantics'),
|
|
26
|
+
});
|
|
27
|
+
return super._setupGenerator();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
setOptions() {
|
|
31
|
+
return super.setOptions();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async checkLoopBackProject() {
|
|
35
|
+
if (this.shouldExit()) return;
|
|
36
|
+
this.updated = await super.checkLoopBackProject();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async _openChangeLog() {
|
|
40
|
+
if (this.shouldExit()) return;
|
|
41
|
+
if (this.updated !== true) return;
|
|
42
|
+
this.log(chalk.red(g.f('The upgrade may break the current project.')));
|
|
43
|
+
this.log(
|
|
44
|
+
link(
|
|
45
|
+
g.f('Please check out change logs for breaking changes.'),
|
|
46
|
+
'https://loopback.io/doc/en/lb4/changelog.index.html',
|
|
47
|
+
),
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async end() {
|
|
52
|
+
await this._openChangeLog();
|
|
53
|
+
await super.end();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
{
|
|
2
|
+
"0115c9a527e1f9f5a354bbccdfe36112": "Kořenový adresář projektu:",
|
|
3
|
+
"012baa262729b0782646db9528429b4c": "Vyberte základní třídu úložiště",
|
|
4
|
+
"0258f65fb9328a8b055704469bebd5f9": "Zadejte základní cestu",
|
|
5
|
+
"02d863aa78876b4a4dfce688a7e6f917": "Příklad ukazující, jak přidat ověření.",
|
|
6
|
+
"0609b5861fff6ee8047b75494e76af9e": "Jaký je základní název cesty HTTP pro operace CRUD?",
|
|
7
|
+
"07ca1f30e0f0c91e5866d7c230c49157": "Příklad ilustrující metriky používající Prometheus.",
|
|
8
|
+
"0872615fb20f996d5032526cb9af72b5": "Upravená aplikace Todo s ověřením JWT.",
|
|
9
|
+
"08a89a8f18d86a3e2f5ce66aeb8b183f": "Popis pro {0}",
|
|
10
|
+
"0e2dd2688c9939e6e3bc58af3b5e7b17": "Platná základní třída úložiště",
|
|
11
|
+
"0eee394c1a8c898184aa039420afc594": "Název příkladu, který má být klonován",
|
|
12
|
+
"0f64c35f7cb25ea8a068e157cfd3f283": "Řadič REST s funkcemi CRUD",
|
|
13
|
+
"0f97dcea7dc212c905400da264b09cfd": "Aplikace {0} byla vytvořena v {1}.",
|
|
14
|
+
"1186c24b9452b67a24cb130b76dedffa": "Nebyly nalezeny žádné modely v umístění",
|
|
15
|
+
"12fb77f2e738ee14bda8660d5bcd894e": "Název zdroje dat, který obsahuje tento model a podporuje zjišťování modelů",
|
|
16
|
+
"1464cbc7a74f0f53a7acec08c638b376": "Chcete aktualizovat package.json a LICENSE?",
|
|
17
|
+
"1a0b53a1a5323fa92b6634ae16264892": "Název souboru JSON nebo hodnota pro konfiguraci voleb",
|
|
18
|
+
"1b41d41e2416c5a532ad20e34338a19b": "Vlastník autorských práv",
|
|
19
|
+
"203aab8983bbe9ab5982baa09cd4b819": "Prázdný řadič",
|
|
20
|
+
"21840a025087b2fd39b9dd37b7498473": "Použití výchozího vstupu typu pro nastavení {0}, protože {1} není podporované",
|
|
21
|
+
"22097832e90dd9481994416927ad1ecc": "Název pro {0}",
|
|
22
|
+
"23fe9f126c159af41d59b9b16b594c05": "Základní server RPC pomocí vytvořeného protokolu.",
|
|
23
|
+
"25613bcc246af27bb9adbffb15808516": "Upgradovat závislosti projektů",
|
|
24
|
+
"2619c842fedf79c6759daa768ba137fb": "Projekt byl původně generován příkazem @loopback/cli@{0}.",
|
|
25
|
+
"2680da6ffe85172d7053e97f8e21d1ff": "Jednoduchá aplikace Ahoj světe pomocí platformy LoopBack 4.",
|
|
26
|
+
"2d3e0ddbc158e249765cb0bb8f544217": "Formátovat generovaný kód pomocí npm run lint:fix",
|
|
27
|
+
"2d5745f8e3d91cf55dcc84f354a43e6c": "Povolit dotazy <sourceModel> pro zahrnutí dat ze souvisejícího modelu <destinationModel>",
|
|
28
|
+
"2f557022f8a4e832fca5cd5a6d511f4c": "Příklad implementující ověření v aplikaci LoopBack pomocí modulů Passport.",
|
|
29
|
+
"3190bfdf06a7237a3593ef7291031507": "Platný založený model",
|
|
30
|
+
"3411753432848b4f4c6d3e3d73c09f4e": "Typ položek pole:",
|
|
31
|
+
"34a1d0defdf4035829eb9d2bd790b061": "Název třídy komponenty:",
|
|
32
|
+
"35d135e52a365c5661db56d4aec07578": "Jaký je typ primárního klíče zdrojového modelu?",
|
|
33
|
+
"35f7f1974164ebad7093cb795630a84f": "Vypnutím případu Camel budete možná muset určit tyto přizpůsobené názvy v definici relací.",
|
|
34
|
+
"377a709c8cc8bff5d976a4e0da06ef47": "Jaký je název vlastnosti ID?",
|
|
35
|
+
"3a4acc1cb8bfc709718a49bfbeeb8460": "Vyberte model(y) pro generování koncového bodu CRUD REST",
|
|
36
|
+
"3b277c9f147030a09de73a478e4b83d7": "Foreign key references source model on through model",
|
|
37
|
+
"3cd28c0bc408abf4517f346f8cbe359e": "Jedná se o vlastnost ID {0}?",
|
|
38
|
+
"3e7a1e0430f90996d14c5065c281fdcf": "Jedná se o globální zachytávač?",
|
|
39
|
+
"407fbe4b3fc192f22b4e90442c5980a1": "Vyberte modely, které chcete zjistit",
|
|
40
|
+
"40cf3ed09f01e543265ffe4519bd08a5": "Název projektu pro {0}",
|
|
41
|
+
"43036093921e1f4595967e0eb6fcdb8b": "Jak chcete pokračovat?",
|
|
42
|
+
"44ae9235f4eab024b184b59fedd71f9c": "Předčasně ukončit nyní",
|
|
43
|
+
"44d2743e9d8e6106410b7fea1fcb69a0": "Ukázka projektu rozšíření pro platformu LoopBack 4.",
|
|
44
|
+
"4670d311aa36fb13d626ec4ab55d4f19": "Další kroky:",
|
|
45
|
+
"48b75482f8e08e012b70a495df71d514": "Označit projekt jako soukromý (vyloučeno z publikování NPM)",
|
|
46
|
+
"4a33ae949b2b741e075c445df3cca1d7": "----- Vlastní úložiště -----",
|
|
47
|
+
"4b1516463cdea3b248eeb97ac4948198": "Povolit další vlastnosti (ve volném formátu)?",
|
|
48
|
+
"4d8a9b728bee844a0a6647379ab86826": "Nyní přidejte vlastnost do {0}",
|
|
49
|
+
"5225c88650d6a337fb4c215cca812f96": "Příklad řízení přístupu migrovaný z úložiště LoopBack 3 loopback-example-access-control.",
|
|
50
|
+
"5226c72e763d99e9a316a9ce9875fde9": "Zahrnout soubor Dockerfile a .dockerignore",
|
|
51
|
+
"52e1f166e76bb9545daf180fb2e63782": "Vyberte typ vztahu",
|
|
52
|
+
"52f7167a7c775a0e66ef8d5b9ade1fc1": "{0} {1} bude vytvořen v src/{2}/{3}.{4}.ts",
|
|
53
|
+
"536024b4c8926c72705ad6796e7629b6": "Logická hodnota pro zjišťování pohledů",
|
|
54
|
+
"542d9b2310d9bb9f8c4bf792dbb7d6cd": "Název třídy aplikace:",
|
|
55
|
+
"57fc5239f1ed8537950c0dc19a61b85f": "Vyberte konektor, který chcete zjistit",
|
|
56
|
+
"5811f9c0ec7e60ecb58a58e1faa5574b": "Povolit prettier",
|
|
57
|
+
"59a4c6df82c2bbaf50592ee55982fe64": "použít pomocníky @loopback/build (např. lb-eslint)",
|
|
58
|
+
"5a0085f46605278c8b83284484cfa858": "Název skupiny pro řazení globálního zachytávače",
|
|
59
|
+
"5a5169e28fedd5752a79ae01155f47a1": "Název licence:",
|
|
60
|
+
"5b6e1e532844d265ddfe06d8a15bdeba": "Povolit {0}",
|
|
61
|
+
"5bdddebdf72c7027a9e24aa500a35dd7": "Výchozí hodnota {0}:",
|
|
62
|
+
"5eb4697c2c62ae3b805af415847dd069": "Nebyly nalezeny žádné modely v umístění",
|
|
63
|
+
"5f9d9ca636cc3bd7e133455d51fa410b": "Vyberte zdrojový model",
|
|
64
|
+
"6114abcc1315a8f1e0bef7748b00eb14": "Použít předkonfigurovaná nastavení VSCode",
|
|
65
|
+
"61d043027dd4251cb87fe4419d35ffd8": "Povolit {0} dotazů pro zahrnutí dat ze souvisejících instancí {1}? ",
|
|
66
|
+
"635110efac9ccc161e67007e2df6db06": "Schéma ke zjištění",
|
|
67
|
+
"6393c8247a668f277bae18632fb260c1": "Název skupiny pozorovatelů pro řazení",
|
|
68
|
+
"63a2b68c48f278cfafe6e2682b30e261": "instalovat prettier, aby formát kódu odpovídal pravidlům",
|
|
69
|
+
"64bbe2d519f72f60277b9661b313dab7": "Název projektu:",
|
|
70
|
+
"64e66b3917e80c0609371f314c1d87e0": "Chybný typ vztahu",
|
|
71
|
+
"66fbf32f221f83bbf88d3e7ed04f5724": "Zadejte adresář, do kterého budou umístěny soubory `model.model.ts`",
|
|
72
|
+
"67ee888416f9432e38942252993cc304": "třída neexistuje. Vytvořte úložiště nejdříve s příkazem \"lb4 repository\".",
|
|
73
|
+
"685b2e167d6a8e5da8f24a8a889808ce": "Změnit výchozího správce balíku",
|
|
74
|
+
"68a8b9c962c33e1c521e221b30409cd7": "Zkontrolujte protokoly změn pro průlomové změny.",
|
|
75
|
+
"693de1283bf4c567269b4984d3d82d82": "Název zdrojové vlastnosti pro metodu getter vztahu (bude se jednat o název vztahu)",
|
|
76
|
+
"6e6a3836ad202ae5c263855b6e98ac85": "Zkontrolovat kompatibilitu verze pomocí sémantiky semver",
|
|
77
|
+
"6faaa64820277d3607d43a208ce3da13": "Příklad byl naklonován do {0}.",
|
|
78
|
+
"70067103913204b5125f9192be23086c": "Je ID vynecháno při vytváření nové instance?",
|
|
79
|
+
"70819a2fcd43c1a5e08942229d51cd43": "Navštivte http://loopback.io/doc/en/lb4/Controller-generator.html, kde jsou informace o tom, jak jsou zjištěny modely.",
|
|
80
|
+
"7228a5fab7ef8492cf66a3ef8df74ddf": "Pokud zjišťujete model ze zdroje dat, uveďte schéma, které jej obsahuje",
|
|
81
|
+
"72e0cfd29751146d9e94bb4d5cf25133": "Příklad aplikace pro demonstraci, jak implementovat víceklientskou architekturu uplatněním platformy LoopBack 4.",
|
|
82
|
+
"7321493f5e514208aba16acbc3a8d1c9": "Nebyly nalezeny žádné zdroje dat v umístění",
|
|
83
|
+
"74cc43ebc62b786995ac784b37d3764f": "Nezdar při chybě instalace závislostí",
|
|
84
|
+
"7652193b0c43b9ffe80339f63574cb63": "Název třídy {0}:",
|
|
85
|
+
"76657b97b9993e79fdba1bff7c2a69ed": "přidejte konfigurační soubory VSCode",
|
|
86
|
+
"791d59188157facefbdbfb866792462e": "Camel case (exampleColumn) (Doporučeno)",
|
|
87
|
+
"79461416ce81d6f5c3ce3418fc191224": "instalovat mocha ke spuštění testů",
|
|
88
|
+
"794df3791a8c800841516007427a2aa3": "Licence",
|
|
89
|
+
"7bcd10e0c597ed32f22b06726d10cb2b": "Jaký je název vašeho úložiště CRUD?",
|
|
90
|
+
"7c811ec38c295f6eaa7fa52c1c0cfee1": "Kořenový adresář projektu pro {0}",
|
|
91
|
+
"7c9111f852ea9bd35067a5f53540ff0b": "Nebyly nalezeny žádné modely v {0}. ",
|
|
92
|
+
"7d35e6a282ed68a01b4badfddb9dd412": "Zahrnout importy služby-serveru proxy a služby ServiceMixin",
|
|
93
|
+
"815548e083b8b7ea5edd0e57df0bfd29": "Zahrnout importy úložiště a RepositoryMixin",
|
|
94
|
+
"8340baa1142a43339a4df3a9ea93e9cb": "Neinstalovat automaticky závislosti",
|
|
95
|
+
"84cee9d182963cbedca9286a040f1e9a": "Přeskočit všechny výzvy k potvrzení s výchozí nebo dodanou hodnotou",
|
|
96
|
+
"84d0d2cbd6faa568def78ab07ed7b81c": "Upgrade může přerušit aktuální projekt.",
|
|
97
|
+
"86e3245551645cc680371ba55857f172": "Pokud zjišťujete model ze zdroje dat, zadejte název jeho tabulky/pohledu",
|
|
98
|
+
"87252b6b2ca8b638846fae8825f47ccc": "Je {0} generován automaticky?",
|
|
99
|
+
"8727d7fdfe60608d53d81f7699671a74": "Zadejte název vlastnosti ID pro {0}:",
|
|
100
|
+
"87301db76b14083e67a5092c1bd04cd0": "Příklad aplikace LoopBack 3 připojené k projektu LoopBack 4.",
|
|
101
|
+
"8ae4fe9c6f4bbdbe961a3e0f7fc88bfc": "Vyberte zdroj dat",
|
|
102
|
+
"8b4796b628fbc387d54d2d6857336613": "Příklad, který ukazuje, jak vystavit rozhraní API k odeslání/stažení souborů.",
|
|
103
|
+
"8b537f4c328d510bb54742e32de74071": "Jaký je název vlastnosti ID zdrojového modelu?",
|
|
104
|
+
"9028d3ea0ff5063cdfc59d7def551881": "Cizí klíč odkazuje na cílový model na modelu typu through",
|
|
105
|
+
"912b3c6f2e4622df7f52697a7a23478e": "Primární klíč na zdrojovém modelu",
|
|
106
|
+
"919886be4ae469dbab529c61acd85781": "Zadejte název balíku konektoru:",
|
|
107
|
+
"91cd2d832c4b723add34ca2db743b689": "Název cizího klíče, který se má definovat na cílovém modelu",
|
|
108
|
+
"93a678d3a0375c0d3b52c7d8e938e019": "Generování bylo předčasně ukončeno: {0}",
|
|
109
|
+
"93d2bb2103d07f905ef0e83ea0e63e0b": "Cesta k aplikaci LoopBack 3.x. Může se jednat o adresář projektu (např. \"my-lb3-app\") nebo soubor serveru (např. \"my-lb3-app/server/server.js\").",
|
|
110
|
+
"958ae3d061270d7e85cfe6b9c191feaf": "Lokální poskytovatel služeb vázaný na kontext aplikace",
|
|
111
|
+
"982e471119e413bad610f51015bf80e0": "Povolit eslint",
|
|
112
|
+
"9885cdb6ead91df9a95786bad4e66702": "Bez převodu (EXAMPLE_COLUMN)",
|
|
113
|
+
"998a1b696d7b016542c6ec0eacec2d1f": "Model Through",
|
|
114
|
+
"9a1f7d7f7e96f8fcf115ec7c7a661eb0": "Vyberte model(y) pro generování úložiště",
|
|
115
|
+
"9a95948dd5623ba2e0486c3fbdd582af": "Název vztahu",
|
|
116
|
+
"9d393adbce56c1a77f232c3d51256be2": "přidat linter s předkonfigurovanými pravidly lint",
|
|
117
|
+
"9e2f6b14adb66ccd111b6a2fe13cc53c": "Název skupiny pro globální zachytávač: ('')",
|
|
118
|
+
"a0057f1a34b70e6758a963af3253a482": "zahrnout importy úložiště a RepositoryMixin",
|
|
119
|
+
"a0cbd2b9f0129c22074ec538a57f4f9c": "Vlastní licenční řádky:",
|
|
120
|
+
"a15fa7a8c5d61e571d811ac04ae6fe99": "Skupina {0}:",
|
|
121
|
+
"a1de2d58d7e3cd0b012c038b47e101a2": "Vyberte konvenci pro převod názvů sloupců databáze (EXAMPLE_COLUMN) na názvy vlastností modelu:",
|
|
122
|
+
"a261957414bba63a85459b733f597acb": "Název třídy aplikace",
|
|
123
|
+
"a4577a939c79c9d229d545d109fd60fa": "V souboru package.json není nakonfigurován žádný skript 'lint:fix'.",
|
|
124
|
+
"a47ec64e233351cf9f742a03f351c3d1": "Globální zachytávače jsou řazeny podle pořadí pole názvů skupin vázaných na ContextBindings.GLOBAL_INTERCEPTOR_ORDERED_GROUPS. Viz https://loopback.io/doc/en/lb4/Interceptors.html#order-of-invocation-for-interceptors.",
|
|
125
|
+
"a6493241c36ba3efc3d6a14ddcf87685": "Samostatné příklady zobrazující, jak používat @loopback/context.",
|
|
126
|
+
"a79ec4dd1bb6d82f93af6170413a28a9": "Vyberte model through",
|
|
127
|
+
"a7f90f78abfa210e6d490268ea98ea80": "Platný název modelu",
|
|
128
|
+
"a8dbe656477e8eab5c8763a9b1ff0f84": "Vybrat modely pro import:",
|
|
129
|
+
"a958340547ffe336ce9bfdb0f5328d00": "Yarn je k dispozici. Chcete jej používat standardně?",
|
|
130
|
+
"aa2ea1f299d456d85ba42aab96581fe5": "Vyloučit soubory, které odpovídají vzoru",
|
|
131
|
+
"aa7af2a74b80e89d69be64f87140314e": "Zahrnout ApiConnectComponent",
|
|
132
|
+
"ac0a68d90df6320ff454590a5732e748": "Příklad zobrazující, jak implementovat vzor bodu rozšíření/rozšíření.",
|
|
133
|
+
"ad5df45eb6b1da34ba7f75bec5b6a3d5": "Příznak k označení globálního zachytávače",
|
|
134
|
+
"aebb8636dacf73a5ea8811fafbe3ed68": "Typ vlastnosti:",
|
|
135
|
+
"afdaa0dc3b913a7b3bd5f20489f5c76d": "Platná základní cesta",
|
|
136
|
+
"b06ea51aa53522aff2889a64d68d1055": "Typ vztahu",
|
|
137
|
+
"b0e22938bbbbeb3d5f4692390820f4de": "Vyberte základní třídu modelu",
|
|
138
|
+
"b237a567cb959681e3967d2a35738c56": "Příklad k demonstraci integrace GraphQL.",
|
|
139
|
+
"b2816eddfa7b70b5b26d4c90c9e329bb": "Jaký je typ primárního klíče cílového modelu?",
|
|
140
|
+
"b3c1afbfb1c87daaac414bab981ee7bd": "Chyba při čtení souboru",
|
|
141
|
+
"b48768d73c204b1a2ebcc3f44792b556": "Neplatný název příkladu: {0}\nSpusťte \"lb4 example --help\" k vytištění seznamu dostupných příkladů názvů.",
|
|
142
|
+
"b68ecbcaa4f94151658f5ad32e6cf6fd": "Lokální třída služeb vázaná na kontext aplikace",
|
|
143
|
+
"b7fc5ab93877e57e2ffa139d8ba87a54": "Zobrazit výzvy pro již nakonfigurované volby",
|
|
144
|
+
"b9356b7d2debc8b04dd6f2fd9bf5f83f": "Jaký příklad byste chtěli klonovat?",
|
|
145
|
+
"ba35aa839698960c52ab1e8514cacd43": "Příklad na balík @loopback/core pomocí webového balíku.",
|
|
146
|
+
"bcebec8d7974acc21a208c7325a06e9c": "Zjednodušená verze příkladu Todo, který vyžaduje pouze model a zdroj dat.",
|
|
147
|
+
"bde86a06584f0c0cbf30526a8d408efd": "Typ primárního klíče na zdrojovém modelu",
|
|
148
|
+
"be65fa55f75dd126a2af5ec2ad4b8f8b": "Příklad, jak integrovat webové služby SOAP.",
|
|
149
|
+
"be687f67487ae57f311148f55cc2df76": "Název cizího klíče, který se má definovat na zdrojovém modelu",
|
|
150
|
+
"be7f5cb5b6a0fce7004ae6adc772e30b": "Typ primárního klíče na cílovém modelu",
|
|
151
|
+
"bfd42878b3c50994368322098aed9e42": "zahrnout soubor Dockerfile a .dockerignore",
|
|
152
|
+
"c1f96ff7ee37bcc6aa150ae5d0dbc3bb": "Jaký je typ vašeho ID?",
|
|
153
|
+
"c3eece87ffd6970cb83a75715824dce7": "zahrnout importy služby-serveru proxy a služby ServiceMixin",
|
|
154
|
+
"c87a36fbb5183525d0006021aec56a91": "Název cizího klíče cílového modelu",
|
|
155
|
+
"c8d3e70199f75ca1f1d0bd9af1d62d38": "model neexistuje.",
|
|
156
|
+
"c92e838c1513ce96008d7bfee201e1e9": "Platný název zdroje dat",
|
|
157
|
+
"ca660806a44ff651cd28cf4a3dddc686": "Nepamatovat si odpovědi na výzvu k zadání",
|
|
158
|
+
"cb118a096d4c0e543062e79e4287982d": "Aktualizovat pouze sledované soubory git",
|
|
159
|
+
"cb5146e6905384a57eff6068ca059554": "Zjistit všechny modely bez vyzvání uživatelů k výběru",
|
|
160
|
+
"cdd5413fd110557d536620d714eea126": "Jaký druh řadiče byste chtěli generovat?",
|
|
161
|
+
"cf97da6220d5e5745002134f79949c61": "Název zdroje dat, který se má zjistit",
|
|
162
|
+
"cfb27e4977e11d0bad249ce0272a0a61": "Jaký je název vlastnosti ID cílového modelu?",
|
|
163
|
+
"d219d7a033c1d87e1e8de56f275f2b3d": "Aktualizovat licenci v package.json a LICENSE",
|
|
164
|
+
"d3686d2cd4e6d5de11cd0e61e4c18819": "Server proxy vzdálené služby byl zálohován zdrojem dat",
|
|
165
|
+
"d3750141fd303a7f87d4821a86d85c1c": "Typ {0}:",
|
|
166
|
+
"d480d5df7f792391f9d80684a78a2424": "Adresář, kam se má zapsat generovaný zdrojový soubor",
|
|
167
|
+
"d71f61fa516dde9cd3dd3442238a5199": "Název {0}:",
|
|
168
|
+
"d75571079943e2a3696adfd8787ecc0f": "Vybrat funkce k povolení v projektu",
|
|
169
|
+
"d8448d2597b2832ab43abba46a595c42": "Jaký je název modelu, který se má použít s tímto úložištěm CRUD?",
|
|
170
|
+
"d963128609dd73445bd8b96b6a34eb68": "Typ pro {0}",
|
|
171
|
+
"da3f136dd75297a4944bd013b8e166ee": "Pokračování příkladu todo pomocí relací v platformě LoopBack 4.",
|
|
172
|
+
"db8c853ec3ce3b65e1513d198a9bd2e9": "Povolit mocha",
|
|
173
|
+
"dc1e7407cdd64c32053abd0e52d19cb2": "Zadejte řádky textu pro vlastní záhlaví autorských práv/licencí.",
|
|
174
|
+
"dd9b2e815dc04519c82ded4787c1a53a": "Následující závislosti jsou nekompatibilní s @loopback/cli@{0}:",
|
|
175
|
+
"ddb67f6cad9d36d2acf42898c4fe58f5": "Název komponenty",
|
|
176
|
+
"e06dcb9b794d62f93022ac5a189f9072": "Přeskočit závislosti projektů",
|
|
177
|
+
"e1bf205e7a3c78d22506aad47301f87f": "[ponechte prázdné pro nastavení none]",
|
|
178
|
+
"e4a87a58bb56e705349a97dbc23ecd6d": "Výchozí název vztahu",
|
|
179
|
+
"e4ca073d5042621174cf6950ad25b40e": "Popis projektu:",
|
|
180
|
+
"e7fed9bec77250cd1afed48cd3356c4a": "Primární klíč na cílovém modelu",
|
|
181
|
+
"e9ad06649c24ed76b5185c3d705fa2a9": "Vybrat konektor pro {0}: ",
|
|
182
|
+
"eaa7f2ab653690e3bfb202db78a00ff0": "Jednoduchá aplikace Express, která používá LoopBack 4 REST API.",
|
|
183
|
+
"ec0d3215aa6ad3aeae52f51dd7962879": "Typ služby - proxy, třída nebo poskytovatel",
|
|
184
|
+
"ec5b5f03d997ee0da0157737a7b10d7b": "Zdrojový model",
|
|
185
|
+
"ed0e2f0329abfa07dba151a0b9e623c9": "Příklad zobrazující, jak složit aplikaci z komponenty a řadičů, zachytávačů a pozorovatelů.",
|
|
186
|
+
"ed3bb197042a095ce19c1910d8d24226": "Zadejte název vlastnosti:",
|
|
187
|
+
"ee3b2cc023d839e3e31d346de7cce9e7": "Cílový model",
|
|
188
|
+
"f2b5f8ac7197fb5916c3fa3e0986b535": "Příklad výukového programu, jak sestavit aplikaci uplatněním platformy LoopBack 4.",
|
|
189
|
+
"f32b47dfce5e7d0077f977a61665cc29": "Spuštění 'npm run lint:fix' pro formátování kódu...",
|
|
190
|
+
"f4b50a7f86e11ee0fc8cd471d54334f8": "{0} {1} byl/byly vytvořeny v {2}",
|
|
191
|
+
"f5b4bd2d7b921613e40c39a7bd0e22b2": "Navštivte http://loopback.io/doc/en/lb4/Controller-generator.html, kde jsou informace o tom, jak jsou zjištěna úložiště.",
|
|
192
|
+
"f5e20cc597e17deb35ef3ec4e55b707a": "Vlastník autorských práv:",
|
|
193
|
+
"f757c71fa54de6559c39e4e7f63a601c": "Vyberte cílový model",
|
|
194
|
+
"f796881442145767c4d38290ef887bfe": "Vytisknout volby a použití generátoru",
|
|
195
|
+
"f7bf47d21b7e8bd36e22e5d3835008b5": "Nyní přidejte jinou vlastnost do {0}",
|
|
196
|
+
"f846f25f533c78e5eab3c1afa289ca12": "Po dokončení zadejte prázdný název vlastnosti",
|
|
197
|
+
"f87558eadaf216be8be9546d874d1301": "výchozí název cizího klíče",
|
|
198
|
+
"f8b4ea0079120a07a9aabec29c9023d7": "Platný název vlastnosti ID pro zadaný model",
|
|
199
|
+
"fae5b20162ed86b458a943aee0979f68": "Použít @loopback/build",
|
|
200
|
+
"fd9d1ae9ba5ae0b5d8f2b2dd40be8b5f": "Model nebyl nalezen v umístění",
|
|
201
|
+
"fde67ed0176ea54fd0b2c6bb2fc72d13": "Je vyžadován?:",
|
|
202
|
+
"ff0366defc888d15b3fbfc1458edf1c0": "Nebyla nalezena žádná úložiště v {0}. ",
|
|
203
|
+
"ffa8d88b9563dfa3e567974095c39140": "Nevybrali jste platný model"
|
|
204
|
+
}
|