@vsaas/loopback 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +91 -0
- package/common/models/README.md +109 -0
- package/common/models/access-token.json +37 -0
- package/common/models/acl.json +17 -0
- package/common/models/application.json +130 -0
- package/common/models/change.json +25 -0
- package/common/models/checkpoint.json +14 -0
- package/common/models/email.json +11 -0
- package/common/models/key-value-model.json +4 -0
- package/common/models/role-mapping.json +26 -0
- package/common/models/role.json +30 -0
- package/common/models/scope.json +14 -0
- package/common/models/user.json +118 -0
- package/dist/_virtual/_rolldown/runtime.cjs +32 -0
- package/dist/common/models/access-token.cjs +144 -0
- package/dist/common/models/access-token2.cjs +43 -0
- package/dist/common/models/acl.cjs +428 -0
- package/dist/common/models/acl2.cjs +27 -0
- package/dist/common/models/application.cjs +100 -0
- package/dist/common/models/application2.cjs +118 -0
- package/dist/common/models/change.cjs +404 -0
- package/dist/common/models/change2.cjs +25 -0
- package/dist/common/models/checkpoint.cjs +43 -0
- package/dist/common/models/checkpoint2.cjs +18 -0
- package/dist/common/models/email.cjs +18 -0
- package/dist/common/models/email2.cjs +30 -0
- package/dist/common/models/key-value-model.cjs +140 -0
- package/dist/common/models/key-value-model2.cjs +14 -0
- package/dist/common/models/role-mapping.cjs +57 -0
- package/dist/common/models/role-mapping2.cjs +34 -0
- package/dist/common/models/role.cjs +396 -0
- package/dist/common/models/role2.cjs +38 -0
- package/dist/common/models/scope.cjs +30 -0
- package/dist/common/models/scope2.cjs +21 -0
- package/dist/common/models/user.cjs +810 -0
- package/dist/common/models/user2.cjs +118 -0
- package/dist/index.cjs +16 -0
- package/dist/lib/access-context.cjs +228 -0
- package/dist/lib/application.cjs +450 -0
- package/dist/lib/builtin-models.cjs +60 -0
- package/dist/lib/configure-shared-methods.cjs +41 -0
- package/dist/lib/connectors/base-connector.cjs +23 -0
- package/dist/lib/connectors/mail-direct-transport.cjs +375 -0
- package/dist/lib/connectors/mail-stub-transport.cjs +86 -0
- package/dist/lib/connectors/mail.cjs +128 -0
- package/dist/lib/connectors/memory.cjs +19 -0
- package/dist/lib/current-context.cjs +22 -0
- package/dist/lib/globalize.cjs +29 -0
- package/dist/lib/loopback.cjs +313 -0
- package/dist/lib/model.cjs +1009 -0
- package/dist/lib/persisted-model.cjs +1835 -0
- package/dist/lib/registry.cjs +291 -0
- package/dist/lib/runtime.cjs +25 -0
- package/dist/lib/server-app.cjs +231 -0
- package/dist/lib/utils.cjs +154 -0
- package/dist/package.cjs +124 -0
- package/dist/server/middleware/context.cjs +7 -0
- package/dist/server/middleware/error-handler.cjs +6 -0
- package/dist/server/middleware/favicon.cjs +13 -0
- package/dist/server/middleware/rest.cjs +44 -0
- package/dist/server/middleware/static.cjs +14 -0
- package/dist/server/middleware/status.cjs +28 -0
- package/dist/server/middleware/token.cjs +66 -0
- package/dist/server/middleware/url-not-found.cjs +20 -0
- package/favicon.ico +0 -0
- package/package.json +121 -0
- package/templates/reset-form.ejs +3 -0
- package/templates/verify.ejs +9 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const require_runtime$1 = require("../_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_lib_server_app = require("./server-app.cjs");
|
|
4
|
+
const require_lib_runtime = require("./runtime.cjs");
|
|
5
|
+
const require_lib_registry = require("./registry.cjs");
|
|
6
|
+
const require_lib_application = require("./application.cjs");
|
|
7
|
+
const require_lib_configure_shared_methods = require("./configure-shared-methods.cjs");
|
|
8
|
+
const require_package$1 = require("../package.cjs");
|
|
9
|
+
const require_lib_builtin_models = require("./builtin-models.cjs");
|
|
10
|
+
const require_lib_current_context = require("./current-context.cjs");
|
|
11
|
+
//#region src/lib/loopback.ts
|
|
12
|
+
/*!
|
|
13
|
+
* Module dependencies.
|
|
14
|
+
*/
|
|
15
|
+
var require_loopback = /* @__PURE__ */ require_runtime$1.__commonJSMin(((exports, module) => {
|
|
16
|
+
const path = require("path");
|
|
17
|
+
const express = require("express");
|
|
18
|
+
const loopbackExpress = require_lib_server_app;
|
|
19
|
+
const runtime = require_lib_runtime;
|
|
20
|
+
const proto = require_lib_application;
|
|
21
|
+
const fs = require("fs");
|
|
22
|
+
const ejs = require("ejs");
|
|
23
|
+
require("assert");
|
|
24
|
+
const Registry = require_lib_registry;
|
|
25
|
+
const juggler = require("@vsaas/loopback-datasource-juggler");
|
|
26
|
+
const configureSharedMethods = require_lib_configure_shared_methods;
|
|
27
|
+
/**
|
|
28
|
+
* LoopBack core module. It provides static properties and
|
|
29
|
+
* methods to create models and data sources. The module itself is a function
|
|
30
|
+
* that creates loopback `app`. For example:
|
|
31
|
+
*
|
|
32
|
+
* ```js
|
|
33
|
+
* var loopback = require('loopback');
|
|
34
|
+
* var app = loopback();
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @property {String} version Version of LoopBack framework. Static read-only property.
|
|
38
|
+
* @property {Boolean} isBrowser True if running in a browser environment; false otherwise. Static read-only property.
|
|
39
|
+
* @property {Boolean} isServer True if running in a server environment; false otherwise. Static read-only property.
|
|
40
|
+
* @property {Registry} registry The global `Registry` object.
|
|
41
|
+
* @property {String} faviconFile Path to a default favicon shipped with LoopBack.
|
|
42
|
+
* Use as follows: `app.use(require('serve-favicon')(loopback.faviconFile));`
|
|
43
|
+
* @class loopback
|
|
44
|
+
* @header loopback
|
|
45
|
+
*/
|
|
46
|
+
const loopback = module.exports = createApplication;
|
|
47
|
+
/*!
|
|
48
|
+
* Framework version.
|
|
49
|
+
*/
|
|
50
|
+
loopback.version = require_package$1.default.version;
|
|
51
|
+
loopback.registry = new Registry();
|
|
52
|
+
runtime.loopback = loopback;
|
|
53
|
+
Object.defineProperties(loopback, {
|
|
54
|
+
Model: { get: function() {
|
|
55
|
+
return this.registry.getModel("Model");
|
|
56
|
+
} },
|
|
57
|
+
PersistedModel: { get: function() {
|
|
58
|
+
return this.registry.getModel("PersistedModel");
|
|
59
|
+
} },
|
|
60
|
+
defaultDataSources: { get: function() {
|
|
61
|
+
return this.registry.defaultDataSources;
|
|
62
|
+
} },
|
|
63
|
+
modelBuilder: { get: function() {
|
|
64
|
+
return this.registry.modelBuilder;
|
|
65
|
+
} }
|
|
66
|
+
});
|
|
67
|
+
/*!
|
|
68
|
+
* Create an loopback application.
|
|
69
|
+
*
|
|
70
|
+
* @return {Function}
|
|
71
|
+
* @api public
|
|
72
|
+
*/
|
|
73
|
+
function createApplication(options) {
|
|
74
|
+
const app = loopbackExpress();
|
|
75
|
+
Object.assign(app, proto);
|
|
76
|
+
app.loopback = loopback;
|
|
77
|
+
app.on("modelRemoted", function() {
|
|
78
|
+
app.models().forEach(function(Model) {
|
|
79
|
+
if (!Model.config) return;
|
|
80
|
+
configureSharedMethods(Model, app.get("remoting"), Model.config);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
app.models = function() {
|
|
84
|
+
return proto.models.apply(this, arguments);
|
|
85
|
+
};
|
|
86
|
+
app.datasources = app.dataSources = {};
|
|
87
|
+
app.connectors = {};
|
|
88
|
+
app.connector("memory", loopback.Memory);
|
|
89
|
+
app.connector("remote", loopback.Remote);
|
|
90
|
+
if (loopback.isServer) app.connector("kv-memory", require("@vsaas/loopback-datasource-juggler/connectors/kv-memory"));
|
|
91
|
+
if (loopback.localRegistry || options && options.localRegistry === true) {
|
|
92
|
+
const registry = app.registry = new Registry();
|
|
93
|
+
if (options && options.loadBuiltinModels === true) require_lib_builtin_models(registry);
|
|
94
|
+
} else app.registry = loopback.registry;
|
|
95
|
+
return app;
|
|
96
|
+
}
|
|
97
|
+
function mixin(source) {
|
|
98
|
+
for (const key in source) {
|
|
99
|
+
const desc = Object.getOwnPropertyDescriptor(source, key);
|
|
100
|
+
if (!desc) continue;
|
|
101
|
+
Object.defineProperty(loopback, key, desc);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
mixin(runtime);
|
|
105
|
+
/*!
|
|
106
|
+
* Expose static express methods like `express.Router`.
|
|
107
|
+
*/
|
|
108
|
+
mixin(express);
|
|
109
|
+
/*!
|
|
110
|
+
* Expose additional loopback middleware
|
|
111
|
+
* for example `loopback.configure` etc.
|
|
112
|
+
*
|
|
113
|
+
* ***only in node***
|
|
114
|
+
*/
|
|
115
|
+
if (loopback.isServer) {
|
|
116
|
+
const middlewareDir = path.join(__dirname, "..", "server", "middleware");
|
|
117
|
+
fs.readdirSync(middlewareDir).filter(function(file) {
|
|
118
|
+
return file.match(/\.cjs$/);
|
|
119
|
+
}).forEach(function(m) {
|
|
120
|
+
loopback[m.replace(/\.cjs$/, "")] = require(path.join(middlewareDir, m));
|
|
121
|
+
});
|
|
122
|
+
loopback.urlNotFound = loopback["url-not-found"];
|
|
123
|
+
delete loopback["url-not-found"];
|
|
124
|
+
loopback.errorHandler = loopback["error-handler"];
|
|
125
|
+
delete loopback["error-handler"];
|
|
126
|
+
}
|
|
127
|
+
if (loopback.isServer)
|
|
128
|
+
/*!
|
|
129
|
+
* Path to a default favicon shipped with LoopBack.
|
|
130
|
+
*
|
|
131
|
+
* **Example**
|
|
132
|
+
*
|
|
133
|
+
* ```js
|
|
134
|
+
* app.use(require('serve-favicon')(loopback.faviconFile));
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
loopback.faviconFile = path.resolve(getPackageRoot(), "favicon.ico");
|
|
138
|
+
/**
|
|
139
|
+
* Add a remote method to a model.
|
|
140
|
+
* @param {Function} fn
|
|
141
|
+
* @param {Object} options (optional)
|
|
142
|
+
*/
|
|
143
|
+
loopback.remoteMethod = function(fn, options) {
|
|
144
|
+
fn.shared = true;
|
|
145
|
+
if (typeof options === "object") Object.keys(options).forEach(function(key) {
|
|
146
|
+
fn[key] = options[key];
|
|
147
|
+
});
|
|
148
|
+
fn.http = fn.http || { verb: "get" };
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Create a template helper.
|
|
152
|
+
*
|
|
153
|
+
* var render = loopback.template('foo.ejs');
|
|
154
|
+
* var html = render({foo: 'bar'});
|
|
155
|
+
*
|
|
156
|
+
* @param {String} file Path to the template file.
|
|
157
|
+
* @returns {Function}
|
|
158
|
+
*/
|
|
159
|
+
loopback.template = function(file) {
|
|
160
|
+
const templates = this._templates || (this._templates = {});
|
|
161
|
+
let render = templates[file];
|
|
162
|
+
if (!render) {
|
|
163
|
+
render = ejs.compile(fs.readFileSync(file, "utf8"), { filename: file });
|
|
164
|
+
templates[file] = render;
|
|
165
|
+
}
|
|
166
|
+
return render;
|
|
167
|
+
};
|
|
168
|
+
require_lib_current_context(loopback);
|
|
169
|
+
/**
|
|
170
|
+
* Create a named vanilla JavaScript class constructor with an attached
|
|
171
|
+
* set of properties and options.
|
|
172
|
+
*
|
|
173
|
+
* This function comes with two variants:
|
|
174
|
+
* * `loopback.createModel(name, properties, options)`
|
|
175
|
+
* * `loopback.createModel(config)`
|
|
176
|
+
*
|
|
177
|
+
* In the second variant, the parameters `name`, `properties` and `options`
|
|
178
|
+
* are provided in the config object. Any additional config entries are
|
|
179
|
+
* interpreted as `options`, i.e. the following two configs are identical:
|
|
180
|
+
*
|
|
181
|
+
* ```js
|
|
182
|
+
* { name: 'Customer', base: 'User' }
|
|
183
|
+
* { name: 'Customer', options: { base: 'User' } }
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* **Example**
|
|
187
|
+
*
|
|
188
|
+
* Create an `Author` model using the three-parameter variant:
|
|
189
|
+
*
|
|
190
|
+
* ```js
|
|
191
|
+
* loopback.createModel(
|
|
192
|
+
* 'Author',
|
|
193
|
+
* {
|
|
194
|
+
* firstName: 'string',
|
|
195
|
+
* lastName: 'string'
|
|
196
|
+
* },
|
|
197
|
+
* {
|
|
198
|
+
* relations: {
|
|
199
|
+
* books: {
|
|
200
|
+
* model: 'Book',
|
|
201
|
+
* type: 'hasAndBelongsToMany'
|
|
202
|
+
* }
|
|
203
|
+
* }
|
|
204
|
+
* }
|
|
205
|
+
* );
|
|
206
|
+
* ```
|
|
207
|
+
*
|
|
208
|
+
* Create the same model using a config object:
|
|
209
|
+
*
|
|
210
|
+
* ```js
|
|
211
|
+
* loopback.createModel({
|
|
212
|
+
* name: 'Author',
|
|
213
|
+
* properties: {
|
|
214
|
+
* firstName: 'string',
|
|
215
|
+
* lastName: 'string'
|
|
216
|
+
* },
|
|
217
|
+
* relations: {
|
|
218
|
+
* books: {
|
|
219
|
+
* model: 'Book',
|
|
220
|
+
* type: 'hasAndBelongsToMany'
|
|
221
|
+
* }
|
|
222
|
+
* }
|
|
223
|
+
* });
|
|
224
|
+
* ```
|
|
225
|
+
*
|
|
226
|
+
* @param {String} name Unique name.
|
|
227
|
+
* @param {Object} properties
|
|
228
|
+
* @param {Object} options (optional)
|
|
229
|
+
*
|
|
230
|
+
* @header loopback.createModel
|
|
231
|
+
*/
|
|
232
|
+
loopback.createModel = function(name, properties, options) {
|
|
233
|
+
return this.registry.createModel.apply(this.registry, arguments);
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Alter an existing Model class.
|
|
237
|
+
* @param {Model} ModelCtor The model constructor to alter.
|
|
238
|
+
* @options {Object} config Additional configuration to apply
|
|
239
|
+
* @property {DataSource} dataSource Attach the model to a dataSource.
|
|
240
|
+
* @property {Object} [relations] Model relations to add/update.
|
|
241
|
+
*
|
|
242
|
+
* @header loopback.configureModel(ModelCtor, config)
|
|
243
|
+
*/
|
|
244
|
+
loopback.configureModel = function(ModelCtor, config) {
|
|
245
|
+
return this.registry.configureModel.apply(this.registry, arguments);
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Look up a model class by name from all models created by
|
|
249
|
+
* `loopback.createModel()`
|
|
250
|
+
* @param {String} modelName The model name
|
|
251
|
+
* @returns {Model} The model class
|
|
252
|
+
*
|
|
253
|
+
* @header loopback.findModel(modelName)
|
|
254
|
+
*/
|
|
255
|
+
loopback.findModel = function(modelName) {
|
|
256
|
+
return this.registry.findModel.apply(this.registry, arguments);
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Look up a model class by name from all models created by
|
|
260
|
+
* `loopback.createModel()`. Throw an error when no such model exists.
|
|
261
|
+
*
|
|
262
|
+
* @param {String} modelName The model name
|
|
263
|
+
* @returns {Model} The model class
|
|
264
|
+
*
|
|
265
|
+
* @header loopback.getModel(modelName)
|
|
266
|
+
*/
|
|
267
|
+
loopback.getModel = function(modelName) {
|
|
268
|
+
return this.registry.getModel.apply(this.registry, arguments);
|
|
269
|
+
};
|
|
270
|
+
/**
|
|
271
|
+
* Look up a model class by the base model class.
|
|
272
|
+
* The method can be used by LoopBack
|
|
273
|
+
* to find configured models in models.json over the base model.
|
|
274
|
+
* @param {Model} modelType The base model class
|
|
275
|
+
* @returns {Model} The subclass if found or the base class
|
|
276
|
+
*
|
|
277
|
+
* @header loopback.getModelByType(modelType)
|
|
278
|
+
*/
|
|
279
|
+
loopback.getModelByType = function(modelType) {
|
|
280
|
+
return this.registry.getModelByType.apply(this.registry, arguments);
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* Create a data source with passing the provided options to the connector.
|
|
284
|
+
*
|
|
285
|
+
* @param {String} name Optional name.
|
|
286
|
+
* @options {Object} options Data Source options
|
|
287
|
+
* @property {Object} connector LoopBack connector.
|
|
288
|
+
* @property {*} [*] Other connector properties.
|
|
289
|
+
* See the relevant connector documentation.
|
|
290
|
+
*/
|
|
291
|
+
loopback.createDataSource = function(name, options) {
|
|
292
|
+
return this.registry.createDataSource.apply(this.registry, arguments);
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Get an in-memory data source. Use one if it already exists.
|
|
296
|
+
*
|
|
297
|
+
* @param {String} [name] The name of the data source.
|
|
298
|
+
* If not provided, the `'default'` is used.
|
|
299
|
+
*/
|
|
300
|
+
loopback.memory = function(name) {
|
|
301
|
+
return this.registry.memory.apply(this.registry, arguments);
|
|
302
|
+
};
|
|
303
|
+
/*!
|
|
304
|
+
* Built in models / services
|
|
305
|
+
*/
|
|
306
|
+
require_lib_builtin_models(loopback);
|
|
307
|
+
loopback.DataSource = juggler.DataSource;
|
|
308
|
+
function getPackageRoot() {
|
|
309
|
+
return path.join(__dirname, "..", "..");
|
|
310
|
+
}
|
|
311
|
+
}));
|
|
312
|
+
//#endregion
|
|
313
|
+
module.exports = require_loopback();
|