@ktjs/shared 0.23.20 → 0.30.10

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/dist/index.d.ts CHANGED
@@ -93,11 +93,6 @@ type ChangeTriggerField = 'value' | 'checked' | 'selected' | 'valueAsDate' | 'va
93
93
  type InputElementTag = 'input' | 'select' | 'textarea';
94
94
 
95
95
  declare const $isNode: (x: any) => x is ChildNode;
96
- /**
97
- * Safe replace `oldNode` With `newNode`
98
- * - This function is not used everywhere. Because there is no need to check every time.
99
- */
100
- declare const $replaceNode: (oldNode: unknown, newNode: unknown) => void;
101
96
  declare const $parseStyle: (style: unknown) => string;
102
97
  type ChangeHandler<T = string> = (value: T, ...args: any[]) => void;
103
98
  /**
@@ -127,6 +122,8 @@ declare const $forEach: (array: unknown[], callback: (item: unknown, index: numb
127
122
  * Async version of $forEach that allows for asynchronous callbacks. It processes items sequentially, awaiting each callback before moving to the next.
128
123
  */
129
124
  declare const $forEachAsync: (array: unknown[], callback: (item: unknown, index: number, array: unknown[]) => void) => Promise<void>;
125
+ declare const $arrayPushUnique: (array: unknown[], item: unknown) => void;
126
+ declare const $arrayDelete: (array: unknown[], item: unknown) => void;
130
127
 
131
128
  /**
132
129
  * Normalize path by joining parts and ensuring leading slash
@@ -158,5 +155,5 @@ interface KTReactiveLike<T = unknown> {
158
155
  removeOnChange?(fn: (newValue: T, oldValue: T) => void): boolean;
159
156
  }
160
157
 
161
- export { $ArrayFrom, $SameValueZero, $applyModel, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $identity, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $replaceNode, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
158
+ export { $ArrayFrom, $SameValueZero, $applyModel, $arrayDelete, $arrayPushUnique, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $identity, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
162
159
  export type { ChangeHandler, ChangeTriggerField, HTMLJSXTag, HTMLTag, InputElementTag, JSXTag, KTReactiveLike, MathMLJSXTag, MathMLTag, NoTextNodeTag, NonSpecialTags, SVGJSXTag, SVGTag, otherstring };
package/dist/index.mjs CHANGED
@@ -18,21 +18,61 @@ if (typeof Symbol === 'undefined') {
18
18
  };
19
19
  }
20
20
 
21
+ if (typeof Node !== 'undefined') {
22
+ const targets = [];
23
+ if (typeof Element !== 'undefined') {
24
+ targets.push(Element.prototype);
25
+ }
26
+ if (typeof CharacterData !== 'undefined') {
27
+ targets.push(CharacterData.prototype);
28
+ }
29
+ if (typeof DocumentType !== 'undefined') {
30
+ targets.push(DocumentType.prototype);
31
+ }
32
+ if (targets.length === 0) {
33
+ targets.push(Node.prototype);
34
+ }
35
+ const installMethod = (name, method) => {
36
+ for (let i = 0; i < targets.length; i++) {
37
+ const target = targets[i];
38
+ if (typeof target[name] !== 'function') {
39
+ Object.defineProperty(target, name, {
40
+ configurable: true,
41
+ enumerable: false,
42
+ writable: true,
43
+ value: method,
44
+ });
45
+ }
46
+ }
47
+ };
48
+ installMethod('remove', function () {
49
+ const parent = this.parentNode;
50
+ if (parent) {
51
+ parent.removeChild(this);
52
+ }
53
+ });
54
+ installMethod('replaceWith', function (...newNodes) {
55
+ const parent = this.parentNode;
56
+ if (!parent) {
57
+ return;
58
+ }
59
+ if (newNodes.length === 0) {
60
+ parent.removeChild(this);
61
+ return;
62
+ }
63
+ const fragment = document.createDocumentFragment();
64
+ for (let i = 0; i < newNodes.length; i++) {
65
+ const node = newNodes[i];
66
+ fragment.appendChild(typeof node === 'string' ? document.createTextNode(node) : node);
67
+ }
68
+ parent.insertBefore(fragment, this);
69
+ parent.removeChild(this);
70
+ });
71
+ }
72
+
21
73
  // DOM manipulation utilities
22
74
  // # dom natives
23
75
  const $isNode = (x) => x?.nodeType > 0;
24
- /**
25
- * Safe replace `oldNode` With `newNode`
26
- * - This function is not used everywhere. Because there is no need to check every time.
27
- */
28
- const $replaceNode = (oldNode, newNode) => {
29
- if ($isNode(oldNode) && $isNode(newNode)) {
30
- if (newNode.contains(oldNode)) {
31
- newNode.remove();
32
- }
33
- oldNode.replaceWith(newNode);
34
- }
35
- };
36
76
  // # DOM utilities
