Skip to content

Commit

Permalink
update DataQueryable type declaration
Browse files Browse the repository at this point in the history
  • Loading branch information
kbarbounakis committed Oct 4, 2022
1 parent 84557d1 commit 57420a3
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 24 deletions.
3 changes: 3 additions & 0 deletions data-associations.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
// MOST Web Framework 2.0 Codename Blueshift BSD-3-Clause license Copyright (c) 2017-2022, THEMOST LP All rights reserved
/*eslint no-var: "off"*/
// noinspection ES6ConvertVarToLetConst

var {eachSeries} = require('async');
var {TypeParser, DataObjectState} = require('./types');
var {DataError} = require('@themost/common');
Expand Down
2 changes: 2 additions & 0 deletions data-object-junction.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import {DataQueryable} from "./data-queryable";
import {DataObject} from "./data-object";
import {DataAssociationMapping} from "./types";
import {DataModel} from "./data-model";
import {DataAssociationMappingBase} from '@themost/common';

export declare class DataObjectJunction extends DataQueryable {
constructor(object: any, association: DataAssociationMapping | DataAssociationMappingBase | string);
parent: DataObject;
mapping: DataAssociationMapping;
getBaseModel(): DataModel;
Expand Down
2 changes: 2 additions & 0 deletions data-object-tag.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import {DataQueryable} from "./data-queryable";
import {DataAssociationMapping} from "./types";
import {DataModel} from "./data-model";
import {DataObject} from "./data-object";
import {DataAssociationMappingBase} from '@themost/common';

export declare class DataObjectTag extends DataQueryable {
constructor(object: any, association: DataAssociationMapping | DataAssociationMappingBase | string);
parent: DataObject;
mapping: DataAssociationMapping;
getBaseModel(): DataModel;
Expand Down
44 changes: 25 additions & 19 deletions data-object-tag.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
/*eslint no-var: "off"*/
// noinspection ES6ConvertVarToLetConst

var {LangUtils} = require('@themost/common');
var {LangUtils, DataError, Args} = require('@themost/common');
var {DataConfigurationStrategy} = require('./data-configuration');
var {QueryField} = require('@themost/query');
var _ = require('lodash');
var types = require('./types');
var { DataAssociationMapping } = require('./types');
var {DataObjectJunction} = require('./data-object-junction');
var {DataQueryable} = require('./data-queryable');
var {isObjectDeep} = require('./is-object');

/**
* @class
Expand All @@ -21,6 +22,13 @@ var {DataQueryable} = require('./data-queryable');
* @property {DataAssociationMapping} mapping - Gets or sets the mapping definition of this data object association.
*/
function DataObjectTag(obj, association) {

/**
* @property parent
* @memberOf DataObjectTag
* @type {DataObject}
*/

/**
* @type {DataObject}
* @private
Expand All @@ -29,10 +37,6 @@ function DataObjectTag(obj, association) {
var model;
var DataModel = require('./data-model').DataModel;

/**
* Gets or sets the parent data object
* @type DataObject
*/
Object.defineProperty(this, 'parent', { get: function () {
return _parent;
}, set: function (value) {
Expand All @@ -42,19 +46,21 @@ function DataObjectTag(obj, association) {
if (typeof association === 'string') {
//infer mapping from field name
//set relation mapping
if (self.parent!=null) {
if (self.parent != null) {
model = self.parent.getModel();
if (model!=null)
if (model != null)
self.mapping = model.inferMapping(association);
}
}
else if (typeof association === 'object' && association !=null) {
} else if (isObjectDeep(association)) {
//get the specified mapping
if (association instanceof types.DataAssociationMapping)
if (association instanceof DataAssociationMapping) {
self.mapping = association;
else
self.mapping = _.assign(new types.DataAssociationMapping(), association);
} else {
self.mapping = _.assign(new DataAssociationMapping(), association);
}
}
Args.check(self.mapping != null, new DataError('E_MAPPING', 'DataObjectTag.mapping cannot be empty at this context', null))

//validate mapping
var _baseModel;
Object.defineProperty(this, 'baseModel', {
Expand Down Expand Up @@ -280,9 +286,9 @@ function _insert(obj, callback) {
res[valueField] = x;
return res;
});
var isSilent = self.$silent;
var silentMode = self.isSilent();
// and finally save items
return self.getBaseModel().silent(isSilent).save(items).then(function() {
return self.getBaseModel().silent(silentMode).save(items).then(function() {
return callback();
}).catch(function(err) {
return callback(err);
Expand Down Expand Up @@ -318,9 +324,9 @@ DataObjectTag.prototype.insert = function(item, callback) {
function _removeAll(callback) {
var self = this;
return self.migrateAsync().then(function() {
var isSilent = self.$silent;
var silentMode = self.isSilent();
var objectField = self.getObjectField();
return self.getBaseModel().silent(isSilent)
return self.getBaseModel().silent(silentMode)
.where(objectField).equal(self.parent[self.mapping.parentField])
.select('id')
.getAllItems().then(function(result) {
Expand Down Expand Up @@ -381,8 +387,8 @@ function _remove(obj, callback) {
res[valueField] = x;
return res;
});
var isSilent = self.$silent;
return self.getBaseModel().silent(isSilent).remove(items, callback);
var silentMode = self.isSilent();
return self.getBaseModel().silent(silentMode).remove(items, callback);
});
}

Expand Down
1 change: 1 addition & 0 deletions data-queryable.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export declare class DataQueryable implements DataContextEmitter {
average(): Promise<any>;
migrate(callback:(err?: Error) => void): void;
silent(value?: boolean): this;
isSilent(): boolean;
flatten(value?: boolean): this;
cache(value?: boolean): this;
data(name: string): any;
Expand Down
7 changes: 7 additions & 0 deletions data-queryable.js
Original file line number Diff line number Diff line change
Expand Up @@ -2624,6 +2624,13 @@ DataQueryable.prototype.silent = function(value) {
}
return this;
};
/**
* Returns true or false to indicate whether this queryable object is in silent mode or not
* @returns {boolean}
*/
DataQueryable.prototype.isSilent = function() {
return !!this.$silent;
}

/**
* Generates a MD5 hashed string for this DataQueryable instance
Expand Down
3 changes: 2 additions & 1 deletion has-many-association.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
import {DataQueryable} from "./data-queryable";
import {DataAssociationMapping} from "./types";
import {DataObject} from "./data-object";
import {DataAssociationMappingBase} from '@themost/common';

export declare class HasManyAssociation extends DataQueryable{
constructor(parent: any, association: DataAssociationMapping);
constructor(object: any, association: DataAssociationMapping | DataAssociationMappingBase | string);
parent: DataObject;
mapping: DataAssociationMapping;
}
2 changes: 2 additions & 0 deletions has-parent-junction.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import {DataQueryable} from "./data-queryable";
import {DataObject} from "./data-object";
import {DataAssociationMapping, DataField} from "./types";
import {DataModel} from "./data-model";
import {DataAssociationMappingBase} from '@themost/common';

export declare class HasParentJunction extends DataQueryable {
constructor(object: any, association: DataAssociationMapping | DataAssociationMappingBase | string);
parent: DataObject;
mapping: DataAssociationMapping;
getBaseModel(): DataModel;
Expand Down
10 changes: 6 additions & 4 deletions types.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// MOST Web Framework 2.0 Codename Blueshift BSD-3-Clause license Copyright (c) 2017-2022, THEMOST LP All rights reserved
import {DataModel} from "./data-model";
import {ConfigurationBase, SequentialEventEmitter} from "@themost/common";
import {DataAssociationMappingBase} from '@themost/common/data';

export declare function DataAdapterCallback(err?:Error, result?:any): void;

Expand Down Expand Up @@ -83,13 +84,14 @@ export declare class DataContextEmitter {
}

export declare interface DataModelPrivilege {
type: string;
type: 'self' | 'global' | 'parent' | 'item';
mask: number;
account?: string;
filter?: string;
[k: string]: unknown;
}

export declare class DataAssociationMapping {
export declare class DataAssociationMapping implements DataAssociationMappingBase {
constructor(obj?: any);
associationAdapter?: string;
parentModel?: string;
Expand All @@ -100,10 +102,10 @@ export declare class DataAssociationMapping {
associationObjectField?: string;
associationValueField?: string;
cascade?: any;
associationType?: string;
associationType?: 'association' | 'junction';
select?: Array<string>;
privileges?: Array<DataModelPrivilege>;

[k: string]: unknown;
}

export declare class DataField {
Expand Down

0 comments on commit 57420a3

Please sign in to comment.