@tmagic/utils 1.3.0-alpha.2 → 1.3.0-alpha.3

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.
@@ -184,6 +184,19 @@ const guid = (digit = 8) => "x".repeat(digit).replace(/[xy]/g, (c) => {
184
184
  const v = c === "x" ? r : r & 3 | 8;
185
185
  return v.toString(16);
186
186
  });
187
+ const getValueByKeyPath = (keys, value) => {
188
+ const path = keys.split(".");
189
+ const pathLength = path.length;
190
+ return path.reduce((accumulator, currentValue, currentIndex) => {
191
+ if (Object.prototype.toString.call(accumulator) === "[object Object]" || Array.isArray(accumulator)) {
192
+ return accumulator[currentValue];
193
+ }
194
+ if (pathLength - 1 === currentIndex) {
195
+ return void 0;
196
+ }
197
+ return {};
198
+ }, value);
199
+ };
187
200
  const getNodes = (ids, data = []) => {
188
201
  const nodes = [];
189
202
  const get = function(ids2, data2) {
@@ -192,11 +205,12 @@ const getNodes = (ids, data = []) => {
192
205
  }
193
206
  for (let i = 0, l = data2.length; i < l; i++) {
194
207
  const item = data2[i];
195
- const index = ids2.indexOf(`${item.id}`);
208
+ const index = ids2.findIndex((id) => `${id}` === `${item.id}`);
196
209
  if (index > -1) {
197
210
  ids2.slice(index, 1);
198
211
  nodes.push(item);
199
- } else if (item.items) {
212
+ }
213
+ if (item.items) {
200
214
  get(ids2, item.items);
201
215
  }
202
216
  }
@@ -204,9 +218,9 @@ const getNodes = (ids, data = []) => {
204
218
  get(ids, data);
205
219
  return nodes;
206
220
  };
207
- const getDepKeys = (dataSourceDeps = {}, id) => Array.from(
221
+ const getDepKeys = (dataSourceDeps = {}, nodeId) => Array.from(
208
222
  Object.values(dataSourceDeps).reduce((prev, cur) => {
209
- (cur[id]?.keys || []).forEach((key) => prev.add(key));
223
+ (cur[nodeId]?.keys || []).forEach((key) => prev.add(key));
210
224
  return prev;
211
225
  }, /* @__PURE__ */ new Set())
212
226
  );
@@ -240,19 +254,31 @@ const compiledNode = (compile, node, dataSourceDeps = {}, sourceId) => {
240
254
  const dep = dataSourceDeps[sourceId];
241
255
  keys = dep?.[node.id].keys || [];
242
256
  }
257
+ const keyPrefix = "__magic__";
243
258
  keys.forEach((key) => {
244
- if (typeof node[`__${key}`] === "undefined") {
245
- node[`__${key}`] = node[key];
246
- }
247
- try {
248
- node[key] = compile(node[`__${key}`]);
249
- } catch (e) {
250
- console.error(e);
251
- node[key] = "";
252
- }
259
+ const keyPath = `${key}`.split(".");
260
+ const keyPathLength = keyPath.length;
261
+ keyPath.reduce((accumulator, currentValue, currentIndex) => {
262
+ if (keyPathLength - 1 === currentIndex) {
263
+ if (typeof accumulator[`${keyPrefix}${currentValue}`] === "undefined") {
264
+ accumulator[`${keyPrefix}${currentValue}`] = accumulator[currentValue];
265
+ }
266
+ try {
267
+ accumulator[currentValue] = compile(accumulator[`${keyPrefix}${currentValue}`]);
268
+ } catch (e) {
269
+ console.error(e);
270
+ accumulator[currentValue] = "";
271
+ }
272
+ return accumulator;
273
+ }
274
+ if (Object.prototype.toString.call(accumulator) === "[object Object]" || Array.isArray(accumulator)) {
275
+ return accumulator[currentValue];
276
+ }
277
+ return {};
278
+ }, node);
253
279
  });
254
280
  return node;
255
281
  };
256
282
 
257
- export { addClassName, asyncLoadCss, asyncLoadJs, compiledNode, createDiv, datetimeFormatter, emptyFn, filterXSS, getDepKeys, getDepNodeIds, getDocument, getHost, getNodePath, getNodes, getUrlParam, guid, injectStyle, isNumber, isPage, isPop, isSameDomain, removeClassName, removeClassNameByClassName, replaceChildNode, sleep, toHump, toLine };
283
+ export { addClassName, asyncLoadCss, asyncLoadJs, compiledNode, createDiv, datetimeFormatter, emptyFn, filterXSS, getDepKeys, getDepNodeIds, getDocument, getHost, getNodePath, getNodes, getUrlParam, getValueByKeyPath, guid, injectStyle, isNumber, isPage, isPop, isSameDomain, removeClassName, removeClassNameByClassName, replaceChildNode, sleep, toHump, toLine };
258
284
  //# sourceMappingURL=tmagic-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tmagic-utils.js","sources":["../src/dom.ts","../src/index.ts"],"sourcesContent":["export const asyncLoadJs = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, crossOrigin?: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n if (crossOrigin) {\n script.crossOrigin = crossOrigin;\n }\n script.src = url;\n document.body.appendChild(script);\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const asyncLoadCss = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const node = document.createElement('link');\n node.rel = 'stylesheet';\n node.href = url;\n document.head.appendChild(node);\n node.onload = () => {\n resolve();\n };\n node.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const addClassName = (el: Element, doc: Document, className: string) => {\n const oldEl = doc.querySelector(`.${className}`);\n if (oldEl && oldEl !== el) removeClassName(oldEl, className);\n if (!el.classList.contains(className)) el.classList.add(className);\n};\n\nexport const removeClassName = (el: Element, className: string) => {\n el.classList.remove(className);\n};\n\nexport const removeClassNameByClassName = (doc: Document, className: string) => {\n const el: HTMLElement | null = doc.querySelector(`.${className}`);\n el?.classList.remove(className);\n return el;\n};\n\nexport const injectStyle = (doc: Document, style: string) => {\n const styleEl = doc.createElement('style');\n styleEl.innerHTML = style;\n doc.head.appendChild(styleEl);\n return styleEl;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const getDocument = () => globalThis.document;\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { DataSourceDeps, Id, MComponent, MNode } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nexport * from './dom';\n\ndayjs.extend(utc);\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n resolve();\n }, ms);\n });\n\nexport const datetimeFormatter = (\n v: string | Date,\n defaultValue = '-',\n format = 'YYYY-MM-DD HH:mm:ss',\n): string | number => {\n if (v) {\n let time = null;\n if (['x', 'timestamp'].includes(format)) {\n time = dayjs(v).valueOf();\n } else if ((typeof v === 'string' && v.includes('Z')) || v.constructor === Date) {\n // UTC字符串时间或Date对象格式化为北京时间\n time = dayjs(v).utcOffset(8).format(format);\n } else {\n time = dayjs(v).format(format);\n }\n\n // 格式化为北京时间\n if (time !== 'Invalid Date') {\n return time;\n }\n return defaultValue;\n }\n return defaultValue;\n};\n\n// 驼峰转换横线\nexport const toLine = (name = '') => name.replace(/\\B([A-Z])/g, '-$1').toLowerCase();\n\nexport const toHump = (name = ''): string => name.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\n\nexport const emptyFn = (): any => undefined;\n\n/**\n * 通过id获取组件在应用的子孙路径\n * @param {number | string} id 组件id\n * @param {Array} data 要查找的根容器节点\n * @return {Array} 组件在data中的子孙路径\n */\nexport const getNodePath = (id: Id, data: MNode[] = []): MNode[] => {\n const path: MNode[] = [];\n\n const get = function (id: number | string, data: MNode[]): MNode | null {\n if (!Array.isArray(data)) {\n return null;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n path.push(item);\n if (`${item.id}` === `${id}`) {\n return item;\n }\n\n if (item.items) {\n const node = get(id, item.items);\n if (node) {\n return node;\n }\n }\n\n path.pop();\n }\n\n return null;\n };\n\n get(id, data);\n\n return path;\n};\n\nexport const filterXSS = (str: string) =>\n str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n\nexport const getUrlParam = (param: string, url?: string) => {\n const u = url || location.href;\n const reg = new RegExp(`[?&#]${param}=([^&#]+)`, 'gi');\n\n const matches = u.match(reg);\n let strArr;\n if (matches && matches.length > 0) {\n strArr = matches[matches.length - 1].split('=');\n if (strArr && strArr.length > 1) {\n // 过滤XSS字符\n return filterXSS(strArr[1]);\n }\n return '';\n }\n return '';\n};\n\nexport const isPop = (node: MComponent | null): boolean => Boolean(node?.type?.toLowerCase().endsWith('pop'));\n\nexport const isPage = (node?: MComponent | null): boolean => {\n if (!node) return false;\n return Boolean(node.type?.toLowerCase() === NodeType.PAGE);\n};\n\nexport const isNumber = (value: string) => /^(-?\\d+)(\\.\\d+)?$/.test(value);\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\n/**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\nexport const guid = (digit = 8): string =>\n 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n\nexport const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {\n const nodes: MNode[] = [];\n\n const get = function (ids: Id[], data: MNode[]) {\n if (!Array.isArray(data)) {\n return;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n const index = ids.indexOf(`${item.id}`);\n\n if (index > -1) {\n ids.slice(index, 1);\n nodes.push(item);\n } else if (item.items) {\n get(ids, item.items);\n }\n }\n };\n\n get(ids, data);\n\n return nodes;\n};\n\nexport const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, id: Id) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n (cur[id]?.keys || []).forEach((key) => prev.add(key));\n return prev;\n }, new Set<Id>()),\n );\n\nexport const getDepNodeIds = (dataSourceDeps: DataSourceDeps = {}) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n Object.keys(cur).forEach((id) => {\n prev.add(id);\n });\n return prev;\n }, new Set<Id>()),\n );\n\n/**\n * 将新节点更新到data或者parentId对应的节点的子节点中\n * @param newNode 新节点\n * @param data 需要修改的数据\n * @param parentId 父节点 id\n */\nexport const replaceChildNode = (newNode: MNode, data?: MNode[], parentId?: Id) => {\n const path = getNodePath(newNode.id, data);\n const node = path.pop();\n let parent = path.pop();\n\n if (parentId) {\n parent = getNodePath(parentId, data).pop();\n }\n\n if (!node) throw new Error('未找到目标节点');\n if (!parent) throw new Error('未找到父节点');\n\n const index = parent.items?.findIndex((child: MNode) => child.id === node.id);\n parent.items.splice(index, 1, newNode);\n};\n\nexport const compiledNode = (\n compile: (template: string) => string,\n node: MNode,\n dataSourceDeps: DataSourceDeps = {},\n sourceId?: Id,\n) => {\n let keys: Id[] = [];\n if (!sourceId) {\n keys = getDepKeys(dataSourceDeps, node.id);\n } else {\n const dep = dataSourceDeps[sourceId];\n keys = dep?.[node.id].keys || [];\n }\n\n keys.forEach((key) => {\n if (typeof node[`__${key}`] === 'undefined') {\n node[`__${key}`] = node[key];\n }\n\n try {\n node[key] = compile(node[`__${key}`]);\n } catch (e) {\n console.error(e);\n node[key] = '';\n }\n });\n\n return node;\n};\n"],"names":["id","data","ids"],"mappings":"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"}
1
+ {"version":3,"file":"tmagic-utils.js","sources":["../src/dom.ts","../src/index.ts"],"sourcesContent":["export const asyncLoadJs = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, crossOrigin?: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n if (crossOrigin) {\n script.crossOrigin = crossOrigin;\n }\n script.src = url;\n document.body.appendChild(script);\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const asyncLoadCss = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const node = document.createElement('link');\n node.rel = 'stylesheet';\n node.href = url;\n document.head.appendChild(node);\n node.onload = () => {\n resolve();\n };\n node.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const addClassName = (el: Element, doc: Document, className: string) => {\n const oldEl = doc.querySelector(`.${className}`);\n if (oldEl && oldEl !== el) removeClassName(oldEl, className);\n if (!el.classList.contains(className)) el.classList.add(className);\n};\n\nexport const removeClassName = (el: Element, className: string) => {\n el.classList.remove(className);\n};\n\nexport const removeClassNameByClassName = (doc: Document, className: string) => {\n const el: HTMLElement | null = doc.querySelector(`.${className}`);\n el?.classList.remove(className);\n return el;\n};\n\nexport const injectStyle = (doc: Document, style: string) => {\n const styleEl = doc.createElement('style');\n styleEl.innerHTML = style;\n doc.head.appendChild(styleEl);\n return styleEl;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const getDocument = () => globalThis.document;\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { DataSourceDeps, Id, MComponent, MNode } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nexport * from './dom';\n\ndayjs.extend(utc);\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n resolve();\n }, ms);\n });\n\nexport const datetimeFormatter = (\n v: string | Date,\n defaultValue = '-',\n format = 'YYYY-MM-DD HH:mm:ss',\n): string | number => {\n if (v) {\n let time = null;\n if (['x', 'timestamp'].includes(format)) {\n time = dayjs(v).valueOf();\n } else if ((typeof v === 'string' && v.includes('Z')) || v.constructor === Date) {\n // UTC字符串时间或Date对象格式化为北京时间\n time = dayjs(v).utcOffset(8).format(format);\n } else {\n time = dayjs(v).format(format);\n }\n\n // 格式化为北京时间\n if (time !== 'Invalid Date') {\n return time;\n }\n return defaultValue;\n }\n return defaultValue;\n};\n\n// 驼峰转换横线\nexport const toLine = (name = '') => name.replace(/\\B([A-Z])/g, '-$1').toLowerCase();\n\nexport const toHump = (name = ''): string => name.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\n\nexport const emptyFn = (): any => undefined;\n\n/**\n * 通过id获取组件在应用的子孙路径\n * @param {number | string} id 组件id\n * @param {Array} data 要查找的根容器节点\n * @return {Array} 组件在data中的子孙路径\n */\nexport const getNodePath = (id: Id, data: MNode[] = []): MNode[] => {\n const path: MNode[] = [];\n\n const get = function (id: number | string, data: MNode[]): MNode | null {\n if (!Array.isArray(data)) {\n return null;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n path.push(item);\n if (`${item.id}` === `${id}`) {\n return item;\n }\n\n if (item.items) {\n const node = get(id, item.items);\n if (node) {\n return node;\n }\n }\n\n path.pop();\n }\n\n return null;\n };\n\n get(id, data);\n\n return path;\n};\n\nexport const filterXSS = (str: string) =>\n str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n\nexport const getUrlParam = (param: string, url?: string) => {\n const u = url || location.href;\n const reg = new RegExp(`[?&#]${param}=([^&#]+)`, 'gi');\n\n const matches = u.match(reg);\n let strArr;\n if (matches && matches.length > 0) {\n strArr = matches[matches.length - 1].split('=');\n if (strArr && strArr.length > 1) {\n // 过滤XSS字符\n return filterXSS(strArr[1]);\n }\n return '';\n }\n return '';\n};\n\nexport const isPop = (node: MComponent | null): boolean => Boolean(node?.type?.toLowerCase().endsWith('pop'));\n\nexport const isPage = (node?: MComponent | null): boolean => {\n if (!node) return false;\n return Boolean(node.type?.toLowerCase() === NodeType.PAGE);\n};\n\nexport const isNumber = (value: string) => /^(-?\\d+)(\\.\\d+)?$/.test(value);\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\n/**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\nexport const guid = (digit = 8): string =>\n 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n\nexport const getValueByKeyPath: any = (keys: string, value: Record<string | number, any>) => {\n const path = keys.split('.');\n const pathLength = path.length;\n\n return path.reduce((accumulator, currentValue: any, currentIndex: number) => {\n if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {\n return accumulator[currentValue];\n }\n\n if (pathLength - 1 === currentIndex) {\n return undefined;\n }\n\n return {};\n }, value);\n};\n\nexport const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {\n const nodes: MNode[] = [];\n\n const get = function (ids: Id[], data: MNode[]) {\n if (!Array.isArray(data)) {\n return;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n const index = ids.findIndex((id: Id) => `${id}` === `${item.id}`);\n\n if (index > -1) {\n ids.slice(index, 1);\n nodes.push(item);\n }\n\n if (item.items) {\n get(ids, item.items);\n }\n }\n };\n\n get(ids, data);\n\n return nodes;\n};\n\nexport const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, nodeId: Id) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n (cur[nodeId]?.keys || []).forEach((key) => prev.add(key));\n return prev;\n }, new Set<Id>()),\n );\n\nexport const getDepNodeIds = (dataSourceDeps: DataSourceDeps = {}) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n Object.keys(cur).forEach((id) => {\n prev.add(id);\n });\n return prev;\n }, new Set<string>()),\n );\n\n/**\n * 将新节点更新到data或者parentId对应的节点的子节点中\n * @param newNode 新节点\n * @param data 需要修改的数据\n * @param parentId 父节点 id\n */\nexport const replaceChildNode = (newNode: MNode, data?: MNode[], parentId?: Id) => {\n const path = getNodePath(newNode.id, data);\n const node = path.pop();\n let parent = path.pop();\n\n if (parentId) {\n parent = getNodePath(parentId, data).pop();\n }\n\n if (!node) throw new Error('未找到目标节点');\n if (!parent) throw new Error('未找到父节点');\n\n const index = parent.items?.findIndex((child: MNode) => child.id === node.id);\n parent.items.splice(index, 1, newNode);\n};\n\nexport const compiledNode = (\n compile: (template: string) => string,\n node: MNode,\n dataSourceDeps: DataSourceDeps = {},\n sourceId?: Id,\n) => {\n let keys: Id[] = [];\n if (!sourceId) {\n keys = getDepKeys(dataSourceDeps, node.id);\n } else {\n const dep = dataSourceDeps[sourceId];\n keys = dep?.[node.id].keys || [];\n }\n\n const keyPrefix = '__magic__';\n\n keys.forEach((key) => {\n const keyPath = `${key}`.split('.');\n const keyPathLength = keyPath.length;\n keyPath.reduce((accumulator, currentValue: any, currentIndex) => {\n if (keyPathLength - 1 === currentIndex) {\n if (typeof accumulator[`${keyPrefix}${currentValue}`] === 'undefined') {\n accumulator[`${keyPrefix}${currentValue}`] = accumulator[currentValue];\n }\n\n try {\n accumulator[currentValue] = compile(accumulator[`${keyPrefix}${currentValue}`]);\n } catch (e) {\n console.error(e);\n accumulator[currentValue] = '';\n }\n\n return accumulator;\n }\n\n if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {\n return accumulator[currentValue];\n }\n\n return {};\n }, node);\n });\n\n return node;\n};\n"],"names":["id","data","ids"],"mappings":"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"}
@@ -186,6 +186,19 @@
186
186
  const v = c === "x" ? r : r & 3 | 8;
187
187
  return v.toString(16);
188
188
  });
