1+ // EXAMPLE: list_tutorial
2+ // HIDE_START
3+ import assert from 'assert' ;
4+ import { createClient } from 'redis' ;
5+
6+ const client = await createClient ( ) ;
7+ await client . connect ( ) ;
8+ // HIDE_END
9+ // REMOVE_START
10+ await client . del ( 'bikes:repairs' ) ;
11+ await client . del ( 'bikes:finished' ) ;
12+ // REMOVE_END
13+
14+ // STEP_START queue
15+ const res1 = await client . lPush ( 'bikes:repairs' , 'bike:1' ) ;
16+ console . log ( res1 ) ; // 1
17+
18+ const res2 = await client . lPush ( 'bikes:repairs' , 'bike:2' ) ;
19+ console . log ( res2 ) ; // 2
20+
21+ const res3 = await client . rPop ( 'bikes:repairs' ) ;
22+ console . log ( res3 ) ; // bike:1
23+
24+ const res4 = await client . rPop ( 'bikes:repairs' ) ;
25+ console . log ( res4 ) ; // bike:2
26+ // STEP_END
27+
28+ // REMOVE_START
29+ assert . equal ( res1 , 1 ) ;
30+ assert . equal ( res2 , 2 ) ;
31+ assert . equal ( res3 , 'bike:1' ) ;
32+ assert . equal ( res4 , 'bike:2' ) ;
33+ // REMOVE_END
34+
35+ // STEP_START stack
36+ const res5 = await client . lPush ( 'bikes:repairs' , 'bike:1' ) ;
37+ console . log ( res5 ) ; // 1
38+
39+ const res6 = await client . lPush ( 'bikes:repairs' , 'bike:2' ) ;
40+ console . log ( res6 ) ; // 2
41+
42+ const res7 = await client . lPop ( 'bikes:repairs' ) ;
43+ console . log ( res7 ) ; // bike:2
44+
45+ const res8 = await client . lPop ( 'bikes:repairs' ) ;
46+ console . log ( res8 ) ; // bike:1
47+ // STEP_END
48+
49+ // REMOVE_START
50+ assert . equal ( res5 , 1 ) ;
51+ assert . equal ( res6 , 2 ) ;
52+ assert . equal ( res7 , 'bike:2' ) ;
53+ assert . equal ( res8 , 'bike:1' ) ;
54+ // REMOVE_END
55+
56+ // STEP_START lLen
57+ const res9 = await client . lLen ( 'bikes:repairs' ) ;
58+ console . log ( res9 ) ; // 0
59+ // STEP_END
60+
61+ // REMOVE_START
62+ assert . equal ( res9 , 0 ) ;
63+ // REMOVE_END
64+
65+ // STEP_START lMove_lRange
66+ const res10 = await client . lPush ( 'bikes:repairs' , 'bike:1' ) ;
67+ console . log ( res10 ) ; // 1
68+
69+ const res11 = await client . lPush ( 'bikes:repairs' , 'bike:2' ) ;
70+ console . log ( res11 ) ; // 2
71+
72+ const res12 = await client . lMove ( 'bikes:repairs' , 'bikes:finished' , 'LEFT' , 'LEFT' ) ;
73+ console . log ( res12 ) ; // 'bike:2'
74+
75+ const res13 = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
76+ console . log ( res13 ) ; // ['bike:1']
77+
78+ const res14 = await client . lRange ( 'bikes:finished' , 0 , - 1 ) ;
79+ console . log ( res14 ) ; // ['bike:2']
80+ // STEP_END
81+
82+ // REMOVE_START
83+ assert . equal ( res10 , 1 ) ;
84+ assert . equal ( res11 , 2 ) ;
85+ assert . equal ( res12 , 'bike:2' ) ;
86+ assert . deepEqual ( res13 , [ 'bike:1' ] ) ;
87+ assert . deepEqual ( res14 , [ 'bike:2' ] ) ;
88+ await client . del ( 'bikes:repairs' ) ;
89+ // REMOVE_END
90+
91+ // STEP_START lPush_rPush
92+ const res15 = await client . rPush ( 'bikes:repairs' , 'bike:1' ) ;
93+ console . log ( res15 ) ; // 1
94+
95+ const res16 = await client . rPush ( 'bikes:repairs' , 'bike:2' ) ;
96+ console . log ( res16 ) ; // 2
97+
98+ const res17 = await client . lPush ( 'bikes:repairs' , 'bike:important_bike' ) ;
99+ console . log ( res17 ) ; // 3
100+
101+ const res18 = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
102+ console . log ( res18 ) ; // ['bike:important_bike', 'bike:1', 'bike:2']
103+ // STEP_END
104+
105+ // REMOVE_START
106+ assert . equal ( res15 , 1 ) ;
107+ assert . equal ( res16 , 2 ) ;
108+ assert . equal ( res17 , 3 ) ;
109+ assert . deepEqual ( res18 , [ 'bike:important_bike' , 'bike:1' , 'bike:2' ] ) ;
110+ await client . del ( 'bikes:repairs' ) ;
111+ // REMOVE_END
112+
113+ // STEP_START variadic
114+ const res19 = await client . rPush ( 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' ] ) ;
115+ console . log ( res19 ) ; // 3
116+
117+ const res20 = await client . lPush (
118+ 'bikes:repairs' , [ 'bike:important_bike' , 'bike:very_important_bike' ]
119+ ) ;
120+ console . log ( res20 ) ; // 5
121+
122+ const res21 = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
123+ console . log ( res21 ) ; // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3']
124+ // STEP_END
125+
126+ // REMOVE_START
127+ assert . equal ( res19 , 3 ) ;
128+ assert . equal ( res20 , 5 ) ;
129+ assert . deepEqual ( res21 , [
130+ 'bike:very_important_bike' ,
131+ 'bike:important_bike' ,
132+ 'bike:1' ,
133+ 'bike:2' ,
134+ 'bike:3' ,
135+ ] ) ;
136+ await client . del ( 'bikes:repairs' ) ;
137+ // REMOVE_END
138+
139+ // STEP_START lPop_rPop
140+ const res22 = await client . rPush ( 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' ] ) ;
141+ console . log ( res22 ) ; // 3
142+
143+ const res23 = await client . rPop ( 'bikes:repairs' ) ;
144+ console . log ( res23 ) ; // 'bike:3'
145+
146+ const res24 = await client . lPop ( 'bikes:repairs' ) ;
147+ console . log ( res24 ) ; // 'bike:1'
148+
149+ const res25 = await client . rPop ( 'bikes:repairs' ) ;
150+ console . log ( res25 ) ; // 'bike:2'
151+
152+ const res26 = await client . rPop ( 'bikes:repairs' ) ;
153+ console . log ( res26 ) ; // None
154+ // STEP_END
155+
156+ // REMOVE_START
157+ assert . deepEqual ( res22 , 3 ) ;
158+ assert . equal ( res23 , 'bike:3' ) ;
159+ assert . equal ( res24 , 'bike:1' ) ;
160+ assert . equal ( res25 , 'bike:2' ) ;
161+ assert . equal ( res26 , null ) ;
162+ // REMOVE_END
163+
164+ // STEP_START lTrim
165+ const res27 = await client . lPush (
166+ 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' , 'bike:4' , 'bike:5' ]
167+ ) ;
168+ console . log ( res27 ) ; // 5
169+
170+ const res28 = await client . lTrim ( 'bikes:repairs' , 0 , 2 ) ;
171+ console . log ( res28 ) ; // true
172+
173+ const res29 = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
174+ console . log ( res29 ) ; // ['bike:5', 'bike:4', 'bike:3']
175+ // STEP_END
176+
177+ // REMOVE_START
178+ assert . equal ( res27 , 5 ) ;
179+ assert . equal ( res28 , 'OK' ) ;
180+ assert . deepEqual ( res29 , [ 'bike:5' , 'bike:4' , 'bike:3' ] ) ;
181+ await client . del ( 'bikes:repairs' ) ;
182+ // REMOVE_END
183+
184+ // STEP_START lTrim_end_of_list
185+ const res27eol = await client . rPush (
186+ 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' , 'bike:4' , 'bike:5' ]
187+ ) ;
188+ console . log ( res27eol ) ; // 5
189+
190+ const res28eol = await client . lTrim ( 'bikes:repairs' , - 3 , - 1 ) ;
191+ console . log ( res28eol ) ; // 'OK'
192+
193+ const res29eol = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
194+ console . log ( res29eol ) ; // ['bike:3', 'bike:4', 'bike:5']
195+ // STEP_END
196+
197+ // REMOVE_START
198+ assert . equal ( res27eol , 5 ) ;
199+ assert . equal ( res28eol , 'OK' ) ;
200+ assert . deepEqual ( res29eol , [ 'bike:3' , 'bike:4' , 'bike:5' ] ) ;
201+ await client . del ( 'bikes:repairs' ) ;
202+ // REMOVE_END
203+
204+ // STEP_START brPop
205+ const res31 = await client . rPush ( 'bikes:repairs' , [ 'bike:1' , 'bike:2' ] ) ;
206+ console . log ( res31 ) ; // 2
207+
208+ const res32 = await client . brPop ( 'bikes:repairs' , 1 ) ;
209+ console . log ( res32 ) ; // { key: 'bikes:repairs', element: 'bike:2' }
210+
211+ const res33 = await client . brPop ( 'bikes:repairs' , 1 ) ;
212+ console . log ( res33 ) ; // { key: 'bikes:repairs', element: 'bike:1' }
213+
214+ const res34 = await client . brPop ( 'bikes:repairs' , 1 ) ;
215+ console . log ( res34 ) ; // null
216+ // STEP_END
217+
218+ // REMOVE_START
219+ assert . equal ( res31 , 2 ) ;
220+ assert . deepEqual ( res32 , { key : 'bikes:repairs' , element : 'bike:2' } ) ;
221+ assert . deepEqual ( res33 , { key : 'bikes:repairs' , element : 'bike:1' } ) ;
222+ assert . equal ( res34 , null ) ;
223+ await client . del ( 'bikes:repairs' ) ;
224+ await client . del ( 'new_bikes' ) ;
225+ // REMOVE_END
226+
227+ // STEP_START rule_1
228+ const res35 = await client . del ( 'new_bikes' ) ;
229+ console . log ( res35 ) ; // 0
230+
231+ const res36 = await client . lPush ( 'new_bikes' , [ 'bike:1' , 'bike:2' , 'bike:3' ] ) ;
232+ console . log ( res36 ) ; // 3
233+ // STEP_END
234+
235+ // REMOVE_START
236+ assert . equal ( res35 , 0 ) ;
237+ assert . equal ( res36 , 3 ) ;
238+ await client . del ( 'new_bikes' ) ;
239+ // REMOVE_END
240+
241+ // STEP_START rule_1.1
242+ const res37 = await client . set ( 'new_bikes' , 'bike:1' ) ;
243+ console . log ( res37 ) ; // 'OK'
244+
245+ const res38 = await client . type ( 'new_bikes' ) ;
246+ console . log ( res38 ) ; // 'string'
247+
248+ try {
249+ const res39 = await client . lPush ( 'new_bikes' , 'bike:2' , 'bike:3' ) ;
250+ // redis.exceptions.ResponseError:
251+ // [ErrorReply: WRONGTYPE Operation against a key holding the wrong kind of value]
252+ }
253+ catch ( e ) {
254+ console . log ( e ) ;
255+ }
256+ // STEP_END
257+
258+ // REMOVE_START
259+ assert . equal ( res37 , 'OK' ) ;
260+ assert . equal ( res38 , 'string' ) ;
261+ await client . del ( 'new_bikes' ) ;
262+ // REMOVE_END
263+
264+ // STEP_START rule_2
265+ await client . lPush ( 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' ] ) ;
266+ console . log ( res36 ) ; // 3
267+
268+ const res40 = await client . exists ( 'bikes:repairs' )
269+ console . log ( res40 ) ; // true
270+
271+ const res41 = await client . lPop ( 'bikes:repairs' ) ;
272+ console . log ( res41 ) ; // 'bike:3'
273+
274+ const res42 = await client . lPop ( 'bikes:repairs' ) ;
275+ console . log ( res42 ) ; // 'bike:2'
276+
277+ const res43 = await client . lPop ( 'bikes:repairs' ) ;
278+ console . log ( res43 ) ; // 'bike:1'
279+
280+ const res44 = await client . exists ( 'bikes:repairs' ) ;
281+ console . log ( res44 ) ; // 0
282+ // STEP_END
283+
284+ // REMOVE_START
285+ assert . equal ( res40 , true ) ;
286+ assert . equal ( res41 , 'bike:3' ) ;
287+ assert . equal ( res42 , 'bike:2' ) ;
288+ assert . equal ( res43 , 'bike:1' ) ;
289+ assert . equal ( res44 , 0 ) ;
290+ await client . del ( 'bikes:repairs' ) ;
291+ // REMOVE_END
292+
293+ // STEP_START rule_3
294+ const res45 = await client . del ( 'bikes:repairs' ) ;
295+ console . log ( res45 ) ; // 0
296+
297+ const res46 = await client . lLen ( 'bikes:repairs' ) ;
298+ console . log ( res46 ) ; // 0
299+
300+ const res47 = await client . lPop ( 'bikes:repairs' ) ;
301+ console . log ( res47 ) ; // null
302+ // STEP_END
303+
304+ // REMOVE_START
305+ assert . equal ( res45 , 0 ) ;
306+ assert . equal ( res46 , 0 ) ;
307+ assert . equal ( res47 , null ) ;
308+ // REMOVE_END
309+
310+ // STEP_START lTrim.1
311+ const res48 = await client . lPush (
312+ 'bikes:repairs' , [ 'bike:1' , 'bike:2' , 'bike:3' , 'bike:4' , 'bike:5' ]
313+ ) ;
314+ console . log ( res48 ) ; // 5
315+
316+ const res49 = await client . lTrim ( 'bikes:repairs' , 0 , 2 ) ;
317+ console . log ( res49 ) ; // 'OK'
318+
319+ const res50 = await client . lRange ( 'bikes:repairs' , 0 , - 1 ) ;
320+ console . log ( res50 ) ; // ['bike:5', 'bike:4', 'bike:3']
321+ // STEP_END
322+
323+ // REMOVE_START
324+ assert . equal ( res48 , 5 ) ;
325+ assert . equal ( res49 , 'OK' ) ;
326+ assert . deepEqual ( res50 , [ 'bike:5' , 'bike:4' , 'bike:3' ] ) ;
327+ await client . del ( 'bikes:repairs' ) ;
328+ await client . quit ( ) ;
329+ // REMOVE_END
0 commit comments