node-addon-api 5.0.0 → 6.0.0
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/README.md +36 -12
- package/index.js +3 -3
- package/napi-inl.deprecated.h +121 -127
- package/napi-inl.h +1178 -1144
- package/napi.h +2786 -2675
- package/package.json +42 -1
- package/tools/check-napi.js +13 -14
- package/tools/conversion.js +161 -169
- package/tools/eslint-format.js +9 -1
package/tools/conversion.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
|
|
3
|
-
'use strict'
|
|
3
|
+
'use strict';
|
|
4
4
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
@@ -15,255 +15,247 @@ if (!dir) {
|
|
|
15
15
|
const NodeApiVersion = require('../package.json').version;
|
|
16
16
|
|
|
17
17
|
const disable = args[1];
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
let ConfigFileOperations;
|
|
19
|
+
if (disable !== '--disable' && dir !== '--disable') {
|
|
20
|
+
ConfigFileOperations = {
|
|
20
21
|
'package.json': [
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
[/([ ]*)"dependencies": {/g, '$1"dependencies": {\n$1 "node-addon-api": "' + NodeApiVersion + '",'],
|
|
23
|
+
[/[ ]*"nan": *"[^"]+"(,|)[\n\r]/g, '']
|
|
23
24
|
],
|
|
24
25
|
'binding.gyp': [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
[/([ ]*)'include_dirs': \[/g, '$1\'include_dirs\': [\n$1 \'<!(node -p "require(\\\'node-addon-api\\\').include_dir")\','],
|
|
27
|
+
[/([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1 "<!(node -p \\"require(\'node-addon-api\').include_dir\\")",'],
|
|
28
|
+
[/[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, ''],
|
|
29
|
+
[/([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n $2cflags!$2: [ $2-fno-exceptions$2 ],\n $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n $2xcode_settings$2: { $2GCC_ENABLE_CPP_EXCEPTIONS$2: $2YES$2,\n $2CLANG_CXX_LIBRARY$2: $2libc++$2,\n $2MACOSX_DEPLOYMENT_TARGET$2: $210.7$2,\n },\n $2msvs_settings$2: {\n $2VCCLCompilerTool$2: { $2ExceptionHandling$2: 1 },\n },']
|
|
29
30
|
]
|
|
30
31
|
};
|
|
31
32
|
} else {
|
|
32
|
-
|
|
33
|
+
ConfigFileOperations = {
|
|
33
34
|
'package.json': [
|
|
34
|
-
[
|
|
35
|
-
[
|
|
35
|
+
[/([ ]*)"dependencies": {/g, '$1"dependencies": {\n$1 "node-addon-api": "' + NodeApiVersion + '",'],
|
|
36
|
+
[/[ ]*"nan": *"[^"]+"(,|)[\n\r]/g, '']
|
|
36
37
|
],
|
|
37
38
|
'binding.gyp': [
|
|
38
|
-
[
|
|
39
|
-
[
|
|
40
|
-
[
|
|
41
|
-
[
|
|
39
|
+
[/([ ]*)'include_dirs': \[/g, '$1\'include_dirs\': [\n$1 \'<!(node -p "require(\\\'node-addon-api\\\').include_dir")\','],
|
|
40
|
+
[/([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1 "<!(node -p \'require(\\"node-addon-api\\").include_dir\')",'],
|
|
41
|
+
[/[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, ''],
|
|
42
|
+
[/([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n $2cflags!$2: [ $2-fno-exceptions$2 ],\n $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n $2defines$2: [ $2NAPI_DISABLE_CPP_EXCEPTIONS$2 ],\n $2conditions$2: [\n [\'OS=="win"\', { $2defines$2: [ $2_HAS_EXCEPTIONS=1$2 ] }]\n ]']
|
|
42
43
|
]
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
[
|
|
47
|
+
const SourceFileOperations = [
|
|
48
|
+
[/Nan::SetMethod\(target,[\s]*"(.*)"[\s]*,[\s]*([^)]+)\)/g, 'exports.Set(Napi::String::New(env, "$1"), Napi::Function::New(env, $2))'],
|
|
48
49
|
|
|
49
|
-
[
|
|
50
|
-
[
|
|
51
|
-
[
|
|
52
|
-
[
|
|
53
|
-
[
|
|
54
|
-
[
|
|
55
|
-
[
|
|
50
|
+
[/v8::Local<v8::FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);(?:\w+->Reset\(\1\))?\s+\1->SetClassName\(Nan::String::New\("(\w+)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$2", {'],
|
|
51
|
+
[/Local<FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);\s+(\w+)\.Reset\((\1)\);\s+\1->SetClassName\((Nan::String::New|Nan::New<(v8::)*String>)\("(.+?)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$6", {'],
|
|
52
|
+
[/Local<FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);(?:\w+->Reset\(\1\))?\s+\1->SetClassName\(Nan::String::New\("(\w+)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$2", {'],
|
|
53
|
+
[/Nan::New<v8::FunctionTemplate>\(([\w\d:]+)\)->GetFunction\(\)/g, 'Napi::Function::New(env, $1)'],
|
|
54
|
+
[/Nan::New<FunctionTemplate>\(([\w\d:]+)\)->GetFunction()/g, 'Napi::Function::New(env, $1);'],
|
|
55
|
+
[/Nan::New<v8::FunctionTemplate>\(([\w\d:]+)\)/g, 'Napi::Function::New(env, $1)'],
|
|
56
|
+
[/Nan::New<FunctionTemplate>\(([\w\d:]+)\)/g, 'Napi::Function::New(env, $1)'],
|
|
56
57
|
|
|
57
58
|
// FunctionTemplate to FunctionReference
|
|
58
|
-
[
|
|
59
|
-
[
|
|
60
|
-
[
|
|
61
|
-
[
|
|
62
|
-
[
|
|
63
|
-
[
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
[
|
|
67
|
-
[ /([ ]*)(?:\w+\.Reset\(\w+\);\s+)?\(target\)\.Set\("(\w+)",\s*Nan::GetFunction\((\w+)\)\);/gm,
|
|
59
|
+
[/Nan::Persistent<(v8::)*FunctionTemplate>/g, 'Napi::FunctionReference'],
|
|
60
|
+
[/Nan::Persistent<(v8::)*Function>/g, 'Napi::FunctionReference'],
|
|
61
|
+
[/v8::Local<v8::FunctionTemplate>/g, 'Napi::FunctionReference'],
|
|
62
|
+
[/Local<FunctionTemplate>/g, 'Napi::FunctionReference'],
|
|
63
|
+
[/v8::FunctionTemplate/g, 'Napi::FunctionReference'],
|
|
64
|
+
[/FunctionTemplate/g, 'Napi::FunctionReference'],
|
|
65
|
+
|
|
66
|
+
[/([ ]*)Nan::SetPrototypeMethod\(\w+, "(\w+)", (\w+)\);/g, '$1InstanceMethod("$2", &$3),'],
|
|
67
|
+
[/([ ]*)(?:\w+\.Reset\(\w+\);\s+)?\(target\)\.Set\("(\w+)",\s*Nan::GetFunction\((\w+)\)\);/gm,
|
|
68
68
|
'});\n\n' +
|
|
69
69
|
'$1constructor = Napi::Persistent($3);\n' +
|
|
70
70
|
'$1constructor.SuppressDestruct();\n' +
|
|
71
|
-
'$1target.Set("$2", $3);'
|
|
72
|
-
|
|
71
|
+
'$1target.Set("$2", $3);'],
|
|
73
72
|
|
|
74
73
|
// TODO: Other attribute combinations
|
|
75
|
-
[
|
|
76
|
-
'static_cast<napi_property_attributes>(napi_enumerable | napi_configurable)'
|
|
74
|
+
[/static_cast<PropertyAttribute>\(ReadOnly\s*\|\s*DontDelete\)/gm,
|
|
75
|
+
'static_cast<napi_property_attributes>(napi_enumerable | napi_configurable)'],
|
|
77
76
|
|
|
78
|
-
[
|
|
77
|
+
[/([\w\d:<>]+?)::Cast\((.+?)\)/g, '$2.As<$1>()'],
|
|
79
78
|
|
|
80
|
-
[
|
|
81
|
-
[
|
|
82
|
-
[
|
|
79
|
+
[/\*Nan::Utf8String\(([^)]+)\)/g, '$1->As<Napi::String>().Utf8Value().c_str()'],
|
|
80
|
+
[/Nan::Utf8String +(\w+)\(([^)]+)\)/g, 'std::string $1 = $2.As<Napi::String>()'],
|
|
81
|
+
[/Nan::Utf8String/g, 'std::string'],
|
|
83
82
|
|
|
84
|
-
[
|
|
85
|
-
[
|
|
86
|
-
[
|
|
83
|
+
[/v8::String::Utf8Value (.+?)\((.+?)\)/g, 'Napi::String $1(env, $2)'],
|
|
84
|
+
[/String::Utf8Value (.+?)\((.+?)\)/g, 'Napi::String $1(env, $2)'],
|
|
85
|
+
[/\.length\(\)/g, '.Length()'],
|
|
87
86
|
|
|
88
|
-
[
|
|
87
|
+
[/Nan::MakeCallback\(([^,]+),[\s\\]+([^,]+),/gm, '$2.MakeCallback($1,'],
|
|
89
88
|
|
|
90
|
-
[
|
|
91
|
-
[
|
|
89
|
+
[/class\s+(\w+)\s*:\s*public\s+Nan::ObjectWrap/g, 'class $1 : public Napi::ObjectWrap<$1>'],
|
|
90
|
+
[/(\w+)\(([^)]*)\)\s*:\s*Nan::ObjectWrap\(\)\s*(,)?/gm, '$1($2) : Napi::ObjectWrap<$1>()$3'],
|
|
92
91
|
|
|
93
92
|
// HandleOKCallback to OnOK
|
|
94
|
-
[
|
|
93
|
+
[/HandleOKCallback/g, 'OnOK'],
|
|
95
94
|
// HandleErrorCallback to OnError
|
|
96
|
-
[
|
|
95
|
+
[/HandleErrorCallback/g, 'OnError'],
|
|
97
96
|
|
|
98
97
|
// ex. .As<Function>() to .As<Napi::Object>()
|
|
99
|
-
[
|
|
100
|
-
[
|
|
98
|
+
[/\.As<v8::(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>\(\)/g, '.As<Napi::$1>()'],
|
|
99
|
+
[/\.As<(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>\(\)/g, '.As<Napi::$1>()'],
|
|
101
100
|
|
|
102
101
|
// ex. Nan::New<Number>(info[0]) to Napi::Number::New(info[0])
|
|
103
|
-
[
|
|
104
|
-
[
|
|
105
|
-
[
|
|
106
|
-
[
|
|
107
|
-
[
|
|
108
|
-
[
|
|
109
|
-
[
|
|
110
|
-
[
|
|
111
|
-
[
|
|
102
|
+
[/Nan::New<(v8::)*Integer>\((.+?)\)/g, 'Napi::Number::New(env, $2)'],
|
|
103
|
+
[/Nan::New\(([0-9.]+)\)/g, 'Napi::Number::New(env, $1)'],
|
|
104
|
+
[/Nan::New<(v8::)*String>\("(.+?)"\)/g, 'Napi::String::New(env, "$2")'],
|
|
105
|
+
[/Nan::New\("(.+?)"\)/g, 'Napi::String::New(env, "$1")'],
|
|
106
|
+
[/Nan::New<(v8::)*(.+?)>\(\)/g, 'Napi::$2::New(env)'],
|
|
107
|
+
[/Nan::New<(.+?)>\(\)/g, 'Napi::$1::New(env)'],
|
|
108
|
+
[/Nan::New<(v8::)*(.+?)>\(/g, 'Napi::$2::New(env, '],
|
|
109
|
+
[/Nan::New<(.+?)>\(/g, 'Napi::$1::New(env, '],
|
|
110
|
+
[/Nan::NewBuffer\(/g, 'Napi::Buffer<char>::New(env, '],
|
|
112
111
|
// TODO: Properly handle this
|
|
113
|
-
[
|
|
112
|
+
[/Nan::New\(/g, 'Napi::New(env, '],
|
|
114
113
|
|
|
115
|
-
[
|
|
116
|
-
[
|
|
114
|
+
[/\.IsInt32\(\)/g, '.IsNumber()'],
|
|
115
|
+
[/->IsInt32\(\)/g, '.IsNumber()'],
|
|
117
116
|
|
|
118
|
-
|
|
119
|
-
[
|
|
120
|
-
[
|
|
121
|
-
[
|
|
122
|
-
[
|
|
123
|
-
[ /(.+?)->NumberValue\(\)/g, '$1.As<Napi::Number>().DoubleValue()' ],
|
|
117
|
+
[/(.+?)->BooleanValue\(\)/g, '$1.As<Napi::Boolean>().Value()'],
|
|
118
|
+
[/(.+?)->Int32Value\(\)/g, '$1.As<Napi::Number>().Int32Value()'],
|
|
119
|
+
[/(.+?)->Uint32Value\(\)/g, '$1.As<Napi::Number>().Uint32Value()'],
|
|
120
|
+
[/(.+?)->IntegerValue\(\)/g, '$1.As<Napi::Number>().Int64Value()'],
|
|
121
|
+
[/(.+?)->NumberValue\(\)/g, '$1.As<Napi::Number>().DoubleValue()'],
|
|
124
122
|
|
|
125
123
|
// ex. Nan::To<bool>(info[0]) to info[0].Value()
|
|
126
|
-
[
|
|
127
|
-
[
|
|
124
|
+
[/Nan::To<v8::(Boolean|String|Number|Object|Array|Symbol|Function)>\((.+?)\)/g, '$2.To<Napi::$1>()'],
|
|
125
|
+
[/Nan::To<(Boolean|String|Number|Object|Array|Symbol|Function)>\((.+?)\)/g, '$2.To<Napi::$1>()'],
|
|
128
126
|
// ex. Nan::To<bool>(info[0]) to info[0].As<Napi::Boolean>().Value()
|
|
129
|
-
[
|
|
127
|
+
[/Nan::To<bool>\((.+?)\)/g, '$1.As<Napi::Boolean>().Value()'],
|
|
130
128
|
// ex. Nan::To<int>(info[0]) to info[0].As<Napi::Number>().Int32Value()
|
|
131
|
-
[
|
|
129
|
+
[/Nan::To<int>\((.+?)\)/g, '$1.As<Napi::Number>().Int32Value()'],
|
|
132
130
|
// ex. Nan::To<int32_t>(info[0]) to info[0].As<Napi::Number>().Int32Value()
|
|
133
|
-
[
|
|
131
|
+
[/Nan::To<int32_t>\((.+?)\)/g, '$1.As<Napi::Number>().Int32Value()'],
|
|
134
132
|
// ex. Nan::To<uint32_t>(info[0]) to info[0].As<Napi::Number>().Uint32Value()
|
|
135
|
-
[
|
|
133
|
+
[/Nan::To<uint32_t>\((.+?)\)/g, '$1.As<Napi::Number>().Uint32Value()'],
|
|
136
134
|
// ex. Nan::To<int64_t>(info[0]) to info[0].As<Napi::Number>().Int64Value()
|
|
137
|
-
[
|
|
135
|
+
[/Nan::To<int64_t>\((.+?)\)/g, '$1.As<Napi::Number>().Int64Value()'],
|
|
138
136
|
// ex. Nan::To<float>(info[0]) to info[0].As<Napi::Number>().FloatValue()
|
|
139
|
-
[
|
|
137
|
+
[/Nan::To<float>\((.+?)\)/g, '$1.As<Napi::Number>().FloatValue()'],
|
|
140
138
|
// ex. Nan::To<double>(info[0]) to info[0].As<Napi::Number>().DoubleValue()
|
|
141
|
-
[
|
|
142
|
-
|
|
143
|
-
[ /Nan::New\((\w+)\)->HasInstance\((\w+)\)/g, '$2.InstanceOf($1.Value())' ],
|
|
139
|
+
[/Nan::To<double>\((.+?)\)/g, '$1.As<Napi::Number>().DoubleValue()'],
|
|
144
140
|
|
|
145
|
-
[
|
|
146
|
-
[ /\.Has\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\)/gm, '.Has($1)' ],
|
|
147
|
-
[ /\.Has\([\s|\\]*Nan::New\(([^)]+)\)\)/gm, '.Has($1)' ],
|
|
141
|
+
[/Nan::New\((\w+)\)->HasInstance\((\w+)\)/g, '$2.InstanceOf($1.Value())'],
|
|
148
142
|
|
|
149
|
-
[
|
|
150
|
-
[
|
|
151
|
-
[
|
|
143
|
+
[/Nan::Has\(([^,]+),\s*/gm, '($1).Has('],
|
|
144
|
+
[/\.Has\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\)/gm, '.Has($1)'],
|
|
145
|
+
[/\.Has\([\s|\\]*Nan::New\(([^)]+)\)\)/gm, '.Has($1)'],
|
|
152
146
|
|
|
153
|
-
[
|
|
154
|
-
[
|
|
155
|
-
[
|
|
147
|
+
[/Nan::Get\(([^,]+),\s*/gm, '($1).Get('],
|
|
148
|
+
[/\.Get\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\)/gm, '.Get($1)'],
|
|
149
|
+
[/\.Get\([\s|\\]*Nan::New\(([^)]+)\)\)/gm, '.Get($1)'],
|
|
156
150
|
|
|
151
|
+
[/Nan::Set\(([^,]+),\s*/gm, '($1).Set('],
|
|
152
|
+
[/\.Set\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\s*,/gm, '.Set($1,'],
|
|
153
|
+
[/\.Set\([\s|\\]*Nan::New\(([^)]+)\)\s*,/gm, '.Set($1,'],
|
|
157
154
|
|
|
158
155
|
// ex. node::Buffer::HasInstance(info[0]) to info[0].IsBuffer()
|
|
159
|
-
[
|
|
156
|
+
[/node::Buffer::HasInstance\((.+?)\)/g, '$1.IsBuffer()'],
|
|
160
157
|
// ex. node::Buffer::Length(info[0]) to info[0].Length()
|
|
161
|
-
[
|
|
158
|
+
[/node::Buffer::Length\((.+?)\)/g, '$1.As<Napi::Buffer<char>>().Length()'],
|
|
162
159
|
// ex. node::Buffer::Data(info[0]) to info[0].Data()
|
|
163
|
-
[
|
|
164
|
-
[
|
|
160
|
+
[/node::Buffer::Data\((.+?)\)/g, '$1.As<Napi::Buffer<char>>().Data()'],
|
|
161
|
+
[/Nan::CopyBuffer\(/g, 'Napi::Buffer::Copy(env, '],
|
|
165
162
|
|
|
166
163
|
// Nan::AsyncQueueWorker(worker)
|
|
167
|
-
[
|
|
168
|
-
[
|
|
164
|
+
[/Nan::AsyncQueueWorker\((.+)\);/g, '$1.Queue();'],
|
|
165
|
+
[/Nan::(Undefined|Null|True|False)\(\)/g, 'env.$1()'],
|
|
169
166
|
|
|
170
167
|
// Nan::ThrowError(error) to Napi::Error::New(env, error).ThrowAsJavaScriptException()
|
|
171
|
-
[
|
|
172
|
-
[
|
|
173
|
-
[
|
|
168
|
+
[/([ ]*)return Nan::Throw(\w*?)Error\((.+?)\);/g, '$1Napi::$2Error::New(env, $3).ThrowAsJavaScriptException();\n$1return env.Null();'],
|
|
169
|
+
[/Nan::Throw(\w*?)Error\((.+?)\);\n(\s*)return;/g, 'Napi::$1Error::New(env, $2).ThrowAsJavaScriptException();\n$3return env.Null();'],
|
|
170
|
+
[/Nan::Throw(\w*?)Error\((.+?)\);/g, 'Napi::$1Error::New(env, $2).ThrowAsJavaScriptException();\n'],
|
|
174
171
|
// Nan::RangeError(error) to Napi::RangeError::New(env, error)
|
|
175
|
-
[
|
|
172
|
+
[/Nan::(\w*?)Error\((.+)\)/g, 'Napi::$1Error::New(env, $2)'],
|
|
176
173
|
|
|
177
|
-
[
|
|
174
|
+
[/Nan::Set\((.+?),\n* *(.+?),\n* *(.+?),\n* *(.+?)\)/g, '$1.Set($2, $3, $4)'],
|
|
178
175
|
|
|
179
|
-
[
|
|
180
|
-
[
|
|
181
|
-
[
|
|
182
|
-
[
|
|
176
|
+
[/Nan::(Escapable)?HandleScope\s+(\w+)\s*;/g, 'Napi::$1HandleScope $2(env);'],
|
|
177
|
+
[/Nan::(Escapable)?HandleScope/g, 'Napi::$1HandleScope'],
|
|
178
|
+
[/Nan::ForceSet\(([^,]+), ?/g, '$1->DefineProperty('],
|
|
179
|
+
[/\.ForceSet\(Napi::String::New\(env, "(\w+)"\),\s*?/g, '.DefineProperty("$1", '],
|
|
183
180
|
// [ /Nan::GetPropertyNames\(([^,]+)\)/, '$1->GetPropertyNames()' ],
|
|
184
|
-
[
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
[ /(.+)->Set\(/g, '$1.Set\(' ],
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
[ /Nan::Callback/g, 'Napi::FunctionReference' ],
|
|
191
|
-
|
|
181
|
+
[/Nan::Equals\(([^,]+),/g, '$1.StrictEquals('],
|
|
192
182
|
|
|
193
|
-
[
|
|
194
|
-
[ /Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target/g, 'Napi::Env& env, Napi::Object& target' ],
|
|
183
|
+
[/(.+)->Set\(/g, '$1.Set('],
|
|
195
184
|
|
|
196
|
-
[
|
|
197
|
-
[ /Nan::ObjectWrap::Unwrap<(\w+)>\((.*)\);/g, '$2.Unwrap<$1>();' ],
|
|
185
|
+
[/Nan::Callback/g, 'Napi::FunctionReference'],
|
|
198
186
|
|
|
199
|
-
[
|
|
200
|
-
[ /
|
|
187
|
+
[/Nan::Persistent<Object>/g, 'Napi::ObjectReference'],
|
|
188
|
+
[/Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target/g, 'Napi::Env& env, Napi::Object& target'],
|
|
201
189
|
|
|
202
|
-
[
|
|
203
|
-
[
|
|
204
|
-
[ /static\s*NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)' ],
|
|
205
|
-
[ /NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)' ],
|
|
206
|
-
[ /static\s*NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)' ],
|
|
207
|
-
[ /NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)' ],
|
|
208
|
-
[ /void Init\((v8::)*Local<(v8::)*Object> exports\)/g, 'Napi::Object Init(Napi::Env env, Napi::Object exports)' ],
|
|
209
|
-
[ /NAN_MODULE_INIT\(([\w\d:]+?)\);/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports);' ],
|
|
210
|
-
[ /NAN_MODULE_INIT\(([\w\d:]+?)\)/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports)' ],
|
|
190
|
+
[/(\w+)\*\s+(\w+)\s*=\s*Nan::ObjectWrap::Unwrap<\w+>\(info\.This\(\)\);/g, '$1* $2 = this;'],
|
|
191
|
+
[/Nan::ObjectWrap::Unwrap<(\w+)>\((.*)\);/g, '$2.Unwrap<$1>();'],
|
|
211
192
|
|
|
193
|
+
[/Nan::NAN_METHOD_RETURN_TYPE/g, 'void'],
|
|
194
|
+
[/NAN_INLINE/g, 'inline'],
|
|
212
195
|
|
|
213
|
-
[
|
|
214
|
-
[
|
|
196
|
+
[/Nan::NAN_METHOD_ARGS_TYPE/g, 'const Napi::CallbackInfo&'],
|
|
197
|
+
[/NAN_METHOD\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)'],
|
|
198
|
+
[/static\s*NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)'],
|
|
199
|
+
[/NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)'],
|
|
200
|
+
[/static\s*NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)'],
|
|
201
|
+
[/NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)'],
|
|
202
|
+
[/void Init\((v8::)*Local<(v8::)*Object> exports\)/g, 'Napi::Object Init(Napi::Env env, Napi::Object exports)'],
|
|
203
|
+
[/NAN_MODULE_INIT\(([\w\d:]+?)\);/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports);'],
|
|
204
|
+
[/NAN_MODULE_INIT\(([\w\d:]+?)\)/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports)'],
|
|
215
205
|
|
|
216
|
-
[
|
|
217
|
-
[
|
|
218
|
-
[ /Nan::FunctionCallbackInfo<(v8::)*Value>\s*&/g, 'Napi::CallbackInfo&' ],
|
|
206
|
+
[/::(Init(?:ialize)?)\(target\)/g, '::$1(env, target, module)'],
|
|
207
|
+
[/constructor_template/g, 'constructor'],
|
|
219
208
|
|
|
220
|
-
[
|
|
209
|
+
[/Nan::FunctionCallbackInfo<(v8::)?Value>[ ]*& [ ]*info\)[ ]*{\n*([ ]*)/gm, 'Napi::CallbackInfo& info) {\n$2Napi::Env env = info.Env();\n$2'],
|
|
210
|
+
[/Nan::FunctionCallbackInfo<(v8::)*Value>\s*&\s*info\);/g, 'Napi::CallbackInfo& info);'],
|
|
211
|
+
[/Nan::FunctionCallbackInfo<(v8::)*Value>\s*&/g, 'Napi::CallbackInfo&'],
|
|
221
212
|
|
|
222
|
-
[
|
|
223
|
-
[ /info\[([\w\d]+)\]->/g, 'info[$1].' ],
|
|
224
|
-
[ /info\.This\(\)->/g, 'info.This().' ],
|
|
225
|
-
[ /->Is(Object|String|Int32|Number)\(\)/g, '.Is$1()' ],
|
|
226
|
-
[ /info.GetReturnValue\(\).SetUndefined\(\)/g, 'return env.Undefined()' ],
|
|
227
|
-
[ /info\.GetReturnValue\(\)\.Set\(((\n|.)+?)\);/g, 'return $1;' ],
|
|
213
|
+
[/Buffer::HasInstance\(([^)]+)\)/g, '$1.IsBuffer()'],
|
|
228
214
|
|
|
215
|
+
[/info\[(\d+)\]->/g, 'info[$1].'],
|
|
216
|
+
[/info\[([\w\d]+)\]->/g, 'info[$1].'],
|
|
217
|
+
[/info\.This\(\)->/g, 'info.This().'],
|
|
218
|
+
[/->Is(Object|String|Int32|Number)\(\)/g, '.Is$1()'],
|
|
219
|
+
[/info.GetReturnValue\(\).SetUndefined\(\)/g, 'return env.Undefined()'],
|
|
220
|
+
[/info\.GetReturnValue\(\)\.Set\(((\n|.)+?)\);/g, 'return $1;'],
|
|
229
221
|
|
|
230
222
|
// ex. Local<Value> to Napi::Value
|
|
231
|
-
[
|
|
232
|
-
[
|
|
223
|
+
[/v8::Local<v8::(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>/g, 'Napi::$1'],
|
|
224
|
+
[/Local<(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>/g, 'Napi::$1'],
|
|
233
225
|
|
|
234
226
|
// Declare an env in helper functions that take a Napi::Value
|
|
235
|
-
[
|
|
227
|
+
[/(\w+)\(Napi::Value (\w+)(,\s*[^()]+)?\)\s*{\n*([ ]*)/gm, '$1(Napi::Value $2$3) {\n$4Napi::Env env = $2.Env();\n$4'],
|
|
236
228
|
|
|
237
229
|
// delete #include <node.h> and/or <v8.h>
|
|
238
|
-
[
|
|
230
|
+
[/#include +(<|")(?:node|nan).h("|>)/g, '#include $1napi.h$2\n#include $1uv.h$2'],
|
|
239
231
|
// NODE_MODULE to NODE_API_MODULE
|
|
240
|
-
[
|
|
241
|
-
[
|
|
242
|
-
[
|
|
232
|
+
[/NODE_MODULE/g, 'NODE_API_MODULE'],
|
|
233
|
+
[/Nan::/g, 'Napi::'],
|
|
234
|
+
[/nan.h/g, 'napi.h'],
|
|
243
235
|
|
|
244
236
|
// delete .FromJust()
|
|
245
|
-
[
|
|
237
|
+
[/\.FromJust\(\)/g, ''],
|
|
246
238
|
// delete .ToLocalCheck()
|
|
247
|
-
[
|
|
248
|
-
[
|
|
239
|
+
[/\.ToLocalChecked\(\)/g, ''],
|
|
240
|
+
[/^.*->SetInternalFieldCount\(.*$/gm, ''],
|
|
249
241
|
|
|
250
242
|
// replace using node; and/or using v8; to using Napi;
|
|
251
|
-
[
|
|
252
|
-
[
|
|
243
|
+
[/using (node|v8);/g, 'using Napi;'],
|
|
244
|
+
[/using namespace (node|Nan|v8);/g, 'using namespace Napi;'],
|
|
253
245
|
// delete using v8::Local;
|
|
254
|
-
[
|
|
246
|
+
[/using v8::Local;\n/g, ''],
|
|
255
247
|
// replace using v8::XXX; with using Napi::XXX
|
|
256
|
-
[
|
|
248
|
+
[/using v8::([A-Za-z]+);/g, 'using Napi::$1;']
|
|
257
249
|
|
|
258
250
|
];
|
|
259
251
|
|
|
260
|
-
|
|
261
|
-
paths.forEach(function(dirEntry) {
|
|
262
|
-
|
|
252
|
+
const paths = listFiles(dir);
|
|
253
|
+
paths.forEach(function (dirEntry) {
|
|
254
|
+
const filename = dirEntry.split('\\').pop().split('/').pop();
|
|
263
255
|
|
|
264
256
|
// Check whether the file is a source file or a config file
|
|
265
257
|
// then execute function accordingly
|
|
266
|
-
|
|
258
|
+
const sourcePattern = /.+\.h|.+\.cc|.+\.cpp/;
|
|
267
259
|
if (sourcePattern.test(filename)) {
|
|
268
260
|
convertFile(dirEntry, SourceFileOperations);
|
|
269
261
|
} else if (ConfigFileOperations[filename] != null) {
|
|
@@ -271,12 +263,12 @@ paths.forEach(function(dirEntry) {
|
|
|
271
263
|
}
|
|
272
264
|
});
|
|
273
265
|
|
|
274
|
-
function listFiles(dir, filelist) {
|
|
275
|
-
|
|
266
|
+
function listFiles (dir, filelist) {
|
|
267
|
+
const files = fs.readdirSync(dir);
|
|
276
268
|
filelist = filelist || [];
|
|
277
|
-
files.forEach(function(file) {
|
|
269
|
+
files.forEach(function (file) {
|
|
278
270
|
if (file === 'node_modules') {
|
|
279
|
-
return
|
|
271
|
+
return;
|
|
280
272
|
}
|
|
281
273
|
|
|
282
274
|
if (fs.statSync(path.join(dir, file)).isDirectory()) {
|
|
@@ -288,21 +280,21 @@ function listFiles(dir, filelist) {
|
|
|
288
280
|
return filelist;
|
|
289
281
|
}
|
|
290
282
|
|
|
291
|
-
function convert(content, operations) {
|
|
292
|
-
for (let i = 0; i < operations.length; i
|
|
293
|
-
|
|
283
|
+
function convert (content, operations) {
|
|
284
|
+
for (let i = 0; i < operations.length; i++) {
|
|
285
|
+
const operation = operations[i];
|
|
294
286
|
content = content.replace(operation[0], operation[1]);
|
|
295
287
|
}
|
|
296
288
|
return content;
|
|
297
289
|
}
|
|
298
290
|
|
|
299
|
-
function convertFile(fileName, operations) {
|
|
300
|
-
fs.readFile(fileName,
|
|
291
|
+
function convertFile (fileName, operations) {
|
|
292
|
+
fs.readFile(fileName, 'utf-8', function (err, file) {
|
|
301
293
|
if (err) throw err;
|
|
302
294
|
|
|
303
295
|
file = convert(file, operations);
|
|
304
296
|
|
|
305
|
-
fs.writeFile(fileName, file, function(err){
|
|
297
|
+
fs.writeFile(fileName, file, function (err) {
|
|
306
298
|
if (err) throw err;
|
|
307
299
|
});
|
|
308
300
|
});
|
package/tools/eslint-format.js
CHANGED
|
@@ -4,6 +4,8 @@ const spawn = require('child_process').spawnSync;
|
|
|
4
4
|
|
|
5
5
|
const filesToCheck = '*.js';
|
|
6
6
|
const FORMAT_START = process.env.FORMAT_START || 'main';
|
|
7
|
+
const IS_WIN = process.platform === 'win32';
|
|
8
|
+
const ESLINT_PATH = IS_WIN ? 'node_modules\\.bin\\eslint.cmd' : 'node_modules/.bin/eslint';
|
|
7
9
|
|
|
8
10
|
function main (args) {
|
|
9
11
|
let fix = false;
|
|
@@ -44,10 +46,16 @@ function main (args) {
|
|
|
44
46
|
if (fix) {
|
|
45
47
|
options.push('--fix');
|
|
46
48
|
}
|
|
47
|
-
|
|
49
|
+
|
|
50
|
+
const result = spawn(ESLINT_PATH, [...options], {
|
|
48
51
|
encoding: 'utf-8'
|
|
49
52
|
});
|
|
50
53
|
|
|
54
|
+
if (result.error && result.error.errno === 'ENOENT') {
|
|
55
|
+
console.error('Eslint not found! Eslint is supposed to be found at ', ESLINT_PATH);
|
|
56
|
+
return 2;
|
|
57
|
+
}
|
|
58
|
+
|
|
51
59
|
if (result.status === 1) {
|
|
52
60
|
console.error('Eslint error:', result.stdout);
|
|
53
61
|
const fixCmd = 'npm run lint:fix';
|