37
77
  // Same as it is in @ktjs/core
38
78
  const $parseStyle = (style) => {
@@ -95,6 +135,18 @@ const $forEachAsync = async (array, callback) => {
95
135
  await callback(array[i], i, array);
96
136
  }
97
137
  };
138
+ const $arrayPushUnique = (array, item) => {
139
+ if (array.indexOf(item) === -1) {
140
+ array.push(item);
141
+ }
142
+ };
143
+ const $arrayDelete = (array, item) => {
144
+ const index = array.indexOf(item);
145
+ if (index !== -1) {
146
+ array[index] = array[array.length - 1];
147
+ array.pop();
148
+ }
149
+ };
98
150
 
99
151
  /**
100
152
  * Normalize path by joining parts and ensuring leading slash
@@ -170,7 +222,7 @@ const extractParams = (pattern, path) => {
170
222
  };
171
223
 
172
224
  // incase that symbol is not supported
173
- Object.defineProperty(window, '__ktjs__', { value: '0.23.20' });
225
+ Object.defineProperty(window, '__ktjs__', { value: '0.30.10' });
174
226
 
175
- export { $ArrayFrom, $SameValueZero, $applyModel, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $identity, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $replaceNode, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
227
+ export { $ArrayFrom, $SameValueZero, $applyModel, $arrayDelete, $arrayPushUnique, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $identity, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
176
228
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils/native.ts","../src/misc/symbol-polyfill.ts","../src/utils/dom.ts","../src/utils/misc.ts","../src/utils/url.ts","../src/index.ts"],"sourcesContent":["// Cached native methods for performance optimization\n\nexport const $isArray = Array.isArray;\nexport const $ArrayFrom = Array.from;\n\nexport const $is = Object.is;\nexport const $assign = Object.assign;\nexport const $hasOwn = Object.prototype.hasOwnProperty;\nexport const $toString = Object.prototype.toString;\n\nexport const $keys = Object.keys as <T>(o: T) => Array<keyof T>;\nexport const $defines = Object.defineProperties;\nexport const $define = Object.defineProperty;\nexport const $entries = Object.entries as <T>(o: T) => Array<[keyof T, T[keyof T]]>;\n\nexport const $random = Math.random;\n\nexport const $isThenable = (o: any): o is Promise<any> => typeof o?.then === 'function';\n","import { $random } from '../utils/native.js';\n\nexport {};\nif (typeof Symbol === 'undefined') {\n (window as any).Symbol = function Symbol(description?: string) {\n return `@@SYMBOL_${description || ''}_${$random().toString(36).slice(2)}`;\n };\n}\n","// DOM manipulation utilities\n\nimport type { KTReactiveLike } from '../types/misc.js';\nimport type { InputElementTag } from '../types/global.js';\nimport { $entries } from './native.js';\n\n// # dom natives\n\nexport const $isNode = (x: any): x is ChildNode => x?.nodeType > 0;\n\n/**\n * Safe replace `oldNode` With `newNode`\n * - This function is not used everywhere. Because there is no need to check every time.\n */\nexport const $replaceNode = (oldNode: unknown, newNode: unknown) => {\n if ($isNode(oldNode) && $isNode(newNode)) {\n if (newNode.contains(oldNode)) {\n newNode.remove();\n }\n oldNode.replaceWith(newNode);\n }\n};\n\n// # DOM utilities\n\n// Same as it is in @ktjs/core\nexport const $parseStyle = (style: unknown): string => {\n if (!style) {\n return '';\n }\n if (typeof style === 'string') {\n return style;\n }\n\n // already !style === false\n if (typeof style === 'object') {\n if ((style as KTReactiveLike).isKT) {\n return $parseStyle((style as KTReactiveLike).value);\n }\n\n return $entries(style)\n .map((entry: [string, string]) => {\n const cssKey = entry[0].replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n return `${cssKey}:${entry[1]}`;\n })\n .join(';');\n }\n return '';\n};\n\nexport type ChangeHandler<T = string> = (value: T, ...args: any[]) => void;\n\n/**\n * Used for `k-model`\n */\nexport const $applyModel = (\n element: HTMLElementTagNameMap[InputElementTag],\n valueRef: { value: unknown; addOnChange: (fn: (newValue: unknown) => void) => void },\n propName: 'value' | 'checked',\n eventName: 'change' | 'input',\n) => {\n (element as any)[propName] = valueRef.value; // initialize\n valueRef.addOnChange((newValue) => ((element as any)[propName] = newValue));\n element.addEventListener(eventName, () => (valueRef.value = (element as any)[propName]));\n};\n","// String manipulation utilities\n\nimport { $is, $isArray } from './native.js';\n\n/**\n * Default empty function\n */\nexport const $emptyFn = (() => true) as (...args: any[]) => any;\nexport const $emptyArray: any[] = [];\nexport const $emptyObject = Object.create(null);\nexport const $identity = (x: any) => x;\n\n/**\n * SameValueZero comparison, similar to `Object.is` but treats `+0 === -0`\n */\nexport const $SameValueZero = (x: unknown, y: unknown): boolean => (x !== x && y !== y) || x === y;\n\n/**\n * Safe and quick forEach implementation that works with array-like objects and handles sparse arrays.\n */\nexport const $forEach = (\n array: unknown[],\n callback: (item: unknown, index: number, array: unknown[]) => void,\n): void => {\n const len = array.length;\n for (let i = 0; i < len; i++) {\n callback(array[i], i, array);\n }\n};\n\n/**\n * Async version of $forEach that allows for asynchronous callbacks. It processes items sequentially, awaiting each callback before moving to the next.\n */\nexport const $forEachAsync = async (\n array: unknown[],\n callback: (item: unknown, index: number, array: unknown[]) => void,\n): Promise<void> => {\n const len = array.length;\n for (let i = 0; i < len; i++) {\n await callback(array[i], i, array);\n }\n};\n","/**\n * Normalize path by joining parts and ensuring leading slash\n */\nexport const normalizePath = (...paths: string[]) => {\n const p = paths\n .map((p) => p.split('/'))\n .flat()\n .filter(Boolean);\n return '/' + p.join('/');\n};\n\n/**\n * Parse query string into object\n */\nexport const parseQuery = (queryString: string): Record<string, string> => {\n const query: Record<string, string> = {};\n if (!queryString || queryString === '?') {\n return query;\n }\n\n const params = queryString.replace(/^\\?/, '').split('&');\n for (const param of params) {\n const [key, value] = param.split('=');\n if (key) {\n query[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';\n }\n }\n return query;\n};\n\n/**\n * Build query string from object\n */\nexport const buildQuery = (query: Record<string, string>): string => {\n const keys = Object.keys(query);\n if (keys.length === 0) return '';\n\n const params = keys.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(query[key])}`).join('&');\n return `?${params}`;\n};\n\n/**\n * Substitute params into path pattern\n * @example '/user/:id' + {id: '123'} => '/user/123'\n */\nexport const emplaceParams = (path: string, params: Record<string, string>): string => {\n let result = path;\n for (const key in params) {\n result = result.replace(`:${key}`, params[key]);\n }\n return result;\n};\n\n/**\n * Extract dynamic params from path using pattern\n * @example pattern: '/user/:id', path: '/user/123' => {id: '123'}\n */\nexport const extractParams = (pattern: string, path: string): Record<string, string> | null => {\n const params: Record<string, string> = {};\n const patternParts = pattern.split('/');\n const pathParts = path.split('/');\n\n if (patternParts.length !== pathParts.length) {\n return null;\n }\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n const paramName = patternPart.slice(1);\n params[paramName] = pathPart;\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n\n return params;\n};\n","// incase that symbol is not supported\nimport './misc/symbol-polyfill.js';\n\nexport * from './misc/comment.js';\nexport * from './utils/native.js';\nexport * from './utils/dom.js';\nexport * from './utils/misc.js';\nexport * from './utils/url.js';\n\nexport type * from './types/global.js';\nexport type * from './types/misc.js';\n\nObject.defineProperty(window, '__ktjs__', { value: '__VERSION__' });\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/native.ts","../src/misc/symbol-polyfill.ts","../src/misc/dom-polyfill.ts","../src/utils/dom.ts","../src/utils/misc.ts","../src/utils/url.ts","../src/index.ts"],"sourcesContent":["// Cached native methods for performance optimization\n\nexport const $isArray = Array.isArray;\nexport const $ArrayFrom = Array.from;\n\nexport const $is = Object.is;\nexport const $assign = Object.assign;\nexport const $hasOwn = Object.prototype.hasOwnProperty;\nexport const $toString = Object.prototype.toString;\n\nexport const $keys = Object.keys as <T>(o: T) => Array<keyof T>;\nexport const $defines = Object.defineProperties;\nexport const $define = Object.defineProperty;\nexport const $entries = Object.entries as <T>(o: T) => Array<[keyof T, T[keyof T]]>;\n\nexport const $random = Math.random;\n\nexport const $isThenable = (o: any): o is Promise<any> => typeof o?.then === 'function';\n","import { $random } from '../utils/native.js';\n\nexport {};\nif (typeof Symbol === 'undefined') {\n (window as any).Symbol = function Symbol(description?: string) {\n return `@@SYMBOL_${description || ''}_${$random().toString(36).slice(2)}`;\n };\n}\n","export {};\n\nif (typeof Node !== 'undefined') {\n const targets: Node[] = [];\n\n if (typeof Element !== 'undefined') {\n targets.push(Element.prototype);\n }\n if (typeof CharacterData !== 'undefined') {\n targets.push(CharacterData.prototype);\n }\n if (typeof DocumentType !== 'undefined') {\n targets.push(DocumentType.prototype);\n }\n if (targets.length === 0) {\n targets.push(Node.prototype);\n }\n\n const installMethod = (name: 'remove' | 'replaceWith', method: (...args: any[]) => void) => {\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i];\n if (typeof (target as any)[name] !== 'function') {\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method,\n });\n }\n }\n };\n\n installMethod('remove', function (this: Node) {\n const parent = this.parentNode;\n if (parent) {\n parent.removeChild(this);\n }\n });\n\n installMethod('replaceWith', function (this: Node, ...newNodes: Array<Node | string>) {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n\n if (newNodes.length === 0) {\n parent.removeChild(this);\n return;\n }\n\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < newNodes.length; i++) {\n const node = newNodes[i];\n fragment.appendChild(typeof node === 'string' ? document.createTextNode(node) : node);\n }\n\n parent.insertBefore(fragment, this);\n parent.removeChild(this);\n });\n}\n","// DOM manipulation utilities\n\nimport type { KTReactiveLike } from '../types/misc.js';\nimport type { InputElementTag } from '../types/global.js';\nimport { $entries } from './native.js';\n\n// # dom natives\n\nexport const $isNode = (x: any): x is ChildNode => x?.nodeType > 0;\n\n// # DOM utilities\n\n// Same as it is in @ktjs/core\nexport const $parseStyle = (style: unknown): string => {\n if (!style) {\n return '';\n }\n if (typeof style === 'string') {\n return style;\n }\n\n // already !style === false\n if (typeof style === 'object') {\n if ((style as KTReactiveLike).isKT) {\n return $parseStyle((style as KTReactiveLike).value);\n }\n\n return $entries(style)\n .map((entry: [string, string]) => {\n const cssKey = entry[0].replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n return `${cssKey}:${entry[1]}`;\n })\n .join(';');\n }\n return '';\n};\n\nexport type ChangeHandler<T = string> = (value: T, ...args: any[]) => void;\n\n/**\n * Used for `k-model`\n */\nexport const $applyModel = (\n element: HTMLElementTagNameMap[InputElementTag],\n valueRef: { value: unknown; addOnChange: (fn: (newValue: unknown) => void) => void },\n propName: 'value' | 'checked',\n eventName: 'change' | 'input',\n) => {\n (element as any)[propName] = valueRef.value; // initialize\n valueRef.addOnChange((newValue) => ((element as any)[propName] = newValue));\n element.addEventListener(eventName, () => (valueRef.value = (element as any)[propName]));\n};\n","// String manipulation utilities\n\nimport { $is, $isArray } from './native.js';\n\n/**\n * Default empty function\n */\nexport const $emptyFn = (() => true) as (...args: any[]) => any;\nexport const $emptyArray: any[] = [];\nexport const $emptyObject = Object.create(null);\nexport const $identity = (x: any) => x;\n\n/**\n * SameValueZero comparison, similar to `Object.is` but treats `+0 === -0`\n */\nexport const $SameValueZero = (x: unknown, y: unknown): boolean => (x !== x && y !== y) || x === y;\n\n/**\n * Safe and quick forEach implementation that works with array-like objects and handles sparse arrays.\n */\nexport const $forEach = (\n array: unknown[],\n callback: (item: unknown, index: number, array: unknown[]) => void,\n): void => {\n const len = array.length;\n for (let i = 0; i < len; i++) {\n callback(array[i], i, array);\n }\n};\n\n/**\n * Async version of $forEach that allows for asynchronous callbacks. It processes items sequentially, awaiting each callback before moving to the next.\n */\nexport const $forEachAsync = async (\n array: unknown[],\n callback: (item: unknown, index: number, array: unknown[]) => void,\n): Promise<void> => {\n const len = array.length;\n for (let i = 0; i < len; i++) {\n await callback(array[i], i, array);\n }\n};\n\nexport const $arrayPushUnique = (array: unknown[], item: unknown): void => {\n if (array.indexOf(item) === -1) {\n array.push(item);\n }\n};\n\nexport const $arrayDelete = (array: unknown[], item: unknown): void => {\n const index = array.indexOf(item);\n if (index !== -1) {\n array[index] = array[array.length - 1];\n array.pop();\n }\n};\n","/**\n * Normalize path by joining parts and ensuring leading slash\n */\nexport const normalizePath = (...paths: string[]) => {\n const p = paths\n .map((p) => p.split('/'))\n .flat()\n .filter(Boolean);\n return '/' + p.join('/');\n};\n\n/**\n * Parse query string into object\n */\nexport const parseQuery = (queryString: string): Record<string, string> => {\n const query: Record<string, string> = {};\n if (!queryString || queryString === '?') {\n return query;\n }\n\n const params = queryString.replace(/^\\?/, '').split('&');\n for (const param of params) {\n const [key, value] = param.split('=');\n if (key) {\n query[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';\n }\n }\n return query;\n};\n\n/**\n * Build query string from object\n */\nexport const buildQuery = (query: Record<string, string>): string => {\n const keys = Object.keys(query);\n if (keys.length === 0) return '';\n\n const params = keys.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(query[key])}`).join('&');\n return `?${params}`;\n};\n\n/**\n * Substitute params into path pattern\n * @example '/user/:id' + {id: '123'} => '/user/123'\n */\nexport const emplaceParams = (path: string, params: Record<string, string>): string => {\n let result = path;\n for (const key in params) {\n result = result.replace(`:${key}`, params[key]);\n }\n return result;\n};\n\n/**\n * Extract dynamic params from path using pattern\n * @example pattern: '/user/:id', path: '/user/123' => {id: '123'}\n */\nexport const extractParams = (pattern: string, path: string): Record<string, string> | null => {\n const params: Record<string, string> = {};\n const patternParts = pattern.split('/');\n const pathParts = path.split('/');\n\n if (patternParts.length !== pathParts.length) {\n return null;\n }\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n const paramName = patternPart.slice(1);\n params[paramName] = pathPart;\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n\n return params;\n};\n","// incase that symbol is not supported\nimport './misc/symbol-polyfill.js';\nimport './misc/dom-polyfill.js';\n\nexport * from './misc/comment.js';\nexport * from './utils/native.js';\nexport * from './utils/dom.js';\nexport * from './utils/misc.js';\nexport * from './utils/url.js';\n\nexport type * from './types/global.js';\nexport type * from './types/misc.js';\n\nObject.defineProperty(window, '__ktjs__', { value: '__VERSION__' });\n"],"names":[],"mappings":"AAAA;AAEO,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,MAAM,GAAG,GAAG,MAAM,CAAC;AACnB,MAAM,OAAO,GAAG,MAAM,CAAC;MACjB,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;MAC3B,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAEnC,MAAM,KAAK,GAAG,MAAM,CAAC;AACrB,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,WAAW,GAAG,CAAC,CAAM,KAAwB,OAAO,CAAC,EAAE,IAAI,KAAK;;ACd7E,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,IAAA,MAAc,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,WAAoB,EAAA;AAC3D,QAAA,OAAO,YAAY,WAAW,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC3E,IAAA,CAAC;AACH;;ACLA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IAC/B,MAAM,OAAO,GAAW,EAAE;AAE1B,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACjC;AACA,IAAA,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;AACxC,QAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;IACvC;AACA,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IACtC;AACA,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;AAEA,IAAA,MAAM,aAAa,GAAG,CAAC,IAA8B,EAAE,MAAgC,KAAI;AACzF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YACzB,IAAI,OAAQ,MAAc,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAC/C,gBAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;AAClC,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,MAAM;AACd,iBAAA,CAAC;YACJ;QACF;AACF,IAAA,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,YAAA;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;QAC9B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;QAC1B;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,aAAa,CAAC,aAAa,EAAE,UAAsB,GAAG,QAA8B,EAAA;AAClF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YACxB;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE;AAClD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;YACxB,QAAQ,CAAC,WAAW,CAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACvF;AAEA,QAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACnC,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1B,IAAA,CAAC,CAAC;AACJ;;AC3DA;AAMA;AAEO,MAAM,OAAO,GAAG,CAAC,CAAM,KAAqB,CAAC,EAAE,QAAQ,GAAG;AAEjE;AAEA;AACO,MAAM,WAAW,GAAG,CAAC,KAAc,KAAY;IACpD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,IAAK,KAAwB,CAAC,IAAI,EAAE;AAClC,YAAA,OAAO,WAAW,CAAE,KAAwB,CAAC,KAAK,CAAC;QACrD;QAEA,OAAO,QAAQ,CAAC,KAAK;AAClB,aAAA,GAAG,CAAC,CAAC,KAAuB,KAAI;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;YACvE,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChC,QAAA,CAAC;aACA,IAAI,CAAC,GAAG,CAAC;IACd;AACA,IAAA,OAAO,EAAE;AACX;AAIA;;AAEG;AACI,MAAM,WAAW,GAAG,CACzB,OAA+C,EAC/C,QAAoF,EACpF,QAA6B,EAC7B,SAA6B,KAC3B;IACD,OAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5C,IAAA,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,MAAO,OAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC3E,IAAA,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,QAAQ,CAAC,KAAK,GAAI,OAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1F;;ACnDA;AAIA;;AAEG;AACI,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,MAAM,WAAW,GAAU;AAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI;AACvC,MAAM,SAAS,GAAG,CAAC,CAAM,KAAK;AAErC;;AAEG;AACI,MAAM,cAAc,GAAG,CAAC,CAAU,EAAE,CAAU,KAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;AAEjG;;AAEG;MACU,QAAQ,GAAG,CACtB,KAAgB,EAChB,QAAkE,KAC1D;AACR,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B;AACF;AAEA;;AAEG;AACI,MAAM,aAAa,GAAG,OAC3B,KAAgB,EAChB,QAAkE,KACjD;AACjB,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IACpC;AACF;MAEa,gBAAgB,GAAG,CAAC,KAAgB,EAAE,IAAa,KAAU;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AAC9B,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAClB;AACF;MAEa,YAAY,GAAG,CAAC,KAAgB,EAAE,IAAa,KAAU;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACjC,IAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,QAAA,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,GAAG,EAAE;IACb;AACF;;ACvDA;;AAEG;MACU,aAAa,GAAG,CAAC,GAAG,KAAe,KAAI;IAClD,MAAM,CAAC,GAAG;AACP,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACvB,SAAA,IAAI;SACJ,MAAM,CAAC,OAAO,CAAC;IAClB,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B;AAEA;;AAEG;AACI,MAAM,UAAU,GAAG,CAAC,WAAmB,KAA4B;IACxE,MAAM,KAAK,GAA2B,EAAE;AACxC,IAAA,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,GAAG,EAAE;AACvC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACxD,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACrC,IAAI,GAAG,EAAE;AACP,YAAA,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE;QACzE;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;AACI,MAAM,UAAU,GAAG,CAAC,KAA6B,KAAY;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AAEhC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1G,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AACrB;AAEA;;;AAGG;MACU,aAAa,GAAG,CAAC,IAAY,EAAE,MAA8B,KAAY;IACpF,IAAI,MAAM,GAAG,IAAI;AACjB,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACjD;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;;AAGG;MACU,aAAa,GAAG,CAAC,OAAe,EAAE,IAAY,KAAmC;IAC5F,MAAM,MAAM,GAA2B,EAAE;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAEjC,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AAC5C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;AACnC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ;QAC9B;AAAO,aAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;AC/EA;AAaA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAa,EAAE,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ktjs/shared",
3
- "version": "0.23.20",
3
+ "version": "0.30.10",
4
4
  "description": "Shared utilities and cached native methods for kt.js framework",
5
5
  "description_zh": "kt.js 框架的共享工具与原生方法缓存。",
6
6
  "type": "module",