airx 0.1.2 → 0.1.4
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 +1 -1
- package/output/element.d.ts +10 -6
- package/output/element.js +1 -0
- package/output/element.js.map +1 -1
- package/output/index.d.ts +2 -2
- package/output/index.js +1 -1
- package/output/index.js.map +1 -1
- package/output/reactive.d.ts +1 -2
- package/output/reactive.js +10 -9
- package/output/reactive.js.map +1 -1
- package/output/render/browser.d.ts +3 -0
- package/output/render/browser.js +272 -0
- package/output/render/browser.js.map +1 -0
- package/output/{render.d.ts → render/common/index.d.ts} +25 -6
- package/output/render/common/index.js +416 -0
- package/output/render/common/index.js.map +1 -0
- package/output/render/index.d.ts +2 -0
- package/output/render/index.js +3 -0
- package/output/render/index.js.map +1 -0
- package/output/render/server.d.ts +9 -0
- package/output/render/server.js +9 -0
- package/output/render/server.js.map +1 -0
- package/package.json +2 -2
- package/output/render.js +0 -593
- package/output/render.js.map +0 -1
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
import { createLogger } from '../../logger';
|
|
2
|
+
import { watch, createRef, createCollector } from '../../reactive';
|
|
3
|
+
import { createElement, isValidElement } from '../../element';
|
|
4
|
+
const globalContext = {
|
|
5
|
+
current: null
|
|
6
|
+
};
|
|
7
|
+
function useContext() {
|
|
8
|
+
if (globalContext.current == null) {
|
|
9
|
+
throw new Error('Unable to find a valid component context');
|
|
10
|
+
}
|
|
11
|
+
return globalContext.current;
|
|
12
|
+
}
|
|
13
|
+
export const onMounted = (listener) => {
|
|
14
|
+
return useContext().onMounted(listener);
|
|
15
|
+
};
|
|
16
|
+
export const onUnmounted = (listener) => {
|
|
17
|
+
return useContext().onUnmounted(listener);
|
|
18
|
+
};
|
|
19
|
+
export const inject = (key) => {
|
|
20
|
+
return useContext().inject(key);
|
|
21
|
+
};
|
|
22
|
+
export const provide = (key, value) => {
|
|
23
|
+
return useContext().provide(key, value);
|
|
24
|
+
};
|
|
25
|
+
export class InnerAirxComponentContext {
|
|
26
|
+
instance;
|
|
27
|
+
disposers = new Set();
|
|
28
|
+
providedMap = new Map();
|
|
29
|
+
injectedMap = new Map();
|
|
30
|
+
mountListeners = new Set();
|
|
31
|
+
unmountedListeners = new Set();
|
|
32
|
+
triggerMounted() {
|
|
33
|
+
this.mountListeners.forEach(listener => {
|
|
34
|
+
let disposer = null;
|
|
35
|
+
try {
|
|
36
|
+
disposer = listener();
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error(err, listener);
|
|
40
|
+
}
|
|
41
|
+
if (typeof disposer === 'function') {
|
|
42
|
+
this.addDisposer(disposer);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
// 生命周期只会调用一次
|
|
46
|
+
this.mountListeners.clear();
|
|
47
|
+
}
|
|
48
|
+
triggerUnmounted() {
|
|
49
|
+
// 递归的调用子 child 的 Unmounted
|
|
50
|
+
if (this.instance?.child != null) {
|
|
51
|
+
this.instance.child.context.triggerUnmounted();
|
|
52
|
+
}
|
|
53
|
+
// 处理自己
|
|
54
|
+
this.unmountedListeners.forEach(listener => {
|
|
55
|
+
try {
|
|
56
|
+
listener();
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error(err, listener);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// 处理兄弟节点
|
|
63
|
+
if (this.instance?.sibling != null) {
|
|
64
|
+
this.instance.sibling.context.triggerUnmounted();
|
|
65
|
+
}
|
|
66
|
+
this.dispose();
|
|
67
|
+
}
|
|
68
|
+
onMounted(listener) {
|
|
69
|
+
this.mountListeners.add(listener);
|
|
70
|
+
}
|
|
71
|
+
onUnmounted(listener) {
|
|
72
|
+
this.unmountedListeners.add(listener);
|
|
73
|
+
}
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
provide(key, value) {
|
|
76
|
+
if (!this.providedMap.has(key)) {
|
|
77
|
+
this.providedMap.set(key, createRef(value));
|
|
78
|
+
}
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
80
|
+
const ref = this.providedMap.get(key);
|
|
81
|
+
ref.value = value;
|
|
82
|
+
return newValue => ref.value = newValue;
|
|
83
|
+
}
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
inject(key) {
|
|
86
|
+
if (!this.injectedMap.has(key)) {
|
|
87
|
+
this.injectedMap.set(key, createRef(null));
|
|
88
|
+
}
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
90
|
+
const resultRef = this.injectedMap.get(key);
|
|
91
|
+
/**
|
|
92
|
+
* 从当前组件开始向上查找
|
|
93
|
+
* @returns 返回找到的值的 Ref 和提供该值的实例
|
|
94
|
+
*/
|
|
95
|
+
const getResultOfContext = () => {
|
|
96
|
+
let provider = null;
|
|
97
|
+
let result = null;
|
|
98
|
+
let nextParentInstance = this.instance;
|
|
99
|
+
while (nextParentInstance != null) {
|
|
100
|
+
provider = nextParentInstance;
|
|
101
|
+
result = nextParentInstance.context.providedMap.get(key) || null;
|
|
102
|
+
if (result != null)
|
|
103
|
+
break;
|
|
104
|
+
nextParentInstance = nextParentInstance.parent;
|
|
105
|
+
}
|
|
106
|
+
return { result, provider };
|
|
107
|
+
};
|
|
108
|
+
const { result, provider } = getResultOfContext();
|
|
109
|
+
if (result != null && provider != null) {
|
|
110
|
+
// 每当值发生变化,同步到当前的 Ref 上
|
|
111
|
+
this.addDisposer(watch(result, () => {
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
+
resultRef.value = result.value;
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
resultRef.value = result?.value;
|
|
117
|
+
return resultRef;
|
|
118
|
+
}
|
|
119
|
+
addDisposer(...disposers) {
|
|
120
|
+
disposers.forEach(disposer => {
|
|
121
|
+
this.disposers.add(disposer);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
dispose() {
|
|
125
|
+
this.disposers.forEach((disposer) => {
|
|
126
|
+
try {
|
|
127
|
+
disposer();
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
// eslint-disable-next-line no-console
|
|
131
|
+
console.error(err, disposer);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
this.disposers.clear();
|
|
135
|
+
this.injectedMap.clear();
|
|
136
|
+
this.providedMap.clear();
|
|
137
|
+
this.mountListeners.clear();
|
|
138
|
+
this.unmountedListeners.clear();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 当 context 传递给外部消费时,隐藏内部实现,仅暴露接口定义的内容
|
|
142
|
+
* @returns 和 AirxComponentContext 接口完全一致的对象
|
|
143
|
+
*/
|
|
144
|
+
getSafeContext() {
|
|
145
|
+
return {
|
|
146
|
+
inject: k => this.inject(k),
|
|
147
|
+
provide: (k, v) => this.provide(k, v),
|
|
148
|
+
onMounted: listener => this.onMounted(listener),
|
|
149
|
+
onUnmounted: listener => this.onUnmounted(listener)
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 更新 children
|
|
155
|
+
* @param parentInstance 当前正在处理的组件的实例
|
|
156
|
+
* @param children 当前组件的子节点
|
|
157
|
+
*/
|
|
158
|
+
export function reconcileChildren(parentInstance, childrenElementArray) {
|
|
159
|
+
const logger = createLogger('reconcileChildren');
|
|
160
|
+
logger.debug('reconcileChildren', parentInstance, childrenElementArray);
|
|
161
|
+
// parentInstance ←--------
|
|
162
|
+
// | ↑ ↑
|
|
163
|
+
// child parent parent
|
|
164
|
+
// ↓ | |
|
|
165
|
+
// instance -sibling→ instance -→ ....
|
|
166
|
+
/**
|
|
167
|
+
* 内部通过 index 生成 element 的 key
|
|
168
|
+
* 通过前缀来避免和用户手动设置的 key 发生冲突
|
|
169
|
+
* @param index
|
|
170
|
+
* @returns 生成的 key
|
|
171
|
+
*/
|
|
172
|
+
function getInnerElementIndexKey(index) {
|
|
173
|
+
return `airx-element-inner-key:${index}`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 将 children 实例链转成 Map 便于此处消费
|
|
177
|
+
* @param firstChild children 实例的第一个元素
|
|
178
|
+
* @returns 从 firstChild 开始之后的所有 sibling 实例组成的 Map
|
|
179
|
+
*/
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
181
|
+
function getChildrenInstanceMap(firstChild) {
|
|
182
|
+
// 不使用递归是因为递归容易爆栈
|
|
183
|
+
let nextIndex = 0;
|
|
184
|
+
let nextChild = firstChild;
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
|
+
const map = new Map();
|
|
187
|
+
while (nextChild) {
|
|
188
|
+
/* 如果有 key,则将 key 作为 map key,否则将 index 作为 key */
|
|
189
|
+
if (nextChild.element?.props.key != null) {
|
|
190
|
+
map.set(nextChild.element?.props.key, nextChild);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
map.set(getInnerElementIndexKey(nextIndex), nextChild);
|
|
194
|
+
}
|
|
195
|
+
nextChild = nextChild.sibling;
|
|
196
|
+
nextIndex += 1;
|
|
197
|
+
}
|
|
198
|
+
return map;
|
|
199
|
+
}
|
|
200
|
+
const newChildrenInstanceArray = [];
|
|
201
|
+
const childrenInstanceMap = getChildrenInstanceMap(parentInstance.child);
|
|
202
|
+
function getChildInstance(child, index) {
|
|
203
|
+
if (child.props.key != null) {
|
|
204
|
+
const key = child.props.key;
|
|
205
|
+
const instance = childrenInstanceMap.get(key) || null;
|
|
206
|
+
return [instance, () => childrenInstanceMap.delete(key)];
|
|
207
|
+
}
|
|
208
|
+
const innerKey = getInnerElementIndexKey(index);
|
|
209
|
+
const instance = childrenInstanceMap.get(innerKey) || null;
|
|
210
|
+
return [instance, () => childrenInstanceMap.delete(innerKey)];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 浅比较 props 是否相等
|
|
214
|
+
* @param prev 之前的 props
|
|
215
|
+
* @param next 下一个 props
|
|
216
|
+
*/
|
|
217
|
+
function isSameElementType(instance, nextElement) {
|
|
218
|
+
if (instance == null)
|
|
219
|
+
return false;
|
|
220
|
+
if (instance.element == null)
|
|
221
|
+
return false;
|
|
222
|
+
if (instance.element.type !== nextElement.type)
|
|
223
|
+
return false;
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
function updateMemoProps(instance) {
|
|
227
|
+
if (instance.element == null)
|
|
228
|
+
return;
|
|
229
|
+
if (instance.memoProps == null)
|
|
230
|
+
instance.memoProps = {};
|
|
231
|
+
// 简单来说就是以下几件事情
|
|
232
|
+
// 始终保持 props 的引用不变
|
|
233
|
+
// 1. 创建一个新对象来保存 beforeElement props 的状态
|
|
234
|
+
// 2. 将新的 element 上的 props 引用设置为之前的 props
|
|
235
|
+
// 3. 将新的 element 上的 props 更新到之前的 props 上去
|
|
236
|
+
if (instance.memoProps != null) {
|
|
237
|
+
for (const key in instance.memoProps) {
|
|
238
|
+
delete instance.memoProps[key];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// 将新的 props 更新上去
|
|
242
|
+
for (const key in instance.element.props) {
|
|
243
|
+
const value = instance.element.props[key];
|
|
244
|
+
instance.memoProps[key] = value;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function shouldUpdate(instance) {
|
|
248
|
+
const nextProps = instance.element?.props;
|
|
249
|
+
const preProps = instance.beforeElement?.props;
|
|
250
|
+
if (Object.is(nextProps, preProps)) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
if (typeof preProps !== 'object'
|
|
254
|
+
|| typeof nextProps !== 'object'
|
|
255
|
+
|| preProps === null
|
|
256
|
+
|| nextProps === null) {
|
|
257
|
+
logger.debug('props must be an object');
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
// 对应 key 的值不相同返回 false
|
|
261
|
+
const prevKeys = Object.keys(preProps);
|
|
262
|
+
for (let index = 0; index < prevKeys.length; index++) {
|
|
263
|
+
const key = prevKeys[index];
|
|
264
|
+
if (key !== 'children' && key !== 'key') {
|
|
265
|
+
if (!Object.hasOwn(nextProps, key))
|
|
266
|
+
return true;
|
|
267
|
+
if (!Object.is(preProps[key], nextProps[key]))
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
if (key === 'children') {
|
|
271
|
+
const prevChildren = preProps['children'];
|
|
272
|
+
const nextChildren = nextProps['children'];
|
|
273
|
+
// children 都是空的,则无需更新
|
|
274
|
+
if (prevChildren.length === 0 && nextChildren.length === 0)
|
|
275
|
+
return false;
|
|
276
|
+
// 简单比较一下 child 的引用
|
|
277
|
+
for (let index = 0; index < prevChildren.length; index++) {
|
|
278
|
+
const prevChild = prevChildren[index];
|
|
279
|
+
const nextChild = nextChildren[index];
|
|
280
|
+
if (prevChild !== nextChild)
|
|
281
|
+
return true;
|
|
282
|
+
if (typeof prevChild !== typeof nextChild)
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
// 依次遍历 child 并和 instance 对比
|
|
291
|
+
for (let index = 0; index < childrenElementArray.length; index++) {
|
|
292
|
+
const element = childrenElementArray[index];
|
|
293
|
+
const [instance, seize] = getChildInstance(element, index);
|
|
294
|
+
const isSameType = instance && isSameElementType(instance, element);
|
|
295
|
+
if (isSameType) {
|
|
296
|
+
seize(); // 从 childrenInstanceMap 中释放
|
|
297
|
+
newChildrenInstanceArray.push(instance);
|
|
298
|
+
instance.beforeElement = instance.element;
|
|
299
|
+
instance.element = element;
|
|
300
|
+
updateMemoProps(instance);
|
|
301
|
+
// 未标注更新的检查一下是否需要更新
|
|
302
|
+
if (instance.requiredUpdate !== true && typeof element.type === 'function') {
|
|
303
|
+
// FIXME: 没必要让 child 都 requiredUpdate,最好时可以只通过 shouldUpdate 来判断是否需要更新
|
|
304
|
+
instance.requiredUpdate = parentInstance.requiredUpdate || shouldUpdate(instance);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
const context = new InnerAirxComponentContext();
|
|
309
|
+
const instance = { element, context };
|
|
310
|
+
newChildrenInstanceArray.push(instance);
|
|
311
|
+
context.instance = instance;
|
|
312
|
+
updateMemoProps(instance);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// 新的 node
|
|
316
|
+
for (let index = 0; index < newChildrenInstanceArray.length; index++) {
|
|
317
|
+
const instance = newChildrenInstanceArray[index];
|
|
318
|
+
// 确保链的干净
|
|
319
|
+
instance.parent = parentInstance;
|
|
320
|
+
if (index === 0)
|
|
321
|
+
parentInstance.child = instance;
|
|
322
|
+
if (index > 0)
|
|
323
|
+
newChildrenInstanceArray[index - 1].sibling = instance;
|
|
324
|
+
if (index === newChildrenInstanceArray.length - 1)
|
|
325
|
+
delete instance.sibling;
|
|
326
|
+
}
|
|
327
|
+
// 剩余的是需要移除的
|
|
328
|
+
if (childrenInstanceMap.size > 0) {
|
|
329
|
+
if (parentInstance.deletions == null) {
|
|
330
|
+
parentInstance.deletions = new Set();
|
|
331
|
+
}
|
|
332
|
+
childrenInstanceMap.forEach(instance => {
|
|
333
|
+
parentInstance.deletions?.add(instance);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
logger.debug('parentInstance', parentInstance);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* 处理单个 instance
|
|
340
|
+
* @param instance 当前处理的实例
|
|
341
|
+
* @returns 返回下一个需要处理的 instance
|
|
342
|
+
*/
|
|
343
|
+
export function performUnitOfWork(instance, onUpdateRequire) {
|
|
344
|
+
const element = instance.element;
|
|
345
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
346
|
+
function childrenAsElements(children) {
|
|
347
|
+
const childrenAsArray = Array.isArray(children) ? children : [children];
|
|
348
|
+
function isComment(element) {
|
|
349
|
+
if (element === '')
|
|
350
|
+
return true;
|
|
351
|
+
if (element == null)
|
|
352
|
+
return true;
|
|
353
|
+
if (element === false)
|
|
354
|
+
return true;
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
return childrenAsArray.flat(3).map(element => {
|
|
358
|
+
if (isValidElement(element))
|
|
359
|
+
return element;
|
|
360
|
+
const elementType = isComment(element) ? 'comment' : 'text';
|
|
361
|
+
const textContent = element === '' ? 'empty-string' : String(element);
|
|
362
|
+
return createElement(elementType, { textContent });
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
// airx 组件
|
|
366
|
+
if (typeof element?.type === 'function') {
|
|
367
|
+
const collector = createCollector();
|
|
368
|
+
if (instance.render == null) {
|
|
369
|
+
const component = element.type;
|
|
370
|
+
const beforeContext = globalContext.current;
|
|
371
|
+
globalContext.current = instance.context.getSafeContext();
|
|
372
|
+
instance.render = collector.collect(() => component(instance.memoProps));
|
|
373
|
+
globalContext.current = beforeContext;
|
|
374
|
+
const children = collector.collect(() => instance.render?.());
|
|
375
|
+
reconcileChildren(instance, childrenAsElements(children));
|
|
376
|
+
}
|
|
377
|
+
if (instance.requiredUpdate) {
|
|
378
|
+
const children = collector.collect(() => instance.render?.());
|
|
379
|
+
reconcileChildren(instance, childrenAsElements(children));
|
|
380
|
+
delete instance.requiredUpdate;
|
|
381
|
+
}
|
|
382
|
+
// 处理依赖触发的更新
|
|
383
|
+
collector.complete().forEach(ref => {
|
|
384
|
+
instance.context.addDisposer(watch(ref, () => {
|
|
385
|
+
instance.requiredUpdate = true;
|
|
386
|
+
onUpdateRequire?.(instance);
|
|
387
|
+
}));
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
// 浏览器组件/标签
|
|
391
|
+
if (typeof element?.type === 'string') {
|
|
392
|
+
if ('children' in element.props && Array.isArray(element.props.children)) {
|
|
393
|
+
reconcileChildren(instance, childrenAsElements(element.props.children));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// 优先处理 child
|
|
397
|
+
if (instance.child) {
|
|
398
|
+
return instance.child;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* 递归向上查找可用的兄弟 instance
|
|
402
|
+
* @param instance
|
|
403
|
+
* @returns 返回下一个需要处理的兄弟 instance
|
|
404
|
+
*/
|
|
405
|
+
function returnSibling(instance) {
|
|
406
|
+
if (instance.sibling) {
|
|
407
|
+
return instance.sibling;
|
|
408
|
+
}
|
|
409
|
+
if (instance.parent) {
|
|
410
|
+
return returnSibling(instance.parent);
|
|
411
|
+
}
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
return returnSibling(instance);
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/render/common/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,WAAW,EACZ,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../source/render/server.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,6DAA6D;AAC7D,MAAM,UAAU,MAAM,CAAC,OAA4B;IACjD,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "airx",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "a front framework with jsx",
|
|
5
5
|
"types": "./output/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"typescript": "~5.0.0"
|
|
27
27
|
},
|
|
28
28
|
"author": "",
|
|
29
|
-
"license": "
|
|
29
|
+
"license": "MIT"
|
|
30
30
|
}
|