189
+ const getValueByKeyPath = (keys, value) => {
190
+ const path = keys.split(".");
191
+ const pathLength = path.length;
192
+ return path.reduce((accumulator, currentValue, currentIndex) => {
193
+ if (Object.prototype.toString.call(accumulator) === "[object Object]" || Array.isArray(accumulator)) {
194
+ return accumulator[currentValue];
195
+ }
196
+ if (pathLength - 1 === currentIndex) {
197
+ return void 0;
198
+ }
199
+ return {};
200
+ }, value);
201
+ };
189
202
  const getNodes = (ids, data = []) => {
190
203
  const nodes = [];
191
204
  const get = function(ids2, data2) {
@@ -194,11 +207,12 @@
194
207
  }
195
208
  for (let i = 0, l = data2.length; i < l; i++) {
196
209
  const item = data2[i];
197
- const index = ids2.indexOf(`${item.id}`);
210
+ const index = ids2.findIndex((id) => `${id}` === `${item.id}`);
198
211
  if (index > -1) {
199
212
  ids2.slice(index, 1);
200
213
  nodes.push(item);
201
- } else if (item.items) {
214
+ }
215
+ if (item.items) {
202
216
  get(ids2, item.items);
203
217
  }
204
218
  }
@@ -206,9 +220,9 @@
206
220
  get(ids, data);
207
221
  return nodes;
208
222
  };
