@ktjs/shared 0.23.19 → 0.23.20

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
@@ -114,6 +114,7 @@ declare const $applyModel: (element: HTMLElementTagNameMap[InputElementTag], val
114
114
  declare const $emptyFn: (...args: any[]) => any;
115
115
  declare const $emptyArray: any[];
116
116
  declare const $emptyObject: any;
117
+ declare const $identity: (x: any) => any;
117
118
  /**
118
119
  * SameValueZero comparison, similar to `Object.is` but treats `+0 === -0`
119
120
  */
@@ -157,5 +158,5 @@ interface KTReactiveLike<T = unknown> {
157
158
  removeOnChange?(fn: (newValue: T, oldValue: T) => void): boolean;
158
159
  }
159
160
 
160
- export { $ArrayFrom, $SameValueZero, $applyModel, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $replaceNode, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
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 };
161
162
  export type { ChangeHandler, ChangeTriggerField, HTMLJSXTag, HTMLTag, InputElementTag, JSXTag, KTReactiveLike, MathMLJSXTag, MathMLTag, NoTextNodeTag, NonSpecialTags, SVGJSXTag, SVGTag, otherstring };
package/dist/index.mjs CHANGED
@@ -72,6 +72,7 @@ const $applyModel = (element, valueRef, propName, eventName) => {
72
72
  const $emptyFn = (() => true);
73
73
  const $emptyArray = [];
74
74
  const $emptyObject = Object.create(null);
75
+ const $identity = (x) => x;
75
76
  /**
76
77
  * SameValueZero comparison, similar to `Object.is` but treats `+0 === -0`
77
78
  */
@@ -169,7 +170,7 @@ const extractParams = (pattern, path) => {
169
170
  };
170
171
 
171
172
  // incase that symbol is not supported
172
- Object.defineProperty(window, '__ktjs__', { value: '0.23.19' });
173
+ Object.defineProperty(window, '__ktjs__', { value: '0.23.20' });
173
174
 
174
- export { $ArrayFrom, $SameValueZero, $applyModel, $assign, $define, $defines, $emptyArray, $emptyFn, $emptyObject, $entries, $forEach, $forEachAsync, $hasOwn, $is, $isArray, $isNode, $isThenable, $keys, $parseStyle, $random, $replaceNode, $toString, buildQuery, emplaceParams, extractParams, normalizePath, parseQuery };
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 };
175
176
  //# 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);\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;AAE9C;;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;;ACxCA;;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/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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ktjs/shared",
3
- "version": "0.23.19",
3
+ "version": "0.23.20",
4
4
  "description": "Shared utilities and cached native methods for kt.js framework",
5
5
  "description_zh": "kt.js 框架的共享工具与原生方法缓存。",
6
6
  "type": "module",