Skip to content
This repository was archived by the owner on Feb 18, 2021. It is now read-only.

Commit 41d9635

Browse files
author
stefanwullems
committed
separated some helpers in parseQuery file
1 parent df78a49 commit 41d9635

File tree

11 files changed

+54
-12
lines changed

11 files changed

+54
-12
lines changed

Diff for: src/CacheObserver/CacheManager.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ import { Record, Transform, RecordOperation } from '@orbit/data'
33

44
import { Observable } from '../Observer'
55

6-
import { getTermsOrExpression, getUpdatedRecords, shouldUpdate } from '../helpers'
7-
import { Data, Listener, Query, Queries, Term, Expression, RecordData } from '../types'
6+
import { getTermsOrExpression } from '../utils/parseQuery'
7+
import { getUpdatedRecords, shouldUpdate } from '../helpers'
8+
import { Data, Listener, Query, Queries, Term, Expression, RecordData } from '../utils/types'
89

910
export class CacheManager extends Observable<Data> {
1011

Diff for: src/FetchObserver/FetchManager.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { QueryBuilder, Schema, ModelDefinition } from '@orbit/data'
55
import { Subscription } from '../Subscription'
66
import { FetchManager } from './FetchManager'
77

8-
import { Expression, Term } from '../types'
8+
import { Expression, Term } from '../utils/types'
99

1010
const modelDefenition: Dict<ModelDefinition> = {
1111
account: {

Diff for: src/FetchObserver/FetchManager.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Record } from '@orbit/data'
33

44
import { Observable } from '../Observer'
55

6-
import { getTermsOrExpression, validateOptions, hashQueryIdentifier } from '../helpers'
76
import {
87
Query,
98
Queries,
@@ -18,7 +17,8 @@ import {
1817
RecordObject,
1918
Listener,
2019
Status
21-
} from '../types'
20+
} from '../utils/types'
21+
import { getTermsOrExpression, validateOptions, hashQueryIdentifier } from '../utils/parseQuery'
2222

2323

2424
export class FetchManager extends Observable<Data> {

Diff for: src/Observer/Observable.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Subscription } from '../Subscription'
22

3-
import { Listener } from '../types'
3+
import { Listener } from '../utils/types'
44

55
export class Observable<T> {
66
_subscriptions: { [id: string]: Subscription<T> } = {}

Diff for: src/QueryObserver/QueryManager.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { QueryBuilder, Schema, ModelDefinition } from '@orbit/data'
44

55
import { QueryManager } from './QueryManager'
66

7-
import { Expression } from '../types'
7+
import { Expression } from '../utils/types'
88

99
const modelDefinition: Dict<ModelDefinition> = {
1010
account: {

Diff for: src/QueryObserver/QueryManager.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import Store from '@orbit/store'
33
import { CacheManager } from '../CacheObserver'
44
import { FetchManager } from '../FetchObserver'
55

6-
import { Queries, Query, Options, Data, Listener } from '../types'
7-
import { getTermsOrExpression, hashQueryIdentifier, validateOptions } from '../helpers'
6+
import { Queries, Query, Options, Data, Listener } from '../utils/types'
7+
import { getTermsOrExpression, validateOptions, hashQueryIdentifier } from '../utils/parseQuery'
88

99
export class QueryManager {
1010

Diff for: src/Subscription/Subscription.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Listener } from '../types'
1+
import { Listener } from '../utils/types'
22

33
export class Subscription<T> {
44
_listeners: Listener<T>[] = []

Diff for: src/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RecordOperation, RecordIdentity, QueryBuilder } from '@orbit/data'
2-
import { Expression, Term, Options, Query, Queries } from './types'
2+
import { Expression, Term, Options, Query, Queries } from './utils/types'
33

44
export const getTermsOrExpression = (queryOrQueries: Query | Queries) => {
55
return typeof queryOrQueries === 'function'

Diff for: src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export * from './QueryObserver/QueryManager'
2-
export * from './types'
2+
export * from './utils/types'

Diff for: src/utils/parseQuery.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { QueryBuilder } from '@orbit/data'
2+
3+
import { Query, Queries, Term, Expression, Options } from './types'
4+
5+
export const getExpression = (query: Query): Expression => {
6+
const queryBuilder = new QueryBuilder()
7+
8+
return query(queryBuilder).expression as Expression
9+
}
10+
11+
export const getTerms = (queries: Queries): Term[] => {
12+
const queryBuilder = new QueryBuilder()
13+
14+
return Object.keys(queries).sort().map((key) =>
15+
({ key, expression: queries[key](queryBuilder).expression as Expression })
16+
)
17+
}
18+
19+
export const getTermsOrExpression = (queryOrQueries: Query | Queries) => {
20+
return typeof queryOrQueries === 'function'
21+
? getExpression(queryOrQueries)
22+
: getTerms(queryOrQueries)
23+
}
24+
25+
export const hashQueryIdentifier = (termsOrExpression: Term[] | Expression, options?: Options) => {
26+
return options
27+
? JSON.stringify({ termsOrExpression, options })
28+
: JSON.stringify(termsOrExpression)
29+
}
30+
31+
export const validateOptions = (termsOrExpression: Term[] | Expression, options?: Options) => {
32+
if (!options) return
33+
if (Array.isArray(termsOrExpression) && !Array.isArray(options)) {
34+
throw new Error(
35+
'Options are invalid. When making multiple queries' +
36+
'the options must be an array of objects with a "queryKey" property that refers to the query to which the options apply'
37+
)
38+
} else if (!Array.isArray(termsOrExpression) && Array.isArray(options)) {
39+
throw new Error('Options are invalid.')
40+
}
41+
}

Diff for: src/types.ts renamed to src/utils/types.ts

File renamed without changes.

0 commit comments

Comments
 (0)