@balena/odata-to-abstract-sql
Advanced tools
Comparing version 5.1.0 to 5.1.1-improve-typings-4f95a8c2a53289fd7e9f1f893c94716baa4a18a6
@@ -7,4 +7,33 @@ # Change Log | ||
## 5.1.0 - 2020-06-22 | ||
## 5.1.1 - 2020-07-10 | ||
<details> | ||
<summary> Improve typings [Pagan Gazzard] </summary> | ||
> ### abstract-sql-compiler-7.0.2 - 2020-07-10 | ||
> | ||
> | ||
> <details> | ||
> <summary> Update dependencies [Pagan Gazzard] </summary> | ||
> | ||
>> #### sbvr-types-3.1.0 - 2020-06-17 | ||
>> | ||
>> * Update dependencies [Pagan Gazzard] | ||
>> | ||
> </details> | ||
> | ||
> | ||
> ### abstract-sql-compiler-7.0.1 - 2020-07-10 | ||
> | ||
> * Improve `BindNode` typing [Pagan Gazzard] | ||
> | ||
> ### odata-parser-2.0.1 - 2020-07-10 | ||
> | ||
> * Improve typings [Pagan Gazzard] | ||
> | ||
</details> | ||
## 5.1.0 - 2020-06-19 | ||
* Allow specifying valid methods for a specific match call [Pagan Gazzard] | ||
@@ -11,0 +40,0 @@ |
import * as _ from 'lodash'; | ||
import * as memoize from 'memoizee'; | ||
import type { AbstractSqlQuery, AbstractSqlModel, AbstractSqlTable, DurationNode, AbstractSqlType, SelectNode, FromNode, WhereNode, OrderByNode, LimitNode, OffsetNode, NumberTypeNodes, FieldsNode, ValuesNode, ReferencedFieldNode, BooleanTypeNodes, UnionQueryNode, SelectQueryNode, BindNode, TableNode } from '@balena/abstract-sql-compiler'; | ||
import type { ODataBinds, ODataQuery, SupportedMethod } from '@balena/odata-parser'; | ||
import type { ODataBinds, ODataQuery, SupportedMethod, ExpandPropertyPath, ResourceOptions, OrderByOption, OrderByPropertyPath, FilterOption, BindReference } from '@balena/odata-parser'; | ||
export type { ODataBinds, ODataQuery, SupportedMethod }; | ||
@@ -23,2 +23,5 @@ export declare type ResourceNode = ['Resource', string]; | ||
} | ||
declare type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U; | ||
declare type RequiredField<T, F extends keyof T> = Overwrite<T, Required<Pick<T, F>>>; | ||
declare type AliasedResource = RequiredField<Resource, 'tableAlias'>; | ||
export declare type ResourceFunction = (this: OData2AbstractSQL, property: any) => BooleanTypeNodes | { | ||
@@ -55,13 +58,13 @@ resource: Resource; | ||
tree: AbstractSqlQuery; | ||
extraBodyVars: _.Dictionary<any>; | ||
extraBodyVars: _.Dictionary<BindReference>; | ||
extraBindVars: ODataBinds; | ||
}; | ||
PathSegment(method: string, bodyKeys: string[], path: any): Query; | ||
PathKey(method: string, path: any, resource: Resource, referencedField: ReferencedFieldNode, bodyKeys: string[]): BooleanTypeNodes | void; | ||
Bind(bind: any, _optional?: boolean): AbstractSqlType | undefined; | ||
SelectFilter(filter: any, query: Query, resource: Resource): void; | ||
OrderBy(orderby: any, query: Query, resource: Resource): void; | ||
OrderByProperties(orderings: any[]): Array<OrderByNode[1]>; | ||
PathSegment(method: string, bodyKeys: string[], path: ODataQuery): Query; | ||
PathKey(method: string, path: ODataQuery, resource: Resource, referencedField: ReferencedFieldNode, bodyKeys: string[]): BooleanTypeNodes | void; | ||
Bind(bind: BindReference, _optional?: boolean): AbstractSqlType | undefined; | ||
SelectFilter(filter: FilterOption, query: Query, resource: Resource): void; | ||
OrderBy(orderby: OrderByOption, query: Query, resource: Resource): void; | ||
OrderByProperties(orderings: OrderByPropertyPath[]): Array<OrderByNode[1]>; | ||
BindVars(method: string, bodyKeys: string[], resourceName: string, match: Array<[string, [string, string]]>): Array<[string, 'Default' | BindNode]>; | ||
Resource(resourceName: string, parentResource?: Resource): Resource; | ||
Resource(resourceName: string, parentResource?: Resource): AliasedResource; | ||
FieldContainedIn(fieldName: string, resource: Resource): boolean; | ||
@@ -102,10 +105,10 @@ ResourceMapping(resource: Resource): _.Dictionary<[string, string]>; | ||
DurationMatch(match: DurationNode[1]): AbstractSqlType | undefined; | ||
Expands(resource: Resource, query: Query, expands: any): void; | ||
AddQueryOptions(resource: Resource, path: any, query: Query): void; | ||
Expands(resource: Resource, query: Query, expands: ExpandPropertyPath[]): void; | ||
AddQueryOptions(resource: Resource, path: ResourceOptions, query: Query): void; | ||
NavigateResources(resource: Resource, navigation: string): { | ||
resource: Resource; | ||
resource: AliasedResource; | ||
where: BooleanTypeNodes; | ||
}; | ||
AddExtraFroms(query: Query, parentResource: Resource, match: any): void; | ||
AddNavigation(query: Query, resource: Resource, extraResource: string): Resource; | ||
AddNavigation(query: Query, resource: Resource, extraResource: string): AliasedResource; | ||
reset(): void; | ||
@@ -112,0 +115,0 @@ putReset(): void; |
@@ -31,2 +31,5 @@ "use strict"; | ||
const containsQueryOption = (opts) => { | ||
if (opts == null) { | ||
return false; | ||
} | ||
for (const key in opts) { | ||
@@ -218,2 +221,3 @@ if (key[0] === '$') { | ||
PathSegment(method, bodyKeys, path) { | ||
var _a; | ||
if (!path.resource) { | ||
@@ -235,3 +239,3 @@ throw new SyntaxError('Path segment must contain a resource'); | ||
let addPathKey = true; | ||
if (hasQueryOpts && path.options.$expand) { | ||
if (hasQueryOpts && ((_a = path.options) === null || _a === void 0 ? void 0 : _a.$expand)) { | ||
this.Expands(resource, query, path.options.$expand.properties); | ||
@@ -462,3 +466,2 @@ } | ||
} | ||
resource = { ...resource }; | ||
let tableAlias; | ||
@@ -479,4 +482,6 @@ if (parentResource) { | ||
} | ||
resource.tableAlias = this.checkAlias(tableAlias); | ||
return resource; | ||
return { | ||
...resource, | ||
tableAlias: this.checkAlias(tableAlias), | ||
}; | ||
} | ||
@@ -952,5 +957,3 @@ FieldContainedIn(fieldName, resource) { | ||
} | ||
if (expand.options) { | ||
this.AddQueryOptions(expandResource, expand, nestedExpandQuery); | ||
} | ||
this.AddQueryOptions(expandResource, expand, nestedExpandQuery); | ||
this.defaultResource = defaultResource; | ||
@@ -977,2 +980,5 @@ nestedExpandQuery.where.push(navigation.where); | ||
AddQueryOptions(resource, path, query) { | ||
if (!path.options) { | ||
return; | ||
} | ||
if (path.options.$filter) { | ||
@@ -979,0 +985,0 @@ this.SelectFilter(path.options.$filter, query, resource); |
{ | ||
"name": "@balena/odata-to-abstract-sql", | ||
"version": "5.1.0", | ||
"version": "5.1.1-improve-typings-4f95a8c2a53289fd7e9f1f893c94716baa4a18a6", | ||
"description": "A consumer of the OData parser, written in OMeta", | ||
@@ -20,8 +20,8 @@ "main": "out/odata-to-abstract-sql.js", | ||
"dependencies": { | ||
"@balena/abstract-sql-compiler": "^7.0.0", | ||
"@balena/odata-parser": "^2.0.0", | ||
"@types/lodash": "^4.14.155", | ||
"@balena/abstract-sql-compiler": "^7.0.2", | ||
"@balena/odata-parser": "^2.0.1", | ||
"@types/lodash": "^4.14.157", | ||
"@types/memoizee": "^0.4.4", | ||
"@types/randomstring": "^1.1.6", | ||
"lodash": "^4.17.15", | ||
"lodash": "^4.17.19", | ||
"memoizee": "^0.4.14", | ||
@@ -42,3 +42,3 @@ "randomstring": "^1.1.5" | ||
"require-npm4-to-publish": "^1.0.0", | ||
"typescript": "^3.9.5" | ||
"typescript": "^3.9.6" | ||
}, | ||
@@ -45,0 +45,0 @@ "husky": { |
@@ -35,2 +35,8 @@ import * as _ from 'lodash'; | ||
SupportedMethod, | ||
ExpandPropertyPath, | ||
ResourceOptions, | ||
OrderByOption, | ||
OrderByPropertyPath, | ||
FilterOption, | ||
BindReference, | ||
} from '@balena/odata-parser'; | ||
@@ -59,2 +65,5 @@ export type { ODataBinds, ODataQuery, SupportedMethod }; | ||
} | ||
type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U; | ||
type RequiredField<T, F extends keyof T> = Overwrite<T, Required<Pick<T, F>>>; | ||
type AliasedResource = RequiredField<Resource, 'tableAlias'>; | ||
@@ -99,3 +108,6 @@ export type ResourceFunction = ( | ||
const containsQueryOption = (opts: object): boolean => { | ||
const containsQueryOption = (opts?: object): boolean => { | ||
if (opts == null) { | ||
return false; | ||
} | ||
for (const key in opts) { | ||
@@ -214,5 +226,5 @@ if (key[0] === '$') { | ||
export class OData2AbstractSQL { | ||
private extraBodyVars: _.Dictionary<any> = {}; | ||
private extraBodyVars: _.Dictionary<BindReference> = {}; | ||
public extraBindVars: ODataBinds = []; | ||
private resourceAliases: _.Dictionary<Resource> = {}; | ||
private resourceAliases: _.Dictionary<AliasedResource> = {}; | ||
public defaultResource: Resource | undefined; | ||
@@ -284,3 +296,3 @@ public bindVarsLength: number = 0; | ||
tree: AbstractSqlQuery; | ||
extraBodyVars: _.Dictionary<any>; | ||
extraBodyVars: _.Dictionary<BindReference>; | ||
extraBindVars: ODataBinds; | ||
@@ -341,3 +353,3 @@ } { | ||
} | ||
PathSegment(method: string, bodyKeys: string[], path: any): Query { | ||
PathSegment(method: string, bodyKeys: string[], path: ODataQuery): Query { | ||
if (!path.resource) { | ||
@@ -371,3 +383,3 @@ throw new SyntaxError('Path segment must contain a resource'); | ||
if (hasQueryOpts && path.options.$expand) { | ||
if (hasQueryOpts && path.options?.$expand) { | ||
this.Expands(resource, query, path.options.$expand.properties); | ||
@@ -571,3 +583,3 @@ } | ||
method: string, | ||
path: any, | ||
path: ODataQuery, | ||
resource: Resource, | ||
@@ -598,3 +610,3 @@ referencedField: ReferencedFieldNode, | ||
} | ||
Bind(bind: any, _optional?: boolean): AbstractSqlType | undefined { | ||
Bind(bind: BindReference, _optional?: boolean): AbstractSqlType | undefined { | ||
if (bind != null && bind.bind != null) { | ||
@@ -604,3 +616,3 @@ return ['Bind', bind.bind]; | ||
} | ||
SelectFilter(filter: any, query: Query, resource: Resource) { | ||
SelectFilter(filter: FilterOption, query: Query, resource: Resource) { | ||
this.AddExtraFroms(query, resource, filter); | ||
@@ -610,3 +622,3 @@ const where = this.BooleanMatch(filter); | ||
} | ||
OrderBy(orderby: any, query: Query, resource: Resource) { | ||
OrderBy(orderby: OrderByOption, query: Query, resource: Resource) { | ||
this.AddExtraFroms(query, resource, orderby.properties); | ||
@@ -618,3 +630,3 @@ query.extras.push([ | ||
} | ||
OrderByProperties(orderings: any[]): Array<OrderByNode[1]> { | ||
OrderByProperties(orderings: OrderByPropertyPath[]): Array<OrderByNode[1]> { | ||
return orderings.map((ordering) => { | ||
@@ -648,3 +660,3 @@ const field = this.ReferencedProperty(ordering); | ||
} | ||
Resource(resourceName: string, parentResource?: Resource): Resource { | ||
Resource(resourceName: string, parentResource?: Resource): AliasedResource { | ||
const resourceAlias = this.resourceAliases[resourceName]; | ||
@@ -654,3 +666,3 @@ if (resourceAlias) { | ||
} | ||
let resource: Resource; | ||
let resource: AbstractSqlTable; | ||
if (parentResource) { | ||
@@ -670,3 +682,2 @@ const relationshipMapping = this.ResolveRelationship( | ||
} | ||
resource = { ...resource }; | ||
let tableAlias; | ||
@@ -687,4 +698,6 @@ if (parentResource) { | ||
} | ||
resource.tableAlias = this.checkAlias(tableAlias); | ||
return resource; | ||
return { | ||
...resource, | ||
tableAlias: this.checkAlias(tableAlias), | ||
}; | ||
} | ||
@@ -1191,3 +1204,7 @@ FieldContainedIn(fieldName: string, resource: Resource): boolean { | ||
} | ||
Expands(resource: Resource, query: Query, expands: any): void { | ||
Expands( | ||
resource: Resource, | ||
query: Query, | ||
expands: ExpandPropertyPath[], | ||
): void { | ||
const defaultResource = this.defaultResource; | ||
@@ -1218,5 +1235,3 @@ for (const expand of expands) { | ||
} | ||
if (expand.options) { | ||
this.AddQueryOptions(expandResource, expand, nestedExpandQuery); | ||
} | ||
this.AddQueryOptions(expandResource, expand, nestedExpandQuery); | ||
@@ -1245,3 +1260,10 @@ this.defaultResource = defaultResource; | ||
} | ||
AddQueryOptions(resource: Resource, path: any, query: Query): void { | ||
AddQueryOptions( | ||
resource: Resource, | ||
path: ResourceOptions, | ||
query: Query, | ||
): void { | ||
if (!path.options) { | ||
return; | ||
} | ||
if (path.options.$filter) { | ||
@@ -1268,3 +1290,3 @@ this.SelectFilter(path.options.$filter, query, resource); | ||
navigation: string, | ||
): { resource: Resource; where: BooleanTypeNodes } { | ||
): { resource: AliasedResource; where: BooleanTypeNodes } { | ||
const relationshipMapping = this.ResolveRelationship(resource, navigation); | ||
@@ -1326,3 +1348,3 @@ const linkedResource = this.Resource(navigation, resource); | ||
extraResource: string, | ||
): Resource { | ||
): AliasedResource { | ||
const navigation = this.NavigateResources(resource, extraResource); | ||
@@ -1329,0 +1351,0 @@ if ( |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
372325
2803
2
Updated@balena/odata-parser@^2.0.1
Updated@types/lodash@^4.14.157
Updatedlodash@^4.17.19