@cocreate/api 1.21.3 → 1.22.1
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/CHANGELOG.md +22 -0
- package/package.json +1 -1
- package/prettier.config.js +16 -0
- package/src/index.js +249 -210
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## [1.22.1](https://github.com/CoCreate-app/CoCreate-api/compare/v1.22.0...v1.22.1) (2025-01-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Call the function and assign its return value ([5102f60](https://github.com/CoCreate-app/CoCreate-api/commit/5102f60e13b07f4bcb6d84be18ae629489656cc7))
|
|
7
|
+
* moved data in to object ([168bb0a](https://github.com/CoCreate-app/CoCreate-api/commit/168bb0a5694dec3feb5d14b67e4ff911cfd88c9c))
|
|
8
|
+
|
|
9
|
+
# [1.22.0](https://github.com/CoCreate-app/CoCreate-api/compare/v1.21.3...v1.22.0) (2024-11-04)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* handling array[] ([93bafda](https://github.com/CoCreate-app/CoCreate-api/commit/93bafdaab1712ae1c99a408142c8ec9e912a34c5))
|
|
15
|
+
* observer taget has been renamed to selector ([9802a6c](https://github.com/CoCreate-app/CoCreate-api/commit/9802a6c96b0f37de1166f240720544652eb5666b))
|
|
16
|
+
* pretier.config.js and file formating ([12031c1](https://github.com/CoCreate-app/CoCreate-api/commit/12031c1ea0db05ae7881fdca959ec022ee2cae86))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* add prettier.config.js and format files ([090db4f](https://github.com/CoCreate-app/CoCreate-api/commit/090db4f1d7c2e26d0b76b82ab70b83c58be49323))
|
|
22
|
+
|
|
1
23
|
## [1.21.3](https://github.com/CoCreate-app/CoCreate-api/compare/v1.21.2...v1.21.3) (2024-08-24)
|
|
2
24
|
|
|
3
25
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.1",
|
|
4
4
|
"description": "A simple api helper component in vanilla javascript used by JavaScript developers to create thirdparty api intergrations. CoCreate-api includes the client component and server side for api processing. Thirdparty apis can be accessible using HTML5 attributes and/or JavaScript API. ",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"thirdparty-api-intergration",
|
package/src/index.js
CHANGED
|
@@ -2,222 +2,261 @@
|
|
|
2
2
|
import { getValueFromObject, dotNotationToObject } from "@cocreate/utils";
|
|
3
3
|
import Observer from "@cocreate/observer";
|
|
4
4
|
import Socket from "@cocreate/socket-client";
|
|
5
|
-
import Actions from
|
|
6
|
-
import { render } from
|
|
7
|
-
import
|
|
5
|
+
import Actions from "@cocreate/actions";
|
|
6
|
+
import { render } from "@cocreate/render";
|
|
7
|
+
import "@cocreate/element-prototype";
|
|
8
8
|
|
|
9
9
|
const CoCreateApi = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
init: function (moduleConfig) {
|
|
13
|
-
if (!moduleConfig) {
|
|
14
|
-
let elements = document.querySelectorAll('[api], [module]')
|
|
15
|
-
for (let i = 0; i < elements.length; i++) {
|
|
16
|
-
let name = elements[i].getAttribute('api') || elements[i].getAttribute('module')
|
|
17
|
-
this.register({ name, endPoints: {} });
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
let { name, endPoints, options } = moduleConfig
|
|
21
|
-
this.register({ name, endPoints, options });
|
|
22
|
-
if (options && options.socket !== false && !Socket.sockets.size)
|
|
23
|
-
Socket.create({ prefix: 'api' });
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
register: function ({ name, endPoints, options }) {
|
|
28
|
-
const self = this;
|
|
29
|
-
if (typeof this.modules[name] === 'undefined') {
|
|
30
|
-
this.modules[name] = { name, endPoints, options };
|
|
31
|
-
|
|
32
|
-
Actions.init({
|
|
33
|
-
name,
|
|
34
|
-
callback: (action) => {
|
|
35
|
-
action.form = action.form || document
|
|
36
|
-
self.request({ ...action, type: 'action' })
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const inputEvent = (element) => {
|
|
41
|
-
element.addEventListener('input', (e) => {
|
|
42
|
-
if (!e.detail || e.detail && e.detail.skip != true) {
|
|
43
|
-
self.request({ name, element, type: 'input' })
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let elements = document.querySelectorAll(`[${name}]`)
|
|
49
|
-
for (let i = 0; i < elements.length; i++) {
|
|
50
|
-
inputEvent(elements[i])
|
|
51
|
-
this.request({ name, element: elements[i], type: 'onload' })
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
Observer.init({
|
|
55
|
-
name: `${name}NodeObserver`,
|
|
56
|
-
observe: ['addedNodes'],
|
|
57
|
-
target: `[${name}]`,
|
|
58
|
-
callback: function (mutation) {
|
|
59
|
-
inputEvent(mutation.target)
|
|
60
|
-
self.request({ name, element: mutation.target, type: 'nodeObserver' })
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
Observer.init({
|
|
65
|
-
name: `${name}AttributeObserver`,
|
|
66
|
-
observe: ['attributes'],
|
|
67
|
-
attributeName: [name],
|
|
68
|
-
callback: function (mutation) {
|
|
69
|
-
self.request({ name, element: mutation.target, type: 'attributeObserver' })
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
request: async function (object) {
|
|
77
|
-
if (object.element) {
|
|
78
|
-
if (!object.method)
|
|
79
|
-
object.method = object.element.getAttribute(object.name)
|
|
80
|
-
if (!object.key)
|
|
81
|
-
object.key = object.element.getAttribute(`${object.name}-key`)
|
|
82
|
-
if (!object.event)
|
|
83
|
-
object.event = object.element.getAttribute(`${object.name}-event`)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (this.modules[object.name][object.method] && this.modules[object.name][object.method].request)
|
|
87
|
-
this.modules[object.name][object.method].request(object)
|
|
88
|
-
else if (!object.event && object.type === 'action' || object.event && object.event.includes(object.type)) {
|
|
89
|
-
let data = await CoCreateApi.getData(object);
|
|
90
|
-
CoCreateApi.send(object, data);
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
response: function (object, data) {
|
|
95
|
-
const name = object.name
|
|
96
|
-
const method = object.method;
|
|
97
|
-
if (this.modules[name][method] && this.modules[name][method].response)
|
|
98
|
-
this.modules[name][method].response(data[name])
|
|
99
|
-
else if (data.error) {
|
|
100
|
-
render({
|
|
101
|
-
selector: `[template*='${name}']`,
|
|
102
|
-
data: [{
|
|
103
|
-
type: name,
|
|
104
|
-
method,
|
|
105
|
-
status: 'failed',
|
|
106
|
-
message: data.error
|
|
107
|
-
}]
|
|
108
|
-
});
|
|
109
|
-
} else {
|
|
110
|
-
CoCreateApi.setData(object, data)
|
|
111
|
-
|
|
112
|
-
document.dispatchEvent(new CustomEvent(object.endEvent, {
|
|
113
|
-
detail: {
|
|
114
|
-
data: data[name]
|
|
115
|
-
}
|
|
116
|
-
}));
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
send: async function (object, data) {
|
|
121
|
-
data = await Socket.send({ method: object.name + '.' + object.method, [object.name]: data, broadcast: false, broadcastBrowser: false, status: 'await' });
|
|
122
|
-
this.response(object, data);
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
getData: async function ({ name, method, element, form }) {
|
|
126
|
-
let data = {}
|
|
127
|
-
|
|
128
|
-
if (!form && element)
|
|
129
|
-
form = element.closest('form');
|
|
130
|
-
|
|
131
|
-
let elements
|
|
132
|
-
if (form)
|
|
133
|
-
elements = form.querySelectorAll(`[${name}="${method}"]:not([${name}-request="false"])`);
|
|
134
|
-
if (!elements || elements.length == 0)
|
|
135
|
-
elements = [element]
|
|
136
|
-
|
|
137
|
-
for (let i = 0; i < elements.length; i++) {
|
|
138
|
-
if (!elements[i] || elements[i].closest('[template]'))
|
|
139
|
-
continue
|
|
140
|
-
let key = elements[i].getAttribute(`${name}-key`)
|
|
141
|
-
if (key) {
|
|
142
|
-
data[key] = await elements[i].getValue()
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
let endpoint = elements[i].getAttribute('endpoint')
|
|
146
|
-
if (endpoint) {
|
|
147
|
-
data.endpoint = endpoint
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (elements[i].getAttribute('query') && elements[i].getAttribute('query') !== 'false') {
|
|
151
|
-
data.query = true
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
let params = {}, hasParams = false
|
|
156
|
-
for (let i = 0; true; i++) {
|
|
157
|
-
if (`$param[${i}]` in data) {
|
|
158
|
-
params[`$param[${i}]`] = data[`$param[${i}]`]
|
|
159
|
-
delete data[`$param[${i}]`]
|
|
160
|
-
hasParams = true
|
|
161
|
-
} else {
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
data = dotNotationToObject(data);
|
|
166
|
-
if (hasParams)
|
|
167
|
-
data = { ...params, ...data }
|
|
168
|
-
|
|
169
|
-
return data
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
setData: function (object, data) {
|
|
173
|
-
const name = object.name
|
|
174
|
-
let form = object.form
|
|
175
|
-
if (!form)
|
|
176
|
-
form = document;
|
|
177
|
-
|
|
178
|
-
let elements = form.querySelectorAll(`[${name}="${object.method}"]`);
|
|
179
|
-
if (!elements || elements.length == 0)
|
|
180
|
-
return
|
|
181
|
-
|
|
182
|
-
for (let i = 0; i < elements.length; i++) {
|
|
183
|
-
let attribute = elements[i].getAttribute(name)
|
|
184
|
-
if (attribute) {
|
|
185
|
-
if (elements[i].hasAttribute('actions')) continue;
|
|
186
|
-
let templateid = elements[i].getAttribute('template_id')
|
|
187
|
-
if (templateid) {
|
|
188
|
-
let items = document.querySelectorAll(`[templateid="${templateid}"]`)
|
|
189
|
-
for (let item of items)
|
|
190
|
-
item.remove()
|
|
191
|
-
render({
|
|
192
|
-
selector: `[template="${templateid}"]`,
|
|
193
|
-
data
|
|
194
|
-
});
|
|
195
|
-
} else {
|
|
196
|
-
let key = elements[i].getAttribute(`${name}-key`)
|
|
197
|
-
if (key === '{}')
|
|
198
|
-
elements[i].setValue(data[name])
|
|
199
|
-
else {
|
|
200
|
-
let value = getValueFromObject(data[name], key);
|
|
201
|
-
elements[i].setValue(value);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
}
|
|
10
|
+
modules: {},
|
|
208
11
|
|
|
12
|
+
init: function (moduleConfig) {
|
|
13
|
+
if (!moduleConfig) {
|
|
14
|
+
let elements = document.querySelectorAll("[api], [module]");
|
|
15
|
+
for (let i = 0; i < elements.length; i++) {
|
|
16
|
+
let name =
|
|
17
|
+
elements[i].getAttribute("api") ||
|
|
18
|
+
elements[i].getAttribute("module");
|
|
19
|
+
this.register({ name, endPoints: {} });
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
let { name, endPoints, options } = moduleConfig;
|
|
23
|
+
this.register({ name, endPoints, options });
|
|
24
|
+
if (options && options.socket !== false && !Socket.sockets.size)
|
|
25
|
+
Socket.create({ prefix: "api" });
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
register: function ({ name, endPoints, options }) {
|
|
30
|
+
const self = this;
|
|
31
|
+
if (typeof this.modules[name] === "undefined") {
|
|
32
|
+
this.modules[name] = { name, endPoints, options };
|
|
33
|
+
|
|
34
|
+
Actions.init({
|
|
35
|
+
name,
|
|
36
|
+
callback: (action) => {
|
|
37
|
+
action.form = action.form || document;
|
|
38
|
+
self.request({ ...action, type: "action" });
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const inputEvent = (element) => {
|
|
43
|
+
element.addEventListener("input", (e) => {
|
|
44
|
+
if (!e.detail || (e.detail && e.detail.skip != true)) {
|
|
45
|
+
self.request({ name, element, type: "input" });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
let elements = document.querySelectorAll(`[${name}]`);
|
|
51
|
+
for (let i = 0; i < elements.length; i++) {
|
|
52
|
+
inputEvent(elements[i]);
|
|
53
|
+
this.request({ name, element: elements[i], type: "onload" });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
Observer.init({
|
|
57
|
+
name: `${name}NodeObserver`,
|
|
58
|
+
observe: ["addedNodes"],
|
|
59
|
+
selector: `[${name}]`,
|
|
60
|
+
callback: function (mutation) {
|
|
61
|
+
inputEvent(mutation.target);
|
|
62
|
+
self.request({
|
|
63
|
+
name,
|
|
64
|
+
element: mutation.target,
|
|
65
|
+
type: "nodeObserver"
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
Observer.init({
|
|
71
|
+
name: `${name}AttributeObserver`,
|
|
72
|
+
observe: ["attributes"],
|
|
73
|
+
attributeName: [name],
|
|
74
|
+
callback: function (mutation) {
|
|
75
|
+
self.request({
|
|
76
|
+
name,
|
|
77
|
+
element: mutation.target,
|
|
78
|
+
type: "attributeObserver"
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
request: async function (object) {
|
|
86
|
+
if (object.element) {
|
|
87
|
+
if (!object.method)
|
|
88
|
+
object.method = object.element.getAttribute(object.name);
|
|
89
|
+
if (!object.key)
|
|
90
|
+
object.key = object.element.getAttribute(`${object.name}-key`);
|
|
91
|
+
if (!object.event)
|
|
92
|
+
object.event = object.element.getAttribute(
|
|
93
|
+
`${object.name}-event`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (
|
|
98
|
+
this.modules[object.name][object.method] &&
|
|
99
|
+
this.modules[object.name][object.method].request
|
|
100
|
+
)
|
|
101
|
+
this.modules[object.name][object.method].request(object);
|
|
102
|
+
else if (
|
|
103
|
+
(!object.event && object.type === "action") ||
|
|
104
|
+
(object.event && object.event.includes(object.type))
|
|
105
|
+
) {
|
|
106
|
+
object.data = await CoCreateApi.getData(object);
|
|
107
|
+
if (Object.keys(object.data).length) CoCreateApi.send(object);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
response: function (object) {
|
|
112
|
+
const name = object.name;
|
|
113
|
+
const method = object.method;
|
|
114
|
+
const data = object.data;
|
|
115
|
+
if (this.modules[name][method] && this.modules[name][method].response)
|
|
116
|
+
this.modules[name][method].response(data[name]);
|
|
117
|
+
else if (data.error) {
|
|
118
|
+
render({
|
|
119
|
+
selector: `[template*='${name}']`,
|
|
120
|
+
data: [
|
|
121
|
+
{
|
|
122
|
+
type: name,
|
|
123
|
+
method,
|
|
124
|
+
status: "failed",
|
|
125
|
+
message: data.error
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
CoCreateApi.setData(object);
|
|
131
|
+
|
|
132
|
+
document.dispatchEvent(
|
|
133
|
+
new CustomEvent(object.endEvent, {
|
|
134
|
+
detail: {
|
|
135
|
+
data: object
|
|
136
|
+
}
|
|
137
|
+
})
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
send: async function (object) {
|
|
143
|
+
object.data = await Socket.send({
|
|
144
|
+
method: object.name + "." + object.method,
|
|
145
|
+
[object.name]: object.data,
|
|
146
|
+
broadcast: false,
|
|
147
|
+
broadcastBrowser: false,
|
|
148
|
+
status: "await"
|
|
149
|
+
});
|
|
150
|
+
this.response(object);
|
|
151
|
+
},
|
|
152
|
+
|
|
153
|
+
getData: async function ({ name, method, element, form }) {
|
|
154
|
+
let data = {};
|
|
155
|
+
|
|
156
|
+
if (!form && element) form = element.closest("form");
|
|
157
|
+
if (!form) form = document;
|
|
158
|
+
|
|
159
|
+
let elements;
|
|
160
|
+
if (form)
|
|
161
|
+
elements = form.querySelectorAll(
|
|
162
|
+
`[${name}="${method}"]:not([${name}-request="false"])`
|
|
163
|
+
);
|
|
164
|
+
if (!elements || elements.length == 0) elements = [element];
|
|
165
|
+
|
|
166
|
+
for (let i = 0; i < elements.length; i++) {
|
|
167
|
+
if (!elements[i] || elements[i].closest("[template]")) continue;
|
|
168
|
+
let key = elements[i].getAttribute(`${name}-key`);
|
|
169
|
+
if (key) {
|
|
170
|
+
let value = await elements[i].getValue();
|
|
171
|
+
if (key.endsWith("[]")) {
|
|
172
|
+
if (!data[key]) data[key] = [];
|
|
173
|
+
|
|
174
|
+
if (Array.isArray(value)) data[key].push(...value);
|
|
175
|
+
else data[key].push(value);
|
|
176
|
+
} else data[key] = await elements[i].getValue();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let endpoint = elements[i].getAttribute("endpoint");
|
|
180
|
+
if (endpoint) {
|
|
181
|
+
data.endpoint = endpoint;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (
|
|
185
|
+
elements[i].getAttribute("query") &&
|
|
186
|
+
elements[i].getAttribute("query") !== "false"
|
|
187
|
+
) {
|
|
188
|
+
data.query = true;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
let params = {},
|
|
193
|
+
hasParams = false;
|
|
194
|
+
for (let i = 0; true; i++) {
|
|
195
|
+
if (`$param[${i}]` in data) {
|
|
196
|
+
params[`$param[${i}]`] = data[`$param[${i}]`];
|
|
197
|
+
delete data[`$param[${i}]`];
|
|
198
|
+
hasParams = true;
|
|
199
|
+
} else {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
data = dotNotationToObject(data);
|
|
204
|
+
if (hasParams) data = { ...params, ...data };
|
|
205
|
+
|
|
206
|
+
return data;
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
setData: function (object) {
|
|
210
|
+
const name = object.name;
|
|
211
|
+
const data = object.data;
|
|
212
|
+
let form = object.form;
|
|
213
|
+
if (!form) form = document;
|
|
214
|
+
|
|
215
|
+
let elements = form.querySelectorAll(`[${name}="${object.method}"]`);
|
|
216
|
+
if (!elements || elements.length == 0) return;
|
|
217
|
+
|
|
218
|
+
for (let i = 0; i < elements.length; i++) {
|
|
219
|
+
let attribute = elements[i].getAttribute(name);
|
|
220
|
+
if (attribute) {
|
|
221
|
+
if (elements[i].hasAttribute("actions")) continue;
|
|
222
|
+
let templateid = elements[i].getAttribute("template_id");
|
|
223
|
+
if (templateid) {
|
|
224
|
+
let items = document.querySelectorAll(
|
|
225
|
+
`[templateid="${templateid}"]`
|
|
226
|
+
);
|
|
227
|
+
for (let item of items) item.remove();
|
|
228
|
+
render({
|
|
229
|
+
selector: `[template="${templateid}"]`,
|
|
230
|
+
data
|
|
231
|
+
});
|
|
232
|
+
} else {
|
|
233
|
+
let key = elements[i].getAttribute(`${name}-key`);
|
|
234
|
+
if (key === "{}") elements[i].setValue(data[name]);
|
|
235
|
+
else {
|
|
236
|
+
let value = getValueFromObject(data[name], key);
|
|
237
|
+
if (typeof value === "function") {
|
|
238
|
+
value = value(); // Call the function and assign its return value
|
|
239
|
+
}
|
|
240
|
+
elements[i].setValue(value);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
209
246
|
};
|
|
210
247
|
|
|
211
248
|
Observer.init({
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
249
|
+
name: `apiNodeObserver`,
|
|
250
|
+
observe: ["addedNodes"],
|
|
251
|
+
selector: "[module], [api]",
|
|
252
|
+
callback: function (mutation) {
|
|
253
|
+
let name =
|
|
254
|
+
mutation.target.getAttribute("api") ||
|
|
255
|
+
mutation.target.getAttribute("module");
|
|
256
|
+
CoCreateApi.register({ name, endPoints: {} });
|
|
257
|
+
}
|
|
219
258
|
});
|
|
220
259
|
|
|
221
|
-
CoCreateApi.init()
|
|
260
|
+
CoCreateApi.init();
|
|
222
261
|
|
|
223
|
-
export default CoCreateApi;
|
|
262
|
+
export default CoCreateApi;
|