1 
2 /*
3  * Copyright (C) Nginx, Inc.
4  */
5 
6 #ifndef _NJS_PROMISE_H_INCLUDED_
7 #define _NJS_PROMISE_H_INCLUDED_
8 
9 
10 typedef enum {
11     NJS_PROMISE_PENDING = 0,
12     NJS_PROMISE_FULFILL,
13     NJS_PROMISE_REJECTED
14 } njs_promise_type_t;
15 
16 typedef struct {
17     njs_value_t               promise;
18     njs_value_t               resolve;
19     njs_value_t               reject;
20 } njs_promise_capability_t;
21 
22 typedef struct {
23     njs_promise_type_t        state;
24     njs_value_t               result;
25     njs_queue_t               fulfill_queue;
26     njs_queue_t               reject_queue;
27     njs_bool_t                is_handled;
28 } njs_promise_data_t;
29 
30 
31 njs_int_t njs_promise_constructor(njs_vm_t *vm, njs_value_t *args,
32     njs_uint_t nargs, njs_index_t unused);
33 njs_promise_capability_t *njs_promise_new_capability(njs_vm_t *vm,
34     njs_value_t *constructor);
35 njs_function_t *njs_promise_create_function(njs_vm_t *vm, size_t context_size);
36 njs_int_t njs_promise_perform_then(njs_vm_t *vm, njs_value_t *value,
37     njs_value_t *fulfilled, njs_value_t *rejected,
38     njs_promise_capability_t *capability);
39 njs_promise_t *njs_promise_resolve(njs_vm_t *vm, njs_value_t *constructor,
40     njs_value_t *x);
41 
42 
43 extern const njs_object_type_init_t  njs_promise_type_init;
44 
45 
46 #endif /* _NJS_PROMISE_H_INCLUDED_ */
47