209
- const getDepKeys = (dataSourceDeps = {}, id) => Array.from(
223
+ const getDepKeys = (dataSourceDeps = {}, nodeId) => Array.from(
210
224
  Object.values(dataSourceDeps).reduce((prev, cur) => {
211
- (cur[id]?.keys || []).forEach((key) => prev.add(key));
225
+ (cur[nodeId]?.keys || []).forEach((key) => prev.add(key));
212
226
  return prev;
213
227
  }, /* @__PURE__ */ new Set())
214
228
  );
@@ -242,16 +256,28 @@
242
256
  const dep = dataSourceDeps[sourceId];
243
257
  keys = dep?.[node.id].keys || [];
244
258
  }
259
+ const keyPrefix = "__magic__";
245
260
  keys.forEach((key) => {
246
- if (typeof node[`__${key}`] === "undefined") {
247
- node[`__${key}`] = node[key];
248
- }
249
- try {
250
- node[key] = compile(node[`__${key}`]);
251
- } catch (e) {
252
- console.error(e);
253
- node[key] = "";
254
- }
261
+ const keyPath = `${key}`.split(".");
262
+ const keyPathLength = keyPath.length;
263
+ keyPath.reduce((accumulator, currentValue, currentIndex) => {
264
+ if (keyPathLength - 1 === currentIndex) {
265
+ if (typeof accumulator[`${keyPrefix}${currentValue}`] === "undefined") {
266
+ accumulator[`${keyPrefix}${currentValue}`] = accumulator[currentValue];
267
+ }
268
+ try {
269
+ accumulator[currentValue] = compile(accumulator[`${keyPrefix}${currentValue}`]);
270
+ } catch (e) {
271
+ console.error(e);
272
+ accumulator[currentValue] = "";
273
+ }
274
+ return accumulator;
275
+ }
276
+ if (Object.prototype.toString.call(accumulator) === "[object Object]" || Array.isArray(accumulator)) {
277
+ return accumulator[currentValue];
278
+ }
279
+ return {};
280
+ }, node);
255
281
  });
256
282
  return node;
257
283
  };
@@ -271,6 +297,7 @@
271
297
  exports.getNodePath = getNodePath;
272
298
  exports.getNodes = getNodes;
273
299
  exports.getUrlParam = getUrlParam;
300
+ exports.getValueByKeyPath = getValueByKeyPath;
274
301
  exports.guid = guid;
275
302
  exports.injectStyle = injectStyle;
