Skip to content

Commit bdaaca4

Browse files
Draft: Hive API Fixes (#230)
* Design Codeless blocks for Hive API * Design Codeless blocks for Hive API * Hive. sortedSetStore add deleteValue method * Hive. List Store add first/last values methods * Hive. Set Store Add, Set, Members, Delete for value and values * Hive. Signatures * Hive. Signatures Tests * Hive. Tests for Signatures * Hive. Map setWithOverwrite tests * Hive. Signatures for diff value types * Hive. Signatures for diff value types * Hive. Signatures for diff value types * Hive. Refactor Tests * Hive. Refactor * Hive. SortedSet. Incremetn and decremetnc support JSON value
1 parent 202d6af commit bdaaca4

File tree

13 files changed

+1688
-552
lines changed

13 files changed

+1688
-552
lines changed

backendless.d.ts

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* @namespace Backendless
44
*/
55
declare module Backendless {
6+
type JSONValue = string | number | boolean | { [x: string]: JSONValue } | Array<JSONValue>
7+
68
let debugMode: boolean;
79
let useTableClassesFromGlobalScope: boolean;
810
let serverURL: string;
@@ -377,7 +379,7 @@ declare module Backendless {
377379

378380
get(keys: Array<string>): Promise<object>;
379381

380-
set(key: string, value: string, options?: KeyValueSetKeyOptionsI): Promise<boolean>;
382+
set(key: string, value: JSONValue, options?: KeyValueSetKeyOptionsI): Promise<boolean>;
381383

382384
set(keysMap: object): Promise<boolean>;
383385
}
@@ -386,7 +388,7 @@ declare module Backendless {
386388
* @public
387389
*/
388390
interface keyValueStore extends hiveStore {
389-
get(): Promise<string | null>;
391+
get(): Promise<JSONValue | null>;
390392

391393
set(value: string, options?: KeyValueSetKeyOptionsI): Promise<void>;
392394

@@ -406,39 +408,39 @@ declare module Backendless {
406408
* @public
407409
*/
408410
interface listStore extends hiveStore {
409-
get(): Promise<Array<string>>;
411+
get(): Promise<Array<JSONValue>>
410412

411-
get(index: number): Promise<string | null>;
413+
get(index: number): Promise<JSONValue | null>
412414

413-
get(indexFrom: number, indexTo: number): Promise<Array<string>>;
415+
get(indexFrom: number, indexTo: number): Promise<Array<JSONValue>>
414416

415417
set(values: Array<string>): Promise<number>;
416418

417419
set(value: string, index: number): Promise<void>;
418420

419-
insertBefore(valueToInsert: string, anchorValue: string): Promise<number>;
421+
insertBefore(valueToInsert: JSONValue, anchorValue: JSONValue): Promise<number>;
420422

421-
insertAfter(valueToInsert: string, anchorValue: string): Promise<number>;
423+
insertAfter(valueToInsert: JSONValue, anchorValue: JSONValue): Promise<number>;
422424

423425
length(): Promise<number>;
424426

425-
addFirst(value: string): Promise<number>
427+
addFirstValue(value: JSONValue): Promise<number>
426428

427-
addFirst(values: Array<string>): Promise<number>
429+
addFirstValues(values: Array<JSONValue>): Promise<number>
428430

429-
addLast(value: string): Promise<number>
431+
addLastValue(value: JSONValue): Promise<number>
430432

431-
addLast(values: Array<string>): Promise<number>
433+
addLastValues(values: Array<JSONValue>): Promise<number>
432434

433-
deleteFirst(): Promise<string | null>
435+
deleteFirst(): Promise<Array<JSONValue>>
434436

435-
deleteFirst(count: number): Promise<Array<string> | null>
437+
deleteFirst(count: number): Promise<Array<JSONValue>>
436438

437-
deleteLast(): Promise<string | null>
439+
deleteLast(): Promise<Array<JSONValue>>
438440

439-
deleteLast(count: number): Promise<Array<string> | null>
441+
deleteLast(count: number): Promise<Array<JSONValue>>
440442

441-
deleteValue(value: string, count?: number): Promise<number>
443+
deleteValue(value: JSONValue, count?: number): Promise<number>
442444
}
443445

444446
/**
@@ -459,21 +461,21 @@ declare module Backendless {
459461

460462
get(keys: Array<string>): Promise<object>;
461463

462-
getValue(key: string): Promise<string | null>;
464+
getValue(key: string): Promise<JSONValue | null>;
463465

464466
keyExists(key: string): Promise<boolean>;
465467

466468
length(): Promise<number>;
467469

468470
keys(): Promise<Array<string>>;
469471

470-
values(): Promise<Array<string>>;
472+
values(): Promise<Array<JSONValue>>;
471473

472474
set(data: object): Promise<number>;
473475

474-
set(key: string, value: string): Promise<boolean>;
476+
set(key: string, value: JSONValue): Promise<boolean>;
475477

476-
setWithOverwrite(key: string, value: string, overwrite?: boolean): Promise<boolean>;
478+
setWithOverwrite(key: string, value: JSONValue, overwrite?: boolean): Promise<boolean>;
477479

478480
add(data: object): Promise<number>;
479481

@@ -492,42 +494,44 @@ declare module Backendless {
492494
interface SetStore extends HiveStore {
493495
(keyName: string): setStore;
494496

495-
difference(storeKeys: Array<string>): Promise<Array<string>>;
497+
difference(storeKeys: Array<string>): Promise<Array<JSONValue>>;
496498

497-
intersection(storeKeys: Array<string>): Promise<Array<string>>;
499+
intersection(storeKeys: Array<string>): Promise<Array<JSONValue>>;
498500

499-
union(storeKeys: Array<string>): Promise<Array<string>>;
501+
union(storeKeys: Array<string>): Promise<Array<JSONValue>>;
500502
}
501503

502504
/**
503505
* @public
504506
*/
505507
interface setStore extends hiveStore {
506508

507-
get(): Promise<Array<string>>;
509+
get(): Promise<Array<JSONValue>>;
508510

509-
getRandom(count?: number): Promise<Array<string>>;
511+
getRandom(count?: number): Promise<Array<JSONValue>>;
510512

511-
getRandomAndDelete(count?: number): Promise<Array<string>>;
513+
getRandomAndDelete(count?: number): Promise<Array<JSONValue>>;
512514

513-
set(value: string): Promise<number>;
515+
setValue(value: JSONValue): Promise<number>;
514516

515-
set(values: Array<string>): Promise<number>;
517+
setValues(values: Array<JSONValue>): Promise<number>;
518+
519+
addValue(value: JSONValue): Promise<number>;
516520

517-
add(value: string): Promise<number>;
521+
addValues(values: Array<JSONValue>): Promise<number>;
518522

519-
add(values: Array<string>): Promise<number>;
523+
deleteValue(value: JSONValue): Promise<number>;
520524

521-
deleteValues(value: string): Promise<number>;
525+
deleteValues(values: Array<JSONValue>): Promise<number>;
522526

523-
deleteValues(values: Array<string>): Promise<number>;
527+
isValueMember(value: JSONValue): Promise<Array<boolean>>;
524528

525-
isMember(value: string | Array<string>): Promise<Array<string>>;
529+
isValuesMembers(values: Array<JSONValue>): Promise<Array<boolean>>;
526530

527531
length(): Promise<number>;
528532
}
529533

530-
type SortedSetItem = [number, string]
534+
type SortedSetItem = [number, JSONValue]
531535
type SortedSetBound = 'Include' | 'Exclude' | 'Infinity'
532536

533537
interface SortedSetItemOptionsI {
@@ -549,11 +553,11 @@ declare module Backendless {
549553
interface SortedSetStore extends HiveStore {
550554
(keyName: string): sortedSetStore
551555

552-
difference(storeKeys: Array<string>): Promise<Array<string>>;
556+
difference(storeKeys: Array<string>): Promise<Array<JSONValue>>;
553557

554-
intersection(storeKeys: Array<string>): Promise<Array<string>>;
558+
intersection(storeKeys: Array<string>): Promise<Array<JSONValue>>;
555559

556-
union(storeKeys: Array<string>): Promise<Array<string>>;
560+
union(storeKeys: Array<string>): Promise<Array<JSONValue>>;
557561
}
558562

559563
/**
@@ -565,26 +569,26 @@ declare module Backendless {
565569

566570
set(items: Array<SortedSetItem>, options?: SortedSetItemOptionsI): Promise<number>
567571

568-
incrementScore(value: string, scoreValue: number): Promise<number>
572+
incrementScore(value: JSONValue, scoreValue: number): Promise<number>
569573

570-
decrementScore(value: string, scoreValue: number): Promise<number>
574+
decrementScore(value: JSONValue, scoreValue: number): Promise<number>
571575

572576
getAndDeleteMaxScore(count?: number): Promise<Array<SortedSetItem>>
573577

574578
getAndDeleteMinScore(count?: number): Promise<Array<SortedSetItem>>
575579

576-
getRandom<T = SortedSetItem | string>(options?: { count?: number, withScores?: boolean }): Promise<Array<T>>
580+
getRandom<T = SortedSetItem | JSONValue>(options?: { count?: number, withScores?: boolean }): Promise<Array<T>>
577581

578-
getScore(value: string): Promise<number>
582+
getScore(value: JSONValue): Promise<number | null>
579583

580-
getRank(value: string, reverse?: boolean): Promise<number>
584+
getRank(value: JSONValue, reverse?: boolean): Promise<number | null>
581585

582-
getRangeByRank<T = SortedSetItem | string>(startRank: number, stopRank: number, options?: {
586+
getRangeByRank<T = SortedSetItem | JSONValue>(startRank: number, stopRank: number, options?: {
583587
reverse?: boolean,
584588
withScores?: boolean
585589
}): Promise<Array<T>>
586590

587-
getRangeByScore<T = SortedSetItem | string>(options?: {
591+
getRangeByScore<T = SortedSetItem | JSONValue>(options?: {
588592
minScore?: number,
589593
maxScore?: number,
590594
minBound?: SortedSetBound,
@@ -595,9 +599,9 @@ declare module Backendless {
595599
withScores?: boolean
596600
}): Promise<Array<T>>
597601

598-
deleteValues(value: string): Promise<number>;
602+
deleteValue(value: JSONValue): Promise<number>;
599603

600-
deleteValues(values: Array<string>): Promise<number>;
604+
deleteValues(values: Array<JSONValue>): Promise<number>;
601605

602606
deleteValuesByRank(startRank: number, stopRank: number): Promise<number>;
603607

src/hive/stores/key-value.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { HiveTypes } from '../constants'
22
import { HiveStore } from './base-store'
33
import Utils from '../../utils'
4+
import { isHiveValueValid } from '../utils'
45

56
export class KeyValueStore extends HiveStore {
67

@@ -57,6 +58,10 @@ export class KeyValueStore extends HiveStore {
5758
}
5859
}
5960

61+
if (!isHiveValueValid(value)) {
62+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
63+
}
64+
6065
return this.app.request
6166
.put({
6267
url : `${this.app.urls.hiveStore(this.hiveName, this.TYPE)}/${key}`,

src/hive/stores/list.js

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { HiveTypes } from '../constants'
22
import { HiveStore } from './base-store'
3-
import Utils from '../../utils'
3+
import { isHiveValueValid } from '../utils'
44

55
export class ListStore extends HiveStore {
66

@@ -78,12 +78,12 @@ export class ListStore extends HiveStore {
7878
}
7979

8080
insert(valueToInsert, anchorValue, before) {
81-
if (!valueToInsert || typeof valueToInsert !== 'string') {
82-
throw new Error('ValueToInsert must be provided and must be a string.')
81+
if (!isHiveValueValid(valueToInsert)) {
82+
throw new Error('ValueToInsert must be provided and must be on of types: string, number, boolean, object, array.')
8383
}
8484

85-
if (!anchorValue || typeof anchorValue !== 'string') {
86-
throw new Error('AnchorValue must be provided and must be a string.')
85+
if (!isHiveValueValid(anchorValue)) {
86+
throw new Error('AnchorValue must be provided and must be one of types: string, number, boolean, object, array.')
8787
}
8888

8989
return this.app.request
@@ -97,8 +97,8 @@ export class ListStore extends HiveStore {
9797
}
9898

9999
deleteValue(value, count) {
100-
if (!value || typeof value !== 'string') {
101-
throw new Error('Value must be provided and must be a string.')
100+
if (!isHiveValueValid(value)) {
101+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
102102
}
103103

104104
if (count !== undefined && (isNaN(count) || typeof count !== 'number')) {
@@ -115,27 +115,51 @@ export class ListStore extends HiveStore {
115115
})
116116
}
117117

118-
addFirst(value) {
119-
if (!value || !(typeof value === 'string' || Array.isArray(value))) {
120-
throw new Error('Value(s) must be provided and must be a string or list of strings.')
118+
addFirstValue(value) {
119+
if (!isHiveValueValid(value)) {
120+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
121121
}
122122

123123
return this.app.request
124124
.put({
125125
url : `${this.getBaseURL()}/add-first`,
126-
data: Utils.castArray(value)
126+
data: [value]
127127
})
128128
}
129129

130-
addLast(value) {
131-
if (!value || !(typeof value === 'string' || Array.isArray(value))) {
132-
throw new Error('Value(s) must be provided and must be a string or list of strings.')
130+
addFirstValues(values) {
131+
if (!values || !Array.isArray(values) || !values.length || !isHiveValueValid(values)) {
132+
throw new Error('Value must be provided and must be a list of valid JSON items.')
133+
}
134+
135+
return this.app.request
136+
.put({
137+
url : `${this.getBaseURL()}/add-first`,
138+
data: values
139+
})
140+
}
141+
142+
addLastValue(value) {
143+
if (!isHiveValueValid(value)) {
144+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
145+
}
146+
147+
return this.app.request
148+
.put({
149+
url : `${this.getBaseURL()}/add-last`,
150+
data: [value]
151+
})
152+
}
153+
154+
addLastValues(values) {
155+
if (!values || !Array.isArray(values) || !values.length || !isHiveValueValid(values)) {
156+
throw new Error('Value must be provided and must be a list of valid JSON items.')
133157
}
134158

135159
return this.app.request
136160
.put({
137161
url : `${this.getBaseURL()}/add-last`,
138-
data: Utils.castArray(value)
162+
data: values
139163
})
140164
}
141165

src/hive/stores/map.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { HiveTypes } from '../constants'
22
import { HiveStore } from './base-store'
33
import Utils from '../../utils'
4+
import { isHiveValueValid } from '../utils'
45

56
export class MapStore extends HiveStore {
67

@@ -82,8 +83,8 @@ export class MapStore extends HiveStore {
8283
throw new Error('Key must be a string.')
8384
}
8485

85-
if (!value || typeof value !== 'string') {
86-
throw new Error('Value must be provided and must be a string.')
86+
if (!isHiveValueValid(value)) {
87+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
8788
}
8889

8990
return this.app.request
@@ -100,8 +101,8 @@ export class MapStore extends HiveStore {
100101
throw new Error('Key must be provided and must be a string.')
101102
}
102103

103-
if (!value || typeof value !== 'string') {
104-
throw new Error('Value must be provided and must be a string.')
104+
if (!isHiveValueValid(value)) {
105+
throw new Error('Value must be provided and must be one of types: string, number, boolean, object, array.')
105106
}
106107

107108
if (overwrite !== undefined && typeof overwrite !== 'boolean') {

0 commit comments

Comments
 (0)