@util.js/promises 0.41.6 → 0.41.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Promises.js +440 -0
- package/package.json +5 -1
- package/doc/README-examples.js +0 -203
- package/lib/Promises.js +0 -411
- package/test/PromisesTest.js +0 -477
package/test/PromisesTest.js
DELETED
|
@@ -1,477 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const { expect } = require("chai");
|
|
4
|
-
const promises = require("..");
|
|
5
|
-
|
|
6
|
-
describe("Promises", function () {
|
|
7
|
-
describe("#(apply|call)Callback(object, functionOnObjectWithCallback, args)", () => {
|
|
8
|
-
function notify(message, who, callback) {
|
|
9
|
-
if (message === "Throw error") throw new Error("Hypnotoad died.");
|
|
10
|
-
if (message === "Return undefined") return;
|
|
11
|
-
callback(null, `${message}, ${who}!`);
|
|
12
|
-
}
|
|
13
|
-
it("should resolve a Promise", async function () {
|
|
14
|
-
expect(
|
|
15
|
-
await promises.applyCallback(null, notify, ["Promise me", "Hypnotoad"]),
|
|
16
|
-
).to.eql("Promise me, Hypnotoad!");
|
|
17
|
-
expect(
|
|
18
|
-
await promises.callCallback(null, notify, "Promise me", "Hypnotoad"),
|
|
19
|
-
).to.eql("Promise me, Hypnotoad!");
|
|
20
|
-
});
|
|
21
|
-
it("should error if functionOnObjectWithCallback is not a function", () => {
|
|
22
|
-
expect(() =>
|
|
23
|
-
promises.applyCallback(null, null, ["Promise me", "Hypnotoad"]),
|
|
24
|
-
).to.throw(TypeError);
|
|
25
|
-
expect(() =>
|
|
26
|
-
promises.callCallback(null, null, "Promise me", "Hypnotoad"),
|
|
27
|
-
).to.throw(TypeError);
|
|
28
|
-
expect(() =>
|
|
29
|
-
promises.applyCallback(null, "a", ["Promise me", "Hypnotoad"]),
|
|
30
|
-
).to.throw(TypeError);
|
|
31
|
-
expect(() =>
|
|
32
|
-
promises.callCallback(null, "a", "Promise me", "Hypnotoad"),
|
|
33
|
-
).to.throw(TypeError);
|
|
34
|
-
});
|
|
35
|
-
it("should error if args is erroneous", () => {
|
|
36
|
-
// This does not cause failures in the unit test, but there is output.
|
|
37
|
-
promises
|
|
38
|
-
.callCallback(null, notify, "Return undefined")
|
|
39
|
-
.then((message) => {
|
|
40
|
-
throw new Error("Expected expected the function to never return.");
|
|
41
|
-
})
|
|
42
|
-
.catch((error) => {
|
|
43
|
-
throw error;
|
|
44
|
-
});
|
|
45
|
-
expect(() => promises.applyCallback(null, notify)).to.throw(TypeError);
|
|
46
|
-
const a = promises
|
|
47
|
-
.callCallback(null, notify)
|
|
48
|
-
.catch((error) => expect(error).to.be.an.instanceof(TypeError));
|
|
49
|
-
const b = promises
|
|
50
|
-
.applyCallback(null, notify, ["Hypnotoad"])
|
|
51
|
-
.catch((error) => expect(error).to.be.an.instanceof(TypeError));
|
|
52
|
-
const c = promises
|
|
53
|
-
.callCallback(null, notify, "Hypnotoad")
|
|
54
|
-
.catch((error) => expect(error).to.be.an.instanceof(TypeError));
|
|
55
|
-
const d = promises
|
|
56
|
-
.applyCallback(null, notify, ["Throw error"])
|
|
57
|
-
.catch((error) => expect(error).to.be.an.instanceof(Error));
|
|
58
|
-
const e = promises
|
|
59
|
-
.callCallback(null, notify, "Throw error")
|
|
60
|
-
.catch((error) => expect(error).to.be.an.instanceof(Error));
|
|
61
|
-
return promises.all(a, b, c, d, e);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
describe("#(apply|call)Promise(object, promiseFunctionOnObject, args)", () => {
|
|
66
|
-
function notify(message, who) {
|
|
67
|
-
if (message === "Throw error") throw new Error("Hypnotoad died.");
|
|
68
|
-
if (message === "Return undefined") return;
|
|
69
|
-
return promises.resolve(`${message}, ${who}!`);
|
|
70
|
-
}
|
|
71
|
-
it("should notify a callback", (callback) => {
|
|
72
|
-
a(callback);
|
|
73
|
-
function a(callbck) {
|
|
74
|
-
promises.applyPromise(null, notify, [
|
|
75
|
-
"Call back",
|
|
76
|
-
"Hypnotoad",
|
|
77
|
-
(error, message) => {
|
|
78
|
-
if (error) {
|
|
79
|
-
callbck(error);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
expect(message).to.eql("Call back, Hypnotoad!");
|
|
83
|
-
b(callbck);
|
|
84
|
-
},
|
|
85
|
-
]);
|
|
86
|
-
}
|
|
87
|
-
function b(callbck) {
|
|
88
|
-
promises.callPromise(
|
|
89
|
-
null,
|
|
90
|
-
notify,
|
|
91
|
-
"Call back",
|
|
92
|
-
"Hypnotoad",
|
|
93
|
-
(error, message) => {
|
|
94
|
-
if (error) {
|
|
95
|
-
callbck(error);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
expect(message).to.eql("Call back, Hypnotoad!");
|
|
99
|
-
c(callbck);
|
|
100
|
-
},
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
function c(callbck) {
|
|
104
|
-
function adapt(message, who, callback) {
|
|
105
|
-
if (callback) return promises.applyPromise(null, notify, arguments);
|
|
106
|
-
return promises.resolve(`${message}, ${who}!`);
|
|
107
|
-
}
|
|
108
|
-
promises.callPromise(
|
|
109
|
-
null,
|
|
110
|
-
adapt,
|
|
111
|
-
"Call back",
|
|
112
|
-
"Hypnotoad",
|
|
113
|
-
(error, value) => {
|
|
114
|
-
if (error) {
|
|
115
|
-
callbck(error);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
119
|
-
expect(value).to.eql("Call back, Hypnotoad!");
|
|
120
|
-
callbck();
|
|
121
|
-
} catch (err) {
|
|
122
|
-
callbck(err);
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
it("should error if promiseFunction is not a function", () => {
|
|
129
|
-
expect(() =>
|
|
130
|
-
promises.applyPromise(null, null, ["Call back", "Hypnotoad"]),
|
|
131
|
-
).to.throw(TypeError);
|
|
132
|
-
expect(() =>
|
|
133
|
-
promises.callPromise(null, null, "Call back", "Hypnotoad"),
|
|
134
|
-
).to.throw(TypeError);
|
|
135
|
-
expect(() =>
|
|
136
|
-
promises.applyPromise(null, "a", ["Call back", "Hypnotoad"]),
|
|
137
|
-
).to.throw(TypeError);
|
|
138
|
-
expect(() =>
|
|
139
|
-
promises.callPromise(null, "a", "Call back", "Hypnotoad"),
|
|
140
|
-
).to.throw(TypeError);
|
|
141
|
-
});
|
|
142
|
-
it("should handle erroneous input", (callback) => {
|
|
143
|
-
a(callback);
|
|
144
|
-
function a(callbck) {
|
|
145
|
-
try {
|
|
146
|
-
expect(() => promises.applyPromise(null, notify)).to.throw(TypeError);
|
|
147
|
-
b(callbck);
|
|
148
|
-
} catch (error) {
|
|
149
|
-
callbck(error);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
function b(callbck) {
|
|
153
|
-
promises
|
|
154
|
-
.callPromise(null, notify)
|
|
155
|
-
.then((message) => {
|
|
156
|
-
expect(message).to.eql("undefined, undefined!");
|
|
157
|
-
c(callbck);
|
|
158
|
-
})
|
|
159
|
-
.catch(callbck);
|
|
160
|
-
}
|
|
161
|
-
function c(callbck) {
|
|
162
|
-
promises.applyPromise(null, notify, [
|
|
163
|
-
"Call back",
|
|
164
|
-
(error, value) => {
|
|
165
|
-
try {
|
|
166
|
-
expect(error).to.be.null;
|
|
167
|
-
expect(value).to.eql("Call back, undefined!");
|
|
168
|
-
d(callbck);
|
|
169
|
-
} catch (err) {
|
|
170
|
-
callbck(err);
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
]);
|
|
174
|
-
}
|
|
175
|
-
function d(callbck) {
|
|
176
|
-
promises.callPromise(null, notify, "Call back", (error, value) => {
|
|
177
|
-
try {
|
|
178
|
-
expect(error).to.be.null;
|
|
179
|
-
expect(value).to.eql("Call back, undefined!");
|
|
180
|
-
e(callbck);
|
|
181
|
-
} catch (err) {
|
|
182
|
-
callbck(err);
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
function e(callbck) {
|
|
187
|
-
promises.applyPromise(null, notify, [
|
|
188
|
-
"Throw error",
|
|
189
|
-
(error, value) => {
|
|
190
|
-
try {
|
|
191
|
-
expect(error).to.be.an.instanceof(Error);
|
|
192
|
-
expect(value).to.be.undefined;
|
|
193
|
-
f(callbck);
|
|
194
|
-
} catch (err) {
|
|
195
|
-
callbck(err);
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
]);
|
|
199
|
-
}
|
|
200
|
-
function f(callbck) {
|
|
201
|
-
promises.callPromise(null, notify, "Throw error", (error, value) => {
|
|
202
|
-
try {
|
|
203
|
-
expect(error).to.be.an.instanceof(Error);
|
|
204
|
-
expect(value).to.be.undefined;
|
|
205
|
-
g(callbck);
|
|
206
|
-
} catch (err) {
|
|
207
|
-
callbck(err);
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
function g(callbck) {
|
|
212
|
-
try {
|
|
213
|
-
expect(() =>
|
|
214
|
-
promises.callPromise(
|
|
215
|
-
null,
|
|
216
|
-
notify,
|
|
217
|
-
"Return undefined",
|
|
218
|
-
(error, value) => {
|
|
219
|
-
callback(
|
|
220
|
-
new Error(
|
|
221
|
-
"We expected #callPromise to not call this callback.",
|
|
222
|
-
{ cause: error },
|
|
223
|
-
),
|
|
224
|
-
);
|
|
225
|
-
},
|
|
226
|
-
),
|
|
227
|
-
).to.throw(Error);
|
|
228
|
-
callbck();
|
|
229
|
-
} catch (error) {
|
|
230
|
-
callbck(error);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
describe("#all(iterable)", () => {
|
|
237
|
-
it("should properly handle a single, iterable argument", () => {
|
|
238
|
-
const promise1 = Promise.resolve(3);
|
|
239
|
-
const promise2 = 42;
|
|
240
|
-
const promise3 = new Promise((resolve, reject) => {
|
|
241
|
-
setTimeout(resolve, 100, "foo");
|
|
242
|
-
});
|
|
243
|
-
return promises.all([promise1, promise2, promise3]).then((values) => {
|
|
244
|
-
expect(values).to.eql([3, 42, "foo"]);
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
it("should properly handle a single, iterable argument", () => {
|
|
248
|
-
const promise1 = Promise.resolve(3);
|
|
249
|
-
const promise2 = 42;
|
|
250
|
-
const promise3 = new Promise((resolve, reject) => {
|
|
251
|
-
setTimeout(resolve, 100, "foo");
|
|
252
|
-
});
|
|
253
|
-
return promises.all(promise1, promise2, promise3).then((values) => {
|
|
254
|
-
expect(values).to.eql([3, 42, "foo"]);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
it("should reject when given no arguments", () => {
|
|
258
|
-
return promises
|
|
259
|
-
.all()
|
|
260
|
-
.then(() => expect.fail("We expected promises#all to fail."))
|
|
261
|
-
.catch((error) => expect(error).to.be.an.instanceof(TypeError));
|
|
262
|
-
});
|
|
263
|
-
it("should resolve with [] when given [] as an argument", () => {
|
|
264
|
-
return promises.all([]).then((values) => {
|
|
265
|
-
expect(values).to.eql([]);
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
describe("#applyCallback(object, functionOnObjectWithCallback, args)", () => {
|
|
271
|
-
it("should call the callback if args contains a callback", (callback) => {
|
|
272
|
-
function functionWithCallback(a, b, cb) {
|
|
273
|
-
expect(a).to.eql("a");
|
|
274
|
-
expect(b).to.eql("b");
|
|
275
|
-
cb();
|
|
276
|
-
}
|
|
277
|
-
const returnValue = promises.applyCallback(null, functionWithCallback, [
|
|
278
|
-
"a",
|
|
279
|
-
"b",
|
|
280
|
-
callback,
|
|
281
|
-
]);
|
|
282
|
-
try {
|
|
283
|
-
expect(returnValue).to.be.undefined;
|
|
284
|
-
} catch (e) {
|
|
285
|
-
callback(e);
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
it("should resolve the returned Promise if args does not contain a callback", () => {
|
|
289
|
-
function functionWithCallback(a, b, cb) {
|
|
290
|
-
expect(a).to.eql("a");
|
|
291
|
-
expect(b).to.eql("b");
|
|
292
|
-
cb();
|
|
293
|
-
}
|
|
294
|
-
return promises.applyCallback(null, functionWithCallback, ["a", "b"]);
|
|
295
|
-
});
|
|
296
|
-
it("should throw an Error if functionWithCallback or args is null or undefined", () => {
|
|
297
|
-
function functionWithCallback(cb) {
|
|
298
|
-
cb();
|
|
299
|
-
}
|
|
300
|
-
expect(() => promises.applyCallback(null, functionWithCallback)).to.throw(
|
|
301
|
-
TypeError,
|
|
302
|
-
);
|
|
303
|
-
expect(() =>
|
|
304
|
-
promises.applyCallback(null, functionWithCallback, null),
|
|
305
|
-
).to.throw(TypeError);
|
|
306
|
-
// The following line sends functionWithCallback the wrong number of arguments.
|
|
307
|
-
expect(() =>
|
|
308
|
-
promises.applyCallback(null, functionWithCallback, "a"),
|
|
309
|
-
).to.throw(TypeError);
|
|
310
|
-
expect(() => promises.applyCallback(null, null, [() => {}])).to.throw(
|
|
311
|
-
TypeError,
|
|
312
|
-
);
|
|
313
|
-
expect(() => promises.applyCallback(null, "a", [() => {}])).to.throw(
|
|
314
|
-
TypeError,
|
|
315
|
-
);
|
|
316
|
-
expect(() => promises.applyCallback(null, null, [])).to.throw(TypeError);
|
|
317
|
-
expect(() => promises.applyCallback(null, "a", [])).to.throw(TypeError);
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
describe("#callbackify(promiseFunction)", () => {
|
|
322
|
-
it("should callbackify Promise functions with no arguments", (callback) => {
|
|
323
|
-
function promiseFunction() {
|
|
324
|
-
return Promise.resolve("foobar");
|
|
325
|
-
}
|
|
326
|
-
promises.callbackify(promiseFunction)((error, value) => {
|
|
327
|
-
try {
|
|
328
|
-
expect(error).to.be.null;
|
|
329
|
-
expect(value).to.eql("foobar");
|
|
330
|
-
callback();
|
|
331
|
-
} catch (err) {
|
|
332
|
-
callback(err);
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
it("should callbackify Promise functions with one arguments", (callback) => {
|
|
337
|
-
function promiseFunction(message) {
|
|
338
|
-
return Promise.resolve(message);
|
|
339
|
-
}
|
|
340
|
-
promises.callbackify(promiseFunction)("foobar", (error, value) => {
|
|
341
|
-
try {
|
|
342
|
-
expect(error).to.be.null;
|
|
343
|
-
expect(value).to.eql("foobar");
|
|
344
|
-
callback();
|
|
345
|
-
} catch (err) {
|
|
346
|
-
callback(err);
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
it("should callbackify Promise functions with two arguments", (callback) => {
|
|
351
|
-
function promiseFunction(a, b) {
|
|
352
|
-
return Promise.resolve(a + b);
|
|
353
|
-
}
|
|
354
|
-
promises.callbackify(promiseFunction)("foo", "bar", (error, value) => {
|
|
355
|
-
try {
|
|
356
|
-
expect(error).to.be.null;
|
|
357
|
-
expect(value).to.eql("foobar");
|
|
358
|
-
callback();
|
|
359
|
-
} catch (err) {
|
|
360
|
-
callback(err);
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
it("should cache callbackified functions", () => {
|
|
365
|
-
function promiseFunction(a, b) {
|
|
366
|
-
return Promise.resolve(a + b);
|
|
367
|
-
}
|
|
368
|
-
const a = promises.callbackify(promiseFunction);
|
|
369
|
-
const b = promises.callbackify(promiseFunction);
|
|
370
|
-
expect(a === b).to.be.ok;
|
|
371
|
-
});
|
|
372
|
-
it("should throw an error if promiseFunction is not a function", () => {
|
|
373
|
-
expect(() => promises.callbackify()).to.throw(TypeError);
|
|
374
|
-
expect(() => promises.callbackify(null)).to.throw(TypeError);
|
|
375
|
-
expect(() => promises.callbackify("a")).to.throw(TypeError);
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
describe("#promisify(functionWithCallback)", () => {
|
|
380
|
-
it("should promisify callback functions with one argument", () => {
|
|
381
|
-
function functionWithCallback(callback) {
|
|
382
|
-
callback();
|
|
383
|
-
}
|
|
384
|
-
return promises.promisify(functionWithCallback)();
|
|
385
|
-
});
|
|
386
|
-
it("should promisify callback functions with two arguments", () => {
|
|
387
|
-
function functionWithCallback(a, callback) {
|
|
388
|
-
expect(a).to.eql("a");
|
|
389
|
-
callback();
|
|
390
|
-
}
|
|
391
|
-
return promises.promisify(functionWithCallback)("a");
|
|
392
|
-
});
|
|
393
|
-
it("should promisify callback functions with three arguments", () => {
|
|
394
|
-
function functionWithCallback(a, b, callback) {
|
|
395
|
-
expect(a).to.eql("a");
|
|
396
|
-
expect(b).to.eql("b");
|
|
397
|
-
callback();
|
|
398
|
-
}
|
|
399
|
-
return promises.promisify(functionWithCallback)("a", "b");
|
|
400
|
-
});
|
|
401
|
-
it("should cache promisified functions", () => {
|
|
402
|
-
function functionWithCallback(a, b, callback) {
|
|
403
|
-
expect(a).to.eql("a");
|
|
404
|
-
expect(b).to.eql("b");
|
|
405
|
-
callback();
|
|
406
|
-
}
|
|
407
|
-
const a = promises.promisify(functionWithCallback);
|
|
408
|
-
const b = promises.promisify(functionWithCallback);
|
|
409
|
-
expect(a === b).to.be.ok;
|
|
410
|
-
});
|
|
411
|
-
it("should reject if functionWithCallback is not a function", () => {
|
|
412
|
-
expect(() => promises.promisify()).to.throw(TypeError);
|
|
413
|
-
expect(() => promises.promisify(null)).to.throw(TypeError);
|
|
414
|
-
expect(() => promises.promisify("random")).to.throw(TypeError);
|
|
415
|
-
});
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
describe("#callCallback", () => {
|
|
419
|
-
it("should handle functions with only a callback", () => {
|
|
420
|
-
function functionWithCallback(callback) {
|
|
421
|
-
callback();
|
|
422
|
-
}
|
|
423
|
-
return promises.callCallback(this, functionWithCallback);
|
|
424
|
-
});
|
|
425
|
-
it("should handle functions with multiple arguments", () => {
|
|
426
|
-
function functionWithCallback(x, y, z, callback) {
|
|
427
|
-
expect(x).to.equal(1);
|
|
428
|
-
expect(y).to.equal(2);
|
|
429
|
-
expect(z).to.equal(3);
|
|
430
|
-
callback(null, x + y + z);
|
|
431
|
-
}
|
|
432
|
-
return promises
|
|
433
|
-
.callCallback(this, functionWithCallback, 1, 2, 3)
|
|
434
|
-
.then((result) => {
|
|
435
|
-
expect(result).to.equal(6);
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
it("should throw an Error if functionWithCallback or args is null or undefined", () => {
|
|
439
|
-
function functionWithCallback(cb) {
|
|
440
|
-
cb();
|
|
441
|
-
}
|
|
442
|
-
// The following line sends functionWithCallback the wrong number of arguments.
|
|
443
|
-
const a = promises
|
|
444
|
-
.callCallback(null, functionWithCallback, "a")
|
|
445
|
-
.then(() => expect.fail("We expected call to throw an error."))
|
|
446
|
-
.catch((error) => expect(error).to.be.an.instanceof(TypeError));
|
|
447
|
-
expect(() => promises.callCallback(null, null)).to.throw(TypeError);
|
|
448
|
-
expect(() => promises.callCallback(null, "a")).to.throw(TypeError);
|
|
449
|
-
return a;
|
|
450
|
-
});
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
describe("#race(iterable)", () => {
|
|
454
|
-
it("should handle a single, iterable argument", () => {
|
|
455
|
-
const promise1 = new Promise((resolve, reject) => {
|
|
456
|
-
setTimeout(resolve, 500, "one");
|
|
457
|
-
});
|
|
458
|
-
const promise2 = new Promise((resolve, reject) => {
|
|
459
|
-
setTimeout(resolve, 100, "two");
|
|
460
|
-
});
|
|
461
|
-
return promises.race([promise1, promise2]).then((value) => {
|
|
462
|
-
expect(value).to.eql("two");
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
it("should handle multiple arguments", () => {
|
|
466
|
-
const promise1 = new Promise((resolve, reject) => {
|
|
467
|
-
setTimeout(resolve, 500, "one");
|
|
468
|
-
});
|
|
469
|
-
const promise2 = new Promise((resolve, reject) => {
|
|
470
|
-
setTimeout(resolve, 100, "two");
|
|
471
|
-
});
|
|
472
|
-
return promises.race(promise1, promise2).then((value) => {
|
|
473
|
-
expect(value).to.eql("two");
|
|
474
|
-
});
|
|
475
|
-
});
|
|
476
|
-
});
|
|
477
|
-
});
|