276
303
  exports.isNumber = isNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"tmagic-utils.umd.cjs","sources":["../src/dom.ts","../src/index.ts"],"sourcesContent":["export const asyncLoadJs = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, crossOrigin?: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n if (crossOrigin) {\n script.crossOrigin = crossOrigin;\n }\n script.src = url;\n document.body.appendChild(script);\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const asyncLoadCss = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const node = document.createElement('link');\n node.rel = 'stylesheet';\n node.href = url;\n document.head.appendChild(node);\n node.onload = () => {\n resolve();\n };\n node.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const addClassName = (el: Element, doc: Document, className: string) => {\n const oldEl = doc.querySelector(`.${className}`);\n if (oldEl && oldEl !== el) removeClassName(oldEl, className);\n if (!el.classList.contains(className)) el.classList.add(className);\n};\n\nexport const removeClassName = (el: Element, className: string) => {\n el.classList.remove(className);\n};\n\nexport const removeClassNameByClassName = (doc: Document, className: string) => {\n const el: HTMLElement | null = doc.querySelector(`.${className}`);\n el?.classList.remove(className);\n return el;\n};\n\nexport const injectStyle = (doc: Document, style: string) => {\n const styleEl = doc.createElement('style');\n styleEl.innerHTML = style;\n doc.head.appendChild(styleEl);\n return styleEl;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const getDocument = () => globalThis.document;\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { DataSourceDeps, Id, MComponent, MNode } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nexport * from './dom';\n\ndayjs.extend(utc);\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n resolve();\n }, ms);\n });\n\nexport const datetimeFormatter = (\n v: string | Date,\n defaultValue = '-',\n format = 'YYYY-MM-DD HH:mm:ss',\n): string | number => {\n if (v) {\n let time = null;\n if (['x', 'timestamp'].includes(format)) {\n time = dayjs(v).valueOf();\n } else if ((typeof v === 'string' && v.includes('Z')) || v.constructor === Date) {\n // UTC字符串时间或Date对象格式化为北京时间\n time = dayjs(v).utcOffset(8).format(format);\n } else {\n time = dayjs(v).format(format);\n }\n\n // 格式化为北京时间\n if (time !== 'Invalid Date') {\n return time;\n }\n return defaultValue;\n }\n return defaultValue;\n};\n\n// 驼峰转换横线\nexport const toLine = (name = '') => name.replace(/\\B([A-Z])/g, '-$1').toLowerCase();\n\nexport const toHump = (name = ''): string => name.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\n\nexport const emptyFn = (): any => undefined;\n\n/**\n * 通过id获取组件在应用的子孙路径\n * @param {number | string} id 组件id\n * @param {Array} data 要查找的根容器节点\n * @return {Array} 组件在data中的子孙路径\n */\nexport const getNodePath = (id: Id, data: MNode[] = []): MNode[] => {\n const path: MNode[] = [];\n\n const get = function (id: number | string, data: MNode[]): MNode | null {\n if (!Array.isArray(data)) {\n return null;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n path.push(item);\n if (`${item.id}` === `${id}`) {\n return item;\n }\n\n if (item.items) {\n const node = get(id, item.items);\n if (node) {\n return node;\n }\n }\n\n path.pop();\n }\n\n return null;\n };\n\n get(id, data);\n\n return path;\n};\n\nexport const filterXSS = (str: string) =>\n str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n\nexport const getUrlParam = (param: string, url?: string) => {\n const u = url || location.href;\n const reg = new RegExp(`[?&#]${param}=([^&#]+)`, 'gi');\n\n const matches = u.match(reg);\n let strArr;\n if (matches && matches.length > 0) {\n strArr = matches[matches.length - 1].split('=');\n if (strArr && strArr.length > 1) {\n // 过滤XSS字符\n return filterXSS(strArr[1]);\n }\n return '';\n }\n return '';\n};\n\nexport const isPop = (node: MComponent | null): boolean => Boolean(node?.type?.toLowerCase().endsWith('pop'));\n\nexport const isPage = (node?: MComponent | null): boolean => {\n if (!node) return false;\n return Boolean(node.type?.toLowerCase() === NodeType.PAGE);\n};\n\nexport const isNumber = (value: string) => /^(-?\\d+)(\\.\\d+)?$/.test(value);\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\n/**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\nexport const guid = (digit = 8): string =>\n 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n\nexport const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {\n const nodes: MNode[] = [];\n\n const get = function (ids: Id[], data: MNode[]) {\n if (!Array.isArray(data)) {\n return;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n const index = ids.indexOf(`${item.id}`);\n\n if (index > -1) {\n ids.slice(index, 1);\n nodes.push(item);\n } else if (item.items) {\n get(ids, item.items);\n }\n }\n };\n\n get(ids, data);\n\n return nodes;\n};\n\nexport const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, id: Id) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n (cur[id]?.keys || []).forEach((key) => prev.add(key));\n return prev;\n }, new Set<Id>()),\n );\n\nexport const getDepNodeIds = (dataSourceDeps: DataSourceDeps = {}) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n Object.keys(cur).forEach((id) => {\n prev.add(id);\n });\n return prev;\n }, new Set<Id>()),\n );\n\n/**\n * 将新节点更新到data或者parentId对应的节点的子节点中\n * @param newNode 新节点\n * @param data 需要修改的数据\n * @param parentId 父节点 id\n */\nexport const replaceChildNode = (newNode: MNode, data?: MNode[], parentId?: Id) => {\n const path = getNodePath(newNode.id, data);\n const node = path.pop();\n let parent = path.pop();\n\n if (parentId) {\n parent = getNodePath(parentId, data).pop();\n }\n\n if (!node) throw new Error('未找到目标节点');\n if (!parent) throw new Error('未找到父节点');\n\n const index = parent.items?.findIndex((child: MNode) => child.id === node.id);\n parent.items.splice(index, 1, newNode);\n};\n\nexport const compiledNode = (\n compile: (template: string) => string,\n node: MNode,\n dataSourceDeps: DataSourceDeps = {},\n sourceId?: Id,\n) => {\n let keys: Id[] = [];\n if (!sourceId) {\n keys = getDepKeys(dataSourceDeps, node.id);\n } else {\n const dep = dataSourceDeps[sourceId];\n keys = dep?.[node.id].keys || [];\n }\n\n keys.forEach((key) => {\n if (typeof node[`__${key}`] === 'undefined') {\n node[`__${key}`] = node[key];\n }\n\n try {\n node[key] = compile(node[`__${key}`]);\n } catch (e) {\n console.error(e);\n node[key] = '';\n }\n });\n\n return node;\n};\n"],"names":["id","data","NodeType","ids"],"mappings":";;;;;;AAAO,QAAM,eAAe,MAAM;EAEhC,EAAM,MAAA,WAAA,uBAAkB,GAAI,EAAA,CAAA;EAE5B,EAAA,OAAO,CAAC,GAAA,EAAa,WAAsB,EAAA,QAAA,GAAW,WAAW,QAAa,KAAA;EAC5E,IAAI,IAAA,MAAA,GAAS,WAAY,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;EACrC,IAAA,IAAI,CAAC,MAAQ,EAAA;EACX,MAAA,MAAA,uBAAa,GAAI,EAAA,CAAA;EACjB,MAAY,WAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;EAAA,KAClC;EAGA,IAAI,IAAA,MAAA,CAAO,IAAI,GAAG,CAAA;EAAG,MAAO,OAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;EAE1C,IAAA,MAAM,IAAO,GAAA,IAAI,OAAc,CAAA,CAAC,SAAS,MAAW,KAAA;EAClD,MAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;EAC9C,MAAA,MAAA,CAAO,IAAO,GAAA,iBAAA,CAAA;EACd,MAAA,IAAI,WAAa,EAAA;EACf,QAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;EAAA,OACvB;EACA,MAAA,MAAA,CAAO,GAAM,GAAA,GAAA,CAAA;EACb,MAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA,CAAA;EAChC,MAAA,MAAA,CAAO,SAAS,MAAM;EACpB,QAAQ,OAAA,EAAA,CAAA;EAAA,OACV,CAAA;EACA,MAAA,MAAA,CAAO,UAAU,MAAM;EACrB,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,MAAM,CAAC,CAAA,CAAA;EAAA,OAC1B,CAAA;EACA,MAAA,UAAA,CAAW,MAAM;EACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,SAAS,CAAC,CAAA,CAAA;EAAA,OAC7B,EAAG,KAAK,GAAI,CAAA,CAAA;EAAA,KACb,CAAA,CAAE,KAAM,CAAA,CAAC,GAAQ,KAAA;EAEhB,MAAA,MAAA,CAAO,OAAO,GAAG,CAAA,CAAA;EACjB,MAAM,MAAA,GAAA,CAAA;EAAA,KACP,CAAA,CAAA;EAED,IAAO,MAAA,CAAA,GAAA,CAAI,KAAK,IAAI,CAAA,CAAA;EACpB,IAAO,OAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;EAAA,GACvB,CAAA;EACF,CAAG,IAAA;AAEI,QAAM,gBAAgB,MAAM;EAEjC,EAAM,MAAA,WAAA,uBAAkB,GAAI,EAAA,CAAA;EAE5B,EAAA,OAAO,CAAC,GAAA,EAAa,QAAW,GAAA,UAAA,CAAW,QAAa,KAAA;EACtD,IAAI,IAAA,MAAA,GAAS,WAAY,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;EACrC,IAAA,IAAI,CAAC,MAAQ,EAAA;EACX,MAAA,MAAA,uBAAa,GAAI,EAAA,CAAA;EACjB,MAAY,WAAA,CAAA,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA;EAAA,KAClC;EAGA,IAAI,IAAA,MAAA,CAAO,IAAI,GAAG,CAAA;EAAG,MAAO,OAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;EAE1C,IAAA,MAAM,IAAO,GAAA,IAAI,OAAc,CAAA,CAAC,SAAS,MAAW,KAAA;EAClD,MAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;EAC1C,MAAA,IAAA,CAAK,GAAM,GAAA,YAAA,CAAA;EACX,MAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;EACZ,MAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA,CAAA;EAC9B,MAAA,IAAA,CAAK,SAAS,MAAM;EAClB,QAAQ,OAAA,EAAA,CAAA;EAAA,OACV,CAAA;EACA,MAAA,IAAA,CAAK,UAAU,MAAM;EACnB,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,MAAM,CAAC,CAAA,CAAA;EAAA,OAC1B,CAAA;EACA,MAAA,UAAA,CAAW,MAAM;EACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,SAAS,CAAC,CAAA,CAAA;EAAA,OAC7B,EAAG,KAAK,GAAI,CAAA,CAAA;EAAA,KACb,CAAA,CAAE,KAAM,CAAA,CAAC,GAAQ,KAAA;EAEhB,MAAA,MAAA,CAAO,OAAO,GAAG,CAAA,CAAA;EACjB,MAAM,MAAA,GAAA,CAAA;EAAA,KACP,CAAA,CAAA;EAED,IAAO,MAAA,CAAA,GAAA,CAAI,KAAK,IAAI,CAAA,CAAA;EACpB,IAAO,OAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;EAAA,GACvB,CAAA;EACF,CAAG,IAAA;AAEI,QAAM,YAAe,GAAA,CAAC,EAAa,EAAA,GAAA,EAAe,SAAsB,KAAA;EAC7E,EAAA,MAAM,KAAQ,GAAA,GAAA,CAAI,aAAc,CAAA,CAAA,CAAA,EAAI,SAAW,CAAA,CAAA,CAAA,CAAA;EAC/C,EAAA,IAAI,SAAS,KAAU,KAAA,EAAA;EAAI,IAAA,eAAA,CAAgB,OAAO,SAAS,CAAA,CAAA;EAC3D,EAAA,IAAI,CAAC,EAAA,CAAG,SAAU,CAAA,QAAA,CAAS,SAAS,CAAA;EAAG,IAAG,EAAA,CAAA,SAAA,CAAU,IAAI,SAAS,CAAA,CAAA;EACnE,EAAA;AAEa,QAAA,eAAA,GAAkB,CAAC,EAAA,EAAa,SAAsB,KAAA;EACjE,EAAG,EAAA,CAAA,SAAA,CAAU,OAAO,SAAS,CAAA,CAAA;EAC/B,EAAA;AAEa,QAAA,0BAAA,GAA6B,CAAC,GAAA,EAAe,SAAsB,KAAA;EAC9E,EAAA,MAAM,EAAyB,GAAA,GAAA,CAAI,aAAc,CAAA,CAAA,CAAA,EAAI,SAAW,CAAA,CAAA,CAAA,CAAA;EAChE,EAAI,EAAA,EAAA,SAAA,CAAU,OAAO,SAAS,CAAA,CAAA;EAC9B,EAAO,OAAA,EAAA,CAAA;EACT,EAAA;AAEa,QAAA,WAAA,GAAc,CAAC,GAAA,EAAe,KAAkB,KAAA;EAC3D,EAAM,MAAA,OAAA,GAAU,GAAI,CAAA,aAAA,CAAc,OAAO,CAAA,CAAA;EACzC,EAAA,OAAA,CAAQ,SAAY,GAAA,KAAA,CAAA;EACpB,EAAI,GAAA,CAAA,IAAA,CAAK,YAAY,OAAO,CAAA,CAAA;EAC5B,EAAO,OAAA,OAAA,CAAA;EACT,EAAA;AAEO,QAAM,SAAY,GAAA,CAAC,EAAE,SAAA,EAAW,SAAsD,KAAA;EAC3F,EAAA,MAAM,EAAK,GAAA,UAAA,CAAW,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;EAClD,EAAA,EAAA,CAAG,SAAY,GAAA,SAAA,CAAA;EACf,EAAA,EAAA,CAAG,MAAM,OAAU,GAAA,OAAA,CAAA;EACnB,EAAO,OAAA,EAAA,CAAA;EACT,EAAA;AAEa,QAAA,WAAA,GAAc,MAAM,UAAW,CAAA;;ECrF5C,KAAA,CAAM,OAAO,GAAG,CAAA,CAAA;AAET,QAAM,QAAQ,CAAC,EAAA,KACpB,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;EACvB,EAAM,MAAA,KAAA,GAAQ,WAAW,MAAM;EAC7B,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;EAClB,IAAQ,OAAA,EAAA,CAAA;EAAA,KACP,EAAE,CAAA,CAAA;EACP,CAAC,EAAA;AAEI,QAAM,oBAAoB,CAC/B,CAAA,EACA,YAAe,GAAA,GAAA,EACf,SAAS,qBACW,KAAA;EACpB,EAAA,IAAI,CAAG,EAAA;EACL,IAAA,IAAI,IAAO,GAAA,IAAA,CAAA;EACX,IAAA,IAAI,CAAC,GAAK,EAAA,WAAW,CAAE,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;EACvC,MAAO,IAAA,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,OAAQ,EAAA,CAAA;EAAA,KAC1B,MAAA,IAAY,OAAO,CAAA,KAAM,QAAY,IAAA,CAAA,CAAE,SAAS,GAAG,CAAA,IAAM,CAAE,CAAA,WAAA,KAAgB,IAAM,EAAA;EAE/E,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA,CAAE,OAAO,MAAM,CAAA,CAAA;EAAA,KACrC,MAAA;EACL,MAAA,IAAA,GAAO,KAAM,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;EAAA,KAC/B;EAGA,IAAA,IAAI,SAAS,cAAgB,EAAA;EAC3B,MAAO,OAAA,IAAA,CAAA;EAAA,KACT;EACA,IAAO,OAAA,YAAA,CAAA;EAAA,GACT;EACA,EAAO,OAAA,YAAA,CAAA;EACT,EAAA;AAGa,QAAA,MAAA,GAAS,CAAC,IAAO,GAAA,EAAA,KAAO,KAAK,OAAQ,CAAA,YAAA,EAAc,KAAK,CAAA,CAAE,WAAY,GAAA;AAE5E,QAAM,MAAS,GAAA,CAAC,IAAO,GAAA,EAAA,KAAe,IAAK,CAAA,OAAA,CAAQ,QAAU,EAAA,CAAC,GAAK,EAAA,MAAA,KAAW,MAAO,CAAA,WAAA,EAAa,EAAA;AAElG,QAAM,UAAU,MAAW,KAAA,EAAA;AAQ3B,QAAM,WAAc,GAAA,CAAC,EAAQ,EAAA,IAAA,GAAgB,EAAgB,KAAA;EAClE,EAAA,MAAM,OAAgB,EAAC,CAAA;EAEvB,EAAM,MAAA,GAAA,GAAM,SAAUA,GAAAA,EAAqBC,KAA6B,EAAA;EACtE,IAAA,IAAI,CAAC,KAAA,CAAM,OAAQA,CAAAA,KAAI,CAAG,EAAA;EACxB,MAAO,OAAA,IAAA,CAAA;EAAA,KACT;EAEA,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAIA,MAAK,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;EAC3C,MAAM,MAAA,IAAA,GAAOA,MAAK,CAAC,CAAA,CAAA;EAEnB,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;EACd,MAAA,IAAI,CAAG,EAAA,IAAA,CAAK,EAAS,CAAA,CAAA,KAAA,CAAA,EAAGD,GAAM,CAAA,CAAA,EAAA;EAC5B,QAAO,OAAA,IAAA,CAAA;EAAA,OACT;EAEA,MAAA,IAAI,KAAK,KAAO,EAAA;EACd,QAAA,MAAM,IAAO,GAAA,GAAA,CAAIA,GAAI,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA;EAC/B,QAAA,IAAI,IAAM,EAAA;EACR,UAAO,OAAA,IAAA,CAAA;EAAA,SACT;EAAA,OACF;EAEA,MAAA,IAAA,CAAK,GAAI,EAAA,CAAA;EAAA,KACX;EAEA,IAAO,OAAA,IAAA,CAAA;EAAA,GACT,CAAA;EAEA,EAAA,GAAA,CAAI,IAAI,IAAI,CAAA,CAAA;EAEZ,EAAO,OAAA,IAAA,CAAA;EACT,EAAA;AAEO,QAAM,YAAY,CAAC,GAAA,KACxB,IAAI,OAAQ,CAAA,IAAA,EAAM,MAAM,CAAE,CAAA,OAAA,CAAQ,IAAM,EAAA,MAAM,EAAE,OAAQ,CAAA,IAAA,EAAM,QAAQ,CAAE,CAAA,OAAA,CAAQ,MAAM,QAAQ,EAAA;AAEnF,QAAA,WAAA,GAAc,CAAC,KAAA,EAAe,GAAiB,KAAA;EAC1D,EAAM,MAAA,CAAA,GAAI,OAAO,QAAS,CAAA,IAAA,CAAA;EAC1B,EAAA,MAAM,GAAM,GAAA,IAAI,MAAO,CAAA,CAAA,KAAA,EAAQ,kBAAkB,IAAI,CAAA,CAAA;EAErD,EAAM,MAAA,OAAA,GAAU,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;EAC3B,EAAI,IAAA,MAAA,CAAA;EACJ,EAAI,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;EACjC,IAAA,MAAA,GAAS,QAAQ,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;EAC9C,IAAI,IAAA,MAAA,IAAU,MAAO,CAAA,MAAA,GAAS,CAAG,EAAA;EAE/B,MAAO,OAAA,SAAA,CAAU,MAAO,CAAA,CAAC,CAAC,CAAA,CAAA;EAAA,KAC5B;EACA,IAAO,OAAA,EAAA,CAAA;EAAA,GACT;EACA,EAAO,OAAA,EAAA,CAAA;EACT,EAAA;AAEa,QAAA,KAAA,GAAQ,CAAC,IAAA,KAAqC,OAAQ,CAAA,IAAA,EAAM,MAAM,WAAY,EAAA,CAAE,QAAS,CAAA,KAAK,CAAC,EAAA;AAE/F,QAAA,MAAA,GAAS,CAAC,IAAsC,KAAA;EAC3D,EAAA,IAAI,CAAC,IAAA;EAAM,IAAO,OAAA,KAAA,CAAA;EAClB,EAAA,OAAO,QAAQ,IAAK,CAAA,IAAA,EAAM,WAAY,EAAA,KAAME,gBAAS,IAAI,CAAA,CAAA;EAC3D,EAAA;AAEO,QAAM,QAAW,GAAA,CAAC,KAAkB,KAAA,mBAAA,CAAoB,KAAK,KAAK,EAAA;AAElE,QAAM,UAAU,CAAC,SAAA,KAAsB,UAAU,KAAM,CAAA,aAAa,IAAI,CAAC,EAAA;AAEzE,QAAM,eAAe,CAAC,SAAA,GAAY,IAAI,MAAS,GAAA,UAAA,CAAW,SAAS,IAAS,KAAA;EACjF,EAAM,MAAA,SAAA,GAAY,mBAAoB,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;EAEpD,EAAA,IAAI,CAAC,SAAA;EAAW,IAAO,OAAA,IAAA,CAAA;EAEvB,EAAO,OAAA,OAAA,CAAQ,SAAS,CAAM,KAAA,MAAA,CAAA;EAChC,EAAA;AAOa,QAAA,IAAA,GAAO,CAAC,KAAA,GAAQ,CAC3B,KAAA,GAAA,CAAI,MAAO,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,OAAS,EAAA,CAAC,CAAM,KAAA;EACxC,EAAA,MAAM,CAAK,GAAA,IAAA,CAAK,MAAO,EAAA,GAAI,EAAM,GAAA,CAAA,CAAA;EACjC,EAAA,MAAM,CAAI,GAAA,CAAA,KAAM,GAAM,GAAA,CAAA,GAAK,IAAI,CAAO,GAAA,CAAA,CAAA;EACtC,EAAO,OAAA,CAAA,CAAE,SAAS,EAAE,CAAA,CAAA;EACtB,CAAC,EAAA;AAEI,QAAM,QAAW,GAAA,CAAC,GAAW,EAAA,IAAA,GAAgB,EAAgB,KAAA;EAClE,EAAA,MAAM,QAAiB,EAAC,CAAA;EAExB,EAAM,MAAA,GAAA,GAAM,SAAUC,IAAAA,EAAWF,KAAe,EAAA;EAC9C,IAAA,IAAI,CAAC,KAAA,CAAM,OAAQA,CAAAA,KAAI,CAAG,EAAA;EACxB,MAAA,OAAA;EAAA,KACF;EAEA,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAIA,MAAK,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;EAC3C,MAAM,MAAA,IAAA,GAAOA,MAAK,CAAC,CAAA,CAAA;EAEnB,MAAA,MAAM,KAAQE,GAAAA,IAAAA,CAAI,OAAQ,CAAA,CAAA,EAAG,KAAK,EAAI,CAAA,CAAA,CAAA,CAAA;EAEtC,MAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;EACd,QAAAA,IAAAA,CAAI,KAAM,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;EAClB,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;EAAA,OACjB,MAAA,IAAW,KAAK,KAAO,EAAA;EACrB,QAAIA,GAAAA,CAAAA,IAAAA,EAAK,KAAK,KAAK,CAAA,CAAA;EAAA,OACrB;EAAA,KACF;EAAA,GACF,CAAA;EAEA,EAAA,GAAA,CAAI,KAAK,IAAI,CAAA,CAAA;EAEb,EAAO,OAAA,KAAA,CAAA;EACT,EAAA;AAEO,QAAM,aAAa,CAAC,cAAA,GAAiC,EAAC,EAAG,OAC9D,KAAM,CAAA,IAAA;EAAA,EACJ,OAAO,MAAO,CAAA,cAAc,EAAE,MAAO,CAAA,CAAC,MAAM,GAAQ,KAAA;EAClD,IAAA,CAAC,GAAI,CAAA,EAAE,CAAG,EAAA,IAAA,IAAQ,EAAC,EAAG,OAAQ,CAAA,CAAC,GAAQ,KAAA,IAAA,CAAK,GAAI,CAAA,GAAG,CAAC,CAAA,CAAA;EACpD,IAAO,OAAA,IAAA,CAAA;EAAA,GACT,kBAAO,IAAA,GAAA,EAAS,CAAA;EAClB,EAAA;AAEK,QAAM,aAAgB,GAAA,CAAC,cAAiC,GAAA,OAC7D,KAAM,CAAA,IAAA;EAAA,EACJ,OAAO,MAAO,CAAA,cAAc,EAAE,MAAO,CAAA,CAAC,MAAM,GAAQ,KAAA;EAClD,IAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;EAC/B,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA,CAAA;EAAA,KACZ,CAAA,CAAA;EACD,IAAO,OAAA,IAAA,CAAA;EAAA,GACT,kBAAO,IAAA,GAAA,EAAS,CAAA;EAClB,EAAA;AAQK,QAAM,gBAAmB,GAAA,CAAC,OAAgB,EAAA,IAAA,EAAgB,QAAkB,KAAA;EACjF,EAAA,MAAM,IAAO,GAAA,WAAA,CAAY,OAAQ,CAAA,EAAA,EAAI,IAAI,CAAA,CAAA;EACzC,EAAM,MAAA,IAAA,GAAO,KAAK,GAAI,EAAA,CAAA;EACtB,EAAI,IAAA,MAAA,GAAS,KAAK,GAAI,EAAA,CAAA;EAEtB,EAAA,IAAI,QAAU,EAAA;EACZ,IAAA,MAAA,GAAS,WAAY,CAAA,QAAA,EAAU,IAAI,CAAA,CAAE,GAAI,EAAA,CAAA;EAAA,GAC3C;EAEA,EAAA,IAAI,CAAC,IAAA;EAAM,IAAM,MAAA,IAAI,MAAM,SAAS,CAAA,CAAA;EACpC,EAAA,IAAI,CAAC,MAAA;EAAQ,IAAM,MAAA,IAAI,MAAM,QAAQ,CAAA,CAAA;EAErC,EAAM,MAAA,KAAA,GAAQ,OAAO,KAAO,EAAA,SAAA,CAAU,CAAC,KAAiB,KAAA,KAAA,CAAM,EAAO,KAAA,IAAA,CAAK,EAAE,CAAA,CAAA;EAC5E,EAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,OAAO,CAAA,CAAA;EACvC,EAAA;AAEO,QAAM,eAAe,CAC1B,OAAA,EACA,MACA,cAAiC,GAAA,IACjC,QACG,KAAA;EACH,EAAA,IAAI,OAAa,EAAC,CAAA;EAClB,EAAA,IAAI,CAAC,QAAU,EAAA;EACb,IAAO,IAAA,GAAA,UAAA,CAAW,cAAgB,EAAA,IAAA,CAAK,EAAE,CAAA,CAAA;EAAA,GACpC,MAAA;EACL,IAAM,MAAA,GAAA,GAAM,eAAe,QAAQ,CAAA,CAAA;EACnC,IAAA,IAAA,GAAO,GAAM,GAAA,IAAA,CAAK,EAAE,CAAA,CAAE,QAAQ,EAAC,CAAA;EAAA,GACjC;EAEA,EAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;EACpB,IAAA,IAAI,OAAO,IAAA,CAAK,CAAK,EAAA,EAAA,GAAA,CAAA,CAAK,MAAM,WAAa,EAAA;EAC3C,MAAA,IAAA,CAAK,CAAK,EAAA,EAAA,GAAA,CAAA,CAAK,CAAI,GAAA,IAAA,CAAK,GAAG,CAAA,CAAA;EAAA,KAC7B;EAEA,IAAI,IAAA;EACF,MAAA,IAAA,CAAK,GAAG,CAAI,GAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,EAAA,EAAK,KAAK,CAAC,CAAA,CAAA;EAAA,aAC7B,CAAP,EAAA;EACA,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;EACf,MAAA,IAAA,CAAK,GAAG,CAAI,GAAA,EAAA,CAAA;EAAA,KACd;EAAA,GACD,CAAA,CAAA;EAED,EAAO,OAAA,IAAA,CAAA;EACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"tmagic-utils.umd.cjs","sources":["../src/dom.ts","../src/index.ts"],"sourcesContent":["export const asyncLoadJs = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, crossOrigin?: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n if (crossOrigin) {\n script.crossOrigin = crossOrigin;\n }\n script.src = url;\n document.body.appendChild(script);\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const asyncLoadCss = (() => {\n // 正在加载或加载成功的存入此Map中\n const documentMap = new Map();\n\n return (url: string, document = globalThis.document) => {\n let loaded = documentMap.get(document);\n if (!loaded) {\n loaded = new Map();\n documentMap.set(document, loaded);\n }\n\n // 正在加载或已经加载成功的,直接返回\n if (loaded.get(url)) return loaded.get(url);\n\n const load = new Promise<void>((resolve, reject) => {\n const node = document.createElement('link');\n node.rel = 'stylesheet';\n node.href = url;\n document.head.appendChild(node);\n node.onload = () => {\n resolve();\n };\n node.onerror = () => {\n reject(new Error('加载失败'));\n };\n setTimeout(() => {\n reject(new Error('timeout'));\n }, 60 * 1000);\n }).catch((err) => {\n // 加载失败的,从map中移除,第二次加载时,可以再次执行加载\n loaded.delete(url);\n throw err;\n });\n\n loaded.set(url, load);\n return loaded.get(url);\n };\n})();\n\nexport const addClassName = (el: Element, doc: Document, className: string) => {\n const oldEl = doc.querySelector(`.${className}`);\n if (oldEl && oldEl !== el) removeClassName(oldEl, className);\n if (!el.classList.contains(className)) el.classList.add(className);\n};\n\nexport const removeClassName = (el: Element, className: string) => {\n el.classList.remove(className);\n};\n\nexport const removeClassNameByClassName = (doc: Document, className: string) => {\n const el: HTMLElement | null = doc.querySelector(`.${className}`);\n el?.classList.remove(className);\n return el;\n};\n\nexport const injectStyle = (doc: Document, style: string) => {\n const styleEl = doc.createElement('style');\n styleEl.innerHTML = style;\n doc.head.appendChild(styleEl);\n return styleEl;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const getDocument = () => globalThis.document;\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { DataSourceDeps, Id, MComponent, MNode } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nexport * from './dom';\n\ndayjs.extend(utc);\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n resolve();\n }, ms);\n });\n\nexport const datetimeFormatter = (\n v: string | Date,\n defaultValue = '-',\n format = 'YYYY-MM-DD HH:mm:ss',\n): string | number => {\n if (v) {\n let time = null;\n if (['x', 'timestamp'].includes(format)) {\n time = dayjs(v).valueOf();\n } else if ((typeof v === 'string' && v.includes('Z')) || v.constructor === Date) {\n // UTC字符串时间或Date对象格式化为北京时间\n time = dayjs(v).utcOffset(8).format(format);\n } else {\n time = dayjs(v).format(format);\n }\n\n // 格式化为北京时间\n if (time !== 'Invalid Date') {\n return time;\n }\n return defaultValue;\n }\n return defaultValue;\n};\n\n// 驼峰转换横线\nexport const toLine = (name = '') => name.replace(/\\B([A-Z])/g, '-$1').toLowerCase();\n\nexport const toHump = (name = ''): string => name.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\n\nexport const emptyFn = (): any => undefined;\n\n/**\n * 通过id获取组件在应用的子孙路径\n * @param {number | string} id 组件id\n * @param {Array} data 要查找的根容器节点\n * @return {Array} 组件在data中的子孙路径\n */\nexport const getNodePath = (id: Id, data: MNode[] = []): MNode[] => {\n const path: MNode[] = [];\n\n const get = function (id: number | string, data: MNode[]): MNode | null {\n if (!Array.isArray(data)) {\n return null;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n\n path.push(item);\n if (`${item.id}` === `${id}`) {\n return item;\n }\n\n if (item.items) {\n const node = get(id, item.items);\n if (node) {\n return node;\n }\n }\n\n path.pop();\n }\n\n return null;\n };\n\n get(id, data);\n\n return path;\n};\n\nexport const filterXSS = (str: string) =>\n str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n\nexport const getUrlParam = (param: string, url?: string) => {\n const u = url || location.href;\n const reg = new RegExp(`[?&#]${param}=([^&#]+)`, 'gi');\n\n const matches = u.match(reg);\n let strArr;\n if (matches && matches.length > 0) {\n strArr = matches[matches.length - 1].split('=');\n if (strArr && strArr.length > 1) {\n // 过滤XSS字符\n return filterXSS(strArr[1]);\n }\n return '';\n }\n return '';\n};\n\nexport const isPop = (node: MComponent | null): boolean => Boolean(node?.type?.toLowerCase().endsWith('pop'));\n\nexport const isPage = (node?: MComponent | null): boolean => {\n if (!node) return false;\n return Boolean(node.type?.toLowerCase() === NodeType.PAGE);\n};\n\nexport const isNumber = (value: string) => /^(-?\\d+)(\\.\\d+)?$/.test(value);\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\n/**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\nexport const guid = (digit = 8): string =>\n 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n\nexport const getValueByKeyPath: any = (keys: string, value: Record<string | number, any>) => {\n const path = keys.split('.');\n const pathLength = path.length;\n\n return path.reduce((accumulator, currentValue: any, currentIndex: number) => {\n if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {\n return accumulator[currentValue];\n }\n\n if (pathLength - 1 === currentIndex) {\n return undefined;\n }\n\n return {};\n }, value);\n};\n\nexport const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {\n const nodes: MNode[] = [];\n\n const get = function (ids: Id[], data: MNode[]) {\n if (!Array.isArray(data)) {\n return;\n }\n\n for (let i = 0, l = data.length; i < l; i++) {\n const item = data[i];\n const index = ids.findIndex((id: Id) => `${id}` === `${item.id}`);\n\n if (index > -1) {\n ids.slice(index, 1);\n nodes.push(item);\n }\n\n if (item.items) {\n get(ids, item.items);\n }\n }\n };\n\n get(ids, data);\n\n return nodes;\n};\n\nexport const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, nodeId: Id) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n (cur[nodeId]?.keys || []).forEach((key) => prev.add(key));\n return prev;\n }, new Set<Id>()),\n );\n\nexport const getDepNodeIds = (dataSourceDeps: DataSourceDeps = {}) =>\n Array.from(\n Object.values(dataSourceDeps).reduce((prev, cur) => {\n Object.keys(cur).forEach((id) => {\n prev.add(id);\n });\n return prev;\n }, new Set<string>()),\n );\n\n/**\n * 将新节点更新到data或者parentId对应的节点的子节点中\n * @param newNode 新节点\n * @param data 需要修改的数据\n * @param parentId 父节点 id\n */\nexport const replaceChildNode = (newNode: MNode, data?: MNode[], parentId?: Id) => {\n const path = getNodePath(newNode.id, data);\n const node = path.pop();\n let parent = path.pop();\n\n if (parentId) {\n parent = getNodePath(parentId, data).pop();\n }\n\n if (!node) throw new Error('未找到目标节点');\n if (!parent) throw new Error('未找到父节点');\n\n const index = parent.items?.findIndex((child: MNode) => child.id === node.id);\n parent.items.splice(index, 1, newNode);\n};\n\nexport const compiledNode = (\n compile: (template: string) => string,\n node: MNode,\n dataSourceDeps: DataSourceDeps = {},\n sourceId?: Id,\n) => {\n let keys: Id[] = [];\n if (!sourceId) {\n keys = getDepKeys(dataSourceDeps, node.id);\n } else {\n const dep = dataSourceDeps[sourceId];\n keys = dep?.[node.id].keys || [];\n }\n\n const keyPrefix = '__magic__';\n\n keys.forEach((key) => {\n const keyPath = `${key}`.split('.');\n const keyPathLength = keyPath.length;\n keyPath.reduce((accumulator, currentValue: any, currentIndex) => {\n if (keyPathLength - 1 === currentIndex) {\n if (typeof accumulator[`${keyPrefix}${currentValue}`] === 'undefined') {\n accumulator[`${keyPrefix}${currentValue}`] = accumulator[currentValue];\n }\n\n try {\n accumulator[currentValue] = compile(accumulator[`${keyPrefix}${currentValue}`]);\n } catch (e) {\n console.error(e);\n accumulator[currentValue] = '';\n }\n\n return accumulator;\n }\n\n if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {\n return accumulator[currentValue];\n }\n\n return {};\n }, node);\n });\n\n return node;\n};\n"],"names":["id","data","NodeType","ids"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.0-alpha.2",
2
+ "version": "1.3.0-alpha.3",
3
3
  "name": "@tmagic/utils",
4
4
  "type": "module",
5
5
  "main": "dist/tmagic-utils.umd.cjs",
@@ -25,7 +25,7 @@
25
25
  "url": "https://github.com/Tencent/tmagic-editor.git"
26
26
  },
27
27
  "dependencies": {
28
- "@tmagic/schema": "1.3.0-alpha.2",
28
+ "@tmagic/schema": "1.3.0-alpha.3",
29
29
  "dayjs": "^1.11.4"
30
30
  },
31
31
  "peerDependencies": {
package/src/index.ts CHANGED
@@ -157,6 +157,23 @@ export const guid = (digit = 8): string =>
157
157
  return v.toString(16);
158
158
  });
