@mantou/gem 1.5.1 → 1.5.5
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/elements/dialog-base.js +1 -1
- package/elements/dialog-base.js.map +1 -1
- package/elements/modal-base.d.ts +21 -20
- package/elements/modal-base.d.ts.map +1 -1
- package/elements/modal-base.js +1 -1
- package/elements/modal-base.js.map +1 -1
- package/elements/route.d.ts +2 -2
- package/elements/route.d.ts.map +1 -1
- package/elements/route.js +11 -7
- package/elements/route.js.map +1 -1
- package/elements/use.d.ts +1 -0
- package/elements/use.d.ts.map +1 -1
- package/elements/use.js +4 -1
- package/elements/use.js.map +1 -1
- package/helper/i18n.d.ts +2 -1
- package/helper/i18n.d.ts.map +1 -1
- package/helper/i18n.js.map +1 -1
- package/lib/element.d.ts +3 -4
- package/lib/element.d.ts.map +1 -1
- package/lib/element.js.map +1 -1
- package/lib/utils.d.ts +7 -8
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +63 -40
- package/lib/utils.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +7 -7
- package/src/elements/dialog-base.ts +1 -1
- package/src/elements/modal-base.ts +1 -1
- package/src/elements/route.ts +12 -7
- package/src/elements/use.ts +3 -1
- package/src/examples/multi-page/page-c.ts +1 -0
- package/src/examples/ref-route/index.ts +3 -2
- package/src/helper/i18n.ts +2 -0
- package/src/lib/element.ts +4 -5
- package/src/lib/utils.ts +54 -43
- package/src/lib/version.ts +1 -1
- package/src/test/utils.test.ts +9 -6
- package/umd.js +6 -6
- package/umd.js.map +1 -1
package/lib/utils.js
CHANGED
|
@@ -3,7 +3,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _LinkedList_instances, _LinkedList_map, _LinkedList_firstItem, _LinkedList_lastItem, _LinkedList_delete, _QueryString_stringify, _QueryString_parse;
|
|
7
13
|
const microtaskSet = new Set();
|
|
8
14
|
export function addMicrotask(func) {
|
|
9
15
|
if (typeof func !== 'function')
|
|
@@ -43,47 +49,66 @@ export function absoluteLocation(currentPath = '', relativePath = '') {
|
|
|
43
49
|
export class LinkedList extends (globalThis.EventTarget || Object) {
|
|
44
50
|
constructor() {
|
|
45
51
|
super(...arguments);
|
|
46
|
-
|
|
52
|
+
_LinkedList_instances.add(this);
|
|
53
|
+
_LinkedList_map.set(this, new Map());
|
|
54
|
+
_LinkedList_firstItem.set(this, void 0);
|
|
55
|
+
_LinkedList_lastItem.set(this, void 0);
|
|
56
|
+
}
|
|
57
|
+
get size() {
|
|
58
|
+
return __classPrivateFieldGet(this, _LinkedList_map, "f").size;
|
|
47
59
|
}
|
|
48
|
-
//
|
|
60
|
+
// 添加到尾部,已存在时会删除老的项目
|
|
49
61
|
add(value) {
|
|
50
|
-
|
|
51
|
-
if (!this.firstItem) {
|
|
62
|
+
if (!__classPrivateFieldGet(this, _LinkedList_lastItem, "f")) {
|
|
52
63
|
this.dispatchEvent(new CustomEvent('start'));
|
|
53
|
-
this.firstItem = item;
|
|
54
64
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
const item = __classPrivateFieldGet(this, _LinkedList_instances, "m", _LinkedList_delete).call(this, value) || { value };
|
|
66
|
+
item.prev = __classPrivateFieldGet(this, _LinkedList_lastItem, "f");
|
|
67
|
+
if (item.prev) {
|
|
68
|
+
item.prev.next = item;
|
|
58
69
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
existItem.prev.next = existItem.next;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.firstItem = existItem.next;
|
|
67
|
-
}
|
|
68
|
-
if (existItem.next) {
|
|
69
|
-
existItem.next.prev = existItem.prev;
|
|
70
|
-
}
|
|
70
|
+
item.next = undefined;
|
|
71
|
+
__classPrivateFieldSet(this, _LinkedList_lastItem, item, "f");
|
|
72
|
+
if (!__classPrivateFieldGet(this, _LinkedList_firstItem, "f")) {
|
|
73
|
+
__classPrivateFieldSet(this, _LinkedList_firstItem, item, "f");
|
|
71
74
|
}
|
|
72
|
-
this.
|
|
75
|
+
__classPrivateFieldGet(this, _LinkedList_map, "f").set(value, item);
|
|
73
76
|
}
|
|
77
|
+
delete(value) {
|
|
78
|
+
const deleteItem = __classPrivateFieldGet(this, _LinkedList_instances, "m", _LinkedList_delete).call(this, value);
|
|
79
|
+
if (!__classPrivateFieldGet(this, _LinkedList_firstItem, "f")) {
|
|
80
|
+
this.dispatchEvent(new CustomEvent('end'));
|
|
81
|
+
}
|
|
82
|
+
return deleteItem;
|
|
83
|
+
}
|
|
84
|
+
// 获取头部元素
|
|
74
85
|
get() {
|
|
75
|
-
const firstItem = this
|
|
86
|
+
const firstItem = __classPrivateFieldGet(this, _LinkedList_firstItem, "f");
|
|
76
87
|
if (!firstItem)
|
|
77
88
|
return;
|
|
78
|
-
this.
|
|
79
|
-
this.firstItem = firstItem.next;
|
|
80
|
-
if (!this.firstItem) {
|
|
81
|
-
this.lastItem = undefined;
|
|
82
|
-
this.dispatchEvent(new CustomEvent('end'));
|
|
83
|
-
}
|
|
89
|
+
__classPrivateFieldGet(this, _LinkedList_instances, "m", _LinkedList_delete).call(this, firstItem.value);
|
|
84
90
|
return firstItem.value;
|
|
85
91
|
}
|
|
86
92
|
}
|
|
93
|
+
_LinkedList_map = new WeakMap(), _LinkedList_firstItem = new WeakMap(), _LinkedList_lastItem = new WeakMap(), _LinkedList_instances = new WeakSet(), _LinkedList_delete = function _LinkedList_delete(value) {
|
|
94
|
+
const existItem = __classPrivateFieldGet(this, _LinkedList_map, "f").get(value);
|
|
95
|
+
if (existItem) {
|
|
96
|
+
if (existItem.prev) {
|
|
97
|
+
existItem.prev.next = existItem.next;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
__classPrivateFieldSet(this, _LinkedList_firstItem, existItem.next, "f");
|
|
101
|
+
}
|
|
102
|
+
if (existItem.next) {
|
|
103
|
+
existItem.next.prev = existItem.prev;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
__classPrivateFieldSet(this, _LinkedList_lastItem, existItem.prev, "f");
|
|
107
|
+
}
|
|
108
|
+
__classPrivateFieldGet(this, _LinkedList_map, "f").delete(value);
|
|
109
|
+
}
|
|
110
|
+
return existItem;
|
|
111
|
+
};
|
|
87
112
|
export class PropProxyMap extends WeakMap {
|
|
88
113
|
get(ele) {
|
|
89
114
|
let proxy = super.get(ele);
|
|
@@ -94,13 +119,10 @@ export class PropProxyMap extends WeakMap {
|
|
|
94
119
|
return proxy;
|
|
95
120
|
}
|
|
96
121
|
}
|
|
97
|
-
export function isObject(value) {
|
|
98
|
-
return typeof value === 'object';
|
|
99
|
-
}
|
|
100
122
|
export class QueryString extends URLSearchParams {
|
|
101
123
|
constructor(param) {
|
|
102
124
|
super(param);
|
|
103
|
-
_QueryString_stringify.set(this, (value) => (
|
|
125
|
+
_QueryString_stringify.set(this, (value) => (typeof value === 'string' ? value : JSON.stringify(value)));
|
|
104
126
|
_QueryString_parse.set(this, (value) => {
|
|
105
127
|
if (!value)
|
|
106
128
|
return null;
|
|
@@ -111,10 +133,8 @@ export class QueryString extends URLSearchParams {
|
|
|
111
133
|
return null;
|
|
112
134
|
}
|
|
113
135
|
});
|
|
114
|
-
if (param instanceof QueryString) {
|
|
115
|
-
return param;
|
|
116
|
-
}
|
|
117
136
|
}
|
|
137
|
+
// support `{ key: ObjectValue }`
|
|
118
138
|
concat(param) {
|
|
119
139
|
let query;
|
|
120
140
|
if (typeof param === 'string') {
|
|
@@ -123,8 +143,8 @@ export class QueryString extends URLSearchParams {
|
|
|
123
143
|
else {
|
|
124
144
|
query = param;
|
|
125
145
|
}
|
|
126
|
-
Object.
|
|
127
|
-
this.append(key,
|
|
146
|
+
Object.entries(query).forEach(([key, value]) => {
|
|
147
|
+
this.append(key, __classPrivateFieldGet(this, _QueryString_stringify, "f").call(this, value));
|
|
128
148
|
});
|
|
129
149
|
}
|
|
130
150
|
setAny(key, value) {
|
|
@@ -133,7 +153,8 @@ export class QueryString extends URLSearchParams {
|
|
|
133
153
|
value.forEach((e) => this.append(key, __classPrivateFieldGet(this, _QueryString_stringify, "f").call(this, e)));
|
|
134
154
|
}
|
|
135
155
|
else {
|
|
136
|
-
|
|
156
|
+
const v = __classPrivateFieldGet(this, _QueryString_stringify, "f").call(this, value);
|
|
157
|
+
v ? this.set(key, v) : this.delete(key);
|
|
137
158
|
}
|
|
138
159
|
}
|
|
139
160
|
getAny(key) {
|
|
@@ -278,7 +299,9 @@ export function removeItems(target, items) {
|
|
|
278
299
|
export function styleMap(obj) {
|
|
279
300
|
let styleString = '';
|
|
280
301
|
for (const key in obj) {
|
|
281
|
-
|
|
302
|
+
if (obj[key]) {
|
|
303
|
+
styleString += `${camelToKebabCase(key)}:${obj[key]};`;
|
|
304
|
+
}
|
|
282
305
|
}
|
|
283
306
|
return styleString;
|
|
284
307
|
}
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.5.
|
|
1
|
+
export declare const version = "1.5.5";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mantou/gem",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.5",
|
|
4
4
|
"description": "💎 使用自定义元素的轻量级 WebApp 开发框架",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -20,18 +20,18 @@
|
|
|
20
20
|
"typings": "index.d.ts",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"docs": "npx gem-book docs",
|
|
23
|
-
"build:docs": "
|
|
23
|
+
"build:docs": "yarn docs -- --build",
|
|
24
24
|
"lint": "tsc --noEmit && eslint --ext .ts --fix src/",
|
|
25
25
|
"clean": "node -e \"fs.readdirSync('src').map(dir => require('rimraf').sync(dir))\"",
|
|
26
26
|
"example": "cross-env NODE_ENV=development webpack serve",
|
|
27
27
|
"build:examples": "rimraf build && node scripts/build-examples",
|
|
28
|
-
"build:module": "
|
|
28
|
+
"build:module": "yarn clean && tsc",
|
|
29
29
|
"build:umd": "cross-env NODE_ENV=production webpack --config webpack.config.umd.js",
|
|
30
|
-
"build": "
|
|
31
|
-
"prepare": "
|
|
32
|
-
"prepublishOnly": "
|
|
30
|
+
"build": "yarn build:module && yarn build:umd",
|
|
31
|
+
"prepare": "yarn build",
|
|
32
|
+
"prepublishOnly": "yarn lint && yarn test",
|
|
33
33
|
"release": "node scripts/release",
|
|
34
|
-
"test": "
|
|
34
|
+
"test": "yarn build:module && karma start --coverage"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|
package/src/elements/route.ts
CHANGED
|
@@ -60,6 +60,7 @@ export interface RouteItem<T = unknown> {
|
|
|
60
60
|
// 支持 *
|
|
61
61
|
// 支持 /a/*
|
|
62
62
|
// 不支持相对路径
|
|
63
|
+
// 不能匹配查询字符串
|
|
63
64
|
pattern: string;
|
|
64
65
|
redirect?: string;
|
|
65
66
|
content?: TemplateResult;
|
|
@@ -109,7 +110,7 @@ type State = {
|
|
|
109
110
|
/**
|
|
110
111
|
* @customElement gem-route
|
|
111
112
|
* @attr inert 暂停路由更新
|
|
112
|
-
* @fires change
|
|
113
|
+
* @fires route-change
|
|
113
114
|
* @fires error
|
|
114
115
|
* @fires loading
|
|
115
116
|
*/
|
|
@@ -124,7 +125,7 @@ export class GemRouteElement extends GemElement<State> {
|
|
|
124
125
|
*/
|
|
125
126
|
@property locationStore?: Store<{ path: string; params: Params; query: QueryString; data?: any }>;
|
|
126
127
|
@property key: any; // 除了 href 提供另外一种方式来更新,比如语言更新也需要刷新 <gem-route>
|
|
127
|
-
@emitter
|
|
128
|
+
@emitter routeChange: Emitter<RouteItem | null>; // path 改变或者 key 改变,包含初始渲染
|
|
128
129
|
@emitter loading: Emitter<RouteItem>;
|
|
129
130
|
@emitter error: Emitter<any>;
|
|
130
131
|
|
|
@@ -186,7 +187,7 @@ export class GemRouteElement extends GemElement<State> {
|
|
|
186
187
|
this.currentRoute = route;
|
|
187
188
|
this.currentParams = params;
|
|
188
189
|
this.setState({ content });
|
|
189
|
-
this.
|
|
190
|
+
this.routeChange(this.currentRoute);
|
|
190
191
|
const title = route?.title;
|
|
191
192
|
if (title) updateStore(titleStore, { title });
|
|
192
193
|
this.#updateLocationStore();
|
|
@@ -194,7 +195,12 @@ export class GemRouteElement extends GemElement<State> {
|
|
|
194
195
|
|
|
195
196
|
mounted() {
|
|
196
197
|
this.effect(
|
|
197
|
-
([
|
|
198
|
+
([key, path], old) => {
|
|
199
|
+
// 只有查询参数改变
|
|
200
|
+
if (old && key === old[0] && path === old[1]) {
|
|
201
|
+
this.#updateLocationStore();
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
198
204
|
const { route, params = {} } = GemRouteElement.findRoute(this.routes, path);
|
|
199
205
|
const { redirect, content, getContent } = route || {};
|
|
200
206
|
if (redirect) {
|
|
@@ -219,10 +225,9 @@ export class GemRouteElement extends GemElement<State> {
|
|
|
219
225
|
},
|
|
220
226
|
() => {
|
|
221
227
|
const { path } = history.getParams();
|
|
222
|
-
return [this.key, path];
|
|
228
|
+
return [this.key, path, location.search];
|
|
223
229
|
},
|
|
224
230
|
);
|
|
225
|
-
this.effect(this.#updateLocationStore, () => [location.search]);
|
|
226
231
|
}
|
|
227
232
|
|
|
228
233
|
shouldUpdate() {
|
|
@@ -241,7 +246,7 @@ export class GemRouteElement extends GemElement<State> {
|
|
|
241
246
|
display: contents;
|
|
242
247
|
}
|
|
243
248
|
</style>
|
|
244
|
-
${content}
|
|
249
|
+
${content ?? html`<slot></slot>`}
|
|
245
250
|
`;
|
|
246
251
|
}
|
|
247
252
|
}
|
package/src/elements/use.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GemElement, html, attribute, property, customElement } from '../';
|
|
1
|
+
import { GemElement, html, attribute, property, customElement, state } from '../';
|
|
2
2
|
|
|
3
3
|
const eleCache = new Map<string, HTMLTemplateElement>();
|
|
4
4
|
/**
|
|
@@ -17,6 +17,8 @@ export class GemUseElement extends GemElement {
|
|
|
17
17
|
@property root?: HTMLElement | Document | ShadowRoot;
|
|
18
18
|
@property element?: string | DocumentFragment | Element;
|
|
19
19
|
|
|
20
|
+
@state active: boolean;
|
|
21
|
+
|
|
20
22
|
private getContent() {
|
|
21
23
|
const ele = this.element || (this.selector ? (this.root || document).querySelector(this.selector) : null);
|
|
22
24
|
if (typeof ele === 'string') {
|
|
@@ -7,7 +7,8 @@ import '../elements/layout';
|
|
|
7
7
|
|
|
8
8
|
const homeRoute: RouteItem = {
|
|
9
9
|
pattern: '/',
|
|
10
|
-
getContent(params) {
|
|
10
|
+
async getContent(params) {
|
|
11
|
+
await new Promise((res) => setTimeout(res, 1000));
|
|
11
12
|
return html`<route-home .params=${params}></route-home>`;
|
|
12
13
|
},
|
|
13
14
|
};
|
|
@@ -88,7 +89,7 @@ export class App extends GemElement {
|
|
|
88
89
|
<gem-route
|
|
89
90
|
ref=${this.routeRef.ref}
|
|
90
91
|
@loading=${console.log}
|
|
91
|
-
@change=${console.log}
|
|
92
|
+
@route-change=${console.log}
|
|
92
93
|
@error=${console.error}
|
|
93
94
|
.routes=${routes}
|
|
94
95
|
.locationStore=${locationStore}
|
package/src/helper/i18n.ts
CHANGED
|
@@ -115,6 +115,8 @@ export class I18n<T = Record<string, Msg>> {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
get(s: keyof T): string;
|
|
119
|
+
get(s: keyof T, ...rest: (((s: string) => TemplateResult) | string)[]): TemplateResult;
|
|
118
120
|
get(s: keyof T, ...rest: (((s: string) => TemplateResult) | string)[]) {
|
|
119
121
|
const currentLanguagePack = this.resources[this.currentLanguage] as any;
|
|
120
122
|
const fallbackLanguagePack = this.resources[this.fallbackLanguage] as any;
|
package/src/lib/element.ts
CHANGED
|
@@ -25,11 +25,10 @@ export { ifDefined } from 'lit-html/directives/if-defined';
|
|
|
25
25
|
type CustomStateSet = Set<string>;
|
|
26
26
|
|
|
27
27
|
declare global {
|
|
28
|
-
interface ElementInternals {
|
|
28
|
+
interface ElementInternals extends ARIAMixin {
|
|
29
29
|
states: CustomStateSet;
|
|
30
30
|
// https://w3c.github.io/aria/#role_definitions
|
|
31
31
|
role?: string;
|
|
32
|
-
ariaModal?: boolean;
|
|
33
32
|
}
|
|
34
33
|
// 用于 css 选择器选择元素,使用 @refobject 自动选择获取
|
|
35
34
|
// 必须使用 attr 赋值
|
|
@@ -38,8 +37,8 @@ declare global {
|
|
|
38
37
|
* @attr inert
|
|
39
38
|
*/
|
|
40
39
|
interface HTMLElement {
|
|
41
|
-
attachInternals
|
|
42
|
-
inert
|
|
40
|
+
attachInternals: () => ElementInternals;
|
|
41
|
+
inert: boolean;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
|
|
@@ -164,7 +163,7 @@ export abstract class GemElement<T = Record<string, unknown>> extends HTMLElemen
|
|
|
164
163
|
if (!this.attachInternals) {
|
|
165
164
|
// https://bugs.webkit.org/show_bug.cgi?id=197960
|
|
166
165
|
this.attachInternals = () => {
|
|
167
|
-
return { states: getCustomStateSet() };
|
|
166
|
+
return { states: getCustomStateSet() } as any;
|
|
168
167
|
};
|
|
169
168
|
}
|
|
170
169
|
this.#internals = this.attachInternals();
|
package/src/lib/utils.ts
CHANGED
|
@@ -50,56 +50,70 @@ interface LinkedListItem<T> {
|
|
|
50
50
|
next?: LinkedListItem<T>;
|
|
51
51
|
}
|
|
52
52
|
// work on nodejs
|
|
53
|
-
export class LinkedList<T
|
|
53
|
+
export class LinkedList<T = any> extends (globalThis.EventTarget || Object) {
|
|
54
54
|
addEventListener: <K extends keyof LinkedListEventMap>(
|
|
55
55
|
type: K,
|
|
56
56
|
listener: (this: LinkedList<T>, ev: LinkedListEventMap[K]) => any,
|
|
57
57
|
options?: boolean | AddEventListenerOptions,
|
|
58
58
|
) => void;
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
firstItem?: LinkedListItem<T>;
|
|
62
|
-
lastItem?: LinkedListItem<T>;
|
|
60
|
+
#map = new Map<T, LinkedListItem<T>>();
|
|
61
|
+
#firstItem?: LinkedListItem<T>;
|
|
62
|
+
#lastItem?: LinkedListItem<T>;
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const item: LinkedListItem<T> = { value };
|
|
67
|
-
if (!this.firstItem) {
|
|
68
|
-
this.dispatchEvent(new CustomEvent('start'));
|
|
69
|
-
this.firstItem = item;
|
|
70
|
-
}
|
|
71
|
-
if (this.lastItem) {
|
|
72
|
-
this.lastItem.next = item;
|
|
73
|
-
item.prev = this.lastItem;
|
|
74
|
-
}
|
|
75
|
-
this.lastItem = item;
|
|
76
|
-
|
|
77
|
-
const existItem = this.pool.get(value);
|
|
64
|
+
#delete(value: T) {
|
|
65
|
+
const existItem = this.#map.get(value);
|
|
78
66
|
if (existItem) {
|
|
79
67
|
if (existItem.prev) {
|
|
80
68
|
existItem.prev.next = existItem.next;
|
|
81
69
|
} else {
|
|
82
|
-
this
|
|
70
|
+
this.#firstItem = existItem.next;
|
|
83
71
|
}
|
|
84
72
|
if (existItem.next) {
|
|
85
73
|
existItem.next.prev = existItem.prev;
|
|
74
|
+
} else {
|
|
75
|
+
this.#lastItem = existItem.prev;
|
|
86
76
|
}
|
|
77
|
+
this.#map.delete(value);
|
|
87
78
|
}
|
|
88
|
-
|
|
89
|
-
this.pool.set(value, item);
|
|
79
|
+
return existItem;
|
|
90
80
|
}
|
|
91
81
|
|
|
92
|
-
get()
|
|
93
|
-
|
|
94
|
-
|
|
82
|
+
get size() {
|
|
83
|
+
return this.#map.size;
|
|
84
|
+
}
|
|
95
85
|
|
|
96
|
-
|
|
86
|
+
// 添加到尾部,已存在时会删除老的项目
|
|
87
|
+
add(value: T) {
|
|
88
|
+
if (!this.#lastItem) {
|
|
89
|
+
this.dispatchEvent(new CustomEvent('start'));
|
|
90
|
+
}
|
|
91
|
+
const item: LinkedListItem<T> = this.#delete(value) || { value };
|
|
92
|
+
item.prev = this.#lastItem;
|
|
93
|
+
if (item.prev) {
|
|
94
|
+
item.prev.next = item;
|
|
95
|
+
}
|
|
96
|
+
item.next = undefined;
|
|
97
|
+
this.#lastItem = item;
|
|
98
|
+
if (!this.#firstItem) {
|
|
99
|
+
this.#firstItem = item;
|
|
100
|
+
}
|
|
101
|
+
this.#map.set(value, item);
|
|
102
|
+
}
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
delete(value: T) {
|
|
105
|
+
const deleteItem = this.#delete(value);
|
|
106
|
+
if (!this.#firstItem) {
|
|
101
107
|
this.dispatchEvent(new CustomEvent('end'));
|
|
102
108
|
}
|
|
109
|
+
return deleteItem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// 获取头部元素
|
|
113
|
+
get(): T | undefined {
|
|
114
|
+
const firstItem = this.#firstItem;
|
|
115
|
+
if (!firstItem) return;
|
|
116
|
+
this.#delete(firstItem.value);
|
|
103
117
|
return firstItem.value;
|
|
104
118
|
}
|
|
105
119
|
}
|
|
@@ -115,10 +129,6 @@ export class PropProxyMap<T extends NonPrimitive, V = unknown> extends WeakMap<T
|
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
export function isObject(value: any) {
|
|
119
|
-
return typeof value === 'object';
|
|
120
|
-
}
|
|
121
|
-
|
|
122
132
|
declare global {
|
|
123
133
|
interface URLSearchParams {
|
|
124
134
|
entries(): Iterable<readonly [string | number | symbol, any]>;
|
|
@@ -127,11 +137,9 @@ declare global {
|
|
|
127
137
|
export class QueryString extends URLSearchParams {
|
|
128
138
|
constructor(param?: any) {
|
|
129
139
|
super(param);
|
|
130
|
-
if (param instanceof QueryString) {
|
|
131
|
-
return param;
|
|
132
|
-
}
|
|
133
140
|
}
|
|
134
141
|
|
|
142
|
+
// support `{ key: ObjectValue }`
|
|
135
143
|
concat(param: any) {
|
|
136
144
|
let query: any;
|
|
137
145
|
if (typeof param === 'string') {
|
|
@@ -139,19 +147,20 @@ export class QueryString extends URLSearchParams {
|
|
|
139
147
|
} else {
|
|
140
148
|
query = param;
|
|
141
149
|
}
|
|
142
|
-
Object.
|
|
143
|
-
this.append(key,
|
|
150
|
+
Object.entries(query).forEach(([key, value]) => {
|
|
151
|
+
this.append(key, this.#stringify(value));
|
|
144
152
|
});
|
|
145
153
|
}
|
|
146
154
|
|
|
147
|
-
#stringify = (value: any) => (
|
|
155
|
+
#stringify = (value: any) => (typeof value === 'string' ? value : JSON.stringify(value));
|
|
148
156
|
|
|
149
157
|
setAny(key: string, value: any) {
|
|
150
158
|
if (Array.isArray(value)) {
|
|
151
159
|
this.delete(key);
|
|
152
160
|
value.forEach((e) => this.append(key, this.#stringify(e)));
|
|
153
161
|
} else {
|
|
154
|
-
|
|
162
|
+
const v = this.#stringify(value);
|
|
163
|
+
v ? this.set(key, v) : this.delete(key);
|
|
155
164
|
}
|
|
156
165
|
}
|
|
157
166
|
|
|
@@ -220,12 +229,12 @@ declare global {
|
|
|
220
229
|
}
|
|
221
230
|
}
|
|
222
231
|
|
|
223
|
-
type StyledType = 'id' | 'class' | 'keyframes';
|
|
224
|
-
interface StyledValueObject {
|
|
232
|
+
export type StyledType = 'id' | 'class' | 'keyframes';
|
|
233
|
+
export interface StyledValueObject {
|
|
225
234
|
styledContent: string;
|
|
226
235
|
type: StyledType;
|
|
227
236
|
}
|
|
228
|
-
interface StyledKeyValuePair {
|
|
237
|
+
export interface StyledKeyValuePair {
|
|
229
238
|
[key: string]: StyledValueObject;
|
|
230
239
|
}
|
|
231
240
|
|
|
@@ -350,7 +359,9 @@ export function removeItems(target: any[], items: any[]) {
|
|
|
350
359
|
export function styleMap(obj: Partial<CSSStyleDeclaration>) {
|
|
351
360
|
let styleString = '';
|
|
352
361
|
for (const key in obj) {
|
|
353
|
-
|
|
362
|
+
if (obj[key]) {
|
|
363
|
+
styleString += `${camelToKebabCase(key)}:${obj[key]};`;
|
|
364
|
+
}
|
|
354
365
|
}
|
|
355
366
|
return styleString;
|
|
356
367
|
}
|
package/src/lib/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Do not modify manually
|
|
2
|
-
export const version = '1.5.
|
|
2
|
+
export const version = '1.5.5';
|
package/src/test/utils.test.ts
CHANGED
|
@@ -22,17 +22,20 @@ describe('utils 测试', () => {
|
|
|
22
22
|
const linkedList = new LinkedList<() => void>();
|
|
23
23
|
let countAtStart = 0;
|
|
24
24
|
let countAtPause = 0;
|
|
25
|
-
linkedList.addEventListener('start', () => (countAtStart = linkedList.
|
|
26
|
-
linkedList.addEventListener('end', () => (countAtPause = linkedList.
|
|
27
|
-
const fun1 = () =>
|
|
28
|
-
const fun2 = () =>
|
|
25
|
+
linkedList.addEventListener('start', () => (countAtStart = linkedList.size));
|
|
26
|
+
linkedList.addEventListener('end', () => (countAtPause = linkedList.size));
|
|
27
|
+
const fun1 = () => 1;
|
|
28
|
+
const fun2 = () => 2;
|
|
29
29
|
linkedList.add(fun1);
|
|
30
30
|
linkedList.add(fun2);
|
|
31
|
+
linkedList.delete(fun2);
|
|
32
|
+
expect(linkedList.size).to.equal(1);
|
|
33
|
+
linkedList.add(fun2);
|
|
31
34
|
linkedList.add(fun1);
|
|
32
|
-
expect(linkedList.
|
|
35
|
+
expect(linkedList.size).to.equal(2);
|
|
33
36
|
expect(linkedList.get()).to.equal(fun2);
|
|
34
37
|
expect(linkedList.get()).to.equal(fun1);
|
|
35
|
-
expect(linkedList.
|
|
38
|
+
expect(linkedList.size).to.equal(0);
|
|
36
39
|
expect(linkedList.get()).to.equal(undefined);
|
|
37
40
|
expect(countAtStart).to.equal(0);
|
|
38
41
|
expect(countAtPause).to.equal(0);
|