@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 +3 -6
- package/dist/index.mjs +66 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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, $
|
|
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.
|
|
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, $
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":"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;;ACPA;AAMA;AAEO,MAAM,OAAO,GAAG,CAAC,CAAM,KAAqB,CAAC,EAAE,QAAQ,GAAG;AAEjE;;;AAGG;MACU,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAgB,KAAI;IACjE,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACxC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC7B,OAAO,CAAC,MAAM,EAAE;QAClB;AACA,QAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;IAC9B;AACF;AAEA;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;;AChEA;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;;ACzCA;;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;AAYA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAa,EAAE,CAAC;;;;"}
|
|
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":"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"}
|