-
Notifications
You must be signed in to change notification settings - Fork 125
/
jsUtils.mli
85 lines (64 loc) · 2.3 KB
/
jsUtils.mli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
(*
Copyright © 2011, 2012 MLstate
This file is part of Opa.
Opa is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.
Opa is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.
You should have received a copy of the GNU Affero General Public License
along with Opa. If not, see <http://www.gnu.org/licenses/>.
*)
(**
Utils on Javascript code
@author Mathieu Barbin
@author Valentin Gatien-Baron
@author Quentin Bourgerie
*)
(**
Native ident analysis.
Replace local native ident to global native ident when they are not
local to the considered code elt.
*)
val globalize_native_ident : JsAst.code_elt -> JsAst.code_elt
(**
Prefix every global identifier by "global.". Converts declarations
so that they still make sense, i.e.
var foo = bar; -> global.foo = bar;
Handle also corner cases such as replacing a real export
exports.foo = foo; -> global.foo = foo;
*)
val export_to_global_namespace : JsAst.code -> JsAst.code
(**
Collect all variable declarations in code and export them,
e.g.
{[
var foo = { bar: 1 };
function hello(name) {
console.log("Hello", name);
}
becomes
var foo = { bar: 1 };
function hello(name) {
console.log("Hello", name);
}
exports.foo = foo;
exports.hello = hello;
]}
Note that this currently doesn't work for exporting variables
that can change, e.g. a variable that holds a number whose value
changes during program execution. However, it does work with objects,
like in the above example
*)
val export_global_declarations : JsAst.code -> JsAst.code
(**
Generate a json value that can be used in a package.json file
*)
val basic_package_json : ?version:string -> string -> string -> string
(** {3 Comparisons} *)
val compare_ident : JsAst.ident -> JsAst.ident -> int
val compare_expr : JsAst.expr -> JsAst.expr -> int
val compare_statement : JsAst.statement -> JsAst.statement -> int
val compare_code : JsAst.code -> JsAst.code -> int