159
159
 
160
+ export const getValueByKeyPath: any = (keys: string, value: Record<string | number, any>) => {
161
+ const path = keys.split('.');
162
+ const pathLength = path.length;
163
+
164
+ return path.reduce((accumulator, currentValue: any, currentIndex: number) => {
165
+ if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {
166
+ return accumulator[currentValue];
167
+ }
168
+
169
+ if (pathLength - 1 === currentIndex) {
170
+ return undefined;
171
+ }
172
+
173
+ return {};
174
+ }, value);
175
+ };
176
+
160
177
  export const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {
161
178
  const nodes: MNode[] = [];
162
179
 
@@ -167,13 +184,14 @@ export const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {
167
184
 
168
185
  for (let i = 0, l = data.length; i < l; i++) {
169
186
  const item = data[i];
170
-
171
- const index = ids.indexOf(`${item.id}`);
187
+ const index = ids.findIndex((id: Id) => `${id}` === `${item.id}`);
172
188
 
173
189
  if (index > -1) {
174
190
  ids.slice(index, 1);
175
191
  nodes.push(item);
176
- } else if (item.items) {
192
+ }
193
+
194
+ if (item.items) {
177
195
  get(ids, item.items);
178
196
  }
179
197
  }
@@ -184,10 +202,10 @@ export const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {
184
202
  return nodes;
185
203
  };
186
204
 
187
- export const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, id: Id) =>
205
+ export const getDepKeys = (dataSourceDeps: DataSourceDeps = {}, nodeId: Id) =>
188
206
  Array.from(
189
207
  Object.values(dataSourceDeps).reduce((prev, cur) => {
190
- (cur[id]?.keys || []).forEach((key) => prev.add(key));
208
+ (cur[nodeId]?.keys || []).forEach((key) => prev.add(key));
191
209
  return prev;
192
210
  }, new Set<Id>()),
193
211
  );
@@ -199,7 +217,7 @@ export const getDepNodeIds = (dataSourceDeps: DataSourceDeps = {}) =>
199
217
  prev.add(id);
200
218
  });
