Add collections
This commit is contained in:
19
index.js
19
index.js
@@ -2,12 +2,29 @@
|
|||||||
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const app = express();
|
const app = express();
|
||||||
|
const mongoose = require('mongoose');
|
||||||
app.set('view engine', 'pug');
|
app.set('view engine', 'pug');
|
||||||
|
|
||||||
// Get Payload class
|
// Get Payload class
|
||||||
const Payload = require('./payload');
|
const Payload = require('./payload');
|
||||||
// Initialize class
|
// Initialize class
|
||||||
const payload = new Payload(app);
|
const payload = new Payload({
|
||||||
|
express: app,
|
||||||
|
mongoose,
|
||||||
|
baseURL: 'base123'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sample collection creation
|
||||||
|
let coolCollection = payload.newCollection('cool');
|
||||||
|
coolCollection.add({
|
||||||
|
test: { testProp: 'one', testProp2: 'two' }
|
||||||
|
});
|
||||||
|
coolCollection.register();
|
||||||
|
|
||||||
|
// Retrieve collection
|
||||||
|
let retrievedCollection = payload.getCollection('cool');
|
||||||
|
console.log(`Retrieved ${retrievedCollection.key} collection`);
|
||||||
|
console.log(`testProp: ${coolCollection.fields.test.testProp}`);
|
||||||
|
|
||||||
// Must add payload views here
|
// Must add payload views here
|
||||||
app.set('views', [`${__dirname}/views`, payload.views]);
|
app.set('views', [`${__dirname}/views`, payload.views]);
|
||||||
|
|||||||
118
package-lock.json
generated
118
package-lock.json
generated
@@ -126,6 +126,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
|
||||||
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
|
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
|
||||||
},
|
},
|
||||||
|
"async": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
|
||||||
|
"integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
|
||||||
|
"requires": {
|
||||||
|
"lodash": "4.17.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-code-frame": {
|
"babel-code-frame": {
|
||||||
"version": "6.26.0",
|
"version": "6.26.0",
|
||||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
||||||
@@ -210,6 +218,11 @@
|
|||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"bluebird": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
|
||||||
|
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
|
||||||
|
},
|
||||||
"body-parser": {
|
"body-parser": {
|
||||||
"version": "1.18.2",
|
"version": "1.18.2",
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
|
||||||
@@ -237,6 +250,11 @@
|
|||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"bson": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ=="
|
||||||
|
},
|
||||||
"buffer-from": {
|
"buffer-from": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
|
||||||
@@ -1066,6 +1084,11 @@
|
|||||||
"promise": "7.3.1"
|
"promise": "7.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"kareem": {
|
||||||
|
"version": "2.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz",
|
||||||
|
"integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ=="
|
||||||
|
},
|
||||||
"kind-of": {
|
"kind-of": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
@@ -1094,6 +1117,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
|
||||||
"integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
|
"integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
|
||||||
},
|
},
|
||||||
|
"lodash.get": {
|
||||||
|
"version": "4.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
|
||||||
|
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
|
||||||
|
},
|
||||||
"longest": {
|
"longest": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
|
||||||
@@ -1172,6 +1200,69 @@
|
|||||||
"minimist": "0.0.8"
|
"minimist": "0.0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mongodb": {
|
||||||
|
"version": "3.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.6.tgz",
|
||||||
|
"integrity": "sha512-nEg7SnzcyobArDTXEqvI1BasY6Z45h1lyBtVMCS9gRTkbtwrDn6WcLRa+MVRYufrJXxQPkAiYJQ94eCUzit0EQ==",
|
||||||
|
"requires": {
|
||||||
|
"mongodb-core": "3.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mongodb-core": {
|
||||||
|
"version": "3.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.6.tgz",
|
||||||
|
"integrity": "sha512-EIaEyA4DEft4je4Hfa+CDswKdFhlev9V9o5KJo/nITgG6KNKz5Rxg5ZuMGEjGkMwFkydFQ3Kz0CxZ18AXhRrEg==",
|
||||||
|
"requires": {
|
||||||
|
"bson": "1.0.6",
|
||||||
|
"require_optional": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mongoose": {
|
||||||
|
"version": "5.0.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.15.tgz",
|
||||||
|
"integrity": "sha512-S37I7V8nZE7JgPExgqb7zOKqezhvQP3JNa60rQEfVESvPkuan2gk/KoYeww7UK/gkKii8mR7OLyuzfRTa7rxxQ==",
|
||||||
|
"requires": {
|
||||||
|
"async": "2.1.4",
|
||||||
|
"bson": "1.0.6",
|
||||||
|
"kareem": "2.0.6",
|
||||||
|
"lodash.get": "4.4.2",
|
||||||
|
"mongodb": "3.0.6",
|
||||||
|
"mongoose-legacy-pluralize": "1.0.2",
|
||||||
|
"mpath": "0.4.1",
|
||||||
|
"mquery": "3.0.0",
|
||||||
|
"ms": "2.0.0",
|
||||||
|
"regexp-clone": "0.0.1",
|
||||||
|
"sliced": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mongoose-legacy-pluralize": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
|
||||||
|
},
|
||||||
|
"mpath": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz",
|
||||||
|
"integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA=="
|
||||||
|
},
|
||||||
|
"mquery": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==",
|
||||||
|
"requires": {
|
||||||
|
"bluebird": "3.5.0",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"regexp-clone": "0.0.1",
|
||||||
|
"sliced": "0.0.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"sliced": {
|
||||||
|
"version": "0.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
|
||||||
|
"integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
@@ -1520,6 +1611,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
|
||||||
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
|
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
|
||||||
},
|
},
|
||||||
|
"regexp-clone": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
|
||||||
|
},
|
||||||
"regexpp": {
|
"regexpp": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
|
||||||
@@ -1549,6 +1645,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"require_optional": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
|
||||||
|
"requires": {
|
||||||
|
"resolve-from": "2.0.0",
|
||||||
|
"semver": "5.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.7.1",
|
"version": "1.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
|
||||||
@@ -1557,6 +1662,11 @@
|
|||||||
"path-parse": "1.0.5"
|
"path-parse": "1.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"resolve-from": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
|
||||||
|
},
|
||||||
"restore-cursor": {
|
"restore-cursor": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
||||||
@@ -1616,8 +1726,7 @@
|
|||||||
"semver": {
|
"semver": {
|
||||||
"version": "5.5.0",
|
"version": "5.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||||
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
|
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"send": {
|
"send": {
|
||||||
"version": "0.16.2",
|
"version": "0.16.2",
|
||||||
@@ -1676,6 +1785,11 @@
|
|||||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"sliced": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
|
||||||
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.16.3",
|
"express": "^4.16.3",
|
||||||
|
"mongoose": "^5.0.15",
|
||||||
"pug": "^2.0.3"
|
"pug": "^2.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
17
payload/Collection.js
Normal file
17
payload/Collection.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
class Collection {
|
||||||
|
constructor(payload, key) {
|
||||||
|
this.payload = payload;
|
||||||
|
this.key = key;
|
||||||
|
this.fields = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
add(fields) {
|
||||||
|
this.fields = fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
register() {
|
||||||
|
this.payload.collections[this.key] = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Collection;
|
||||||
@@ -1,42 +1,43 @@
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
let fs = require('fs');
|
const Collection = require('./Collection');
|
||||||
|
|
||||||
class Payload {
|
class Payload {
|
||||||
|
|
||||||
constructor(app) {
|
constructor(options) {
|
||||||
this.app = app;
|
this.app = options.express;
|
||||||
|
this.mongoose = options.mongoose;
|
||||||
|
this.baseURL = options.baseURL;
|
||||||
|
|
||||||
this.views = path.join(__dirname, 'views');
|
this.views = path.join(__dirname, 'views');
|
||||||
|
|
||||||
mountInternalModel(this.app, path.join(__dirname, 'models'), 'User');
|
this.collections = {};
|
||||||
mountDefaultViews(this.app);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let mountDefaultViews = function (app) {
|
this.app.get(`/payload/admin`, function (req, res) {
|
||||||
fs.readdir(path.join(__dirname, 'views'), (err, files) => {
|
res.render('admin',
|
||||||
if (err) {
|
{
|
||||||
console.log("[Payload] Unable to load views");
|
title: 'Payload Admin'
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
newCollection(key) {
|
||||||
|
if (key in this.collections)
|
||||||
|
{
|
||||||
|
console.log(`${key} already exists in collections`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
files.forEach((file) => {
|
return new Collection(this, key);
|
||||||
let fileNoExtension = file.replace(/\.[^/.]+$/, "");
|
}
|
||||||
console.log(`[Payload] Mounting ${file}...`);
|
|
||||||
app.get(`/payload/${fileNoExtension}`, function (req, res) {
|
|
||||||
res.render(fileNoExtension,
|
|
||||||
{
|
|
||||||
title: `Payload ${fileNoExtension}`
|
|
||||||
})
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
let mountInternalModel = function (app, directory, modelName) {
|
getCollection(key) {
|
||||||
app.get(`/payload/${modelName}`, function (req, res) {
|
if (!(key in this.collections)) {
|
||||||
const User = require(path.join(directory, modelName));
|
console.log(`${key} does not exist in collections or has not been registered yet`);
|
||||||
res.send(JSON.stringify(new User("John Doe", 22, "john@doe.com")));
|
return;
|
||||||
});
|
}
|
||||||
};
|
|
||||||
|
return this.collections[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = Payload;
|
module.exports = Payload;
|
||||||
Reference in New Issue
Block a user