@projectinvicta/nails 2.0.15 → 3.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/README.md +70 -84
- package/bin/test/test_init.sh +33 -0
- package/index.ts +11 -0
- package/lib/Controller.ts +207 -0
- package/lib/Nails.ts +210 -0
- package/lib/Router.ts +180 -0
- package/lib/{application.js → application.ts} +8 -3
- package/lib/config.ts +74 -0
- package/package.json +14 -11
- package/spec/controller.spec.js +5 -51
- package/spec/nails.spec.js +1 -0
- package/spec/router.spec.js +5 -5
- package/spec/services/integration/config/db.ts +7 -0
- package/spec/services/integration/config/service.js +8 -8
- package/spec/services/integration/server/controllers/classbased_controller.js +2 -2
- package/spec/services/integration/server/controllers/default_json_controller.js +19 -7
- package/spec/services/integration/server/controllers/error_controller.js +2 -2
- package/spec/services/integration/server/controllers/home_controller.js +6 -28
- package/spec/services/integration/server/controllers/json_controller.js +2 -2
- package/spec/services/integration/server/controllers/manualrenderasync_controller.js +2 -2
- package/spec/services/integration/server/controllers/mjs_controller.mjs +2 -6
- package/spec/services/integration/server/controllers/modeltest_controller.js +6 -9
- package/spec/services/integration/server/controllers/websocket_controller.js +1 -1
- package/spec/services/integration/server/models/dog.js +7 -5
- package/spec/services/integration/server/models/owner.js +13 -0
- package/spec/services/integration/server.js +3 -4
- package/spec/services.integration.spec.js +45 -17
- package/templates/default/config/db.ts +13 -0
- package/{spec/services/integration_sequelize/config/mimes.js → templates/default/config/mimes.ts} +42 -61
- package/templates/default/config/routes.ts +22 -0
- package/templates/{config/service.js → default/config/service.ts} +2 -2
- package/templates/default/package.json +8 -2
- package/templates/default/public/README.xml +68 -85
- package/templates/default/server/controllers/home_controller.js +2 -2
- package/templates/{server/controllers/home_controller.js → default/server/controllers/users_controller.ts} +29 -34
- package/templates/default/server/models/Dog.ts +8 -0
- package/templates/default/server/models/User.ts +14 -0
- package/templates/default/spec/User.test.js +7 -5
- package/templates/default/spec/home_controller.test.js +3 -3
- package/index.js +0 -6
- package/lib/collection.js +0 -6
- package/lib/controller.js +0 -182
- package/lib/database_connector.js +0 -12
- package/lib/firebase_connector.js +0 -94
- package/lib/model_v2.js +0 -24
- package/lib/mongoose_connector.js +0 -49
- package/lib/mongoose_mem_connector.js +0 -21
- package/lib/nails.js +0 -244
- package/lib/router.js +0 -202
- package/lib/sequelize_connector.js +0 -31
- package/lib/server.js +0 -1
- package/spec/model_v2.spec.js +0 -75
- package/spec/mongodb_connector.util.js +0 -30
- package/spec/mongoose_connector.util.js +0 -20
- package/spec/sequelize_connector.spec.js +0 -91
- package/spec/sequelize_connector.util.js +0 -18
- package/spec/services/integration/config/db.js +0 -14
- package/spec/services/integration_sequelize/README.md +0 -5
- package/spec/services/integration_sequelize/client/css/styles.css +0 -0
- package/spec/services/integration_sequelize/client/download.jpg +0 -0
- package/spec/services/integration_sequelize/client/favicon.ico +0 -0
- package/spec/services/integration_sequelize/client/index.html +0 -9
- package/spec/services/integration_sequelize/client/js/client.js +0 -0
- package/spec/services/integration_sequelize/client/js/components/app.jsx +0 -15
- package/spec/services/integration_sequelize/config/db.js +0 -4
- package/spec/services/integration_sequelize/config/routes.js +0 -25
- package/spec/services/integration_sequelize/config/service.js +0 -48
- package/spec/services/integration_sequelize/config/ssl/certificate.pem +0 -22
- package/spec/services/integration_sequelize/config/ssl/csr.csr +0 -17
- package/spec/services/integration_sequelize/config/ssl/key.pem +0 -28
- package/spec/services/integration_sequelize/config/ssl/private_key.pem +0 -30
- package/spec/services/integration_sequelize/config/ssl/public_key.pem +0 -9
- package/spec/services/integration_sequelize/package.json +0 -23
- package/spec/services/integration_sequelize/server/controllers/default_json_controller.js +0 -21
- package/spec/services/integration_sequelize/server/controllers/home_controller.js +0 -39
- package/spec/services/integration_sequelize/server/models/dog.js +0 -7
- package/spec/services/integration_sequelize/server/models/owner.js +0 -10
- package/spec/services/integration_sequelize/server/views/defaultjson/testnojson.ejs +0 -1
- package/spec/services/integration_sequelize/server/views/testreact/testreact.ejs +0 -15
- package/spec/services/integration_sequelize/server.js +0 -9
- package/spec/services.integration_sequelize.spec.js +0 -60
- package/templates/bin/promote.sh +0 -20
- package/templates/bin/rollout.sh +0 -74
- package/templates/bin/server.js +0 -6
- package/templates/bin/start.sh +0 -16
- package/templates/common/readme_fetcher.js +0 -4
- package/templates/config/db.js +0 -19
- package/templates/config/mimes.js +0 -59
- package/templates/config/routes.js +0 -38
- package/templates/config/ssl/certificate.pem +0 -22
- package/templates/config/ssl/csr.csr +0 -17
- package/templates/config/ssl/key.pem +0 -28
- package/templates/config/ssl/private_key.pem +0 -30
- package/templates/config/ssl/public_key.pem +0 -9
- package/templates/default/config/db.js +0 -19
- package/templates/default/config/mimes.js +0 -59
- package/templates/default/config/routes.js +0 -38
- package/templates/default/config/service.js +0 -45
- package/templates/default/server/models/User.js +0 -18
- package/templates/package-lock.json +0 -9048
- package/templates/package.json +0 -43
- package/templates/public/README.xml +0 -332
- package/templates/public/css/styles.css +0 -17
- package/templates/public/download.jpg +0 -0
- package/templates/public/favicon.ico +0 -0
- package/templates/public/index.html +0 -9
- package/templates/public/js/client.js +0 -1
- package/templates/server/models/User.js +0 -18
- package/templates/server/views/home/index.ejs +0 -14
- package/templates/server/views/partials/javascripts.ejs +0 -1
- package/templates/server/views/partials/reactapp.ejs +0 -1
- package/templates/server/views/partials/styles.ejs +0 -3
- package/templates/spec/User.test.js +0 -20
- package/templates/spec/home_controller.test.js +0 -28
- package/templates/spec/setupTests.js +0 -0
- package/templates/src/AboutPage.jsx +0 -9
- package/templates/src/HomePage.jsx +0 -9
- package/templates/src/Layout.jsx +0 -78
- package/templates/src/ReadmePage.jsx +0 -7
- package/templates/src/app.jsx +0 -29
- package/templates/src/components/ReadmeLoader.jsx +0 -13
- package/templates/src/styles/appstyles.css +0 -3
- package/templates/vite.config.ts +0 -42
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import routes from './routes.js';
|
|
5
5
|
import mimes from './mimes.js';
|
|
6
|
-
import db from './db.
|
|
6
|
+
import db from './db.ts';
|
|
7
7
|
|
|
8
8
|
var SERVER_ROOT = import.meta.dirname + '/..';
|
|
9
9
|
var APP_ROOT = SERVER_ROOT + '/server';
|
|
@@ -14,13 +14,13 @@ import fs from 'node:fs';
|
|
|
14
14
|
const PRIVATE_KEY_FILE = fs.readFileSync(`${import.meta.dirname}/ssl/key.pem`);
|
|
15
15
|
const CERTIFICATE_FILE = fs.readFileSync(`${import.meta.dirname}/ssl/certificate.pem`);
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var service = {
|
|
18
18
|
APP_ROOT: APP_ROOT,
|
|
19
19
|
// root directory for delivering static assets
|
|
20
20
|
PUBLIC_ROOT: SERVER_ROOT + '/client',
|
|
21
21
|
CONTROLLERS_ROOT: APP_ROOT + '/controllers',
|
|
22
22
|
VIEWS_ROOT: APP_ROOT + '/views',
|
|
23
|
-
|
|
23
|
+
MODELS_ROOT: APP_ROOT + '/models',
|
|
24
24
|
SERVER_ROOT: SERVER_ROOT,
|
|
25
25
|
|
|
26
26
|
ENABLE_HTTP: true,
|
|
@@ -30,10 +30,10 @@ var config = {
|
|
|
30
30
|
ASYNC: false,
|
|
31
31
|
|
|
32
32
|
// For HTTPS
|
|
33
|
-
ENABLE_HTTPS:
|
|
34
|
-
SSL_PORT: 3334,
|
|
35
|
-
PRIVATE_KEY: PRIVATE_KEY_FILE,
|
|
36
|
-
CERTIFICATE: CERTIFICATE_FILE,
|
|
33
|
+
ENABLE_HTTPS: false,
|
|
34
|
+
// SSL_PORT: 3334,
|
|
35
|
+
// PRIVATE_KEY: PRIVATE_KEY_FILE,
|
|
36
|
+
// CERTIFICATE: CERTIFICATE_FILE,
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
// module.exports.routes = require('./routes.js');
|
|
@@ -41,7 +41,7 @@ var config = {
|
|
|
41
41
|
// module.exports.db = require('./db.js');
|
|
42
42
|
|
|
43
43
|
export default {
|
|
44
|
-
|
|
44
|
+
service,
|
|
45
45
|
routes,
|
|
46
46
|
db,
|
|
47
47
|
mimes,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import nails from "../../../../../index.
|
|
1
|
+
import nails, {Controller} from "../../../../../index.ts";
|
|
2
2
|
// require("../../../../../index.js").Controller;
|
|
3
|
-
export default class ClassbasedController extends
|
|
3
|
+
export default class ClassbasedController extends Controller {
|
|
4
4
|
routes = [
|
|
5
5
|
["get", "./arbi/trary/testLocalRoutes", {action: 'testLocalRoutes', json: true}],
|
|
6
6
|
["get", "arbi00/trary00/testLocalRoutes", {action: 'testLocalRoutes', json: true}],
|
|
@@ -1,20 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Controller } from "../../../../../index.ts";
|
|
2
|
+
import Dog from "../models/dog.js";
|
|
3
|
+
import Owner from "../models/owner.js";
|
|
2
4
|
|
|
3
|
-
export default class DefaultJsonController extends
|
|
5
|
+
export default class DefaultJsonController extends Controller {
|
|
4
6
|
json = true;
|
|
5
7
|
routes = [
|
|
6
8
|
['get', 'arbi/trary/testautoaction'],
|
|
7
|
-
['get', 'arbi/trary/testautojson', {action: 'testautojson'}],
|
|
8
|
-
['get', 'arbi/trary/testjsonoverridden', {action: 'testnojson', json: false}],
|
|
9
|
+
['get', 'arbi/trary/testautojson', { action: 'testautojson' }],
|
|
10
|
+
['get', 'arbi/trary/testjsonoverridden', { action: 'testnojson', json: false }],
|
|
11
|
+
['get', '/listowners'],
|
|
12
|
+
['get', '/listowneddogs'],
|
|
9
13
|
];
|
|
10
14
|
|
|
11
15
|
testautoaction(params, request, response) {
|
|
12
|
-
return {json_testautoaction: true};
|
|
16
|
+
return { json_testautoaction: true };
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
testautojson(params, request, response) {
|
|
16
|
-
return {json_testautojson: true};
|
|
20
|
+
return { json_testautojson: true };
|
|
17
21
|
}
|
|
18
22
|
|
|
19
|
-
testnojson(params, request, response) {}
|
|
23
|
+
testnojson(params, request, response) { }
|
|
24
|
+
|
|
25
|
+
async listowners(params, request, response) {
|
|
26
|
+
return await Owner.findAll();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async listowneddogs(params, request, response) {
|
|
30
|
+
return await Dog.findAll();
|
|
31
|
+
}
|
|
20
32
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import nails from "../../../../../index.
|
|
1
|
+
import nails, {Controller} from "../../../../../index.ts";
|
|
2
2
|
|
|
3
|
-
export default class ErrorController extends
|
|
3
|
+
export default class ErrorController extends Controller {
|
|
4
4
|
// DO NOT OVERRIDE CONSTRUCTOR
|
|
5
5
|
index(params, request, response) {
|
|
6
6
|
response.json({
|
|
@@ -1,39 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { Controller } from "../../../../../index.ts";
|
|
2
|
+
|
|
3
|
+
export default class HomeController extends Controller {
|
|
4
|
+
index(params, request, response) {
|
|
3
5
|
console.log("HOME::INDEX");
|
|
4
6
|
response.json({
|
|
5
7
|
home_index: true
|
|
6
8
|
});
|
|
7
9
|
};
|
|
8
|
-
|
|
10
|
+
testaction(params, request, response) {
|
|
9
11
|
response.json({
|
|
10
12
|
home_testaction: true
|
|
11
13
|
});
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
/*
|
|
16
|
-
this.public_index = function(params, request, response) {
|
|
17
|
-
response.public({path: 'index.html'});
|
|
18
|
-
};
|
|
19
|
-
this.json = function(params, request, response) {
|
|
20
|
-
response.json({test: 'json'});
|
|
21
|
-
};
|
|
22
|
-
// By setting a method to asynchronous, Nails will wait for an
|
|
23
|
-
// explicit response to the client. Otherwise, it will attempt
|
|
24
|
-
// to respond with a view immediately after the action terminates.
|
|
25
|
-
this.json.async = true;
|
|
26
|
-
|
|
27
|
-
this.test_model = function(params, request, response) {
|
|
28
|
-
var u = new User();
|
|
29
|
-
u.set('created_at', (new Date()).getTime());
|
|
30
|
-
u.save();
|
|
31
|
-
response.json({new_user_id: u.id.toString()});
|
|
32
|
-
};
|
|
33
|
-
this.test_id_template = function(params, request, response) {
|
|
34
|
-
var varz = {};
|
|
35
|
-
varz.id = params.id || "no id set";
|
|
36
|
-
response.render('test_id', varz);
|
|
15
|
+
test_ejs() {
|
|
37
16
|
};
|
|
38
|
-
*/
|
|
39
17
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {Controller} from "../../../../../index.ts";
|
|
2
2
|
|
|
3
|
-
export default class JsonController extends
|
|
3
|
+
export default class JsonController extends Controller {
|
|
4
4
|
testparams(params, request, response) {
|
|
5
5
|
// should just render the params as JSON
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class ManualRenderAsyncController extends
|
|
1
|
+
import {Controller} from "../../../../../index.ts";
|
|
2
|
+
export default class ManualRenderAsyncController extends Controller {
|
|
3
3
|
testmanualrenderasync(params, request, response) {
|
|
4
4
|
return new Promise((resolve, reject) => {
|
|
5
5
|
response.json({json_testmanualrenderasync: true});
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require("../../../../../index.js").Controller;
|
|
4
|
-
*/
|
|
5
|
-
import nails from "../../../../../index.js";
|
|
6
|
-
export default class MjsController extends nails.Controller {
|
|
1
|
+
import {Controller} from "../../../../../index.ts";
|
|
2
|
+
export default class MjsController extends Controller {
|
|
7
3
|
// DO NOT OVERRIDE CONSTRUCTOR
|
|
8
4
|
index(params, request, response) {
|
|
9
5
|
response.json({
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import nails from "../../../../../index.
|
|
1
|
+
import nails from "../../../../../index.ts";
|
|
2
2
|
import Dog from "../models/dog.js";
|
|
3
3
|
|
|
4
4
|
export default class ModeltestController extends nails.Controller {
|
|
5
5
|
async createdog(params, request, response) {
|
|
6
|
-
let dog =
|
|
7
|
-
|
|
8
|
-
return dog.
|
|
6
|
+
let dog = await Dog.create({good: true, name: params.name});
|
|
7
|
+
console.log("CREATED DOG ID:", dog.id);
|
|
8
|
+
return dog.id.toString();
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
async getdogbyid(params, request, response) {
|
|
12
|
-
|
|
13
|
-
return
|
|
14
|
-
name: dog.name,
|
|
15
|
-
good: dog.good
|
|
16
|
-
};
|
|
12
|
+
console.error("DOG ID IS:", params.id);
|
|
13
|
+
return await Dog.findByPk(params.id);
|
|
17
14
|
}
|
|
18
15
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {Model, DataTypes} from '../../../../../index.ts';
|
|
2
|
+
|
|
3
|
+
export const schema = {
|
|
4
|
+
good: DataTypes.BOOLEAN,
|
|
5
|
+
name: DataTypes.STRING,
|
|
5
6
|
};
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
export default class Dog extends Model {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {Model} from '../../../../../index.ts';
|
|
2
|
+
import { DataTypes } from 'sequelize';
|
|
3
|
+
import Dog from './dog.js';
|
|
4
|
+
|
|
5
|
+
export const schema = {
|
|
6
|
+
name: DataTypes.STRING,
|
|
7
|
+
};
|
|
8
|
+
export default class Owner extends Model {};
|
|
9
|
+
|
|
10
|
+
export async function defer() {
|
|
11
|
+
Owner.hasMany(Dog);
|
|
12
|
+
await Dog.sync({alter: {drop: false}});
|
|
13
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import nails from '../../../index.js';
|
|
1
|
+
import Nails from '../../../index.ts';
|
|
3
2
|
import service_config from './config/service.js';
|
|
4
3
|
|
|
5
4
|
// See self-documented config files
|
|
6
5
|
// var service_config = require('./config/service.js');
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const nails = new Nails(service_config);
|
|
7
|
+
await nails.startServer();
|
|
9
8
|
export default nails; // export nails for testing
|
|
@@ -7,6 +7,7 @@ import { assert } from 'chai';
|
|
|
7
7
|
import WebSocket from 'ws';
|
|
8
8
|
// const WebSocket = require('ws');
|
|
9
9
|
|
|
10
|
+
let nails;
|
|
10
11
|
var express_app;
|
|
11
12
|
// const {MongoMemoryServer} = require('mongodb-memory-server');
|
|
12
13
|
let mongod = null;
|
|
@@ -19,7 +20,7 @@ describe("Integration: Sequelize", function () {
|
|
|
19
20
|
before(async function () {
|
|
20
21
|
// this.timeout(30000);
|
|
21
22
|
try {
|
|
22
|
-
|
|
23
|
+
nails = (await import('./services/integration/server.js')).default;
|
|
23
24
|
} catch (e) {
|
|
24
25
|
console.log("could not import server");
|
|
25
26
|
console.log(e);
|
|
@@ -27,6 +28,28 @@ describe("Integration: Sequelize", function () {
|
|
|
27
28
|
console.log("got here");
|
|
28
29
|
express_app = nails.application;
|
|
29
30
|
});
|
|
31
|
+
describe("/listowners", function () {
|
|
32
|
+
it('should return an empty array if no owners', function (done) {
|
|
33
|
+
request.execute(express_app)
|
|
34
|
+
.get('/listowners')
|
|
35
|
+
.end((err, res) => {
|
|
36
|
+
res.should.have.status(200);
|
|
37
|
+
assert(JSON.parse(res.text).length == 0);
|
|
38
|
+
done();
|
|
39
|
+
});
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
describe("/listowneddogs", function () {
|
|
43
|
+
it('should return an empty array if no owned dogs', function (done) {
|
|
44
|
+
request.execute(express_app)
|
|
45
|
+
.get('/listowneddogs')
|
|
46
|
+
.end((err, res) => {
|
|
47
|
+
res.should.have.status(200);
|
|
48
|
+
assert(JSON.parse(res.text).length == 0);
|
|
49
|
+
done();
|
|
50
|
+
});
|
|
51
|
+
})
|
|
52
|
+
})
|
|
30
53
|
describe("GET /", function () {
|
|
31
54
|
it('should return the expected JSON from index', function (done) {
|
|
32
55
|
request.execute(express_app)
|
|
@@ -79,7 +102,7 @@ describe("Integration: Sequelize", function () {
|
|
|
79
102
|
});
|
|
80
103
|
});
|
|
81
104
|
describe("Get /defaultjson/arbi/trary", function () {
|
|
82
|
-
it("Should default to json if not present in route options", function(done) {
|
|
105
|
+
it("Should default to json if not present in route options", function (done) {
|
|
83
106
|
request.execute(express_app)
|
|
84
107
|
.get('/defaultjson/arbi/trary/testautojson')
|
|
85
108
|
.end((err, res) => {
|
|
@@ -88,7 +111,7 @@ describe("Integration: Sequelize", function () {
|
|
|
88
111
|
done();
|
|
89
112
|
});
|
|
90
113
|
});
|
|
91
|
-
it("Should autoassign the action if not present in route options", function(done) {
|
|
114
|
+
it("Should autoassign the action if not present in route options", function (done) {
|
|
92
115
|
request.execute(express_app)
|
|
93
116
|
.get('/defaultjson/arbi/trary/testautoaction')
|
|
94
117
|
.end((err, res) => {
|
|
@@ -97,7 +120,7 @@ describe("Integration: Sequelize", function () {
|
|
|
97
120
|
done();
|
|
98
121
|
});
|
|
99
122
|
});
|
|
100
|
-
it("Should not render json if route options explicitly say not to", function(done) {
|
|
123
|
+
it("Should not render json if route options explicitly say not to", function (done) {
|
|
101
124
|
request.execute(express_app)
|
|
102
125
|
.get('/defaultjson/arbi/trary/testjsonoverridden')
|
|
103
126
|
.end((err, res) => {
|
|
@@ -205,17 +228,18 @@ describe("Integration: Sequelize", function () {
|
|
|
205
228
|
});
|
|
206
229
|
|
|
207
230
|
describe("GET /json/:action", function () {
|
|
231
|
+
// TODO: Do we really want this behavior?
|
|
208
232
|
it('should render params if nothing is returned by the action',
|
|
209
|
-
function (done) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
233
|
+
// function (done) {
|
|
234
|
+
// request.execute(express_app)
|
|
235
|
+
// // Route to index action.
|
|
236
|
+
// .get('/json/testparams?testkey=testvalue')
|
|
237
|
+
// .end((err, res) => {
|
|
238
|
+
// res.should.have.status(200);
|
|
239
|
+
// assert(JSON.parse(res.text).testkey == "testvalue");
|
|
240
|
+
// done();
|
|
241
|
+
// });
|
|
242
|
+
// }
|
|
219
243
|
);
|
|
220
244
|
it('should render the returned object as json', function (done) {
|
|
221
245
|
request.execute(express_app)
|
|
@@ -281,12 +305,16 @@ describe("Integration: Sequelize", function () {
|
|
|
281
305
|
.get(`/modeltest/createdog?name=${dogName}`)
|
|
282
306
|
.end((err, res) => {
|
|
283
307
|
res.should.have.status(200);
|
|
284
|
-
dogId = res.text.replaceAll(
|
|
308
|
+
dogId = res.text.replaceAll("\"", "");
|
|
285
309
|
request.execute(express_app)
|
|
286
310
|
.get(`/modeltest/getdogbyid?id=${dogId}`)
|
|
287
311
|
.end((err, res) => {
|
|
288
|
-
|
|
289
|
-
|
|
312
|
+
const dogOnServer = JSON.parse(res.text);
|
|
313
|
+
assert.equal(dogOnServer.name, dogName);
|
|
314
|
+
assert.isTrue(dogOnServer.good);
|
|
315
|
+
assert.isDefined(dogOnServer.id);
|
|
316
|
+
assert.isDefined(dogOnServer.createdAt);
|
|
317
|
+
assert.isDefined(dogOnServer.updatedAt);
|
|
290
318
|
done();
|
|
291
319
|
});
|
|
292
320
|
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DbConfig } from '@projectinvicta/nails';
|
|
2
|
+
|
|
3
|
+
let DB_ADDRESS = process.env.NAILS_SQLITE_DB_FILE;
|
|
4
|
+
if (!DB_ADDRESS) DB_ADDRESS = 'sqlite://' + import.meta.dirname + '/development.db';
|
|
5
|
+
|
|
6
|
+
const db: DbConfig = {
|
|
7
|
+
/** Sequelize Connector */
|
|
8
|
+
address: process.env.NAILS_RELEASE_STAGE == 'test'
|
|
9
|
+
? 'sqlite::memory:'
|
|
10
|
+
: DB_ADDRESS,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default db;
|
package/{spec/services/integration_sequelize/config/mimes.js → templates/default/config/mimes.ts}
RENAMED
|
@@ -1,61 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
png: {
|
|
44
|
-
type: 'image',
|
|
45
|
-
contentType: 'image/png'
|
|
46
|
-
},
|
|
47
|
-
pdf: {
|
|
48
|
-
type: 'document',
|
|
49
|
-
contentType: 'application/pdf'
|
|
50
|
-
},
|
|
51
|
-
xml: {
|
|
52
|
-
type: 'data',
|
|
53
|
-
contentType: 'text/xml'
|
|
54
|
-
},
|
|
55
|
-
json: {
|
|
56
|
-
type: 'data',
|
|
57
|
-
contentType: 'application/json'
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export default mimes;
|
|
1
|
+
import { type MimesConfig } from '@projectinvicta/nails';
|
|
2
|
+
|
|
3
|
+
const mimes: MimesConfig = {
|
|
4
|
+
html: {
|
|
5
|
+
type: 'page',
|
|
6
|
+
contentType: 'text/html'
|
|
7
|
+
},
|
|
8
|
+
js: {
|
|
9
|
+
type: 'script', // the type of the script,
|
|
10
|
+
contentType: 'application/javascript' // Header info
|
|
11
|
+
},
|
|
12
|
+
css: {
|
|
13
|
+
type: 'style',
|
|
14
|
+
contentType: 'text/css'
|
|
15
|
+
},
|
|
16
|
+
ico: {
|
|
17
|
+
type: 'image',
|
|
18
|
+
contentType: 'image/x-icon'
|
|
19
|
+
},
|
|
20
|
+
jpg: {
|
|
21
|
+
type: 'image',
|
|
22
|
+
contentType: 'image/jpeg'
|
|
23
|
+
},
|
|
24
|
+
png: {
|
|
25
|
+
type: 'image',
|
|
26
|
+
contentType: 'image/png'
|
|
27
|
+
},
|
|
28
|
+
pdf: {
|
|
29
|
+
type: 'document',
|
|
30
|
+
contentType: 'application/pdf'
|
|
31
|
+
},
|
|
32
|
+
xml: {
|
|
33
|
+
type: 'data',
|
|
34
|
+
contentType: 'text/xml'
|
|
35
|
+
},
|
|
36
|
+
json: {
|
|
37
|
+
type: 'data',
|
|
38
|
+
contentType: 'application/json'
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default mimes;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type RoutesConfig } from '@projectinvicta/nails';
|
|
2
|
+
|
|
3
|
+
const routes: RoutesConfig = [
|
|
4
|
+
// Routes the root request to index.html, as well as all other requests to static
|
|
5
|
+
['get', "/", {controller: 'home'}],
|
|
6
|
+
// Routes all requests starting with /public as static requests to the public folder.
|
|
7
|
+
['get', '/public', {public: true}],
|
|
8
|
+
|
|
9
|
+
// A test route which routes the first part of pathname to controller and the second to the action
|
|
10
|
+
// ['get', /^\/(\w+)\/(\w+)$/i, {0: 'controller', 1: 'action'}],
|
|
11
|
+
|
|
12
|
+
// Maps the first two parts of the path to controller and action, and the third to the id parameter
|
|
13
|
+
// ['get', "/:controller/:action/:id"],
|
|
14
|
+
|
|
15
|
+
// For all other GET requests, render HomeController#index
|
|
16
|
+
['get', '/:catchall', {controller: 'home'}],
|
|
17
|
+
|
|
18
|
+
// Defines a WebSocket handler
|
|
19
|
+
// ['ws', "/:controller/:action/:id"]
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export default routes;
|
|
@@ -13,7 +13,7 @@ import fs from 'node:fs';
|
|
|
13
13
|
const PRIVATE_KEY_FILE = fs.readFileSync(`${import.meta.dirname}/ssl/key.pem`);
|
|
14
14
|
const CERTIFICATE_FILE = fs.readFileSync(`${import.meta.dirname}/ssl/certificate.pem`);
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var service = {
|
|
17
17
|
APP_ROOT: APP_ROOT,
|
|
18
18
|
// root directory for delivering static assets
|
|
19
19
|
PUBLIC_ROOT: SERVER_ROOT + '/public',
|
|
@@ -38,7 +38,7 @@ var config = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export default {
|
|
41
|
-
|
|
41
|
+
service,
|
|
42
42
|
routes,
|
|
43
43
|
mimes,
|
|
44
44
|
db
|
|
@@ -22,17 +22,23 @@
|
|
|
22
22
|
"version": "latest"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
+
"imports": {
|
|
26
|
+
"#models/*": "./server/models/*",
|
|
27
|
+
"#common/*": "./common/*",
|
|
28
|
+
"#config/*": "./config/*"
|
|
29
|
+
},
|
|
25
30
|
"dependencies": {
|
|
31
|
+
"@projectinvicta/nails": "*",
|
|
26
32
|
"@mui/icons-material": "^7.3.1",
|
|
27
33
|
"@mui/material": "^7.3.1",
|
|
28
34
|
"@vitejs/plugin-legacy": "^6.1.1",
|
|
29
35
|
"@vitejs/plugin-react": "^4.7.0",
|
|
30
|
-
"nails-boilerplate": ">=1.1.0",
|
|
31
36
|
"react": "^19.1.0",
|
|
32
37
|
"react-dom": "^19.1.0",
|
|
33
38
|
"react-router-dom": "^7.7.0",
|
|
34
39
|
"sequelize": "^6.37.7",
|
|
35
|
-
"vite": "^6.3.5"
|
|
40
|
+
"vite": "^6.3.5",
|
|
41
|
+
"chai-http": "*"
|
|
36
42
|
},
|
|
37
43
|
"devDependencies": {
|
|
38
44
|
"@emotion/react": "^11.14.0",
|