201
219
  return prev;
202
- }, new Set<Id>()),
220
+ }, new Set<string>()),
203
221
  );
204
222
 
205
223
  /**
@@ -238,17 +256,33 @@ export const compiledNode = (
238
256
  keys = dep?.[node.id].keys || [];
239
257
  }
240
258
 
259
+ const keyPrefix = '__magic__';
260
+
241
261
  keys.forEach((key) => {
242
- if (typeof node[`__${key}`] === 'undefined') {
243
- node[`__${key}`] = node[key];
244
- }
262
+ const keyPath = `${key}`.split('.');
263
+ const keyPathLength = keyPath.length;
264
+ keyPath.reduce((accumulator, currentValue: any, currentIndex) => {
265
+ if (keyPathLength - 1 === currentIndex) {
266
+ if (typeof accumulator[`${keyPrefix}${currentValue}`] === 'undefined') {
267
+ accumulator[`${keyPrefix}${currentValue}`] = accumulator[currentValue];
268
+ }
245
269
 
246
- try {
247
- node[key] = compile(node[`__${key}`]);
248
- } catch (e) {
249
- console.error(e);
250
- node[key] = '';
251
- }
270
+ try {
271
+ accumulator[currentValue] = compile(accumulator[`${keyPrefix}${currentValue}`]);
272
+ } catch (e) {
273
+ console.error(e);
274
+ accumulator[currentValue] = '';
275
+ }
276
+
277
+ return accumulator;
278
+ }
279
+
280
+ if (Object.prototype.toString.call(accumulator) === '[object Object]' || Array.isArray(accumulator)) {
281
+ return accumulator[currentValue];
282
+ }
283
+
284
+ return {};
285
+ }, node);
252
286
  });
253
287
 
254
288
  return node;
package/types/index.d.ts CHANGED
@@ -25,9 +25,10 @@ export declare const isSameDomain: (targetUrl?: string, source?: string) => bool
25
25
  * @returns
26
26
  */
27
27
  export declare const guid: (digit?: number) => string;
28
+ export declare const getValueByKeyPath: any;
28
29
  export declare const getNodes: (ids: Id[], data?: MNode[]) => MNode[];
29
- export declare const getDepKeys: (dataSourceDeps: DataSourceDeps | undefined, id: Id) => Id[];
30
- export declare const getDepNodeIds: (dataSourceDeps?: DataSourceDeps) => Id[];
30
+ export declare const getDepKeys: (dataSourceDeps: DataSourceDeps | undefined, nodeId: Id) => Id[];
31
+ export declare const getDepNodeIds: (dataSourceDeps?: DataSourceDeps) => string[];
31
32
  /**
32
33
  * 将新节点更新到data或者parentId对应的节点的子节点中
33
34
  * @param newNode 新节点