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" ] }