diff --git a/lib/middleware/models.js b/lib/middleware/models.js new file mode 100644 index 00000000..75256d8b --- /dev/null +++ b/lib/middleware/models.js @@ -0,0 +1,48 @@ +/*! + * Module dependencies. + */ + +var loopback = require('../loopback'); + +/** + * Export the middleware. + */ + +module.exports = models; + +/** + * Return a script that defines all remote models. + */ + +function models(app) { + return function (req, res, next) { + var script = 'window.loopback.remoteModels = '; + var models = []; + app.handler('rest').adapter.getClasses().forEach(function(c) { + if (!c.ctor) { + // Skip classes that don't have a shared ctor + // as they are not LoopBack models + console.error('Skipping %j as it is not a LoopBack model', name); + return; + } + models.push(toJSON(c)); + }); + res.send(script + JSON.stringify(models, null, 2)); + } +} + +function toJSON(sharedClass) { + var model = loopback.getModel(sharedClass.name); + + var result = { + modelName: model.modelName, + settings: model.settings, + properties: model.properties, + baseRoute: sharedClass.routes[0], + methods: sharedClass.methods + }; + + result.settings.base = model.super_.modelName; + + return result; +}