mirror of https://gitee.com/bigwinds/arangodb
Moved ArangoApp to its own file. It is not contained in bootstrap modules anymore
This commit is contained in:
parent
1db9172773
commit
8121702af9
|
@ -150,18 +150,6 @@ function require (path) {
|
||||||
|
|
||||||
var Module;
|
var Module;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief ArangoApp constructor declaration
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
var ArangoApp;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief appDescription declaration
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
var appDescription;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief in-flight modules
|
/// @brief in-flight modules
|
||||||
///
|
///
|
||||||
|
@ -1364,224 +1352,30 @@ function require (path) {
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief createApp
|
/// @brief createAppModule, is used to create foxx applications
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Module.prototype.createApp = function (config) {
|
Module.prototype.createAppModule = function (app) {
|
||||||
'use strict';
|
'use strict';
|
||||||
return new ArangoApp(config);
|
var libpath = fs.join(this._root, this._path);
|
||||||
};
|
if (this._manifest.hasOwnProperty("lib")) {
|
||||||
|
libpath = fs.join(libpath, app._manifest.lib);
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- ArangoApp
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- constructors and destructors
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief ArangoApp constructor
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp = function (config) {
|
|
||||||
'use strict';
|
|
||||||
this._id = config.id; // ???
|
|
||||||
this._manifest = config.manifest;
|
|
||||||
this._name = config.manifest.name;
|
|
||||||
this._version = config.manifest.version;
|
|
||||||
this._root = config.root;
|
|
||||||
this._path = config.path;
|
|
||||||
this._options = config.options;
|
|
||||||
this._mount = config.mount;
|
|
||||||
this._isSystem = config.isSystem || false;
|
|
||||||
this._isDevelopment = config.isDevelopment || false;
|
|
||||||
this._exports = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- private methods
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief prints a package
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp.prototype._PRINT = function (context) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var parent = "";
|
|
||||||
|
|
||||||
if (this._parent !== undefined) {
|
|
||||||
parent = ', parent "' + this._package._parent.id + '"';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.output += '[app "' + this._name + '" (' + this._version + ')]';
|
|
||||||
};
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- public methods
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief creates a Json representation of itself to be persisted
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp.prototype.toJSON = function () {
|
|
||||||
var json = {
|
|
||||||
id: this._id,
|
|
||||||
manifest: this._manifest,
|
|
||||||
name: this._name,
|
|
||||||
version: this._version,
|
|
||||||
root: this._root,
|
|
||||||
path: this._path,
|
|
||||||
options: this._options,
|
|
||||||
mount: this._mount,
|
|
||||||
isSystem: this._isSystem,
|
|
||||||
isDevelopment: this._isDevelopment
|
|
||||||
};
|
|
||||||
if (this._manifest.hasOwnProperty("author")) {
|
|
||||||
json.author = this._manifest.author;
|
|
||||||
}
|
|
||||||
if (this._manifest.hasOwnProperty("description")) {
|
|
||||||
json.description = this._manifest.description;
|
|
||||||
}
|
|
||||||
if (this._manifest.hasOwnProperty("thumbnail")) {
|
|
||||||
json.thumbnail = this._manifest.thumbnail;
|
|
||||||
}
|
|
||||||
|
|
||||||
return json;
|
|
||||||
};
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief createAppModule
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp.prototype.createAppModule = function (appContext, type) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
if (type === undefined) {
|
|
||||||
type = 'lib';
|
|
||||||
}
|
|
||||||
|
|
||||||
var libpath;
|
|
||||||
|
|
||||||
if (this._manifest.hasOwnProperty(type)) {
|
|
||||||
libpath = fs.join(this._root, this._path, this._manifest[type]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
libpath = fs.join(this._root, this._path);
|
|
||||||
}
|
|
||||||
|
|
||||||
var pkg = new Package("application-package",
|
var pkg = new Package("application-package",
|
||||||
{name: "application '" + this._name + "'"},
|
{name: "application '" + app._name + "'"},
|
||||||
undefined,
|
undefined,
|
||||||
path2FileUri(libpath),
|
path2FileUri(libpath),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
return new Module("/application-module",
|
return new Module("/application-module",
|
||||||
pkg,
|
pkg,
|
||||||
appContext,
|
app._context,
|
||||||
"/",
|
"/",
|
||||||
path2FileUri(libpath),
|
path2FileUri(libpath),
|
||||||
false);
|
false);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
Module.prototype.normalizeModuleName = normalizeModuleName;
|
||||||
/// @brief createAppContext
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp.prototype.createAppContext = function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var context = {};
|
|
||||||
|
|
||||||
context.name = this._name;
|
|
||||||
context.version = this._version;
|
|
||||||
context.appId = this._id;
|
|
||||||
context.appModule = this.createAppModule(context);
|
|
||||||
|
|
||||||
var prefix = fs.safeJoin(this._root, this._path);
|
|
||||||
|
|
||||||
context.foxxFilename = function (path) {
|
|
||||||
return fs.safeJoin(prefix, path);
|
|
||||||
};
|
|
||||||
|
|
||||||
return context;
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief loadAppScript
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ArangoApp.prototype.loadAppScript = function (appContext, filename, options) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
var full = fs.join(this._root, this._path, filename);
|
|
||||||
var fileContent = fs.read(full);
|
|
||||||
|
|
||||||
if (options.hasOwnProperty('transform')) {
|
|
||||||
fileContent = options.transform(fileContent);
|
|
||||||
}
|
|
||||||
else if (/\.coffee$/.test(filename)) {
|
|
||||||
var cs = require("coffee-script");
|
|
||||||
|
|
||||||
fileContent = cs.compile(fileContent, {bare: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
var sandbox = {};
|
|
||||||
var key;
|
|
||||||
|
|
||||||
if (options.hasOwnProperty('context')) {
|
|
||||||
var context = options.context;
|
|
||||||
|
|
||||||
for (key in context) {
|
|
||||||
if (context.hasOwnProperty(key) && key !== "__myenv__") {
|
|
||||||
sandbox[key] = context[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sandbox.__filename = full;
|
|
||||||
sandbox.__dirname = normalizeModuleName(full + "/..");
|
|
||||||
sandbox.module = appContext.appModule;
|
|
||||||
sandbox.applicationContext = appContext;
|
|
||||||
|
|
||||||
sandbox.require = function (path) {
|
|
||||||
return appContext.appModule.require(path);
|
|
||||||
};
|
|
||||||
|
|
||||||
var content = "(function (__myenv__) {";
|
|
||||||
|
|
||||||
for (key in sandbox) {
|
|
||||||
if (sandbox.hasOwnProperty(key)) {
|
|
||||||
// using `key` like below is not safe (imagine a key named `foo bar`!)
|
|
||||||
// TODO: fix this
|
|
||||||
content += "var " + key + " = __myenv__[" + JSON.stringify(key) + "];";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
content += "delete __myenv__;"
|
|
||||||
+ "(function () {"
|
|
||||||
+ fileContent
|
|
||||||
+ "\n}());"
|
|
||||||
+ "});";
|
|
||||||
// note: at least one newline character must be used here, otherwise
|
|
||||||
// a script ending with a single-line comment (two forward slashes)
|
|
||||||
// would render the function tail invalid
|
|
||||||
// adding a newline at the end will create stack traces with a line number
|
|
||||||
// one higher than the last line in the script file
|
|
||||||
|
|
||||||
var fun = internal.executeScript(content, undefined, full);
|
|
||||||
|
|
||||||
if (fun === undefined) {
|
|
||||||
throw new Error("cannot create application script: " + content);
|
|
||||||
}
|
|
||||||
|
|
||||||
fun(sandbox);
|
|
||||||
};
|
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
|
@ -0,0 +1,271 @@
|
||||||
|
/*jshint strict: false */
|
||||||
|
/*global module, require, exports */
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief Foxx application module
|
||||||
|
///
|
||||||
|
/// @file
|
||||||
|
///
|
||||||
|
/// DISCLAIMER
|
||||||
|
///
|
||||||
|
/// Copyright 2013 triagens GmbH, Cologne, Germany
|
||||||
|
///
|
||||||
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
/// you may not use this file except in compliance with the License.
|
||||||
|
/// You may obtain a copy of the License at
|
||||||
|
///
|
||||||
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
///
|
||||||
|
/// Unless required by applicable law or agreed to in writing, software
|
||||||
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
/// See the License for the specific language governing permissions and
|
||||||
|
/// limitations under the License.
|
||||||
|
///
|
||||||
|
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
||||||
|
///
|
||||||
|
/// @author Dr. Frank Celler
|
||||||
|
/// @author Michael Hackstein
|
||||||
|
/// @author Copyright 2013, triAGENS GmbH, Cologne, Germany
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- imports
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var fs = require("fs");
|
||||||
|
var internal = require("internal");
|
||||||
|
var db = internal.db;
|
||||||
|
var _= require("underscore");
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- constructors and destructors
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- AppContext
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var AppContext = function(app) {
|
||||||
|
var prefix = fs.safeJoin(app._root, app._path);
|
||||||
|
|
||||||
|
this._prefix = prefix;
|
||||||
|
this.comments = [];
|
||||||
|
this.name = app._name;
|
||||||
|
this.version = app._version;
|
||||||
|
this.appId = app._id;
|
||||||
|
this.mount = app._mount;
|
||||||
|
this.collectionPrefix = app._collectionPrefix;
|
||||||
|
this.options = app._options;
|
||||||
|
this.configuration = app._options.configuration;
|
||||||
|
this.basePath = prefix;
|
||||||
|
this.baseUrl = '/_db/' + encodeURIComponent(db._name()) + app._mount;
|
||||||
|
this.isDevelopment = app._isDevelopment;
|
||||||
|
this.isProduction = ! app._isDevelopment;
|
||||||
|
this.manifest = app._manifest;
|
||||||
|
|
||||||
|
this.appModule = module.createAppModule(app);
|
||||||
|
};
|
||||||
|
|
||||||
|
AppContext.prototype.foxxFilename = function (path) {
|
||||||
|
return fs.safeJoin(this._prefix, path);
|
||||||
|
};
|
||||||
|
|
||||||
|
AppContext.prototype.collectionName = function (name) {
|
||||||
|
var replaced = this.collectionPrefix + name.replace(/[^a-zA-Z0-9]/g, '_').replace(/(^_+|_+$)/g, '').substr(0, 64);
|
||||||
|
|
||||||
|
if (replaced.length === 0) {
|
||||||
|
throw new Error("Cannot derive collection name from '" + name + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
return replaced;
|
||||||
|
};
|
||||||
|
|
||||||
|
AppContext.prototype.collection = function (name) {
|
||||||
|
return db._collection(this.collectionName(name));
|
||||||
|
};
|
||||||
|
|
||||||
|
AppContext.prototype.path = function (name) {
|
||||||
|
return fs.join(this._prefix, name);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
AppContext.prototype.comment = function (str) {
|
||||||
|
this.comments.push(str);
|
||||||
|
};
|
||||||
|
|
||||||
|
AppContext.prototype.clearComments = function () {
|
||||||
|
this.comments = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- ArangoApp
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief ArangoApp constructor
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var ArangoApp = function (config) {
|
||||||
|
var collectionPrefix = this._mount.substr(1).replace(/-/g, "_").replace(/\//g, "_") + "_";
|
||||||
|
this._id = config.id; // ???
|
||||||
|
this._manifest = config.manifest;
|
||||||
|
this._name = config.manifest.name;
|
||||||
|
this._version = config.manifest.version;
|
||||||
|
this._root = config.root;
|
||||||
|
this._path = config.path;
|
||||||
|
this._options = config.options;
|
||||||
|
this._mount = config.mount;
|
||||||
|
this._isSystem = config.isSystem || false;
|
||||||
|
this._isDevelopment = config.isDevelopment || false;
|
||||||
|
this._exports = {};
|
||||||
|
|
||||||
|
// converts the mount point into the default prefix
|
||||||
|
|
||||||
|
this._collectionPrefix = collectionPrefix;
|
||||||
|
|
||||||
|
this._context = new AppContext(this);
|
||||||
|
};
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- private methods
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief prints a package
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoApp.prototype._PRINT = function (context) {
|
||||||
|
context.output += '[app "' + this._name + '" (' + this._version + ')]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- public methods
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief creates a Json representation of itself to be persisted
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoApp.prototype.toJSON = function () {
|
||||||
|
var json = {
|
||||||
|
id: this._id,
|
||||||
|
manifest: this._manifest,
|
||||||
|
name: this._name,
|
||||||
|
version: this._version,
|
||||||
|
root: this._root,
|
||||||
|
path: this._path,
|
||||||
|
options: this._options,
|
||||||
|
mount: this._mount,
|
||||||
|
isSystem: this._isSystem,
|
||||||
|
isDevelopment: this._isDevelopment
|
||||||
|
};
|
||||||
|
if (this._manifest.hasOwnProperty("author")) {
|
||||||
|
json.author = this._manifest.author;
|
||||||
|
}
|
||||||
|
if (this._manifest.hasOwnProperty("description")) {
|
||||||
|
json.description = this._manifest.description;
|
||||||
|
}
|
||||||
|
if (this._manifest.hasOwnProperty("thumbnail")) {
|
||||||
|
json.thumbnail = this._manifest.thumbnail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return json;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief getAppContext
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoApp.prototype.getAppContext = function () {
|
||||||
|
return this._appContext;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief loadAppScript
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoApp.prototype.loadAppScript = function (filename, options) {
|
||||||
|
var appContext = _.merge(options.context || {}, this._context);
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
var full = fs.join(this._root, this._path, filename);
|
||||||
|
var fileContent = fs.read(full);
|
||||||
|
|
||||||
|
if (options.hasOwnProperty('transform')) {
|
||||||
|
fileContent = options.transform(fileContent);
|
||||||
|
}
|
||||||
|
else if (/\.coffee$/.test(filename)) {
|
||||||
|
var cs = require("coffee-script");
|
||||||
|
|
||||||
|
fileContent = cs.compile(fileContent, {bare: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
var sandbox = {};
|
||||||
|
var key;
|
||||||
|
|
||||||
|
if (options.hasOwnProperty('context')) {
|
||||||
|
var context = options.context;
|
||||||
|
|
||||||
|
for (key in context) {
|
||||||
|
if (context.hasOwnProperty(key) && key !== "__myenv__") {
|
||||||
|
sandbox[key] = context[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sandbox.__filename = full;
|
||||||
|
sandbox.__dirname = module.normalizeModuleName(full + "/..");
|
||||||
|
sandbox.module = appContext.appModule;
|
||||||
|
sandbox.applicationContext = appContext;
|
||||||
|
|
||||||
|
sandbox.require = function (path) {
|
||||||
|
return appContext.appModule.require(path);
|
||||||
|
};
|
||||||
|
|
||||||
|
var content = "(function (__myenv__) {";
|
||||||
|
|
||||||
|
for (key in sandbox) {
|
||||||
|
if (sandbox.hasOwnProperty(key)) {
|
||||||
|
// using `key` like below is not safe (imagine a key named `foo bar`!)
|
||||||
|
// TODO: fix this
|
||||||
|
content += "var " + key + " = __myenv__[" + JSON.stringify(key) + "];";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
content += "delete __myenv__;"
|
||||||
|
+ "(function () {"
|
||||||
|
+ fileContent
|
||||||
|
+ "\n}());"
|
||||||
|
+ "});";
|
||||||
|
// note: at least one newline character must be used here, otherwise
|
||||||
|
// a script ending with a single-line comment (two forward slashes)
|
||||||
|
// would render the function tail invalid
|
||||||
|
// adding a newline at the end will create stack traces with a line number
|
||||||
|
// one higher than the last line in the script file
|
||||||
|
|
||||||
|
var fun = internal.executeScript(content, undefined, full);
|
||||||
|
|
||||||
|
if (fun === undefined) {
|
||||||
|
throw new Error("cannot create application script: " + content);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun(sandbox);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.ArangoApp = ArangoApp;
|
||||||
|
|
||||||
|
}());
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- END-OF-FILE
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Local Variables:
|
||||||
|
// mode: outline-minor
|
||||||
|
// outline-regexp: "/// @brief\\|/// @addtogroup\\|/// @page\\|// --SECTION--\\|/// @\\}\\|/\\*jslint"
|
||||||
|
// End:
|
|
@ -1214,6 +1214,7 @@ exports.initializeFoxx = function () {
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
var utils = require("org/arangodb/foxx/manager-utils");
|
var utils = require("org/arangodb/foxx/manager-utils");
|
||||||
var store = require("org/arangodb/foxx/store");
|
var store = require("org/arangodb/foxx/store");
|
||||||
|
var ArangoApp = require("org/arangodb/foxx/arangoApp").ArangoApp;
|
||||||
var arangodb = require("org/arangodb");
|
var arangodb = require("org/arangodb");
|
||||||
var ArangoError = arangodb.ArangoError;
|
var ArangoError = arangodb.ArangoError;
|
||||||
var checkParameter = arangodb.checkParameter;
|
var checkParameter = arangodb.checkParameter;
|
||||||
|
@ -1242,60 +1243,6 @@ var lookupApp = function(mount) {
|
||||||
return appCache[mount];
|
return appCache[mount];
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief converts the mount point into the default prefix
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
var prefixFromMount = function(mount) {
|
|
||||||
return mount.substr(1).replace(/-/g, "_").replace(/\//g, "_");
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief extend a context with some helper functions
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
var extendContext = function(context, app, root) {
|
|
||||||
var cp = context.collectionPrefix;
|
|
||||||
var cname = "";
|
|
||||||
|
|
||||||
if (cp === "_") {
|
|
||||||
cname = "_";
|
|
||||||
}
|
|
||||||
else if (cp !== "") {
|
|
||||||
cname = cp + "_";
|
|
||||||
}
|
|
||||||
|
|
||||||
context.collectionName = function (name) {
|
|
||||||
var replaced = cname + name.replace(/[^a-zA-Z0-9]/g, '_').replace(/(^_+|_+$)/g, '').substr(0, 64);
|
|
||||||
|
|
||||||
if (replaced.length === 0) {
|
|
||||||
throw new Error("Cannot derive collection name from '" + name + "'");
|
|
||||||
}
|
|
||||||
|
|
||||||
return replaced;
|
|
||||||
};
|
|
||||||
|
|
||||||
context.collection = function (name) {
|
|
||||||
return arangodb.db._collection(this.collectionName(name));
|
|
||||||
};
|
|
||||||
|
|
||||||
context.path = function (name) {
|
|
||||||
return fs.join(root, app._path, name);
|
|
||||||
};
|
|
||||||
|
|
||||||
context.comments = [];
|
|
||||||
|
|
||||||
context.comment = function (str) {
|
|
||||||
this.comments.push(str);
|
|
||||||
};
|
|
||||||
|
|
||||||
context.clearComments = function () {
|
|
||||||
this.comments = [];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief validates a manifest file and returns it.
|
/// @brief validates a manifest file and returns it.
|
||||||
/// All errors are handled including file not found. Returns undefined if manifest is invalid
|
/// All errors are handled including file not found. Returns undefined if manifest is invalid
|
||||||
|
@ -1396,7 +1343,7 @@ var executeAppScript = function(app, name, mount, prefix) {
|
||||||
|
|
||||||
extendContext(appContext, app, root);
|
extendContext(appContext, app, root);
|
||||||
|
|
||||||
app.loadAppScript(appContext, desc[name]);
|
app.loadAppScript(desc[name]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1427,6 +1374,7 @@ var executeAppScript = function(app, name, mount, prefix) {
|
||||||
|
|
||||||
var file = fs.join(root, path, "manifest.json");
|
var file = fs.join(root, path, "manifest.json");
|
||||||
var manifest = validateManifestFile(file);
|
var manifest = validateManifestFile(file);
|
||||||
|
var collectionPrefix =
|
||||||
|
|
||||||
if (manifest === undefined) {
|
if (manifest === undefined) {
|
||||||
//TODO Error Handeling
|
//TODO Error Handeling
|
||||||
|
@ -1454,7 +1402,7 @@ var executeAppScript = function(app, name, mount, prefix) {
|
||||||
var createApp = function(mount, options) {
|
var createApp = function(mount, options) {
|
||||||
var config = appConfig(mount);
|
var config = appConfig(mount);
|
||||||
config.options = options || {};
|
config.options = options || {};
|
||||||
var app = module.createApp(config);
|
var app = new ArangoApp(config);
|
||||||
if (app === null) {
|
if (app === null) {
|
||||||
console.errorLines(
|
console.errorLines(
|
||||||
"Cannot find application '%s'", mount);
|
"Cannot find application '%s'", mount);
|
||||||
|
@ -1736,7 +1684,7 @@ function routingAalApp (app) {
|
||||||
appContext = _.extend({}, appContextTempl);
|
appContext = _.extend({}, appContextTempl);
|
||||||
appContext.prefix = "/";
|
appContext.prefix = "/";
|
||||||
|
|
||||||
app.loadAppScript(appContext, file, { context: context });
|
app.loadAppScript(file, { context: context });
|
||||||
|
|
||||||
app._exports[i] = result;
|
app._exports[i] = result;
|
||||||
}
|
}
|
||||||
|
@ -1758,7 +1706,7 @@ function routingAalApp (app) {
|
||||||
appContext.routingInfo = {};
|
appContext.routingInfo = {};
|
||||||
appContext.foxxes = [];
|
appContext.foxxes = [];
|
||||||
|
|
||||||
app.loadAppScript(appContext, file, { transform: transformScript(file) });
|
app.loadAppScript(file, { transform: transformScript(file) });
|
||||||
|
|
||||||
// .............................................................................
|
// .............................................................................
|
||||||
// routingInfo
|
// routingInfo
|
||||||
|
|
Loading…
Reference in New Issue