diff --git a/package.json b/package.json
index 5d378c33..1b3db460 100644
--- a/package.json
+++ b/package.json
@@ -43,10 +43,10 @@
],
"dependencies": {
"angular": "1.7.8",
+ "angular-animate": "1.7.8",
"angular-elastic": "2.5.1",
"angular-messages": "1.7.8",
"angular-sanitize": "1.7.8",
- "angular-animate": "1.7.8",
"angular-ui-bootstrap": "1.3.2 || 2.5.6",
"angular-ui-grid": "^4.8.1",
"async": "3.1.0",
@@ -55,19 +55,21 @@
"node.extend": "2.0.2"
},
"peerDependencies": {
- "express": "^4.16.4",
- "mongoose": "^5.4.10"
+ "@typegoose/typegoose": "^6.0",
+ "express": "^4.17",
+ "mongoose": "^5.7",
+ "body-parser": "^1.19"
},
"devDependencies": {
"@types/angular": "1.6.56",
"@types/lodash": "4.14.141",
- "@types/mongoose": "^5.5.18",
- "@types/node": "=10.14.1",
+ "@types/mongoose": "^5.5",
+ "@types/node": "^12.11",
"angular-mocks": "1.7.8",
- "body-parser": "1.19.0",
+ "body-parser": "^1.19",
"bower": "^1.8.8",
"del": "5.1.0",
- "express": "4.17.1",
+ "express": "^4.17",
"gulp": "^4.0.2",
"gulp-angular-templatecache": "3.0.0",
"gulp-clean-css": "4.2.0",
@@ -88,8 +90,8 @@
"karma-junit-reporter": "1.2.0",
"karma-ng-html2js-preprocessor": "1.0.0",
"matchdep": "2.0.0",
+ "mongoose": "^5.7",
"mocha": "^6.2.1",
- "mongoose": "5.7.1",
"prettier": "1.18.2",
"pump": "3.0.0",
"typescript": "3.6.3"
diff --git a/website/app/index.html b/website/app/index.html
index c50b4e30..f9ed24b5 100644
--- a/website/app/index.html
+++ b/website/app/index.html
@@ -174,6 +174,7 @@
+
diff --git a/website/app/interfaces/n_type.js b/website/app/interfaces/n_type.js
new file mode 100644
index 00000000..9d080097
--- /dev/null
+++ b/website/app/interfaces/n_type.js
@@ -0,0 +1,8 @@
+export var EyeColour;
+(function (EyeColour) {
+ EyeColour["BLUE"] = "Blue";
+ EyeColour["BROWN"] = "Brown";
+ EyeColour["GREEN"] = "Green";
+ EyeColour["HAZEL"] = "Hazel";
+})(EyeColour || (EyeColour = {}));
+//# sourceMappingURL=n_type.js.map
\ No newline at end of file
diff --git a/website/app/interfaces/n_type.ts b/website/app/interfaces/n_type.ts
new file mode 100644
index 00000000..3ea6432a
--- /dev/null
+++ b/website/app/interfaces/n_type.ts
@@ -0,0 +1,17 @@
+export enum EyeColour {
+ BLUE = 'Blue',
+ BROWN = 'Brown',
+ GREEN = 'Green',
+ HAZEL = 'Hazel'
+}
+
+export interface INType {
+ surname: string;
+ forename?: string;
+ phone: string;
+ nationality: string;
+ weight: number,
+ eyeColour: EyeColour;
+ dateOfBirth: Date,
+ accepted: boolean;
+}
diff --git a/website/app/models/a_unadorned_schema.js b/website/app/models/a_unadorned_schema.js
index 15992fef..22f0125f 100644
--- a/website/app/models/a_unadorned_schema.js
+++ b/website/app/models/a_unadorned_schema.js
@@ -1,8 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var fngAudit = require("fng-audit");
-var aSchemaDef = {
+const mongoose_1 = require("mongoose");
+const fngAudit = require("fng-audit");
+const aSchemaDef = {
surname: { type: String, required: true, index: true },
forename: { type: String, index: true },
phone: { type: String, required: true, match: /^\d{10,12}$/ },
@@ -12,8 +12,8 @@ var aSchemaDef = {
dateOfBirth: Date,
accepted: { type: Boolean, default: true }
};
-var ASchema = new mongoose_1.Schema(aSchemaDef);
-var A;
+const ASchema = new mongoose_1.Schema(aSchemaDef);
+let A;
try {
A = mongoose_1.model('a_unadorned_schema');
}
diff --git a/website/app/models/b_enhanced_schema.js b/website/app/models/b_enhanced_schema.js
index 90e7fdcc..5c35bfe2 100644
--- a/website/app/models/b_enhanced_schema.js
+++ b/website/app/models/b_enhanced_schema.js
@@ -1,8 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var jqUploads = require('fng-jq-upload');
-var bSchemaDef = {
+const mongoose_1 = require("mongoose");
+const jqUploads = require('fng-jq-upload');
+const bSchemaDef = {
photo: { type: [new mongoose_1.Schema(jqUploads.FileSchema)], form: { directive: 'fng-jq-upload-form', fngJqUploadForm: { autoUpload: true, sizeLimit: 256 * 1024, single: true, width: 100, height: 100 } } },
surname: { type: String, required: true, index: true, list: {} },
forename: { type: String, list: true, index: true },
@@ -86,7 +86,7 @@ var bSchemaDef = {
// This can be overidden by adding 'form:{password:false}' - also this can be true if the field is NOT called password
password: { type: String }
};
-var BSchema = new mongoose_1.Schema(bSchemaDef);
+const BSchema = new mongoose_1.Schema(bSchemaDef);
BSchema.pre('save', function (next) {
// Check for rude words (well, the word "rude", actually) to show an error
if (this['freeText'] && this['freeText'].indexOf('rude') !== -1) {
@@ -94,7 +94,7 @@ BSchema.pre('save', function (next) {
}
return next();
});
-var B;
+let B;
try {
B = mongoose_1.model('b_enhanced_schema');
}
@@ -103,7 +103,7 @@ catch (e) {
}
// Alternative form schemas can be defined as shown below
BSchema.statics.form = function (layout) {
- var formSchema = '';
+ let formSchema = '';
switch (layout) {
case 'justnameandpostcode':
// the object overrides the form object in the schema
@@ -131,7 +131,7 @@ BSchema.statics.prepareSave = function (doc, req, cb) {
cb(null);
};
BSchema.statics.report = function (report) {
- var reportSchema = '';
+ let reportSchema = '';
switch (report) {
case 'allVisible':
reportSchema = {
diff --git a/website/app/models/c_subdoc_example.js b/website/app/models/c_subdoc_example.js
index 124350e7..6cad9196 100644
--- a/website/app/models/c_subdoc_example.js
+++ b/website/app/models/c_subdoc_example.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var cSchemaDef = {
+const mongoose_1 = require("mongoose");
+const cSchemaDef = {
surname: { type: String, list: {} },
forename: { type: String, list: true },
weight: { type: Number, form: { label: 'Weight (lbs)' } },
@@ -15,8 +15,8 @@ var cSchemaDef = {
interviewHash: { type: String, secure: true, forms: { hidden: true } }
}
};
-var CSchema = new mongoose_1.Schema(cSchemaDef);
-var C;
+const CSchema = new mongoose_1.Schema(cSchemaDef);
+let C;
try {
C = mongoose_1.model('c_subdoc_example');
}
diff --git a/website/app/models/d_array_example.js b/website/app/models/d_array_example.js
index 6371df0b..0d25ef22 100644
--- a/website/app/models/d_array_example.js
+++ b/website/app/models/d_array_example.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var dSchemaDef = { surname: { type: String, list: {} },
+const mongoose_1 = require("mongoose");
+const dSchemaDef = { surname: { type: String, list: {} },
forename: { type: String, list: true },
weight: { type: Number, form: { label: 'Weight (lbs)' } },
dateOfBirth: Date,
@@ -16,8 +16,8 @@ var dSchemaDef = { surname: { type: String, list: {} },
yetMoreOptions2: [{ type: String, enum: ['First', 'Second', 'Third'], form: { directive: 'fng-ui-select' } }],
evenMoreOptions2: [{ type: String, enum: ['First', 'Second', 'Third'], form: { directive: 'fng-ui-select', fngUiSelect: { forceMultiple: true } } }]
};
-var DSchema = new mongoose_1.Schema(dSchemaDef);
-var D;
+const DSchema = new mongoose_1.Schema(dSchemaDef);
+let D;
try {
D = mongoose_1.model('d_array_example');
}
diff --git a/website/app/models/e_referencing_another_collection.js b/website/app/models/e_referencing_another_collection.js
index aa9a9f7a..604806fe 100644
--- a/website/app/models/e_referencing_another_collection.js
+++ b/website/app/models/e_referencing_another_collection.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var eSchemaDef = {
+const mongoose_1 = require("mongoose");
+const eSchemaDef = {
surname: { type: String, list: {} },
forename: { type: String, list: true },
weight: { type: Number, form: { label: 'Weight (lbs)' } },
@@ -16,8 +16,8 @@ var eSchemaDef = {
team2: { type: [mongoose_1.Schema.Types.ObjectId], ref: 'f_nested_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: true } } },
accepted: Boolean
};
-var ESchema = new mongoose_1.Schema(eSchemaDef);
-var E;
+const ESchema = new mongoose_1.Schema(eSchemaDef);
+let E;
try {
E = mongoose_1.model('e_referencing_another_collection');
}
@@ -25,7 +25,7 @@ catch (e) {
E = mongoose_1.model('e_referencing_another_collection', ESchema);
}
ESchema.statics.report = function (report) {
- var reportSchema = '';
+ let reportSchema = '';
switch (report) {
case 'class-sizes':
reportSchema = {
@@ -46,7 +46,7 @@ ESchema.statics.report = function (report) {
return reportSchema;
};
ESchema.statics.form = function (layout) {
- var formSchema = '';
+ let formSchema = '';
switch (layout) {
case 'links':
formSchema = {
diff --git a/website/app/models/f_nested_schema.js b/website/app/models/f_nested_schema.js
index abbe9125..c684c452 100644
--- a/website/app/models/f_nested_schema.js
+++ b/website/app/models/f_nested_schema.js
@@ -1,8 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var jqUploads = require('fng-jq-upload');
-var mongoose_1 = require("mongoose");
-var ExamsSchemaDef = {
+const jqUploads = require('fng-jq-upload');
+const mongoose_1 = require("mongoose");
+const ExamsSchemaDef = {
subject: { type: String, required: true },
examDate: { type: Date, required: true, default: new Date(), form: { add: " ng-model-options=\"{timezone:'UTC'}\"" } },
score: { type: Number, default: 60 },
@@ -11,14 +11,14 @@ var ExamsSchemaDef = {
grader: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: true }, label: 'Marked By' } },
retakeDate: { type: Date, form: { showWhen: { lhs: '$exams.result', comp: 'eq', rhs: 'fail' } } }
};
-var ExamsSchema = new mongoose_1.Schema(ExamsSchemaDef, { id: false });
-var fSchemaDef = {
+const ExamsSchema = new mongoose_1.Schema(ExamsSchemaDef, { id: false });
+const fSchemaDef = {
surname: { type: String, index: true, required: true, list: {} },
forename: { type: String, index: true, list: true },
exams: { type: [ExamsSchema], form: { sortable: true, noRemove: 'record.exams[$index].result' } }
};
-var FSchema = new mongoose_1.Schema(fSchemaDef);
-var F;
+const FSchema = new mongoose_1.Schema(fSchemaDef);
+let F;
try {
F = mongoose_1.model('f_nested_schema');
}
@@ -28,7 +28,7 @@ catch (e) {
F.prototype.searchResultFormat = function () {
// You can set up a function to modify search result display and the
// ordering within a collection
- var weighting;
+ let weighting;
weighting = this.forename === 'John' ? 2 : 3;
return {
resource: 'f_nested_schema',
@@ -39,7 +39,7 @@ F.prototype.searchResultFormat = function () {
};
};
FSchema.statics.form = function (layout) {
- var formSchema = '';
+ let formSchema = '';
switch (layout) {
case 'English':
// Just the English exam from the array
diff --git a/website/app/models/g_conditional_field.js b/website/app/models/g_conditional_field.js
index 9370325b..e9be1c65 100644
--- a/website/app/models/g_conditional_field.js
+++ b/website/app/models/g_conditional_field.js
@@ -1,15 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var ExamSchemaDef = {
+const mongoose_1 = require("mongoose");
+const ExamSchemaDef = {
subject: String,
examDate: { type: Date, form: { size: 'small' } },
result: { type: String, enum: ['distinction', 'merit', 'pass', 'fail'] },
grader: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: true }, label: 'Marked By' } },
retakeDate: { type: Date, form: { showWhen: { lhs: '$exams.result', comp: 'eq', rhs: 'fail' } } }
};
-var ExamsSchema = new mongoose_1.Schema(ExamSchemaDef, { _id: false });
-var GSchemaDef = {
+const ExamsSchema = new mongoose_1.Schema(ExamSchemaDef, { _id: false });
+const GSchemaDef = {
surname: { type: String, list: {}, index: true },
forename: { type: String, list: true, index: true },
sex: { type: String, enum: ['F', 'M'] },
@@ -20,8 +20,8 @@ var GSchemaDef = {
loggedInBribeBook: { type: Boolean, form: { showWhen: 'record.bribeAmount >= 10 && record.bribeAmount <= 200' } },
exams: { type: [ExamsSchema], form: { formStyle: 'inline' } }
};
-var GSchema = new mongoose_1.Schema(GSchemaDef);
-var G;
+const GSchema = new mongoose_1.Schema(GSchemaDef);
+let G;
try {
G = mongoose_1.model('g_conditional_field');
}
@@ -29,7 +29,7 @@ catch (e) {
G = mongoose_1.model('g_conditional_field', GSchema);
}
GSchema.statics.report = function (report) {
- var reportSchema = '', fullDescription = { field: '_id', translations: [{ value: 'M', display: 'Male' }, { value: 'F', display: 'Female' }, { 'value': '', 'display': 'Unspecified' }] };
+ let reportSchema = '', fullDescription = { field: '_id', translations: [{ value: 'M', display: 'Male' }, { value: 'F', display: 'Female' }, { 'value': '', 'display': 'Unspecified' }] };
switch (report) {
case 'breakdownbysex':
reportSchema = {
diff --git a/website/app/models/h_deep_nesting.js b/website/app/models/h_deep_nesting.js
index af4f8474..31c4cb3f 100644
--- a/website/app/models/h_deep_nesting.js
+++ b/website/app/models/h_deep_nesting.js
@@ -1,26 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var CourseTeachersSchemaDef = {
+const mongoose_1 = require("mongoose");
+const CourseTeachersSchemaDef = {
teacher: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema' },
room: Number
};
-var CourseTeachersSchema = new mongoose_1.Schema(CourseTeachersSchemaDef);
-var ExamsSchemaDef = {
+const CourseTeachersSchema = new mongoose_1.Schema(CourseTeachersSchemaDef);
+const ExamsSchemaDef = {
subject: { type: String },
examDate: Date,
score: Number,
result: { type: String, enum: ['distinction', 'merit', 'pass', 'fail'] },
grader: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema' }
};
-var ExamsSchema = new mongoose_1.Schema(ExamsSchemaDef);
-var CourseSchemaDef = {
+const ExamsSchema = new mongoose_1.Schema(ExamsSchemaDef);
+const CourseSchemaDef = {
subject: String,
grade: { type: String },
teachers: [CourseTeachersSchema]
};
-var CourseSchema = new mongoose_1.Schema(CourseSchemaDef);
-var HSchemaDef = {
+const CourseSchema = new mongoose_1.Schema(CourseSchemaDef);
+const HSchemaDef = {
surname: { type: String, list: {} },
forename: { type: String, list: true },
address: {
@@ -35,8 +35,8 @@ var HSchemaDef = {
{ type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema' }
]
};
-var HSchema = new mongoose_1.Schema(HSchemaDef);
-var H;
+const HSchema = new mongoose_1.Schema(HSchemaDef);
+let H;
try {
H = mongoose_1.model('h_deep_nesting');
}
diff --git a/website/app/models/i_tabbed_form.js b/website/app/models/i_tabbed_form.js
index 2d7629a0..f2c83ce5 100644
--- a/website/app/models/i_tabbed_form.js
+++ b/website/app/models/i_tabbed_form.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var ISchemaDef = {
+const mongoose_1 = require("mongoose");
+const ISchemaDef = {
surname: { type: String, required: true, list: {}, form: { tab: 'first' } },
forename: { type: String, list: true, form: { tab: 'first' } },
address: {
@@ -17,8 +17,8 @@ var ISchemaDef = {
interviewScore: { type: Number, form: { tab: 'second' }, list: {} },
freeText: { type: String, form: { type: 'textarea', rows: 5, tab: 'second' } }
};
-var ISchema = new mongoose_1.Schema(ISchemaDef);
-var I;
+const ISchema = new mongoose_1.Schema(ISchemaDef);
+let I;
try {
I = mongoose_1.model('i_tabbed_form');
}
diff --git a/website/app/models/j_directive_with_form.js b/website/app/models/j_directive_with_form.js
index b9ed2b08..04053a50 100644
--- a/website/app/models/j_directive_with_form.js
+++ b/website/app/models/j_directive_with_form.js
@@ -1,19 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var FriendSchemaDef = {
+const mongoose_1 = require("mongoose");
+const FriendSchemaDef = {
friend: { type: mongoose_1.Schema.Types.ObjectId, ref: 'a_unadorned_schema' },
type: { type: String, enum: ['best friend', 'partner', 'colleague', 'acquaintance', 'other'] },
comment: { type: String }
};
-var FriendSchema = new mongoose_1.Schema(FriendSchemaDef, { _id: false });
-var JSchemaDef = {
+const FriendSchema = new mongoose_1.Schema(FriendSchemaDef, { _id: false });
+const JSchemaDef = {
surname: { type: String, required: true, list: {} },
forename: { type: String, list: true },
friendList: { type: [FriendSchema], form: { directive: 'friends' } }
};
-var JSchema = new mongoose_1.Schema(JSchemaDef);
-var J;
+const JSchema = new mongoose_1.Schema(JSchemaDef);
+let J;
try {
J = mongoose_1.model('j_directive_with_form');
}
diff --git a/website/app/models/k_referencing_self.js b/website/app/models/k_referencing_self.js
index a4e1ab3b..f2382875 100644
--- a/website/app/models/k_referencing_self.js
+++ b/website/app/models/k_referencing_self.js
@@ -1,17 +1,17 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var shelfRef = { property: 'shelves', value: 'location' };
-var ShelfSchemaDef = {
+const mongoose_1 = require("mongoose");
+const shelfRef = { property: 'shelves', value: 'location' };
+const ShelfSchemaDef = {
location: { type: String, required: true }
};
-var ShelfSchema = new mongoose_1.Schema(ShelfSchemaDef); // Note that this schema needs an _id as it is an internal lookup
-var StockItemSchemaDef = {
+const ShelfSchema = new mongoose_1.Schema(ShelfSchemaDef); // Note that this schema needs an _id as it is an internal lookup
+const StockItemSchemaDef = {
description: { type: String, required: true },
shelf: { type: mongoose_1.Schema.Types.ObjectId, internalRef: shelfRef }
};
-var StockItemSchema = new mongoose_1.Schema(StockItemSchemaDef, { _id: false }); // _id is suppressed on this schema as it is not needed for this example (but would be needed in a real world use case)
-var KSchemaDef = {
+const StockItemSchema = new mongoose_1.Schema(StockItemSchemaDef, { _id: false }); // _id is suppressed on this schema as it is not needed for this example (but would be needed in a real world use case)
+const KSchemaDef = {
warehouse_name: { type: String, required: true, list: {}, index: true },
postcode: { type: String, index: true },
shelves: { type: [ShelfSchema] },
@@ -19,9 +19,9 @@ var KSchemaDef = {
cleanedShelves: { type: [mongoose_1.Schema.Types.ObjectId], internalRef: shelfRef },
favouriteShelf: { type: mongoose_1.Schema.Types.ObjectId, internalRef: shelfRef }
};
-var KSchema = new mongoose_1.Schema(KSchemaDef);
-var K;
-var name = 'k_referencing_self_collection';
+const KSchema = new mongoose_1.Schema(KSchemaDef);
+let K;
+const name = 'k_referencing_self_collection';
try {
K = mongoose_1.model(name);
}
diff --git a/website/app/models/l_referencing_list_on_other_document.js b/website/app/models/l_referencing_list_on_other_document.js
index 63ba3eea..36b3dd17 100644
--- a/website/app/models/l_referencing_list_on_other_document.js
+++ b/website/app/models/l_referencing_list_on_other_document.js
@@ -1,15 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var shelfRef = { type: 'lookupList', collection: '', id: '', property: 'shelves', value: 'location' };
-var LSchemaDef = {
+const mongoose_1 = require("mongoose");
+const shelfRef = { type: 'lookupList', collection: '', id: '', property: 'shelves', value: 'location' };
+const LSchemaDef = {
description: { type: String, required: true, list: {} },
warehouse: { type: mongoose_1.Schema.Types.ObjectId, ref: 'k_referencing_self_collection', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: true } } },
shelf: { type: mongoose_1.Schema.Types.ObjectId, lookupListRef: { collection: 'k_referencing_self_collection', id: '$warehouse', property: 'shelves', value: 'location' } },
};
-var LSchema = new mongoose_1.Schema(LSchemaDef);
-var L;
-var name = 'l_referencing_list_in_other_document';
+const LSchema = new mongoose_1.Schema(LSchemaDef);
+let L;
+const name = 'l_referencing_list_in_other_document';
try {
L = mongoose_1.model(name);
}
diff --git a/website/app/models/m_typegoose_schema.js b/website/app/models/m_typegoose_schema.js
new file mode 100644
index 00000000..9274f70c
--- /dev/null
+++ b/website/app/models/m_typegoose_schema.js
@@ -0,0 +1,70 @@
+"use strict";
+/*
+ This is the typegoose (https://github.com/typegoose/typegoose) equivalent of a_unadorned_schema
+ Would require considerable extension of typegoose to do anything beyond this though
+ */
+var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+};
+var __metadata = (this && this.__metadata) || function (k, v) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const typegoose_1 = require("@typegoose/typegoose");
+var EyeColour;
+(function (EyeColour) {
+ EyeColour["BLUE"] = "Blue";
+ EyeColour["BROWN"] = "Brown";
+ EyeColour["GREEN"] = "Green";
+ EyeColour["HAZEL"] = "Hazel";
+})(EyeColour || (EyeColour = {}));
+let MTypegooseSchema = class MTypegooseSchema {
+};
+__decorate([
+ typegoose_1.prop({ required: true }),
+ __metadata("design:type", String)
+], MTypegooseSchema.prototype, "surname", void 0);
+__decorate([
+ typegoose_1.prop(),
+ __metadata("design:type", String)
+], MTypegooseSchema.prototype, "forename", void 0);
+__decorate([
+ typegoose_1.prop({ required: true, validate: /^\d{10,12}$/ }),
+ __metadata("design:type", String)
+], MTypegooseSchema.prototype, "phone", void 0);
+__decorate([
+ typegoose_1.prop({ default: 'European' }),
+ __metadata("design:type", String)
+], MTypegooseSchema.prototype, "nationality", void 0);
+__decorate([
+ typegoose_1.prop(),
+ __metadata("design:type", Number)
+], MTypegooseSchema.prototype, "weight", void 0);
+__decorate([
+ typegoose_1.prop({ required: true, enum: EyeColour }),
+ __metadata("design:type", String)
+], MTypegooseSchema.prototype, "eyeColour", void 0);
+__decorate([
+ typegoose_1.prop(),
+ __metadata("design:type", Date)
+], MTypegooseSchema.prototype, "dateOfBirth", void 0);
+__decorate([
+ typegoose_1.prop({ default: true }),
+ __metadata("design:type", Boolean)
+], MTypegooseSchema.prototype, "accepted", void 0);
+MTypegooseSchema = __decorate([
+ typegoose_1.index({ surname: 1 }),
+ typegoose_1.index({ forename: 1 })
+], MTypegooseSchema);
+exports.MTypegooseSchema = MTypegooseSchema;
+const TypegooseModel = typegoose_1.getModelForClass(MTypegooseSchema); // TypegooseModel is a regular Mongoose Model with correct types
+// So now we can use type checking, but only on the server
+let test = new MTypegooseSchema();
+test.surname = 'Smith';
+module.exports = {
+ model: TypegooseModel
+};
+//# sourceMappingURL=m_typegoose_schema.js.map
\ No newline at end of file
diff --git a/website/app/models/m_typegoose_schema.ts b/website/app/models/m_typegoose_schema.ts
new file mode 100644
index 00000000..3a9f87a9
--- /dev/null
+++ b/website/app/models/m_typegoose_schema.ts
@@ -0,0 +1,52 @@
+/*
+ This is the typegoose (https://github.com/typegoose/typegoose) equivalent of a_unadorned_schema
+ Would require considerable extension of typegoose to do anything beyond this though
+ */
+
+import { prop, index, getModelForClass } from '@typegoose/typegoose';
+
+enum EyeColour {
+ BLUE = 'Blue',
+ BROWN = 'Brown',
+ GREEN = 'Green',
+ HAZEL = 'Hazel'
+}
+
+@index({ surname: 1 })
+@index({ forename: 1 })
+export class MTypegooseSchema {
+ @prop({required: true})
+ public surname!: string;
+
+ @prop()
+ public forename: string;
+
+ @prop({required: true, validate: /^\d{10,12}$/})
+ public phone!: string;
+
+ @prop({default: 'European'})
+ public nationality: string;
+
+ @prop()
+ public weight: number;
+
+ @prop({required: true, enum: EyeColour})
+ public eyeColour!: string;
+
+ @prop()
+ public dateOfBirth: Date;
+
+ @prop({default: true})
+ public accepted: boolean;
+
+}
+
+const TypegooseModel = getModelForClass(MTypegooseSchema); // TypegooseModel is a regular Mongoose Model with correct types
+
+// So now we can use type checking, but only on the server
+let test = new MTypegooseSchema();
+test.surname = 'Smith';
+
+module.exports = {
+ model: TypegooseModel
+};
diff --git a/website/app/models/n_typescript_schema.js b/website/app/models/n_typescript_schema.js
new file mode 100644
index 00000000..c6243767
--- /dev/null
+++ b/website/app/models/n_typescript_schema.js
@@ -0,0 +1,27 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const mongoose_1 = require("mongoose");
+const fngAudit = require("fng-audit");
+const NSchemaDef = {
+ surname: { type: String, required: true, index: true },
+ forename: { type: String, index: true },
+ phone: { type: String, required: true, match: /^\d{10,12}$/ },
+ nationality: { type: String, default: 'European' },
+ weight: Number,
+ eyeColour: { type: String, required: true, enum: ['Blue', 'Brown', 'Green', 'Hazel'] },
+ dateOfBirth: Date,
+ accepted: { type: Boolean, default: true }
+};
+const NSchema = new mongoose_1.Schema(NSchemaDef);
+let N;
+try {
+ N = mongoose_1.model('n_typescript_schema');
+}
+catch (e) {
+ NSchema.plugin(fngAudit.plugin, {});
+ N = mongoose_1.model('n_typescript_schema', NSchema);
+}
+module.exports = {
+ model: N
+};
+//# sourceMappingURL=n_typescript_schema.js.map
\ No newline at end of file
diff --git a/website/app/models/n_typescript_schema.ts b/website/app/models/n_typescript_schema.ts
new file mode 100644
index 00000000..de040456
--- /dev/null
+++ b/website/app/models/n_typescript_schema.ts
@@ -0,0 +1,32 @@
+import { Document, Schema, Model, model} from "mongoose";
+import { INType } from "../interfaces/n_type";
+import { IFngSchemaDefinition } from "../../../src/fng-schema";
+const fngAudit = require("fng-audit");
+
+export interface INModel extends INType, Document {}
+
+const NSchemaDef: IFngSchemaDefinition = {
+ surname: {type: String, required: true, index: true},
+ forename: {type: String, index: true},
+ phone: {type: String, required: true, match:/^\d{10,12}$/},
+ nationality: {type: String, default: 'European'},
+ weight: Number,
+ eyeColour: {type: String, required: true, enum: ['Blue', 'Brown', 'Green', 'Hazel']},
+ dateOfBirth: Date,
+ accepted: {type: Boolean, default: true}
+};
+
+const NSchema = new Schema(NSchemaDef);
+
+let N: Model;
+
+try {
+ N = model('n_typescript_schema');
+} catch (e) {
+ NSchema.plugin(fngAudit.plugin, {});
+ N = model('n_typescript_schema', NSchema);
+}
+
+module.exports = {
+ model: N
+};
diff --git a/website/app/models/test-fng-ui-select.js b/website/app/models/test-fng-ui-select.js
index 1e85a8fc..ff2e7814 100644
--- a/website/app/models/test-fng-ui-select.js
+++ b/website/app/models/test-fng-ui-select.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var TestFngUiSelectSchemaDef = {
+const mongoose_1 = require("mongoose");
+const TestFngUiSelectSchemaDef = {
surname: { type: String, list: {} },
forename: { type: String, list: true },
derivedText: { type: String, form: { directive: "fng-ui-select", fngUiSelect: { deriveOptions: "getDerivedText" } } },
@@ -18,8 +18,8 @@ var TestFngUiSelectSchemaDef = {
multipleInsideAjax: { type: [mongoose_1.Schema.Types.ObjectId], ref: 'f_nested_schema', form: { directive: 'fng-ui-select', size: 'xxlarge', fngUiSelect: { fngAjax: true }, label: 'Multiple In. Ajax' } },
filteredAjax: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: escape(JSON.stringify({ interviewScore: { $gt: 90 } })) } } }
};
-var TestFngUiSelectSchema = new mongoose_1.Schema(TestFngUiSelectSchemaDef);
-var E;
+const TestFngUiSelectSchema = new mongoose_1.Schema(TestFngUiSelectSchemaDef);
+let E;
try {
E = mongoose_1.model('test_fng_ui_select');
}
diff --git a/website/app/models/test-nested-select.js b/website/app/models/test-nested-select.js
index 7d1a454f..2ddd01cd 100644
--- a/website/app/models/test-nested-select.js
+++ b/website/app/models/test-nested-select.js
@@ -1,21 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var NestedSchemaDef = {
+const mongoose_1 = require("mongoose");
+const NestedSchemaDef = {
someText: { type: String, required: true },
anEnum: { type: String, enum: ['A Option', 'B Option', 'C Option'], form: { directive: 'fng-ui-select' } },
singleCached: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select' } },
singleAjax: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: true } } },
filteredAjax: { type: mongoose_1.Schema.Types.ObjectId, ref: 'b_enhanced_schema', form: { directive: 'fng-ui-select', fngUiSelect: { fngAjax: escape(JSON.stringify({ interviewScore: { $gt: 90 } })) } } }
};
-var NestedSchema = new mongoose_1.Schema(NestedSchemaDef, { _id: false });
-var TestNestedSelectSchemaDef = {
+const NestedSchema = new mongoose_1.Schema(NestedSchemaDef, { _id: false });
+const TestNestedSelectSchemaDef = {
surname: { type: String, index: true, required: true, list: {} },
forename: { type: String, index: true, list: true },
nested: [NestedSchema] // defaults to horizontal compact form
};
-var TestNestedSelectSchema = new mongoose_1.Schema(TestNestedSelectSchemaDef);
-var N;
+const TestNestedSelectSchema = new mongoose_1.Schema(TestNestedSelectSchemaDef);
+let N;
try {
N = mongoose_1.model('test_nested_select');
}
diff --git a/website/app/models/z_custom_form.js b/website/app/models/z_custom_form.js
index 70ebc9d7..54075ac9 100644
--- a/website/app/models/z_custom_form.js
+++ b/website/app/models/z_custom_form.js
@@ -1,15 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-var mongoose_1 = require("mongoose");
-var ZSchemaDef = {
+const mongoose_1 = require("mongoose");
+const ZSchemaDef = {
surname: String,
forename: String,
weight: Number,
dateOfBirth: Date,
termsAccepted: Boolean
};
-var ZSchema = new mongoose_1.Schema(ZSchemaDef);
-var Z;
+const ZSchema = new mongoose_1.Schema(ZSchemaDef);
+let Z;
try {
Z = mongoose_1.model('z_custom_form');
}
diff --git a/website/app/scripts/controllers/b-enhanced-schema.js b/website/app/scripts/controllers/b-enhanced-schema.js
index a84ebfef..bc164412 100644
--- a/website/app/scripts/controllers/b-enhanced-schema.js
+++ b/website/app/scripts/controllers/b-enhanced-schema.js
@@ -1,5 +1,3 @@
-'use strict';
-
websiteApp.controller('BEnhancedSchemaCtrl', ['$scope', function ($scope) {
$scope.record = $scope.sharedData.record;
diff --git a/website/app/scripts/controllers/n-typescript-schema.js b/website/app/scripts/controllers/n-typescript-schema.js
new file mode 100644
index 00000000..143bc0b1
--- /dev/null
+++ b/website/app/scripts/controllers/n-typescript-schema.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+websiteApp.controller('NTypescriptSchemaCtrl', ['$scope', function ($scope) {
+ $scope.onAllReady = function () {
+ if (!$scope.isNew) {
+ let a = $scope.sharedData.record;
+ console.log(`The surname in UPPER CASE is ${a.surname.toUpperCase()}`); // We have shared type checking on client and server
+ }
+ };
+ }]);
+//# sourceMappingURL=n-typescript-schema.js.map
\ No newline at end of file
diff --git a/website/app/scripts/controllers/n-typescript-schema.ts b/website/app/scripts/controllers/n-typescript-schema.ts
new file mode 100644
index 00000000..7c55e79f
--- /dev/null
+++ b/website/app/scripts/controllers/n-typescript-schema.ts
@@ -0,0 +1,11 @@
+import {INType} from "../../interfaces/n_type";
+
+websiteApp.controller('NTypescriptSchemaCtrl', ['$scope', function ($scope) {
+
+ $scope.onAllReady = function () {
+ if (!$scope.isNew) {
+ let a: INType = $scope.sharedData.record;
+ console.log(`The surname in UPPER CASE is ${a.surname.toUpperCase()}`); // We have shared type checking on client and server
+ }
+ };
+}]);
diff --git a/website/app/scripts/tsconfig.json b/website/app/scripts/tsconfig.json
new file mode 100644
index 00000000..0874fe30
--- /dev/null
+++ b/website/app/scripts/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "target": "ES2017",
+ "module": "ES2015",
+ "lib": [
+ "es5",
+ "es2015",
+ "dom"
+ ],
+ "sourceMap": true
+ }
+}
diff --git a/website/app/scripts/websiteapp.d.ts b/website/app/scripts/websiteapp.d.ts
new file mode 100644
index 00000000..371f4a8a
--- /dev/null
+++ b/website/app/scripts/websiteapp.d.ts
@@ -0,0 +1,4 @@
+declare global {
+ const websiteApp: any;
+}
+export {}
diff --git a/website/package.json b/website/package.json
index 895a1529..309082d3 100644
--- a/website/package.json
+++ b/website/package.json
@@ -8,14 +8,14 @@
"url": "https://github.com/forms-angular/website"
},
"dependencies": {
- "@types/node": "^10.14.7",
+ "@typegoose/typegoose": "^6.0.4",
"@vleesbrood/ng-ckeditor5": "0.0.3",
"angular": "1.7.8",
+ "angular-animate": "1.7.8",
"angular-css": "git://github.com/castillo-io/angular-css#master",
"angular-elastic": "2.5.1",
"angular-messages": "1.7.8",
"angular-route": "1.7.8",
- "angular-animate": "1.7.8",
"angular-sanitize": "1.7.8",
"angular-ui-bootstrap": "1.3.2 || 2.5.6",
"angular-ui-grid": "^4.8.1",
@@ -41,7 +41,7 @@
"jspdf-autotable": "^3.2.4",
"lodash": "^4.17.15",
"method-override": "3.0.0",
- "mongoose": "5.7.1",
+ "mongoose": "^5.7.7",
"morgan": "1.9.1",
"ng-ckeditor": "github:esvit/ng-ckeditor",
"ng-infinite-scroll": "1.3.0",
@@ -54,6 +54,8 @@
"grunt-usemin - mchapman/grunt-usemin - fixes a vuln"
],
"devDependencies": {
+ "@types/mongoose": "^5.5.23",
+ "@types/node": "^12.11",
"connect-livereload": "0.6.1",
"grunt": "^1.0.4",
"grunt-autoprefixer": "3.0.4",
diff --git a/website/tsconfig.json b/website/tsconfig.json
index 0c8e237b..00e20977 100644
--- a/website/tsconfig.json
+++ b/website/tsconfig.json
@@ -1,7 +1,9 @@
{
"compilerOptions": {
"module": "commonjs",
- "target": "es5",
+ "target": "ES2017",
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
"lib": [
"es5",
"es2015",
@@ -10,6 +12,6 @@
"sourceMap": true
},
"exclude": [
- "node_modules",
+ "node_modules"
]
}