xservice-arkts 1.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/LICENSE +7 -0
- package/README.md +75 -0
- package/index.js +375 -0
- package/package.json +43 -0
- package/templates/arkts/.idea/arkts.iml +8 -0
- package/templates/arkts/.idea/modules.xml +8 -0
- package/templates/arkts/handler.ets +58 -0
- package/templates/arkts/loader.ets +17 -0
- package/templates/arkts/service (2).ets +54 -0
- package/templates/arkts/service.ets +54 -0
- package/templates/arkts/service_register.ets +19 -0
- package/templates/dart/handler.dart +38 -0
- package/templates/dart/loader.dart +10 -0
- package/templates/dart/service.dart +30 -0
- package/templates/dart/service_register.dart +15 -0
- package/templates/java/handler.java +45 -0
- package/templates/java/loader.java +12 -0
- package/templates/java/service.java +48 -0
- package/templates/java/service_register.java +12 -0
- package/templates/oc/handler.h +6 -0
- package/templates/oc/handler.mm +23 -0
- package/templates/oc/service.h +8 -0
- package/templates/oc/service.mm +32 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Jidong Chen
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# xservice-arkts
|
|
2
|
+
|
|
3
|
+
A tool to generate xservice_kit based flutter plugin with support for ArkTS/OHOS.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Generate Flutter plugin code for multiple platforms:
|
|
8
|
+
- Android (Java)
|
|
9
|
+
- iOS (Objective-C)
|
|
10
|
+
- Dart
|
|
11
|
+
- ArkTS/OHOS (HarmonyOS)
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g xservice-arkts
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
xservice-arkts <directory> [options]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Options
|
|
26
|
+
|
|
27
|
+
- `-o, --output <output>`: A directory to save the output
|
|
28
|
+
- `-t, --type <type>`: Input file type support json and yaml default is json
|
|
29
|
+
- `-p, --package <package>`: Java package
|
|
30
|
+
- `-a, --arkts`: Generate ArkTS code for OHOS
|
|
31
|
+
|
|
32
|
+
### Example
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
xservice-arkts ./services -o ./gen -p com.xservice_kit.demo -t yaml --arkts
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Input File Format
|
|
39
|
+
|
|
40
|
+
The tool supports both JSON and YAML formats for service definitions.
|
|
41
|
+
|
|
42
|
+
### Example YAML File
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
name: TestService
|
|
46
|
+
messages:
|
|
47
|
+
- name: getTestData
|
|
48
|
+
messageType: flutter
|
|
49
|
+
returnType: String
|
|
50
|
+
args:
|
|
51
|
+
- name: userId
|
|
52
|
+
type: String
|
|
53
|
+
- name: updateTestData
|
|
54
|
+
messageType: native
|
|
55
|
+
returnType: bool
|
|
56
|
+
args:
|
|
57
|
+
- name: data
|
|
58
|
+
type: Map
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Output
|
|
62
|
+
|
|
63
|
+
The tool generates the following directory structure:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
output/
|
|
67
|
+
├── java/ # Android code
|
|
68
|
+
├── oc/ # iOS code
|
|
69
|
+
├── dart/ # Flutter code
|
|
70
|
+
└── arkts/ # ArkTS/OHOS code (if --arkts is specified)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## License
|
|
74
|
+
|
|
75
|
+
ISC
|
package/index.js
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
var program = require('commander');
|
|
4
|
+
var Path = require('path');
|
|
5
|
+
var Mustache = require('mustache');
|
|
6
|
+
var YAML = require('js-yaml');
|
|
7
|
+
|
|
8
|
+
console.log('xservice-arkts tool package at');
|
|
9
|
+
console.log(__dirname);
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
program
|
|
14
|
+
.arguments('<directory>')
|
|
15
|
+
.option('-o , --output <output>', 'A directory to save the output')
|
|
16
|
+
.option('-t , --type <type>', 'input file type support json and yaml default is json')
|
|
17
|
+
.option('-p , --package <package>', 'Java package')
|
|
18
|
+
.option('-a , --arkts', 'generate ArkTS code')
|
|
19
|
+
.action(function (directory) {
|
|
20
|
+
program.directory = directory;
|
|
21
|
+
start(directory);
|
|
22
|
+
}).parse(process.argv);
|
|
23
|
+
|
|
24
|
+
function toJsonString(rawdata) {
|
|
25
|
+
return YAML.safeLoad(rawdata);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function start(input_directory) {
|
|
29
|
+
const fs = require('fs');
|
|
30
|
+
let jsonAll = new Array();
|
|
31
|
+
|
|
32
|
+
if (program.type == 'yaml') {
|
|
33
|
+
fs.readdirSync(input_directory).forEach(file => {
|
|
34
|
+
if (file.includes('yaml') || file.includes('yml')) {
|
|
35
|
+
let realPath = Path.join(input_directory, file);
|
|
36
|
+
let rawdata = fs.readFileSync(realPath, 'utf8');
|
|
37
|
+
let jsonService = toJsonString(rawdata);
|
|
38
|
+
jsonAll.push(jsonService);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
fs.readdirSync(input_directory).forEach(file => {
|
|
43
|
+
if (file.includes('json')) {
|
|
44
|
+
let realPath = Path.join(input_directory, file);
|
|
45
|
+
let rawdata = fs.readFileSync(realPath, 'utf8');
|
|
46
|
+
let jsonService = JSON.parse(rawdata);
|
|
47
|
+
jsonAll.push(jsonService);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var serviceNames = [];
|
|
53
|
+
console.log('Start generating...');
|
|
54
|
+
console.log('[input] -> ' + input_directory);
|
|
55
|
+
console.log('[package] -> ' + program.package);
|
|
56
|
+
console.log('---------------------------');
|
|
57
|
+
for (var i = 0; i < jsonAll.length; i++) {
|
|
58
|
+
console.log(jsonAll[i]);
|
|
59
|
+
formate_data(jsonAll[i]);
|
|
60
|
+
gen_java(jsonAll[i]);
|
|
61
|
+
gen_oc(jsonAll[i]);
|
|
62
|
+
gen_dart(jsonAll[i]);
|
|
63
|
+
if (program.arkts) {
|
|
64
|
+
gen_arkts(jsonAll[i]);
|
|
65
|
+
}
|
|
66
|
+
serviceNames.push({
|
|
67
|
+
"name": jsonAll[i].name,
|
|
68
|
+
"service_dart_file_name": dart_file_name(jsonAll[i].name)
|
|
69
|
+
});
|
|
70
|
+
console.log('Generating ' + jsonAll[i].name + " success!");
|
|
71
|
+
console.log('============================= ' + jsonAll[i].name);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
jsonAll.pkg_name = program.package;
|
|
75
|
+
jsonAll.services = serviceNames;
|
|
76
|
+
|
|
77
|
+
console.log('Generating loaders');
|
|
78
|
+
gen_loader(jsonAll);
|
|
79
|
+
console.log('Generating Fnished. All success!');
|
|
80
|
+
console.log('!!!Please find the output under directory ' + program.output);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function default_dart_value(type) {
|
|
84
|
+
var mapper = {
|
|
85
|
+
"int": "0",
|
|
86
|
+
"double": "0.0",
|
|
87
|
+
"bool": "false",
|
|
88
|
+
"String": '""',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
var mappedType = mapper[type];
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if (mappedType) {
|
|
95
|
+
return mappedType;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (type.includes("List")) {
|
|
99
|
+
return "[]";
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (type.includes("Map")) {
|
|
103
|
+
return "{}";
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return mappedType;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function formate_data(jsonService) {
|
|
110
|
+
jsonService.service_name = jsonService.name;
|
|
111
|
+
jsonService.service_dart_file_name = dart_file_name(jsonService.name);
|
|
112
|
+
|
|
113
|
+
var nativeMessages = [];
|
|
114
|
+
var flutterMessages = [];
|
|
115
|
+
for (var i = 0; i < jsonService.messages.length; i++) {
|
|
116
|
+
var msg = jsonService.messages[i];
|
|
117
|
+
msg.service_dart_file_name = jsonService.service_dart_file_name;
|
|
118
|
+
msg.msg_dart_file_name = dart_file_name(msg.name);
|
|
119
|
+
msg.return_oc_type = dart_to_oc_type(msg.returnType);
|
|
120
|
+
msg.return_oc_ob_type = dart_to_oc_object_type(msg.returnType);
|
|
121
|
+
msg.return_java_type = dart_to_java_type(msg.returnType);
|
|
122
|
+
msg.return_arkts_type = dart_to_arkts_type(msg.returnType);
|
|
123
|
+
msg.service_name = jsonService.name;
|
|
124
|
+
msg.last = (i == jsonService.messages.length - 1);
|
|
125
|
+
msg.pkg_name = program.package;
|
|
126
|
+
msg.default_return_value = default_dart_value(msg.returnType);
|
|
127
|
+
msg.return_map = msg.returnType === "Map";
|
|
128
|
+
|
|
129
|
+
for (var j = 0; j < msg.args.length; j++) {
|
|
130
|
+
var arg = msg.args[j];
|
|
131
|
+
arg.oc_type = dart_to_oc_type(arg.type);
|
|
132
|
+
arg.java_type = dart_to_java_type(arg.type);
|
|
133
|
+
arg.oc_ob_type = dart_to_oc_object_type(arg.type);
|
|
134
|
+
arg.arkts_type = dart_to_arkts_type(arg.type);
|
|
135
|
+
arg.last = (j == msg.args.length - 1);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (msg.messageType == "flutter") {
|
|
139
|
+
flutterMessages.push(msg);
|
|
140
|
+
} else {
|
|
141
|
+
nativeMessages.push(msg);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
jsonService.native_msg = nativeMessages;
|
|
146
|
+
jsonService.flutter_msg = flutterMessages;
|
|
147
|
+
jsonService.pkg_name = program.package;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function gen_loader(jsonAll) {
|
|
151
|
+
gen_java_loader(jsonAll);
|
|
152
|
+
gen_dart_loader(jsonAll);
|
|
153
|
+
if (program.arkts) {
|
|
154
|
+
gen_arkts_loader(jsonAll);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function gen_java_loader(jsonAll) {
|
|
159
|
+
generate("java/loader.java", jsonAll, "java/loader/ServiceLoader.java");
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function gen_dart_loader(jsonAll) {
|
|
163
|
+
generate("dart/loader.dart", jsonAll, "dart/loader/service_loader.dart");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function gen_arkts_loader(jsonAll) {
|
|
167
|
+
const context = {
|
|
168
|
+
pkg_name: jsonAll.pkg_name,
|
|
169
|
+
services: jsonAll.services || []
|
|
170
|
+
};
|
|
171
|
+
generate("arkts/loader.ets", context, "arkts/loader/ServiceLoader.ets");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function gen_dart(jsonService) {
|
|
175
|
+
console.log('Generating dart for' + jsonService.name);
|
|
176
|
+
var base = "dart/" + jsonService.name + "/";
|
|
177
|
+
generate("dart/service.dart", jsonService, base + "service/" + jsonService.service_dart_file_name + ".dart");
|
|
178
|
+
generate("dart/service_register.dart", jsonService, base + "service/" + jsonService.service_dart_file_name + "_" + "register" + ".dart");
|
|
179
|
+
for (var i = 0; i < jsonService.native_msg.length; i++) {
|
|
180
|
+
var msg = jsonService.native_msg[i];
|
|
181
|
+
generate("dart/handler.dart", msg, base + "handlers/" + jsonService.service_dart_file_name + "_" + msg.msg_dart_file_name + ".dart");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function gen_java(jsonService) {
|
|
186
|
+
console.log('Generating java for' + jsonService.name);
|
|
187
|
+
var base = "java/" + jsonService.name + "/";
|
|
188
|
+
generate("java/service.java", jsonService, base + "service/" + jsonService.name + ".java");
|
|
189
|
+
generate("java/service_register.java", jsonService, base + "service/" + jsonService.name + "Register" + ".java");
|
|
190
|
+
for (var i = 0; i < jsonService.flutter_msg.length; i++) {
|
|
191
|
+
var msg = jsonService.flutter_msg[i];
|
|
192
|
+
generate("java/handler.java", msg, base + "handlers/" + jsonService.name + "_" + msg.name + ".java");
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function gen_oc(jsonService) {
|
|
197
|
+
console.log('Generating objective c for' + jsonService.name);
|
|
198
|
+
var base = "oc/" + jsonService.name + "/";
|
|
199
|
+
generate("oc/service.h", jsonService, base + "service/Service" + "_" + jsonService.name + ".h");
|
|
200
|
+
generate("oc/service.mm", jsonService, base + "service/Service" + "_" + jsonService.name + ".mm");
|
|
201
|
+
for (var i = 0; i < jsonService.flutter_msg.length; i++) {
|
|
202
|
+
var msg = jsonService.flutter_msg[i];
|
|
203
|
+
generate("oc/handler.h", msg, base + "handlers/" + jsonService.name + "_" + msg.name + ".h");
|
|
204
|
+
generate("oc/handler.mm", msg, base + "handlers/" + jsonService.name + "_" + msg.name + ".mm");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function gen_arkts(jsonService) {
|
|
209
|
+
console.log('Generating arkts for ' + jsonService.name);
|
|
210
|
+
var base = "arkts/" + jsonService.name + "/";
|
|
211
|
+
|
|
212
|
+
generate("arkts/service.ets", jsonService, base + "service/" + jsonService.name + ".ets");
|
|
213
|
+
|
|
214
|
+
generate("arkts/service_register.ets", jsonService, base + "service/" + jsonService.name + "Register.ets");
|
|
215
|
+
|
|
216
|
+
for (var i = 0; i < jsonService.flutter_msg.length; i++) {
|
|
217
|
+
var msg = jsonService.flutter_msg[i];
|
|
218
|
+
generate("arkts/handler.ets", msg, base + "handlers/" + jsonService.name + "_" + msg.name + ".ets");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function writeFile(path, contents, cb) {
|
|
223
|
+
var mkdirp = require('mkdirp');
|
|
224
|
+
var fs = require('fs');
|
|
225
|
+
var getDirName = require('path').dirname;
|
|
226
|
+
mkdirp(getDirName(path), function (err) {
|
|
227
|
+
if (err) return cb(err);
|
|
228
|
+
fs.writeFile(path, contents, cb);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function getAssetData(path) {
|
|
233
|
+
const fs = require('fs');
|
|
234
|
+
var realPath = __dirname + "/" + path;
|
|
235
|
+
return fs.readFileSync(realPath, 'utf8');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function generate(template, context, path) {
|
|
239
|
+
const fs = require('fs');
|
|
240
|
+
let templatePath = "templates/" + template;
|
|
241
|
+
// let templateString = fs.readFileSync(templatePath,'utf8');
|
|
242
|
+
let templateString = getAssetData(templatePath);
|
|
243
|
+
var rendered = Mustache.render(templateString, context);
|
|
244
|
+
rendered = rendered.replace(/"/g, '"');
|
|
245
|
+
var realPath = Path.join(program.output, path);
|
|
246
|
+
writeFile(realPath, rendered, function () { });
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
//Transform the file names into dart style.
|
|
250
|
+
function dart_file_name(name) {
|
|
251
|
+
let tmp = "";
|
|
252
|
+
var r = 0;
|
|
253
|
+
let cps = new Array();
|
|
254
|
+
|
|
255
|
+
var A = name;
|
|
256
|
+
|
|
257
|
+
while (r < A.length) {
|
|
258
|
+
if (A.charAt(r) >= 'A' && A.charAt(r) <= 'Z') {
|
|
259
|
+
if (tmp.length > 0) {
|
|
260
|
+
cps.push(tmp);
|
|
261
|
+
}
|
|
262
|
+
tmp = "";
|
|
263
|
+
tmp += A.charAt(r++);
|
|
264
|
+
} else tmp += A.charAt(r++);
|
|
265
|
+
}
|
|
266
|
+
if (tmp.length > 0) {
|
|
267
|
+
cps.push(tmp);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
var ans = "";
|
|
271
|
+
for (var i = 0; i < cps.length; i++) {
|
|
272
|
+
var low = cps[i].toLowerCase();
|
|
273
|
+
if (ans == "") {
|
|
274
|
+
ans = low;
|
|
275
|
+
} else {
|
|
276
|
+
ans += "_";
|
|
277
|
+
ans += low;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return ans;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
function dart_to_oc_object_type(type) {
|
|
286
|
+
let mapper = {
|
|
287
|
+
"int": "NSNumber *",
|
|
288
|
+
"double": "NSNumber *",
|
|
289
|
+
"bool": "NSNumber *",
|
|
290
|
+
"String": "NSString *",
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
var mapped_type = mapper[type];
|
|
294
|
+
if (mapped_type) {
|
|
295
|
+
return mapped_type;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (type.includes("List")) {
|
|
299
|
+
return "NSArray *";
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (type.includes("Map")) {
|
|
303
|
+
return "NSDictionary *";
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return mapped_type;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function dart_to_oc_type(type) {
|
|
310
|
+
var mapper = {
|
|
311
|
+
"int": "int64_t",
|
|
312
|
+
"double": "double",
|
|
313
|
+
"bool": "BOOL",
|
|
314
|
+
"String": "NSString *",
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
var mappedType = mapper[type];
|
|
318
|
+
|
|
319
|
+
if (mappedType) {
|
|
320
|
+
return mappedType;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (type.includes("List")) {
|
|
324
|
+
return "NSArray *";
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (type.includes("Map")) {
|
|
328
|
+
return "NSDictionary *";
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return mappedType;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
function dart_to_java_type(type) {
|
|
335
|
+
|
|
336
|
+
let typeMap = {
|
|
337
|
+
"int": "Integer",
|
|
338
|
+
"double": "Double",
|
|
339
|
+
"bool": "Boolean",
|
|
340
|
+
"String": "String",
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
var mapped_type = typeMap[type];
|
|
344
|
+
if (mapped_type) {
|
|
345
|
+
return mapped_type;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if (type.includes("List")) {
|
|
349
|
+
return "List";
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (type.includes("Map")) {
|
|
353
|
+
return "Map";
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return mapped_type;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function dart_to_arkts_type(type) {
|
|
360
|
+
const typeMap = {
|
|
361
|
+
'int': 'number',
|
|
362
|
+
'double': 'number',
|
|
363
|
+
'bool': 'boolean',
|
|
364
|
+
'String': 'string',
|
|
365
|
+
};
|
|
366
|
+
let mapped = typeMap[type];
|
|
367
|
+
if (mapped) return mapped;
|
|
368
|
+
if (type.includes('List')) {
|
|
369
|
+
return 'Array<Object>';
|
|
370
|
+
}
|
|
371
|
+
if (type.includes('Map')) {
|
|
372
|
+
return 'Object';
|
|
373
|
+
}
|
|
374
|
+
return mapped;
|
|
375
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "xservice-arkts",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A tool to generate xservice_kit based flutter plugin with support for ArkTS/OHOS. Forked from https://www.npmjs.com/package/xservice.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"xservice-arkts": "index.js"
|
|
7
|
+
},
|
|
8
|
+
"main": "index.js",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "node index.js -o ./gen -p com.xservice_arkts.demo -t yaml -a ServicesYaml"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/Miosas/xservice-arkts.git"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"xservice",
|
|
18
|
+
"xservice_kit",
|
|
19
|
+
"flutter",
|
|
20
|
+
"plugin",
|
|
21
|
+
"arkts",
|
|
22
|
+
"ohos",
|
|
23
|
+
"harmonyos"
|
|
24
|
+
],
|
|
25
|
+
"author": "Jidong Chen",
|
|
26
|
+
"license": "ISC",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/Miosas/xservice-arkts/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/Miosas/xservice-arkts#readme",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"assets": "^3.0.1",
|
|
33
|
+
"commander": "^2.19.0",
|
|
34
|
+
"eslint": "^5.12.0",
|
|
35
|
+
"js-yaml": "^3.12.1",
|
|
36
|
+
"mustache": "^3.0.1",
|
|
37
|
+
"mkdirp": "^0.5.1"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"templates/**",
|
|
41
|
+
"index.js"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="EMPTY_MODULE" version="4">
|
|
3
|
+
<component name="NewModuleRootManager">
|
|
4
|
+
<content url="file://$MODULE_DIR$" />
|
|
5
|
+
<orderEntry type="inheritedJdk" />
|
|
6
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
7
|
+
</component>
|
|
8
|
+
</module>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by code generator
|
|
3
|
+
* Handler: {{service_name}}_{{name}}
|
|
4
|
+
* Package: {{pkg_name}}
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { MessageHandler, MessageResult, MessageValue, ServiceGateway } from 'xservice_kit';
|
|
8
|
+
|
|
9
|
+
export class {{service_name}}_{{name}} implements MessageHandler<MessageValue> {
|
|
10
|
+
private mContext: Object = new Object;
|
|
11
|
+
|
|
12
|
+
private onCall(result: MessageResult<MessageValue>, {{#args}}{{name}}: {{arkts_type}}{{^last}}, {{/last}}{{/args}}): boolean {
|
|
13
|
+
// TODO: Implement your business logic here
|
|
14
|
+
// This method will be called when {{service_name}}.{{name}} is invoked
|
|
15
|
+
|
|
16
|
+
// TODO: Return appropriate value of type boolean
|
|
17
|
+
// For example:
|
|
18
|
+
// - For number: result.success(0);
|
|
19
|
+
// - For string: result.success('');
|
|
20
|
+
// - For boolean: result.success(false);
|
|
21
|
+
// - For Object: result.success({});
|
|
22
|
+
|
|
23
|
+
// Placeholder implementation - please implement your logic
|
|
24
|
+
result.success(false);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ================== Do not edit code below! ==============
|
|
29
|
+
onMethodCall(name: string, args: Map<string,MessageValue>, result: MessageResult<MessageValue>): boolean {
|
|
30
|
+
this.onCall(
|
|
31
|
+
result{{#args}},
|
|
32
|
+
args.get('{{name}}') as {{arkts_type}}{{/args}}
|
|
33
|
+
);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
handleMessageNames(): Array<string> {
|
|
38
|
+
let h: Array<string> = [];
|
|
39
|
+
h.push('{{name}}');
|
|
40
|
+
return h;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
getContext(): Object {
|
|
44
|
+
return this.mContext;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
setContext(obj: Object): void {
|
|
48
|
+
this.mContext = obj;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
service(): string {
|
|
52
|
+
return '{{service_name}}';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static register(): void {
|
|
56
|
+
ServiceGateway.sharedInstance().registerHandler(new {{service_name}}_{{name}}());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by code generator
|
|
3
|
+
* Service Loader
|
|
4
|
+
* Package: {{pkg_name}}
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
{{#services}}
|
|
8
|
+
import { {{name}}Register } from '../{{name}}/service/{{name}}Register';
|
|
9
|
+
{{/services}}
|
|
10
|
+
|
|
11
|
+
export class ServiceLoader {
|
|
12
|
+
public static load(): void {
|
|
13
|
+
{{#services}}
|
|
14
|
+
{{name}}Register.register();
|
|
15
|
+
{{/services}}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by code generator
|
|
3
|
+
* Service: {{name}}
|
|
4
|
+
* Package: {{pkg_name}}
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ServiceTemplate, ServiceGateway, MessageResult, MessageValue } from 'xservice_kit';
|
|
8
|
+
import { MethodResult } from '@ohos/flutter_ohos';
|
|
9
|
+
|
|
10
|
+
export class {{name}} {
|
|
11
|
+
private static readonly mService: ServiceTemplate = new ServiceTemplate('{{name}}');
|
|
12
|
+
|
|
13
|
+
public static getService(): ServiceTemplate {
|
|
14
|
+
return {{name}}.mService;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public static register(): void {
|
|
18
|
+
ServiceGateway.sharedInstance().addService({{name}}.mService);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
{{#native_msg}}
|
|
22
|
+
public static {{name}}(result: MessageResult<MessageValue>{{#args}}, {{name}}: {{arkts_type}}{{/args}}): void {
|
|
23
|
+
const args: Record<string, MessageValue> = {};
|
|
24
|
+
{{#args}}
|
|
25
|
+
args['{{name}}'] = {{name}};
|
|
26
|
+
{{/args}}
|
|
27
|
+
const methodResult: MethodResult = {
|
|
28
|
+
success: (o: Object): void => {
|
|
29
|
+
if (o !== null && o !== undefined) {
|
|
30
|
+
result.success(o as MessageValue);
|
|
31
|
+
} else {
|
|
32
|
+
result.error('return type error', '', '');
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
error: (errorCode: string, errorMessage: string, errorDetails: Object): void => {
|
|
36
|
+
if (result) {
|
|
37
|
+
result.error(errorCode, errorMessage, errorDetails);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
notImplemented: (): void => {
|
|
41
|
+
if (result) {
|
|
42
|
+
result.notImplemented();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
{{service_name}}.mService.invoke(
|
|
47
|
+
'{{name}}',
|
|
48
|
+
args,
|
|
49
|
+
{{service_name}}.mService.methodChannelName(),
|
|
50
|
+
methodResult
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
{{/native_msg}}
|
|
54
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by code generator
|
|
3
|
+
* Service: {{name}}
|
|
4
|
+
* Package: {{pkg_name}}
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ServiceTemplate, ServiceGateway, MessageResult, MessageValue } from 'xservice_kit';
|
|
8
|
+
import { MethodResult } from '@ohos/flutter_ohos';
|
|
9
|
+
|
|
10
|
+
export class {{name}} {
|
|
11
|
+
private static readonly mService: ServiceTemplate = new ServiceTemplate('{{name}}');
|
|
12
|
+
|
|
13
|
+
public static getService(): ServiceTemplate {
|
|
14
|
+
return {{name}}.mService;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public static register(): void {
|
|
18
|
+
ServiceGateway.sharedInstance().addService({{name}}.mService);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
{{#native_msg}}
|
|
22
|
+
public static {{name}}(result: MessageResult<MessageValue>{{#args}}, {{name}}: {{arkts_type}}{{/args}}): void {
|
|
23
|
+
const args: Record<string, MessageValue> = {};
|
|
24
|
+
{{#args}}
|
|
25
|
+
args['{{name}}'] = {{name}};
|
|
26
|
+
{{/args}}
|
|
27
|
+
const methodResult: MethodResult = {
|
|
28
|
+
success: (o: Object): void => {
|
|
29
|
+
if (o !== null && o !== undefined) {
|
|
30
|
+
result.success(o as MessageValue);
|
|
31
|
+
} else {
|
|
32
|
+
result.error('return type error', '', '');
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
error: (errorCode: string, errorMessage: string, errorDetails: Object): void => {
|
|
36
|
+
if (result) {
|
|
37
|
+
result.error(errorCode, errorMessage, errorDetails);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
notImplemented: (): void => {
|
|
41
|
+
if (result) {
|
|
42
|
+
result.notImplemented();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
{{service_name}}.mService.invoke(
|
|
47
|
+
'{{name}}',
|
|
48
|
+
args,
|
|
49
|
+
{{service_name}}.mService.methodChannelName(),
|
|
50
|
+
methodResult
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
{{/native_msg}}
|
|
54
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by code generator
|
|
3
|
+
* Service Register: {{name}}Register
|
|
4
|
+
* Package: {{pkg_name}}
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { {{name}} } from './{{name}}';
|
|
8
|
+
{{#flutter_msg}}
|
|
9
|
+
import { {{service_name}}_{{name}} } from '../handlers/{{service_name}}_{{name}}';
|
|
10
|
+
{{/flutter_msg}}
|
|
11
|
+
|
|
12
|
+
export class {{name}}Register {
|
|
13
|
+
public static register(): void {
|
|
14
|
+
{{name}}.register();
|
|
15
|
+
{{#flutter_msg}}
|
|
16
|
+
{{service_name}}_{{name}}.register();
|
|
17
|
+
{{/flutter_msg}}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import 'dart:async';
|
|
2
|
+
|
|
3
|
+
import 'package:flutter/services.dart';
|
|
4
|
+
import 'package:xservice_kit/ServiceCallHandler.dart';
|
|
5
|
+
import 'package:xservice_kit/ServiceGateway.dart';
|
|
6
|
+
|
|
7
|
+
class {{service_name}}{{name}} extends ServiceCallHandler {
|
|
8
|
+
|
|
9
|
+
static void regsiter() {
|
|
10
|
+
ServiceGateway.sharedInstance().registerHandler(new {{service_name}}{{name}}());
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@override
|
|
14
|
+
String name() {
|
|
15
|
+
return "{{name}}";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@override
|
|
19
|
+
String service() {
|
|
20
|
+
return "{{service_name}}";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@override
|
|
24
|
+
Future<{{returnType}}> onMethodCall(MethodCall call) {
|
|
25
|
+
return onCall({{#args}}call.arguments["{{name}}"]{{^last}},{{/last}}{{/args}});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//==============================================Do not edit code above!
|
|
29
|
+
Future<{{returnType}}> onCall({{#args}}{{type}} {{name}}{{^last}},{{/last}}{{/args}}) async{
|
|
30
|
+
//TODO:Add you handler code here.
|
|
31
|
+
{{#return_map}}
|
|
32
|
+
return {};
|
|
33
|
+
{{/return_map}}
|
|
34
|
+
{{^return_map}}
|
|
35
|
+
return null;
|
|
36
|
+
{{/return_map}}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import 'dart:async';
|
|
2
|
+
import 'package:xservice_kit/ServiceTemplate.dart';
|
|
3
|
+
import 'package:xservice_kit/ServiceGateway.dart';
|
|
4
|
+
|
|
5
|
+
class {{name}} {
|
|
6
|
+
static final ServiceTemplate _service = new ServiceTemplate("{{name}}");
|
|
7
|
+
|
|
8
|
+
static ServiceTemplate service(){
|
|
9
|
+
return _service;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
static void regsiter() {
|
|
13
|
+
ServiceGateway.sharedInstance().registerService(_service);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
{{#flutter_msg}}
|
|
17
|
+
static Future<{{returnType}}> {{name}}({{#args}}{{type}} {{name}}{{^last}},{{/last}}{{/args}},[onInvocationException? onException]) {
|
|
18
|
+
Map<String,dynamic> properties = new Map<String,dynamic>();
|
|
19
|
+
{{#args}}properties["{{name}}"]= {{name}};
|
|
20
|
+
{{/args}}return _service.invokeMethod('{{name}}',properties,onException).then<{{returnType}}>((value){
|
|
21
|
+
if(value == null){
|
|
22
|
+
return {{default_return_value}};
|
|
23
|
+
}else{
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
{{/flutter_msg}}
|
|
29
|
+
|
|
30
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import '{{service_dart_file_name}}.dart';
|
|
3
|
+
{{#native_msg}}import '../handlers/{{service_dart_file_name}}_{{msg_dart_file_name}}.dart';
|
|
4
|
+
{{/native_msg}}
|
|
5
|
+
|
|
6
|
+
class {{service_name}}Register{
|
|
7
|
+
|
|
8
|
+
static void register(){
|
|
9
|
+
{{service_name}}.regsiter();
|
|
10
|
+
{{#native_msg}}
|
|
11
|
+
{{service_name}}{{name}}.regsiter();
|
|
12
|
+
{{/native_msg}}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
package {{pkg_name}}.{{service_name}}.handlers;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.List;
|
|
5
|
+
import java.util.Map;
|
|
6
|
+
import fleamarket.taobao.com.xservicekit.handler.MessageHandler;
|
|
7
|
+
import fleamarket.taobao.com.xservicekit.handler.MessageResult;
|
|
8
|
+
import fleamarket.taobao.com.xservicekit.service.ServiceGateway;
|
|
9
|
+
|
|
10
|
+
public class {{service_name}}_{{name}} implements MessageHandler<{{return_java_type}}>{
|
|
11
|
+
private Object mContext = null;
|
|
12
|
+
private boolean onCall(MessageResult<{{return_java_type}}> result,{{#args}}{{java_type}} {{name}}{{^last}},{{/last}}{{/args}}){
|
|
13
|
+
//Add your handler code here.
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//==================Do not edit code blow!==============
|
|
18
|
+
@Override
|
|
19
|
+
public boolean onMethodCall(String name, Map args, MessageResult<{{return_java_type}}> result) {
|
|
20
|
+
this.onCall(result,{{#args}}({{java_type}})args.get("{{name}}"){{^last}},{{/last}}{{/args}});
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
@Override
|
|
24
|
+
public List<String> handleMessageNames() {
|
|
25
|
+
List<String> h = new ArrayList<>();
|
|
26
|
+
h.add("{{name}}");
|
|
27
|
+
return h;
|
|
28
|
+
}
|
|
29
|
+
@Override
|
|
30
|
+
public Object getContext() {
|
|
31
|
+
return mContext;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
public void setContext(Object obj) {
|
|
36
|
+
mContext = obj;
|
|
37
|
+
}
|
|
38
|
+
@Override
|
|
39
|
+
public String service() {
|
|
40
|
+
return "{{service_name}}";
|
|
41
|
+
}
|
|
42
|
+
public static void register(){
|
|
43
|
+
ServiceGateway.sharedInstance().registerHandler(new {{service_name}}_{{name}}());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
package {{pkg_name}}.{{service_name}}.service;
|
|
2
|
+
|
|
3
|
+
import java.util.HashMap;
|
|
4
|
+
import java.util.Map;
|
|
5
|
+
|
|
6
|
+
import fleamarket.taobao.com.xservicekit.service.ServiceTemplate;
|
|
7
|
+
import fleamarket.taobao.com.xservicekit.service.ServiceGateway;
|
|
8
|
+
import io.flutter.plugin.common.MethodChannel;
|
|
9
|
+
import fleamarket.taobao.com.xservicekit.handler.MessageResult;
|
|
10
|
+
|
|
11
|
+
public class {{service_name}} {
|
|
12
|
+
private static final ServiceTemplate mService = new ServiceTemplate("{{service_name}}");
|
|
13
|
+
public static ServiceTemplate getService(){
|
|
14
|
+
return mService;
|
|
15
|
+
}
|
|
16
|
+
public static void register(){
|
|
17
|
+
ServiceGateway.sharedInstance().addService(mService);
|
|
18
|
+
}
|
|
19
|
+
{{#native_msg}}
|
|
20
|
+
public static void {{name}}(final MessageResult<{{return_java_type}}> result, {{#args}}{{java_type}} {{name}}{{^last}},{{/last}}{{/args}}){
|
|
21
|
+
Map<String,Object> args = new HashMap<>();
|
|
22
|
+
{{#args}}args.put("{{name}}",{{name}});
|
|
23
|
+
{{/args}}mService.invoke("{{name}}", args, mService.methodChannelName(), new MethodChannel.Result() {
|
|
24
|
+
@Override
|
|
25
|
+
public void success(Object o) {
|
|
26
|
+
if (o instanceof {{return_java_type}}){
|
|
27
|
+
result.success(({{return_java_type}})o);
|
|
28
|
+
}else{
|
|
29
|
+
result.error("return type error code dart code","","");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
public void error(String s, String s1, Object o) {
|
|
35
|
+
if (result != null){
|
|
36
|
+
result.error(s,s1,o);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@Override
|
|
41
|
+
public void notImplemented() {
|
|
42
|
+
if (result != null){
|
|
43
|
+
result.notImplemented();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}{{/native_msg}}
|
|
48
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package {{pkg_name}}.{{service_name}}.service;
|
|
2
|
+
|
|
3
|
+
import {{pkg_name}}.{{service_name}}.handlers.*;
|
|
4
|
+
|
|
5
|
+
public class {{service_name}}Register {
|
|
6
|
+
public static void register(){
|
|
7
|
+
{{service_name}}.register();
|
|
8
|
+
{{#flutter_msg}}
|
|
9
|
+
{{service_name}}_{{name}}.register();
|
|
10
|
+
{{/flutter_msg}}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//Generated by AIOCodeGen.
|
|
2
|
+
#import "ServiceGateway.h"
|
|
3
|
+
#import "{{service_name}}_{{name}}.h"
|
|
4
|
+
|
|
5
|
+
@implementation {{service_name}}_{{name}}
|
|
6
|
+
- (void)onCall:(void (^)({{return_oc_type}}))result {{#args}}{{name}}:({{oc_ob_type}}){{name}} {{/args}}{
|
|
7
|
+
//Add your handler code here!
|
|
8
|
+
//TODO:
|
|
9
|
+
}
|
|
10
|
+
#pragma mark - Do not edit these method.
|
|
11
|
+
- (void)__flutter_p_handler_{{name}}:(NSDictionary *)args result:(void (^)({{return_oc_type}}))result {
|
|
12
|
+
[self onCall:result {{#args}}{{name}}:args[@"{{name}}"] {{/args}}];
|
|
13
|
+
}
|
|
14
|
+
+ (void)load{
|
|
15
|
+
[[ServiceGateway sharedInstance] registerHandler:[{{service_name}}_{{name}} new]];
|
|
16
|
+
}
|
|
17
|
+
- (NSString *)returnType{
|
|
18
|
+
return @"{{return_oc_type}}";
|
|
19
|
+
}
|
|
20
|
+
- (NSString *)service{
|
|
21
|
+
return @"{{service_name}}";
|
|
22
|
+
}
|
|
23
|
+
@end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//Generated by AIOCodeGen do not edit!
|
|
2
|
+
#import "FlutterServiceTemplate.h"
|
|
3
|
+
|
|
4
|
+
@interface Service_{{service_name}} : NSObject
|
|
5
|
+
+ (FlutterServiceTemplate *)service;
|
|
6
|
+
{{#native_msg}}+ (void){{name}}:(void (^)({{return_oc_ob_type}}))resultCallback {{#args}}{{name}}:({{oc_ob_type}}){{name}} {{/args}};
|
|
7
|
+
{{/native_msg}}
|
|
8
|
+
@end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//Generated code. Do not edit!
|
|
2
|
+
#import "Service_{{service_name}}.h"
|
|
3
|
+
#import "ServiceGateway.h"
|
|
4
|
+
#import "FlutterServiceTemplate.h"
|
|
5
|
+
|
|
6
|
+
@implementation Service_{{service_name}}
|
|
7
|
+
|
|
8
|
+
+ (FlutterServiceTemplate *)service {
|
|
9
|
+
static id _instance = nil;
|
|
10
|
+
static dispatch_once_t onceToken;
|
|
11
|
+
dispatch_once(&onceToken, ^{
|
|
12
|
+
_instance = [[FlutterServiceTemplate alloc] initWithName:@"{{service_name}}"];
|
|
13
|
+
});
|
|
14
|
+
return _instance;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
+ (void)load{
|
|
18
|
+
[[ServiceGateway sharedInstance] addService:[self service]];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
{{#native_msg}}+ (void){{name}}:(void (^)({{return_oc_ob_type}}))resultCallback {{#args}}{{name}}:({{oc_ob_type}}){{name}} {{/args}} {
|
|
22
|
+
NSMutableDictionary *tmp = [NSMutableDictionary dictionary];
|
|
23
|
+
{{#args}}if({{name}}) tmp[@"{{name}}"] = {{name}};
|
|
24
|
+
{{/args}}[self.service invoke:@"{{name}}" args:tmp result:^(id tTesult) {
|
|
25
|
+
if (resultCallback) {
|
|
26
|
+
resultCallback(tTesult);
|
|
27
|
+
}
|
|
28
|
+
}];
|
|
29
|
+
}
|
|
30
|
+
{{/native_msg}}
|
|
31
|
+
|
|
32
|
+
@end
|