@feng3d/reactivity 1.0.8 → 1.0.11

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.
@@ -1,41 +1,41 @@
1
- /**
2
- * 响应式标志枚举,用于标识响应式对象的特殊属性或状态
3
- */
4
- export enum ReactiveFlags
5
- {
6
- IS_REACTIVE = '__v_isReactive', // 标识对象是否为响应式对象
7
- RAW = '__v_raw', // 获取对象的原始非响应式版本
8
- IS_REF = '__v_isRef', // 标识对象是否为 ref 对象
9
- }
10
-
11
- export enum TargetType
12
- {
13
- INVALID = 0,
14
- COMMON = 1,
15
- COLLECTION = 2,
16
- }
17
-
18
- /**
19
- * 跟踪操作类型枚举,用于标识在响应式系统中对对象属性进行的操作类型
20
- */
21
- export enum TrackOpTypes
22
- {
23
- GET = 'get', // 获取属性值
24
- HAS = 'has', // 检查属性是否存在
25
- ITERATE = 'iterate', // 遍历对象属性
26
- }
27
-
28
- /**
29
- * 触发操作类型枚举,用于标识在响应式系统中对对象属性进行的修改操作类型
30
- */
31
- export enum TriggerOpTypes
32
- {
33
- SET = 'set', // 设置属性值
34
- ADD = 'add', // 添加新属性
35
- DELETE = 'delete', // 删除属性
36
- CLEAR = 'clear', // 清空对象属性
37
- }
38
-
39
- export const ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Object iterate' : '');
40
- export const MAP_KEY_ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Map keys iterate' : '');
41
- export const ARRAY_ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Array iterate' : '');
1
+ /**
2
+ * 响应式标志枚举,用于标识响应式对象的特殊属性或状态
3
+ */
4
+ export enum ReactiveFlags
5
+ {
6
+ IS_REACTIVE = '__v_isReactive', // 标识对象是否为响应式对象
7
+ RAW = '__v_raw', // 获取对象的原始非响应式版本
8
+ IS_REF = '__v_isRef', // 标识对象是否为 ref 对象
9
+ }
10
+
11
+ export enum TargetType
12
+ {
13
+ INVALID = 0,
14
+ COMMON = 1,
15
+ COLLECTION = 2,
16
+ }
17
+
18
+ /**
19
+ * 跟踪操作类型枚举,用于标识在响应式系统中对对象属性进行的操作类型
20
+ */
21
+ export enum TrackOpTypes
22
+ {
23
+ GET = 'get', // 获取属性值
24
+ HAS = 'has', // 检查属性是否存在
25
+ ITERATE = 'iterate', // 遍历对象属性
26
+ }
27
+
28
+ /**
29
+ * 触发操作类型枚举,用于标识在响应式系统中对对象属性进行的修改操作类型
30
+ */
31
+ export enum TriggerOpTypes
32
+ {
33
+ SET = 'set', // 设置属性值
34
+ ADD = 'add', // 添加新属性
35
+ DELETE = 'delete', // 删除属性
36
+ CLEAR = 'clear', // 清空对象属性
37
+ }
38
+
39
+ export const ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Object iterate' : '');
40
+ export const MAP_KEY_ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Map keys iterate' : '');
41
+ export const ARRAY_ITERATE_KEY: unique symbol = Symbol(__DEV__ ? 'Array iterate' : '');
@@ -1,109 +1,109 @@
1
- /* eslint-disable no-var */
2
- import { ReactiveFlags, TargetType } from './constants';
3
-
4
- export { };
5
- declare global
6
- {
7
- /**
8
- * 是否为开发模式。
9
- */
10
- var __DEV__: boolean;
11
- }
12
- globalThis.__DEV__ ??= true;
13
-
14
- export const isObject = (val: unknown): val is Record<any, any> => val !== null && typeof val === 'object';
15
- // 判断是否为数组
16
- export const isArray: typeof Array.isArray = Array.isArray;
17
- export const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol';
18
- export const isString = (val: unknown): val is string => typeof val === 'string';
19
- export const isIntegerKey = (key: unknown): boolean =>
20
- isString(key)
21
- && key !== 'NaN'
22
- && key[0] !== '-'
23
- && `${parseInt(key as any, 10)}` === key;
24
- export const isMap = (val: unknown): val is Map<any, any> =>
25
- toTypeString(val) === '[object Map]';
26
-
27
- // 判断对象是否拥有指定属性
28
- export const hasOwn = (
29
- val: object,
30
- key: string | symbol,
31
- ): key is keyof typeof val => Object.prototype.hasOwnProperty.call(val, key);
32
-
33
- // 比较两个值是否发生变化,考虑 NaN 的情况
34
- export const hasChanged = (value: any, oldValue: any): boolean =>
35
- !Object.is(value, oldValue);
36
-
37
- function targetTypeMap(rawType: string)
38
- {
39
- switch (rawType)
40
- {
41
- case 'Object':
42
- case 'Array':
43
- return TargetType.COMMON;
44
- case 'Map':
45
- case 'Set':
46
- case 'WeakMap':
47
- case 'WeakSet':
48
- return TargetType.COLLECTION;
49
- default:
50
- return TargetType.COMMON;
51
- }
52
- }
53
-
54
- export function getTargetType(value: Target)
55
- {
56
- if (!Object.isExtensible(value)) return TargetType.INVALID;
57
-
58
- return targetTypeMap(toRawType(value));
59
- }
60
-
61
- const toTypeString = (value: unknown): string => Object.prototype.toString.call(value);
62
-
63
- // 获取值的原始类型
64
- export const toRawType = (value: unknown): string =>
65
-
66
- // 从类似 "[object RawType]" 的字符串中提取 "RawType"
67
- toTypeString(value).slice(8, -1);
68
-
69
- export interface Target
70
- {
71
- [ReactiveFlags.IS_REACTIVE]?: boolean
72
- [ReactiveFlags.RAW]?: any
73
- }
74
-
75
- /**
76
- * 将一个响应式对象转换为原始对象。
77
- * @param observed 响应式对象。
78
- * @returns 原始对象。
79
- */
80
- export function toRaw<T>(observed: T): T
81
- {
82
- const raw = observed && (observed as Target)[ReactiveFlags.RAW];
83
-
84
- return raw ? toRaw(raw) : observed;
85
- }
86
-
87
- export function warn(msg: string, ...args: any[]): void
88
- {
89
- console.warn(`[Vue warn] ${msg}`, ...args);
90
- }
91
-
92
- /**
93
- * 创建一个映射,并返回一个用于检查键是否存在于该映射中的函数。
94
- * 重要提示:所有调用此函数的地方都必须以 \/\*#\_\_PURE\_\_\*\/ 作为前缀,
95
- * 以便在必要时 Rollup 可以进行 tree-shaking。
96
- */
97
-
98
- /* ! #__NO_SIDE_EFFECTS__ */
99
- export function makeMap(str: string): (key: string) => boolean
100
- {
101
- // 创建一个空对象作为映射,使用 Object.create(null) 避免原型链上的属性干扰
102
- const map = Object.create(null);
103
-
104
- // 将输入的字符串按逗号分隔,遍历每个键并将其添加到映射中,值为 1
105
- for (const key of str.split(',')) map[key] = 1;
106
-
107
- // 返回一个函数,该函数接受一个键值,并检查该键是否存在于映射中
108
- return (val) => val in map;
109
- }
1
+ /* eslint-disable no-var */
2
+ import { ReactiveFlags, TargetType } from './constants';
3
+
4
+ export { };
5
+ declare global
6
+ {
7
+ /**
8
+ * 是否为开发模式。
9
+ */
10
+ var __DEV__: boolean;
11
+ }
12
+ globalThis.__DEV__ ??= true;
13
+
14
+ export const isObject = (val: unknown): val is Record<any, any> => val !== null && typeof val === 'object';
15
+ // 判断是否为数组
16
+ export const isArray: typeof Array.isArray = Array.isArray;
17
+ export const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol';
18
+ export const isString = (val: unknown): val is string => typeof val === 'string';
19
+ export const isIntegerKey = (key: unknown): boolean =>
20
+ isString(key)
21
+ && key !== 'NaN'
22
+ && key[0] !== '-'
23
+ && `${parseInt(key as any, 10)}` === key;
24
+ export const isMap = (val: unknown): val is Map<any, any> =>
25
+ toTypeString(val) === '[object Map]';
26
+
27
+ // 判断对象是否拥有指定属性
28
+ export const hasOwn = (
29
+ val: object,
30
+ key: string | symbol,
31
+ ): key is keyof typeof val => Object.prototype.hasOwnProperty.call(val, key);
32
+
33
+ // 比较两个值是否发生变化,考虑 NaN 的情况
34
+ export const hasChanged = (value: any, oldValue: any): boolean =>
35
+ !Object.is(value, oldValue);
36
+
37
+ function targetTypeMap(rawType: string)
38
+ {
39
+ switch (rawType)
40
+ {
41
+ case 'Object':
42
+ case 'Array':
43
+ return TargetType.COMMON;
44
+ case 'Map':
45
+ case 'Set':
46
+ case 'WeakMap':
47
+ case 'WeakSet':
48
+ return TargetType.COLLECTION;
49
+ default:
50
+ return TargetType.COMMON;
51
+ }
52
+ }
53
+
54
+ export function getTargetType(value: Target)
55
+ {
56
+ if (!Object.isExtensible(value)) return TargetType.INVALID;
57
+
58
+ return targetTypeMap(toRawType(value));
59
+ }
60
+
61
+ const toTypeString = (value: unknown): string => Object.prototype.toString.call(value);
62
+
63
+ // 获取值的原始类型
64
+ export const toRawType = (value: unknown): string =>
65
+
66
+ // 从类似 "[object RawType]" 的字符串中提取 "RawType"
67
+ toTypeString(value).slice(8, -1);
68
+
69
+ export interface Target
70
+ {
71
+ [ReactiveFlags.IS_REACTIVE]?: boolean
72
+ [ReactiveFlags.RAW]?: any
73
+ }
74
+
75
+ /**
76
+ * 将一个响应式对象转换为原始对象。
77
+ * @param observed 响应式对象。
78
+ * @returns 原始对象。
79
+ */
80
+ export function toRaw<T>(observed: T): T
81
+ {
82
+ const raw = observed && (observed as Target)[ReactiveFlags.RAW];
83
+
84
+ return raw ? toRaw(raw) : observed;
85
+ }
86
+
87
+ export function warn(msg: string, ...args: any[]): void
88
+ {
89
+ console.warn(`[警告] ${msg}`, ...args);
90
+ }
91
+
92
+ /**
93
+ * 创建一个映射,并返回一个用于检查键是否存在于该映射中的函数。
94
+ * 重要提示:所有调用此函数的地方都必须以 \/\*#\_\_PURE\_\_\*\/ 作为前缀,
95
+ * 以便在必要时 Rollup 可以进行 tree-shaking。
96
+ */
97
+
98
+ /* ! #__NO_SIDE_EFFECTS__ */
99
+ export function makeMap(str: string): (key: string) => boolean
100
+ {
101
+ // 创建一个空对象作为映射,使用 Object.create(null) 避免原型链上的属性干扰
102
+ const map = Object.create(null);
103
+
104
+ // 将输入的字符串按逗号分隔,遍历每个键并将其添加到映射中,值为 1
105
+ for (const key of str.split(',')) map[key] = 1;
106
+
107
+ // 返回一个函数,该函数接受一个键值,并检查该键是否存在于映射中
108
+ return (val) => val in map;
109
+ }
package/tsconfig.json CHANGED
@@ -1,20 +1,21 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES5",
4
- "module": "CommonJS",
5
- "noImplicitAny": false,
6
- "sourceMap": true,
7
- "declarationMap": true,
8
- "declaration": true,
9
- "experimentalDecorators": true,
10
- "emitDeclarationOnly": true,
11
- "lib": [
12
- "ES2015",
13
- "DOM",
14
- ],
15
- "outDir": "lib"
16
- },
17
- "include": [
18
- "src/**/*.ts"
19
- ]
20
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
+ "emitDeclarationOnly": true,
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "rootDir": "src",
11
+ "outDir": "lib",
12
+ "esModuleInterop": true,
13
+ "allowSyntheticDefaultImports": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "skipLibCheck": true,
16
+ "resolveJsonModule": true,
17
+ "isolatedModules": true
18
+ },
19
+ "include": ["src/**/*.ts"],
20
+ "exclude": ["node_modules", "dist", "lib", "public"]
21
+ }