@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.
Files changed (69) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +91 -0
  3. package/common/models/README.md +109 -0
  4. package/common/models/access-token.json +37 -0
  5. package/common/models/acl.json +17 -0
  6. package/common/models/application.json +130 -0
  7. package/common/models/change.json +25 -0
  8. package/common/models/checkpoint.json +14 -0
  9. package/common/models/email.json +11 -0
  10. package/common/models/key-value-model.json +4 -0
  11. package/common/models/role-mapping.json +26 -0
  12. package/common/models/role.json +30 -0
  13. package/common/models/scope.json +14 -0
  14. package/common/models/user.json +118 -0
  15. package/dist/_virtual/_rolldown/runtime.cjs +32 -0
  16. package/dist/common/models/access-token.cjs +144 -0
  17. package/dist/common/models/access-token2.cjs +43 -0
  18. package/dist/common/models/acl.cjs +428 -0
  19. package/dist/common/models/acl2.cjs +27 -0
  20. package/dist/common/models/application.cjs +100 -0
  21. package/dist/common/models/application2.cjs +118 -0
  22. package/dist/common/models/change.cjs +404 -0
  23. package/dist/common/models/change2.cjs +25 -0
  24. package/dist/common/models/checkpoint.cjs +43 -0
  25. package/dist/common/models/checkpoint2.cjs +18 -0
  26. package/dist/common/models/email.cjs +18 -0
  27. package/dist/common/models/email2.cjs +30 -0
  28. package/dist/common/models/key-value-model.cjs +140 -0
  29. package/dist/common/models/key-value-model2.cjs +14 -0
  30. package/dist/common/models/role-mapping.cjs +57 -0
  31. package/dist/common/models/role-mapping2.cjs +34 -0
  32. package/dist/common/models/role.cjs +396 -0
  33. package/dist/common/models/role2.cjs +38 -0
  34. package/dist/common/models/scope.cjs +30 -0
  35. package/dist/common/models/scope2.cjs +21 -0
  36. package/dist/common/models/user.cjs +810 -0
  37. package/dist/common/models/user2.cjs +118 -0
  38. package/dist/index.cjs +16 -0
  39. package/dist/lib/access-context.cjs +228 -0
  40. package/dist/lib/application.cjs +450 -0
  41. package/dist/lib/builtin-models.cjs +60 -0
  42. package/dist/lib/configure-shared-methods.cjs +41 -0
  43. package/dist/lib/connectors/base-connector.cjs +23 -0
  44. package/dist/lib/connectors/mail-direct-transport.cjs +375 -0
  45. package/dist/lib/connectors/mail-stub-transport.cjs +86 -0
  46. package/dist/lib/connectors/mail.cjs +128 -0
  47. package/dist/lib/connectors/memory.cjs +19 -0
  48. package/dist/lib/current-context.cjs +22 -0
  49. package/dist/lib/globalize.cjs +29 -0
  50. package/dist/lib/loopback.cjs +313 -0
  51. package/dist/lib/model.cjs +1009 -0
  52. package/dist/lib/persisted-model.cjs +1835 -0
  53. package/dist/lib/registry.cjs +291 -0
  54. package/dist/lib/runtime.cjs +25 -0
  55. package/dist/lib/server-app.cjs +231 -0
  56. package/dist/lib/utils.cjs +154 -0
  57. package/dist/package.cjs +124 -0
  58. package/dist/server/middleware/context.cjs +7 -0
  59. package/dist/server/middleware/error-handler.cjs +6 -0
  60. package/dist/server/middleware/favicon.cjs +13 -0
  61. package/dist/server/middleware/rest.cjs +44 -0
  62. package/dist/server/middleware/static.cjs +14 -0
  63. package/dist/server/middleware/status.cjs +28 -0
  64. package/dist/server/middleware/token.cjs +66 -0
  65. package/dist/server/middleware/url-not-found.cjs +20 -0
  66. package/favicon.ico +0 -0
  67. package/package.json +121 -0
  68. package/templates/reset-form.ejs +3 -0
  69. package/templates/verify.ejs +9 -0
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_lib_globalize = require("./globalize.cjs");
4
+ const require_lib_utils = require("./utils.cjs");
5
+ require("./registry.cjs");
6
+ //#region src/lib/application.ts
7
+ /*!
8
+ * Module dependencies.
9
+ */
10
+ var require_application = /* @__PURE__ */ require_runtime.__commonJSMin(((exports, module) => {
11
+ const path = require("path");
12
+ const g = require_lib_globalize;
13
+ const DataSource = require("@vsaas/loopback-datasource-juggler").DataSource;
14
+ const assert = require("assert");
15
+ const fs = require("fs");
16
+ const RemoteObjects = require("@vsaas/remoting");
17
+ require("util");
18
+ const utils = require_lib_utils;
19
+ function camelize(name) {
20
+ return String(name).trim().replace(/[^A-Za-z0-9]+(.)?/g, function(match, chr) {
21
+ return chr ? chr.toUpperCase() : "";
22
+ });
23
+ }
24
+ function classify(name) {
25
+ const result = camelize(name);
26
+ if (!result) return result;
27
+ return result.charAt(0).toUpperCase() + result.slice(1);
28
+ }
29
+ /*!
30
+ * Export the app prototype.
31
+ */
32
+ const app = module.exports = {};
33
+ /**
34
+ * Lazily load a set of [remote objects](http://apidocs.strongloop.com/strong-remoting/#remoteobjectsoptions).
35
+ *
36
+ * **NOTE:** Calling `app.remotes()` more than once returns only a single set of remote objects.
37
+ * @returns {RemoteObjects}
38
+ */
39
+ app.remotes = function() {
40
+ if (this._remotes) return this._remotes;
41
+ else {
42
+ let options = {};
43
+ if (this.get) options = this.get("remoting");
44
+ return this._remotes = RemoteObjects.create(options);
45
+ }
46
+ };
47
+ /*!
48
+ * Remove a route by reference.
49
+ */
50
+ app.disuse = function(route) {
51
+ if (this.stack) {
52
+ for (let i = 0; i < this.stack.length; i++) if (this.stack[i].route === route) this.stack.splice(i, 1);
53
+ }
54
+ };
55
+ /**
56
+ * Attach a model to the app. The `Model` will be available on the
57
+ * `app.models` object.
58
+ *
59
+ * Example - Attach an existing model:
60
+ ```js
61
+ * var User = loopback.User;
62
+ * app.model(User);
63
+ *```
64
+ * Example - Attach an existing model, alter some aspects of the model:
65
+ * ```js
66
+ * var User = loopback.User;
67
+ * app.model(User, { dataSource: 'db' });
68
+ *```
69
+ *
70
+ * @param {Object} Model The model to attach.
71
+ * @options {Object} config The model's configuration.
72
+ * @property {String|DataSource} dataSource The `DataSource` to which to attach the model.
73
+ * @property {Boolean} [public] Whether the model should be exposed via REST API.
74
+ * @property {Object} [relations] Relations to add/update.
75
+ * @end
76
+ * @returns {ModelConstructor} the model class
77
+ */
78
+ app.model = function(Model, config) {
79
+ let isPublic = true;
80
+ this.registry;
81
+ if (typeof Model === "string") throw new Error("app.model(modelName, settings) is no longer supported. Use app.registry.createModel(modelName, definition) and app.model(ModelCtor, config) instead.");
82
+ if (arguments.length > 1) {
83
+ config = config || {};
84
+ configureModel(Model, config, this);
85
+ isPublic = config.public !== false;
86
+ } else assert(Model.prototype instanceof Model.registry.getModel("Model"), Model.modelName + " must be a descendant of loopback.Model");
87
+ const modelName = Model.modelName;
88
+ this.models[modelName] = this.models[classify(modelName)] = this.models[camelize(modelName)] = Model;
89
+ this.models().push(Model);
90
+ if (isPublic && Model.sharedClass) {
91
+ this.remotes().defineObjectType(Model.modelName, function(data) {
92
+ return new Model(data);
93
+ });
94
+ this.remotes().addClass(Model.sharedClass);
95
+ if (Model.settings.trackChanges && Model.Change) this.remotes().addClass(Model.Change.sharedClass);
96
+ clearHandlerCache(this);
97
+ this.emit("modelRemoted", Model.sharedClass);
98
+ }
99
+ const self = this;
100
+ Model.on("remoteMethodDisabled", function(model, methodName) {
101
+ clearHandlerCache(self);
102
+ self.emit("remoteMethodDisabled", model, methodName);
103
+ });
104
+ Model.on("remoteMethodAdded", function(model) {
105
+ clearHandlerCache(self);
106
+ self.emit("remoteMethodAdded", model);
107
+ });
108
+ Model.shared = isPublic;
109
+ Model.app = this;
110
+ Model.emit("attached", this);
111
+ return Model;
112
+ };
113
+ /**
114
+ * Remove all references to a previously registered Model.
115
+ *
116
+ * The method emits "modelDeleted" event as a counter-part to "modelRemoted"
117
+ * event.
118
+ *
119
+ * @param {String} modelName The name of the model to remove.
120
+ */
121
+ app.deleteModelByName = function(modelName) {
122
+ const ModelCtor = this.models[modelName];
123
+ delete this.models[modelName];
124
+ delete this.models[classify(modelName)];
125
+ delete this.models[camelize(modelName)];
126
+ if (ModelCtor) {
127
+ ModelCtor.removeAllListeners();
128
+ const ix = this._models.indexOf(ModelCtor);
129
+ if (ix > -1) this._models.splice(ix, 1);
130
+ }
131
+ const remotes = this.remotes();
132
+ remotes.deleteClassByName(modelName);
133
+ remotes.deleteTypeByName(modelName);
134
+ if (ModelCtor && ModelCtor.dataSource) ModelCtor.dataSource.deleteModelByName(modelName);
135
+ else this.registry.modelBuilder.deleteModelByName(modelName);
136
+ clearHandlerCache(this);
137
+ this.emit("modelDeleted", ModelCtor || modelName);
138
+ };
139
+ /**
140
+ * Get the models exported by the app. Returns only models defined using `app.model()`
141
+ *
142
+ * There are two ways to access models:
143
+ *
144
+ * 1. Call `app.models()` to get a list of all models.
145
+ *
146
+ * ```js
147
+ * var models = app.models();
148
+ *
149
+ * models.forEach(function(Model) {
150
+ * console.log(Model.modelName); // color
151
+ * });
152
+ * ```
153
+ *
154
+ * 2. Use `app.models` to access a model by name.
155
+ * `app.models` has properties for all defined models.
156
+ *
157
+ * The following example illustrates accessing the `Product` and `CustomerReceipt` models
158
+ * using the `models` object.
159
+ *
160
+ * ```js
161
+ * var loopback = require('loopback');
162
+ * var app = loopback();
163
+ * app.boot({
164
+ * dataSources: {
165
+ * db: {connector: 'memory'}
166
+ * }
167
+ * });
168
+ *
169
+ * var productModel = app.registry.createModel('product');
170
+ * app.model(productModel, {dataSource: 'db'});
171
+ * var customerReceiptModel = app.registry.createModel('customer-receipt');
172
+ * app.model(customerReceiptModel, {dataSource: 'db'});
173
+ *
174
+ * // available based on the given name
175
+ * var Product = app.models.Product;
176
+ *
177
+ * // also available as camelCase
178
+ * var product = app.models.product;
179
+ *
180
+ * // multi-word models are avaiable as pascal cased
181
+ * var CustomerReceipt = app.models.CustomerReceipt;
182
+ *
183
+ * // also available as camelCase
184
+ * var customerReceipt = app.models.customerReceipt;
185
+ * ```
186
+ *
187
+ * @returns {Array} Array of model classes.
188
+ */
189
+ app.models = function() {
190
+ return this._models || (this._models = []);
191
+ };
192
+ /**
193
+ * Define a DataSource.
194
+ *
195
+ * @param {String} name The data source name
196
+ * @param {Object} config The data source config
197
+ */
198
+ app.dataSource = function(name, config) {
199
+ try {
200
+ const ds = dataSourcesFromConfig(name, config, this.connectors, this.registry);
201
+ this.dataSources[name] = this.dataSources[classify(name)] = this.dataSources[camelize(name)] = ds;
202
+ ds.app = this;
203
+ return ds;
204
+ } catch (err) {
205
+ if (err.message) err.message = g.f("Cannot create data source %s: %s", JSON.stringify(name), err.message);
206
+ throw err;
207
+ }
208
+ };
209
+ /**
210
+ * Register a connector.
211
+ *
212
+ * When a new data-source is being added via `app.dataSource`, the connector
213
+ * name is looked up in the registered connectors first.
214
+ *
215
+ * Connectors are required to be explicitly registered only for applications
216
+ * using browserify, because browserify does not support dynamic require,
217
+ * which is used by LoopBack to automatically load the connector module.
218
+ *
219
+ * @param {String} name Name of the connector, e.g. 'mysql'.
220
+ * @param {Object} connector Connector object as returned
221
+ * by `require('loopback-connector-{name}')`.
222
+ */
223
+ app.connector = function(name, connector) {
224
+ this.connectors[name] = this.connectors[classify(name)] = this.connectors[camelize(name)] = connector;
225
+ };
226
+ /**
227
+ * Get all remote objects.
228
+ * @returns {Object} [Remote objects](http://apidocs.strongloop.com/strong-remoting/#remoteobjectsoptions).
229
+ */
230
+ app.remoteObjects = function() {
231
+ const result = {};
232
+ this.remotes().classes().forEach(function(sharedClass) {
233
+ result[sharedClass.name] = sharedClass.ctor;
234
+ });
235
+ return result;
236
+ };
237
+ /*!
238
+ * Get a handler of the specified type from the handler cache.
239
+ * @triggers `mounted` events on shared class constructors (models)
240
+ */
241
+ app.handler = function(type, options) {
242
+ const handlers = this._handlers || (this._handlers = {});
243
+ if (handlers[type]) return handlers[type];
244
+ const remotes = this.remotes();
245
+ const handler = this._handlers[type] = remotes.handler(type, options);
246
+ remotes.classes().forEach(function(sharedClass) {
247
+ sharedClass.ctor.emit("mounted", app, sharedClass, remotes);
248
+ });
249
+ return handler;
250
+ };
251
+ /**
252
+ * An object to store dataSource instances.
253
+ */
254
+ app.dataSources = app.datasources = {};
255
+ /**
256
+ * Enable app wide authentication.
257
+ */
258
+ app.enableAuth = function(options) {
259
+ const AUTH_MODELS = [
260
+ "User",
261
+ "AccessToken",
262
+ "ACL",
263
+ "Role",
264
+ "RoleMapping"
265
+ ];
266
+ const remotes = this.remotes();
267
+ const app = this;
268
+ if (options && options.dataSource) {
269
+ const appModels = app.registry.modelBuilder.models;
270
+ AUTH_MODELS.forEach(function(m) {
271
+ const Model = app.registry.findModel(m);
272
+ if (!Model) throw new Error(g.f("Authentication requires model %s to be defined.", m));
273
+ if (Model.dataSource || Model.app) return;
274
+ for (const name in appModels) {
275
+ const candidate = appModels[name];
276
+ const isSubclass = candidate.prototype instanceof Model;
277
+ const isAttached = !!candidate.dataSource || !!candidate.app;
278
+ if (isSubclass && isAttached) return;
279
+ }
280
+ app.model(Model, {
281
+ dataSource: options.dataSource,
282
+ public: m === "User"
283
+ });
284
+ });
285
+ }
286
+ remotes.authorization = function(ctx, next) {
287
+ const method = ctx.method;
288
+ const req = ctx.req;
289
+ const Model = method.ctor;
290
+ const modelInstance = ctx.instance;
291
+ const modelId = modelInstance && modelInstance.id || (req.params && req.params.id !== void 0 ? req.params.id : req.body && req.body.id !== void 0 ? req.body.id : req.query && req.query.id !== void 0 ? req.query.id : void 0);
292
+ const modelName = Model.modelName;
293
+ let errStatusCode = (Model.settings || {}).aclErrorStatus || app.get("aclErrorStatus") || 401;
294
+ if (!req.accessToken) errStatusCode = 401;
295
+ if (Model.checkAccess) utils.invokeWithCallback(Model.checkAccess, Model, [
296
+ req.accessToken,
297
+ modelId,
298
+ method,
299
+ ctx
300
+ ]).then(function(allowed) {
301
+ if (allowed) return next();
302
+ const messages = {
303
+ 403: {
304
+ message: g.f("Access Denied"),
305
+ code: "ACCESS_DENIED"
306
+ },
307
+ 404: {
308
+ message: g.f("could not find %s with id %s", modelName, modelId),
309
+ code: "MODEL_NOT_FOUND"
310
+ },
311
+ 401: {
312
+ message: g.f("Authorization Required"),
313
+ code: "AUTHORIZATION_REQUIRED"
314
+ }
315
+ };
316
+ const e = new Error(messages[errStatusCode].message || messages[403].message);
317
+ e.statusCode = errStatusCode;
318
+ e.code = messages[errStatusCode].code || messages[403].code;
319
+ next(e);
320
+ }, function(err) {
321
+ console.log(err);
322
+ next(err);
323
+ });
324
+ else next();
325
+ };
326
+ this._verifyAuthModelRelations();
327
+ this.isAuthEnabled = true;
328
+ };
329
+ app._verifyAuthModelRelations = function() {
330
+ if (this.get("_verifyAuthModelRelations") === false) return;
331
+ const AccessToken = this.registry.findModel("AccessToken");
332
+ const User = this.registry.findModel("User");
333
+ this.models().forEach((Model) => {
334
+ if (Model === AccessToken || Model.prototype instanceof AccessToken) scheduleVerification(Model, verifyAccessTokenRelations);
335
+ if (Model === User || Model.prototype instanceof User) scheduleVerification(Model, verifyUserRelations);
336
+ });
337
+ function scheduleVerification(Model, verifyFn) {
338
+ if (Model.dataSource) verifyFn(Model);
339
+ else Model.on("attached", () => verifyFn(Model));
340
+ }
341
+ function verifyAccessTokenRelations(Model) {
342
+ if (Model.relations && Model.relations.user) return;
343
+ const userName = ((Model.settings.relations || {}).user || {}).model;
344
+ if (userName) {
345
+ console.warn("The model %j configures \"belongsTo User-like models\" relation with target model %j. However, the model %j is not attached to the application and therefore cannot be used by this relation. This typically happens when the application has a custom custom User subclass, but does not fix AccessToken relations to use this new model.\nLearn more at http://ibm.biz/setup-loopback-auth", Model.modelName, userName, userName);
346
+ return;
347
+ }
348
+ console.warn("The model %j does not have \"belongsTo User-like model\" relation configured.\nLearn more at http://ibm.biz/setup-loopback-auth", Model.modelName);
349
+ }
350
+ function verifyUserRelations(Model) {
351
+ const hasManyTokens = Model.relations && Model.relations.accessTokens;
352
+ if (hasManyTokens) {
353
+ if (hasManyTokens.polymorphic) console.warn("The app configuration follows the multiple user models setup as described in http://ibm.biz/setup-loopback-auth", "The built-in role resolver $owner is not currently compatible with this configuration and should not be used in production.");
354
+ return;
355
+ }
356
+ const accessTokenName = ((Model.settings.relations || {}).accessTokens || {}).model;
357
+ if (accessTokenName) {
358
+ console.warn("The model %j configures \"hasMany AccessToken-like models\" relation with target model %j. However, the model %j is not attached to the application and therefore cannot be used by this relation. This typically happens when the application has a custom AccessToken subclass, but does not fix User relations to use this new model.\nLearn more at http://ibm.biz/setup-loopback-auth", Model.modelName, accessTokenName, accessTokenName);
359
+ return;
360
+ }
361
+ console.warn("The model %j does not have \"hasMany AccessToken-like models\" relation configured.\nLearn more at http://ibm.biz/setup-loopback-auth", Model.modelName);
362
+ }
363
+ };
364
+ app.boot = function(options) {
365
+ throw new Error(g.f("{{`app.boot`}} was removed, use the new module {{loopback-boot}} instead"));
366
+ };
367
+ function dataSourcesFromConfig(name, config, connectorRegistry, registry) {
368
+ let connectorPath;
369
+ assert(typeof config === "object", "can not create data source without config object");
370
+ if (typeof config.connector === "string") {
371
+ const connectorName = config.connector;
372
+ if (connectorRegistry[connectorName]) config.connector = connectorRegistry[connectorName];
373
+ else {
374
+ connectorPath = path.join(__dirname, "connectors", connectorName + ".cjs");
375
+ if (fs.existsSync(connectorPath)) config.connector = require(connectorPath);
376
+ }
377
+ if (config.connector && typeof config.connector === "object" && !config.connector.name) config.connector.name = connectorName;
378
+ }
379
+ return registry.createDataSource(name, config);
380
+ }
381
+ function configureModel(ModelCtor, config, app) {
382
+ assert(ModelCtor.prototype instanceof ModelCtor.registry.getModel("Model"), ModelCtor.modelName + " must be a descendant of loopback.Model");
383
+ let dataSource = config.dataSource;
384
+ if (dataSource) {
385
+ if (typeof dataSource === "string") dataSource = app.dataSources[dataSource];
386
+ assert(dataSource instanceof DataSource, ModelCtor.modelName + " is referencing a dataSource that does not exist: \"" + config.dataSource + "\"");
387
+ }
388
+ config = Object.assign({}, config);
389
+ config.dataSource = dataSource;
390
+ app.registry.configureModel(ModelCtor, config);
391
+ }
392
+ function clearHandlerCache(app) {
393
+ app._handlers = void 0;
394
+ }
395
+ /**
396
+ * Listen for connections and update the configured port.
397
+ *
398
+ * When there are no parameters or there is only one callback parameter,
399
+ * the server will listen on `app.get('host')` and `app.get('port')`.
400
+ *
401
+ * For example, to listen on host/port configured in app config:
402
+ * ```js
403
+ * app.listen();
404
+ * ```
405
+ *
406
+ * Otherwise all arguments are forwarded to `http.Server.listen`.
407
+ *
408
+ * For example, to listen on the specified port and all hosts, and ignore app config.
409
+ * ```js
410
+ * app.listen(80);
411
+ * ```
412
+ *
413
+ * The function also installs a `listening` callback that calls
414
+ * `app.set('port')` with the value returned by `server.address().port`.
415
+ * This way the port param contains always the real port number, even when
416
+ * listen was called with port number 0.
417
+ *
418
+ * @param {Function} [cb] If specified, the callback is added as a listener
419
+ * for the server's "listening" event.
420
+ * @returns {http.Server} A node `http.Server` with this application configured
421
+ * as the request handler.
422
+ */
423
+ app.listen = function(cb) {
424
+ const self = this;
425
+ const server = require("http").createServer(this);
426
+ server.on("listening", function() {
427
+ self.set("port", this.address().port);
428
+ let listeningOnAll = false;
429
+ let host = self.get("host");
430
+ if (!host) {
431
+ listeningOnAll = true;
432
+ host = this.address().address;
433
+ self.set("host", host);
434
+ } else if (host === "0.0.0.0" || host === "::") listeningOnAll = true;
435
+ if (!self.get("url")) {
436
+ if (listeningOnAll) host = "localhost";
437
+ const url = "http://" + host + ":" + self.get("port") + "/";
438
+ self.set("url", url);
439
+ }
440
+ });
441
+ if (arguments.length === 0 || arguments.length == 1 && typeof arguments[0] == "function") {
442
+ let port = this.get("port");
443
+ if (port === void 0) port = 0;
444
+ server.listen(port, this.get("host"), cb);
445
+ } else server.listen.apply(server, arguments);
446
+ return server;
447
+ };
448
+ }));
449
+ //#endregion
450
+ module.exports = require_application();
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_key_value_model$2 = require("../common/models/key-value-model2.cjs");
4
+ const require_common_models_key_value_model = require("../common/models/key-value-model.cjs");
5
+ const require_email$2 = require("../common/models/email2.cjs");
6
+ const require_common_models_email = require("../common/models/email.cjs");
7
+ const require_application$2 = require("../common/models/application2.cjs");
8
+ const require_common_models_application = require("../common/models/application.cjs");
9
+ const require_access_token$2 = require("../common/models/access-token2.cjs");
10
+ const require_common_models_access_token = require("../common/models/access-token.cjs");
11
+ const require_user$2 = require("../common/models/user2.cjs");
12
+ const require_common_models_user = require("../common/models/user.cjs");
13
+ const require_role_mapping$2 = require("../common/models/role-mapping2.cjs");
14
+ const require_common_models_role_mapping = require("../common/models/role-mapping.cjs");
15
+ const require_role$2 = require("../common/models/role2.cjs");
16
+ const require_common_models_role = require("../common/models/role.cjs");
17
+ const require_acl$2 = require("../common/models/acl2.cjs");
18
+ const require_common_models_acl = require("../common/models/acl.cjs");
19
+ const require_scope$2 = require("../common/models/scope2.cjs");
20
+ const require_common_models_scope = require("../common/models/scope.cjs");
21
+ const require_change$2 = require("../common/models/change2.cjs");
22
+ const require_common_models_change = require("../common/models/change.cjs");
23
+ const require_checkpoint$2 = require("../common/models/checkpoint2.cjs");
24
+ const require_common_models_checkpoint = require("../common/models/checkpoint.cjs");
25
+ //#region src/lib/builtin-models.ts
26
+ var require_builtin_models = /* @__PURE__ */ require_runtime.__commonJSMin(((exports, module) => {
27
+ const assert = require("assert");
28
+ function defineBuiltinModels(registry) {
29
+ registry.KeyValueModel = createModel(registry, require_key_value_model$2.default, require_common_models_key_value_model);
30
+ registry.Email = createModel(registry, require_email$2.default, require_common_models_email);
31
+ registry.Application = createModel(registry, require_application$2.default, require_common_models_application);
32
+ registry.AccessToken = createModel(registry, require_access_token$2.default, require_common_models_access_token);
33
+ registry.User = createModel(registry, require_user$2.default, require_common_models_user);
34
+ registry.RoleMapping = createModel(registry, require_role_mapping$2.default, require_common_models_role_mapping);
35
+ registry.Role = createModel(registry, require_role$2.default, require_common_models_role);
36
+ registry.ACL = createModel(registry, require_acl$2.default, require_common_models_acl);
37
+ registry.Scope = createModel(registry, require_scope$2.default, require_common_models_scope);
38
+ registry.Change = createModel(registry, require_change$2.default, require_common_models_change);
39
+ registry.Checkpoint = createModel(registry, require_checkpoint$2.default, require_common_models_checkpoint);
40
+ }
41
+ function createModel(registry, definitionJson, customizeModel) {
42
+ const definition = cloneDeepJson(definitionJson);
43
+ const Model = registry.createModel(definition);
44
+ customizeModel(Model);
45
+ return Model;
46
+ }
47
+ function cloneDeepJson(obj) {
48
+ const result = Array.isArray(obj) ? [] : {};
49
+ assert.equal(Object.getPrototypeOf(result), Object.getPrototypeOf(obj));
50
+ for (const key in obj) {
51
+ const value = obj[key];
52
+ if (typeof value === "object") result[key] = cloneDeepJson(value);
53
+ else result[key] = value;
54
+ }
55
+ return result;
56
+ }
57
+ module.exports = defineBuiltinModels;
58
+ }));
59
+ //#endregion
60
+ module.exports = require_builtin_models();
@@ -0,0 +1,41 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_globalize = require("./globalize.cjs");
3
+ //#region src/lib/configure-shared-methods.ts
4
+ var require_configure_shared_methods = /* @__PURE__ */ require_runtime.__commonJSMin(((exports, module) => {
5
+ const g = require_lib_globalize;
6
+ function configureSharedMethods(modelCtor, remotingConfig, modelConfig) {
7
+ const settings = {};
8
+ if (remotingConfig && remotingConfig.sharedMethods && typeof remotingConfig.sharedMethods === "object") Object.assign(settings, remotingConfig.sharedMethods);
9
+ const options = modelConfig.options;
10
+ if (options && options.remoting && options.remoting.sharedMethods && typeof options.remoting.sharedMethods === "object") Object.assign(settings, options.remoting.sharedMethods);
11
+ Object.keys(settings).forEach(function(setting) {
12
+ const settingValueType = typeof settings[setting];
13
+ if (settingValueType !== "boolean") throw new TypeError(g.f("Expected boolean, got %s", settingValueType));
14
+ });
15
+ const sharedMethods = modelCtor.sharedClass.methods({ includeDisabled: true });
16
+ const tests = Object.keys(settings).filter(function(setting) {
17
+ return Object.prototype.hasOwnProperty.call(settings, setting) && setting.indexOf("*") >= 0;
18
+ }).map(function(setting) {
19
+ const glob = escapeRegExp(setting).replace(/\*/g, "(.)*");
20
+ return {
21
+ regex: new RegExp(glob),
22
+ setting: settings[setting]
23
+ };
24
+ }) || [];
25
+ sharedMethods.forEach(function(sharedMethod) {
26
+ const methodName = sharedMethod.isStatic ? sharedMethod.name : "prototype." + sharedMethod.name;
27
+ if (Object.prototype.hasOwnProperty.call(settings, methodName)) if (settings[methodName] === false) sharedMethod.sharedClass.disableMethodByName(methodName);
28
+ else sharedMethod.shared = true;
29
+ else tests.forEach(function(glob) {
30
+ if (glob.regex.test(methodName)) if (glob.setting === false) sharedMethod.sharedClass.disableMethodByName(methodName);
31
+ else sharedMethod.shared = true;
32
+ });
33
+ });
34
+ }
35
+ function escapeRegExp(str) {
36
+ return str.replace(/[-/\\^$+?.()|[\]{}]/g, "\\$&");
37
+ }
38
+ module.exports = configureSharedMethods;
39
+ }));
40
+ //#endregion
41
+ module.exports = require_configure_shared_methods();
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ //#region src/lib/connectors/base-connector.ts
3
+ /**
4
+ * Expose `Connector`.
5
+ */
6
+ var require_base_connector = /* @__PURE__ */ require("../../_virtual/_rolldown/runtime.cjs").__commonJSMin(((exports, module) => {
7
+ const EventEmitter = require("events").EventEmitter;
8
+ const debug = require("debug")("connector");
9
+ const inherits = require("util").inherits;
10
+ function Connector(options) {
11
+ EventEmitter.apply(this, arguments);
12
+ this.options = options;
13
+ debug("created with options", options);
14
+ }
15
+ inherits(Connector, EventEmitter);
16
+ Connector._createJDBAdapter = function(jdbModule) {
17
+ jdbModule.initialize({}, function() {});
18
+ };
19
+ Connector.prototype._addCrudOperationsFromJDBAdapter = function(connector) {};
20
+ module.exports = Connector;
21
+ }));
22
+ //#endregion
23
+ module.exports = require_base_connector();