@satorijs/element 2.1.2 → 2.1.4

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/lib/index.cjs CHANGED
@@ -174,19 +174,25 @@ var evaluate = new Function("expr", "context", `
174
174
  Element2.select = select;
175
175
  __name(select, "select");
176
176
  function interpolate(expr, context) {
177
+ var _a;
177
178
  expr = expr.trim();
178
- if (/^\d+$/.test(expr)) {
179
- return context[expr] || "";
180
- } else {
181
- return evaluate(expr, context) || "";
179
+ if (!/^[\w.]+$/.test(expr)) {
180
+ return (_a = evaluate(expr, context)) != null ? _a : "";
181
+ }
182
+ let value = context;
183
+ for (const part of expr.split(".")) {
184
+ value = value[part];
185
+ if ((0, import_cosmokit.isNullable)(value))
186
+ return "";
182
187
  }
188
+ return value != null ? value : "";
183
189
  }
184
190
  Element2.interpolate = interpolate;
185
191
  __name(interpolate, "interpolate");
186
- const tagRegExp = /<(\/?)\s*([^\s>/]*)([^>]*?)\s*(\/?)>/;
192
+ const tagRegExp = /<!--[\s\S]*?-->|<(\/?)\s*([^!\s>/]*)([^>]*?)\s*(\/?)>/;
187
193
  const attrRegExp1 = /([^\s=]+)(?:="([^"]*)"|='([^']*)')?/g;
188
194
  const attrRegExp2 = /([^\s=]+)(?:="([^"]*)"|='([^']*)'|=\{([^}]+)\})?/g;
189
- const interpRegExp = /\{([^}]+)\}/;
195
+ const interpRegExp = /\{([^}]*)\}/;
190
196
  function parse(source, context) {
191
197
  const tokens = [];
192
198
  const attrRegExp = context ? attrRegExp2 : attrRegExp1;
@@ -194,6 +200,9 @@ var evaluate = new Function("expr", "context", `
194
200
  while (tagCap = tagRegExp.exec(source)) {
195
201
  pushText(source.slice(0, tagCap.index));
196
202
  const [_, close, type, attrs, empty] = tagCap;
203
+ source = source.slice(tagCap.index + _.length);
204
+ if (_.startsWith("<!"))
205
+ continue;
197
206
  const token = { source: _, type: type || Element2.Fragment, close, empty, attrs: {} };
198
207
  let attrCap;
199
208
  while (attrCap = attrRegExp.exec(attrs)) {
@@ -201,7 +210,6 @@ var evaluate = new Function("expr", "context", `
201
210
  token.attrs[(0, import_cosmokit.camelize)(key)] = v3 ? interpolate(v3, context) : unescape(v2);
202
211
  }
203
212
  tokens.push(token);
204
- source = source.slice(tagCap.index + _.length);
205
213
  }
206
214
  pushText(source);
207
215
  function pushText(source2) {
package/lib/index.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["import { Awaitable, camelize, capitalize, defineProperty, Dict, hyphenate, is, isNullable } from 'cosmokit'\n\nconst kElement = Symbol('element')\n\nfunction isElement(source: any): source is Element {\n return source && typeof source === 'object' && source[kElement]\n}\n\nfunction toElement(content: string | Element) {\n if (typeof content === 'string') {\n if (content) return Element('text', { content })\n } else if (isElement(content)) {\n return content\n } else if (!isNullable(content)) {\n throw new TypeError(`Invalid content: ${content}`)\n }\n}\n\nfunction toElementArray(content: Element.Fragment) {\n if (Array.isArray(content)) {\n return content.map(toElement).filter(x => x)\n } else {\n return [toElement(content)].filter(x => x)\n }\n}\n\ninterface Element {\n [kElement]: true\n type: string\n attrs: Dict<string>\n /** @deprecated use `attrs` instead */\n data: Dict<string>\n children: Element[]\n source?: string\n toString(strip?: boolean): string\n}\n\ninterface ElementConstructor extends Element {}\n\nclass ElementConstructor {\n get data() {\n return this.attrs\n }\n\n toString(strip = false) {\n if (this.type === 'text') return Element.escape(this.attrs.content)\n const inner = this.children.map(child => child.toString(strip)).join('')\n if (strip) return inner\n const attrs = Object.entries(this.attrs).map(([key, value]) => {\n key = hyphenate(key)\n if (value === '') return ` ${key}`\n return ` ${key}=\"${Element.escape(value, true)}\"`\n }).join('')\n if (!this.children.length) return `<${this.type}${attrs}/>`\n return `<${this.type}${attrs}>${inner}</${this.type}>`\n }\n}\n\ndefineProperty(ElementConstructor, 'name', 'Element')\ndefineProperty(ElementConstructor.prototype, kElement, true)\n\nfunction Element(type: string, ...children: Element.Fragment[]): Element\nfunction Element(type: string, attrs: Dict, ...children: Element.Fragment[]): Element\nfunction Element(type: string, ...args: any[]) {\n const el = Object.create(ElementConstructor.prototype)\n let attrs: Dict<string> = {}, children: Element[] = []\n if (args[0] && typeof args[0] === 'object' && !isElement(args[0]) && !Array.isArray(args[0])) {\n for (const [key, value] of Object.entries(args.shift())) {\n if (isNullable(value)) continue\n // https://github.com/reactjs/rfcs/pull/107\n if (key === 'children') {\n children = toElementArray(value as Element.Fragment)\n } else if (value === true) {\n attrs[key] = ''\n } else if (value === false) {\n attrs['no' + capitalize(key)] = ''\n } else if (!isNullable(value)) {\n attrs[key] = '' + value\n }\n }\n }\n for (const child of args) {\n children.push(...toElementArray(child))\n }\n return Object.assign(el, { type, attrs, children })\n}\n\n// eslint-disable-next-line no-new-func\nconst evaluate = new Function('expr', 'context', `\n try {\n with (context) {\n return eval(expr)\n }\n } catch {}\n`) as ((expr: string, context: object) => string)\n\nnamespace Element {\n export const jsx = Element\n export const jsxs = Element\n export const jsxDEV = Element\n export const Fragment = 'template'\n\n export type Fragment = string | Element | (string | Element)[]\n export type Render<T, S> = (attrs: Dict<any>, children: Element[], session: S) => T\n export type Transformer<S> = boolean | Fragment | Render<boolean | Fragment, S>\n export type AsyncTransformer<S> = boolean | Fragment | Render<Awaitable<boolean | Fragment>, S>\n\n export function normalize(source: Fragment) {\n if (typeof source !== 'string') return toElementArray(source)\n return Element.parse(source)\n }\n\n export function escape(source: string, inline = false) {\n const result = source\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n return inline\n ? result.replace(/\"/g, '&quot;')\n : result\n }\n\n export function unescape(source: string) {\n return source\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#(\\d+);/g, (_, code) => code === '38' ? _ : String.fromCharCode(+code))\n .replace(/&#x([0-9a-f]+);/gi, (_, code) => code === '26' ? _ : String.fromCharCode(parseInt(code, 16)))\n .replace(/&(amp|#38|#x26);/g, '&')\n }\n\n export interface FindOptions {\n type?: string\n caret?: boolean\n }\n\n /** @deprecated use `Element.select()` instead */\n export function from(source: string, options: FindOptions = {}): Element {\n const elements = parse(source)\n if (options.caret) {\n if (options.type && elements[0]?.type !== options.type) return\n return elements[0]\n }\n return select(elements, options.type || '*')[0]\n }\n\n type Combinator = ' ' | '>' | '+' | '~'\n\n export interface Selector {\n type: string\n combinator: Combinator\n }\n\n const combRegExp = / *([ >+~]) */g\n\n export function parseSelector(input: string): Selector[][] {\n return input.split(',').map((query) => {\n const selectors: Selector[] = []\n query = query.trim()\n let combCap: RegExpExecArray, combinator: Combinator = ' '\n while ((combCap = combRegExp.exec(query))) {\n selectors.push({ type: query.slice(0, combCap.index), combinator })\n combinator = combCap[1] as Combinator\n query = query.slice(combCap.index + combCap[0].length)\n }\n selectors.push({ type: query, combinator })\n return selectors\n })\n }\n\n export function select(source: string | Element[], query: string | Selector[][]): Element[] {\n if (typeof source === 'string') source = parse(source)\n if (typeof query === 'string') query = parseSelector(query)\n if (!query.length) return\n let adjacent: Selector[][] = []\n const results: Element[] = []\n for (const [index, element] of source.entries()) {\n const inner: Selector[][] = []\n const local = [...query, ...adjacent]\n adjacent = []\n let matched = false\n for (const group of local) {\n const { type, combinator } = group[0]\n if (type === element.type || type === '*') {\n if (group.length === 1) {\n matched = true\n } else if ([' ', '>'].includes(group[1].combinator)) {\n inner.push(group.slice(1))\n } else if (group[1].combinator === '+') {\n adjacent.push(group.slice(1))\n } else {\n query.push(group.slice(1))\n }\n }\n if (combinator === ' ') {\n inner.push(group)\n }\n }\n if (matched) results.push(source[index])\n results.push(...select(element.children, inner))\n }\n return results\n }\n\n export function interpolate(expr: string, context: any) {\n expr = expr.trim()\n if (/^\\d+$/.test(expr)) {\n return context[expr] || ''\n } else {\n return evaluate(expr, context) || ''\n }\n }\n\n const tagRegExp = /<(\\/?)\\s*([^\\s>/]*)([^>]*?)\\s*(\\/?)>/\n const attrRegExp1 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)')?/g\n const attrRegExp2 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)'|=\\{([^}]+)\\})?/g\n const interpRegExp = /\\{([^}]+)\\}/\n\n interface Token {\n type: string\n close: string\n empty: string\n attrs: Dict<string>\n source: string\n }\n\n export function parse(source: string, context?: any) {\n const tokens: (string | Token)[] = []\n const attrRegExp = context ? attrRegExp2 : attrRegExp1\n let tagCap: RegExpExecArray\n while ((tagCap = tagRegExp.exec(source))) {\n pushText(source.slice(0, tagCap.index))\n const [_, close, type, attrs, empty] = tagCap\n const token: Token = { source: _, type: type || Fragment, close, empty, attrs: {} }\n let attrCap: RegExpExecArray\n while ((attrCap = attrRegExp.exec(attrs))) {\n const [_, key, v1 = '', v2 = v1, v3] = attrCap\n token.attrs[camelize(key)] = v3\n ? interpolate(v3, context)\n : unescape(v2)\n }\n tokens.push(token)\n source = source.slice(tagCap.index + _.length)\n }\n\n pushText(source)\n function pushText(source: string) {\n source = source\n .replace(/^\\s*\\n\\s*/, '')\n .replace(/\\s*\\n\\s*$/, '')\n let result = ''\n if (context) {\n let interpCap: RegExpExecArray\n while ((interpCap = interpRegExp.exec(source))) {\n const [_, expr] = interpCap\n result += unescape(source.slice(0, interpCap.index))\n result += interpolate(expr, context)\n source = source.slice(interpCap.index + _.length)\n }\n }\n result += unescape(source)\n if (result) tokens.push(result)\n }\n\n const stack = [Element(Fragment)]\n function rollback(index: number) {\n for (; index > 0; index--) {\n const { children } = stack.shift()\n const { source } = stack[0].children.pop()\n stack[0].children.push(Element('text', { content: source }))\n stack[0].children.push(...children)\n }\n }\n\n for (const token of tokens) {\n if (typeof token === 'string') {\n stack[0].children.push(Element('text', { content: token }))\n } else if (token.close) {\n let index = 0\n while (index < stack.length && stack[index].type !== token.type) index++\n if (index === stack.length) {\n // no matching open tag\n stack[0].children.push(Element('text', { content: token.source }))\n } else {\n rollback(index)\n const element = stack.shift()\n delete element.source\n }\n } else {\n const element = Element(token.type, token.attrs)\n stack[0].children.push(element)\n if (!token.empty) {\n element.source = token.source\n stack.unshift(element)\n }\n }\n }\n rollback(stack.length - 1)\n return stack[0].children\n }\n\n export function transform<S>(source: string, rules: Dict<Transformer<S>>, session?: S): string\n export function transform<S>(source: Element[], rules: Dict<Transformer<S>>, session?: S): Element[]\n export function transform<S>(source: string | Element[], rules: Dict<Transformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const output: Element[] = []\n elements.forEach((element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = result(attrs, children, session)\n }\n if (result === true) {\n output.push(Element(type, attrs, transform(children, rules, session)))\n } else if (result !== false) {\n output.push(...toElementArray(result))\n }\n })\n return typeof source === 'string' ? output.join('') : output\n }\n\n export async function transformAsync<S>(source: string, rules: Dict<AsyncTransformer<S>>, session?: S): Promise<string>\n export async function transformAsync<S>(source: Element[], rules: Dict<AsyncTransformer<S>>, session?: S): Promise<Element[]>\n export async function transformAsync<S>(source: string | Element[], rules: Dict<AsyncTransformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const children = (await Promise.all(elements.map(async (element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = await result(attrs, children, session)\n }\n if (result === true) {\n return [Element(type, attrs, await transformAsync(children, rules, session))]\n } else if (result !== false) {\n return toElementArray(result)\n } else {\n return []\n }\n }))).flat(1)\n return typeof source === 'string' ? children.join('') : children\n }\n\n export type Factory<R extends any[]> = (...args: [...rest: R, attrs?: Dict<any>]) => Element\n\n function createFactory<R extends any[] = any[]>(type: string, ...keys: string[]): Factory<R> {\n return (...args: any[]) => {\n const element = Element(type)\n keys.forEach((key, index) => {\n if (!isNullable(args[index])) {\n element.attrs[key] = args[index]\n }\n })\n if (args[keys.length]) {\n Object.assign(element.attrs, args[keys.length])\n }\n return element\n }\n }\n\n function createAssetFactory(type: string): Factory<[data: string | Buffer | ArrayBuffer]> {\n return (value, attrs = {}) => {\n if (is('Buffer', value)) {\n value = 'base64://' + value.toString('base64')\n } else if (is('ArrayBuffer', value)) {\n value = 'base64://' + Buffer.from(value).toString('base64')\n }\n return Element(type, { ...attrs, url: value })\n }\n }\n\n export const at = createFactory<[id: any]>('at', 'id')\n export const sharp = createFactory<[id: any]>('sharp', 'id')\n export const quote = createFactory<[id: any]>('quote', 'id')\n export const image = createAssetFactory('image')\n export const video = createAssetFactory('video')\n export const audio = createAssetFactory('audio')\n export const file = createAssetFactory('file')\n}\n\nexport = Element\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Awaitable, camelize, capitalize, defineProperty, Dict, hyphenate, is, isNullable } from 'cosmokit'\n\nconst kElement = Symbol('element')\n\nfunction isElement(source: any): source is Element {\n return source && typeof source === 'object' && source[kElement]\n}\n\nfunction toElement(content: string | Element) {\n if (typeof content === 'string') {\n if (content) return Element('text', { content })\n } else if (isElement(content)) {\n return content\n } else if (!isNullable(content)) {\n throw new TypeError(`Invalid content: ${content}`)\n }\n}\n\nfunction toElementArray(content: Element.Fragment) {\n if (Array.isArray(content)) {\n return content.map(toElement).filter(x => x)\n } else {\n return [toElement(content)].filter(x => x)\n }\n}\n\ninterface Element {\n [kElement]: true\n type: string\n attrs: Dict<string>\n /** @deprecated use `attrs` instead */\n data: Dict<string>\n children: Element[]\n source?: string\n toString(strip?: boolean): string\n}\n\ninterface ElementConstructor extends Element {}\n\nclass ElementConstructor {\n get data() {\n return this.attrs\n }\n\n toString(strip = false) {\n if (this.type === 'text') return Element.escape(this.attrs.content)\n const inner = this.children.map(child => child.toString(strip)).join('')\n if (strip) return inner\n const attrs = Object.entries(this.attrs).map(([key, value]) => {\n key = hyphenate(key)\n if (value === '') return ` ${key}`\n return ` ${key}=\"${Element.escape(value, true)}\"`\n }).join('')\n if (!this.children.length) return `<${this.type}${attrs}/>`\n return `<${this.type}${attrs}>${inner}</${this.type}>`\n }\n}\n\ndefineProperty(ElementConstructor, 'name', 'Element')\ndefineProperty(ElementConstructor.prototype, kElement, true)\n\nfunction Element(type: string, ...children: Element.Fragment[]): Element\nfunction Element(type: string, attrs: Dict, ...children: Element.Fragment[]): Element\nfunction Element(type: string, ...args: any[]) {\n const el = Object.create(ElementConstructor.prototype)\n let attrs: Dict<string> = {}, children: Element[] = []\n if (args[0] && typeof args[0] === 'object' && !isElement(args[0]) && !Array.isArray(args[0])) {\n for (const [key, value] of Object.entries(args.shift())) {\n if (isNullable(value)) continue\n // https://github.com/reactjs/rfcs/pull/107\n if (key === 'children') {\n children = toElementArray(value as Element.Fragment)\n } else if (value === true) {\n attrs[key] = ''\n } else if (value === false) {\n attrs['no' + capitalize(key)] = ''\n } else if (!isNullable(value)) {\n attrs[key] = '' + value\n }\n }\n }\n for (const child of args) {\n children.push(...toElementArray(child))\n }\n return Object.assign(el, { type, attrs, children })\n}\n\n// eslint-disable-next-line no-new-func\nconst evaluate = new Function('expr', 'context', `\n try {\n with (context) {\n return eval(expr)\n }\n } catch {}\n`) as ((expr: string, context: object) => string)\n\nnamespace Element {\n export const jsx = Element\n export const jsxs = Element\n export const jsxDEV = Element\n export const Fragment = 'template'\n\n export type Fragment = string | Element | (string | Element)[]\n export type Render<T, S> = (attrs: Dict<any>, children: Element[], session: S) => T\n export type Transformer<S> = boolean | Fragment | Render<boolean | Fragment, S>\n export type AsyncTransformer<S> = boolean | Fragment | Render<Awaitable<boolean | Fragment>, S>\n\n export function normalize(source: Fragment) {\n if (typeof source !== 'string') return toElementArray(source)\n return Element.parse(source)\n }\n\n export function escape(source: string, inline = false) {\n const result = source\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n return inline\n ? result.replace(/\"/g, '&quot;')\n : result\n }\n\n export function unescape(source: string) {\n return source\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#(\\d+);/g, (_, code) => code === '38' ? _ : String.fromCharCode(+code))\n .replace(/&#x([0-9a-f]+);/gi, (_, code) => code === '26' ? _ : String.fromCharCode(parseInt(code, 16)))\n .replace(/&(amp|#38|#x26);/g, '&')\n }\n\n export interface FindOptions {\n type?: string\n caret?: boolean\n }\n\n /** @deprecated use `Element.select()` instead */\n export function from(source: string, options: FindOptions = {}): Element {\n const elements = parse(source)\n if (options.caret) {\n if (options.type && elements[0]?.type !== options.type) return\n return elements[0]\n }\n return select(elements, options.type || '*')[0]\n }\n\n type Combinator = ' ' | '>' | '+' | '~'\n\n export interface Selector {\n type: string\n combinator: Combinator\n }\n\n const combRegExp = / *([ >+~]) */g\n\n export function parseSelector(input: string): Selector[][] {\n return input.split(',').map((query) => {\n const selectors: Selector[] = []\n query = query.trim()\n let combCap: RegExpExecArray, combinator: Combinator = ' '\n while ((combCap = combRegExp.exec(query))) {\n selectors.push({ type: query.slice(0, combCap.index), combinator })\n combinator = combCap[1] as Combinator\n query = query.slice(combCap.index + combCap[0].length)\n }\n selectors.push({ type: query, combinator })\n return selectors\n })\n }\n\n export function select(source: string | Element[], query: string | Selector[][]): Element[] {\n if (typeof source === 'string') source = parse(source)\n if (typeof query === 'string') query = parseSelector(query)\n if (!query.length) return\n let adjacent: Selector[][] = []\n const results: Element[] = []\n for (const [index, element] of source.entries()) {\n const inner: Selector[][] = []\n const local = [...query, ...adjacent]\n adjacent = []\n let matched = false\n for (const group of local) {\n const { type, combinator } = group[0]\n if (type === element.type || type === '*') {\n if (group.length === 1) {\n matched = true\n } else if ([' ', '>'].includes(group[1].combinator)) {\n inner.push(group.slice(1))\n } else if (group[1].combinator === '+') {\n adjacent.push(group.slice(1))\n } else {\n query.push(group.slice(1))\n }\n }\n if (combinator === ' ') {\n inner.push(group)\n }\n }\n if (matched) results.push(source[index])\n results.push(...select(element.children, inner))\n }\n return results\n }\n\n export function interpolate(expr: string, context: any) {\n expr = expr.trim()\n if (!/^[\\w.]+$/.test(expr)) {\n return evaluate(expr, context) ?? ''\n }\n let value = context\n for (const part of expr.split('.')) {\n value = value[part]\n if (isNullable(value)) return ''\n }\n return value ?? ''\n }\n\n const tagRegExp = /<!--[\\s\\S]*?-->|<(\\/?)\\s*([^!\\s>/]*)([^>]*?)\\s*(\\/?)>/\n const attrRegExp1 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)')?/g\n const attrRegExp2 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)'|=\\{([^}]+)\\})?/g\n const interpRegExp = /\\{([^}]*)\\}/\n\n interface Token {\n type: string\n close: string\n empty: string\n attrs: Dict<string>\n source: string\n }\n\n export function parse(source: string, context?: any) {\n const tokens: (string | Token)[] = []\n const attrRegExp = context ? attrRegExp2 : attrRegExp1\n let tagCap: RegExpExecArray\n while ((tagCap = tagRegExp.exec(source))) {\n pushText(source.slice(0, tagCap.index))\n const [_, close, type, attrs, empty] = tagCap\n source = source.slice(tagCap.index + _.length)\n if (_.startsWith('<!')) continue\n const token: Token = { source: _, type: type || Fragment, close, empty, attrs: {} }\n let attrCap: RegExpExecArray\n while ((attrCap = attrRegExp.exec(attrs))) {\n const [_, key, v1 = '', v2 = v1, v3] = attrCap\n token.attrs[camelize(key)] = v3\n ? interpolate(v3, context)\n : unescape(v2)\n }\n tokens.push(token)\n }\n\n pushText(source)\n function pushText(source: string) {\n source = source\n .replace(/^\\s*\\n\\s*/, '')\n .replace(/\\s*\\n\\s*$/, '')\n let result = ''\n if (context) {\n let interpCap: RegExpExecArray\n while ((interpCap = interpRegExp.exec(source))) {\n const [_, expr] = interpCap\n result += unescape(source.slice(0, interpCap.index))\n result += interpolate(expr, context)\n source = source.slice(interpCap.index + _.length)\n }\n }\n result += unescape(source)\n if (result) tokens.push(result)\n }\n\n const stack = [Element(Fragment)]\n function rollback(index: number) {\n for (; index > 0; index--) {\n const { children } = stack.shift()\n const { source } = stack[0].children.pop()\n stack[0].children.push(Element('text', { content: source }))\n stack[0].children.push(...children)\n }\n }\n\n for (const token of tokens) {\n if (typeof token === 'string') {\n stack[0].children.push(Element('text', { content: token }))\n } else if (token.close) {\n let index = 0\n while (index < stack.length && stack[index].type !== token.type) index++\n if (index === stack.length) {\n // no matching open tag\n stack[0].children.push(Element('text', { content: token.source }))\n } else {\n rollback(index)\n const element = stack.shift()\n delete element.source\n }\n } else {\n const element = Element(token.type, token.attrs)\n stack[0].children.push(element)\n if (!token.empty) {\n element.source = token.source\n stack.unshift(element)\n }\n }\n }\n rollback(stack.length - 1)\n return stack[0].children\n }\n\n export function transform<S>(source: string, rules: Dict<Transformer<S>>, session?: S): string\n export function transform<S>(source: Element[], rules: Dict<Transformer<S>>, session?: S): Element[]\n export function transform<S>(source: string | Element[], rules: Dict<Transformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const output: Element[] = []\n elements.forEach((element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = result(attrs, children, session)\n }\n if (result === true) {\n output.push(Element(type, attrs, transform(children, rules, session)))\n } else if (result !== false) {\n output.push(...toElementArray(result))\n }\n })\n return typeof source === 'string' ? output.join('') : output\n }\n\n export async function transformAsync<S>(source: string, rules: Dict<AsyncTransformer<S>>, session?: S): Promise<string>\n export async function transformAsync<S>(source: Element[], rules: Dict<AsyncTransformer<S>>, session?: S): Promise<Element[]>\n export async function transformAsync<S>(source: string | Element[], rules: Dict<AsyncTransformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const children = (await Promise.all(elements.map(async (element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = await result(attrs, children, session)\n }\n if (result === true) {\n return [Element(type, attrs, await transformAsync(children, rules, session))]\n } else if (result !== false) {\n return toElementArray(result)\n } else {\n return []\n }\n }))).flat(1)\n return typeof source === 'string' ? children.join('') : children\n }\n\n export type Factory<R extends any[]> = (...args: [...rest: R, attrs?: Dict<any>]) => Element\n\n function createFactory<R extends any[] = any[]>(type: string, ...keys: string[]): Factory<R> {\n return (...args: any[]) => {\n const element = Element(type)\n keys.forEach((key, index) => {\n if (!isNullable(args[index])) {\n element.attrs[key] = args[index]\n }\n })\n if (args[keys.length]) {\n Object.assign(element.attrs, args[keys.length])\n }\n return element\n }\n }\n\n function createAssetFactory(type: string): Factory<[data: string | Buffer | ArrayBuffer]> {\n return (value, attrs = {}) => {\n if (is('Buffer', value)) {\n value = 'base64://' + value.toString('base64')\n } else if (is('ArrayBuffer', value)) {\n value = 'base64://' + Buffer.from(value).toString('base64')\n }\n return Element(type, { ...attrs, url: value })\n }\n }\n\n export const at = createFactory<[id: any]>('at', 'id')\n export const sharp = createFactory<[id: any]>('sharp', 'id')\n export const quote = createFactory<[id: any]>('quote', 'id')\n export const image = createAssetFactory('image')\n export const video = createAssetFactory('video')\n export const audio = createAssetFactory('audio')\n export const file = createAssetFactory('file')\n}\n\nexport = Element\n"],
5
+ "mappings": ";;;;AAAA,sBAAiG;AAEjG,IAAM,WAAW,OAAO,SAAS;AAEjC,SAAS,UAAU,QAAgC;AACjD,SAAO,UAAU,OAAO,WAAW,YAAY,OAAO;AACxD;AAFS;AAIT,SAAS,UAAU,SAA2B;AAC5C,MAAI,OAAO,YAAY,UAAU;AAC/B,QAAI;AAAS,aAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC;AAAA,EACjD,WAAW,UAAU,OAAO,GAAG;AAC7B,WAAO;AAAA,EACT,WAAW,KAAC,4BAAW,OAAO,GAAG;AAC/B,UAAM,IAAI,UAAU,oBAAoB,SAAS;AAAA,EACnD;AACF;AARS;AAUT,SAAS,eAAe,SAA2B;AACjD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,WAAO,QAAQ,IAAI,SAAS,EAAE,OAAO,OAAK,CAAC;AAAA,EAC7C,OAAO;AACL,WAAO,CAAC,UAAU,OAAO,CAAC,EAAE,OAAO,OAAK,CAAC;AAAA,EAC3C;AACF;AANS;AAqBT,IAAM,qBAAN,MAAyB;AAAA,EACvB,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,QAAQ,OAAO;AACtB,QAAI,KAAK,SAAS;AAAQ,aAAO,QAAQ,OAAO,KAAK,MAAM,OAAO;AAClE,UAAM,QAAQ,KAAK,SAAS,IAAI,WAAS,MAAM,SAAS,KAAK,CAAC,EAAE,KAAK,EAAE;AACvE,QAAI;AAAO,aAAO;AAClB,UAAM,QAAQ,OAAO,QAAQ,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7D,gBAAM,2BAAU,GAAG;AACnB,UAAI,UAAU;AAAI,eAAO,IAAI;AAC7B,aAAO,IAAI,QAAQ,QAAQ,OAAO,OAAO,IAAI;AAAA,IAC/C,CAAC,EAAE,KAAK,EAAE;AACV,QAAI,CAAC,KAAK,SAAS;AAAQ,aAAO,IAAI,KAAK,OAAO;AAClD,WAAO,IAAI,KAAK,OAAO,SAAS,UAAU,KAAK;AAAA,EACjD;AACF;AAjBM;AAAA,IAmBN,gCAAe,oBAAoB,QAAQ,SAAS;AAAA,IACpD,gCAAe,mBAAmB,WAAW,UAAU,IAAI;AAI3D,SAAS,QAAQ,SAAiB,MAAa;AAC7C,QAAM,KAAK,OAAO,OAAO,mBAAmB,SAAS;AACrD,MAAI,QAAsB,CAAC,GAAG,WAAsB,CAAC;AACrD,MAAI,KAAK,MAAM,OAAO,KAAK,OAAO,YAAY,CAAC,UAAU,KAAK,EAAE,KAAK,CAAC,MAAM,QAAQ,KAAK,EAAE,GAAG;AAC5F,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAG;AACvD,cAAI,4BAAW,KAAK;AAAG;AAEvB,UAAI,QAAQ,YAAY;AACtB,mBAAW,eAAe,KAAyB;AAAA,MACrD,WAAW,UAAU,MAAM;AACzB,cAAM,OAAO;AAAA,MACf,WAAW,UAAU,OAAO;AAC1B,cAAM,WAAO,4BAAW,GAAG,KAAK;AAAA,MAClC,WAAW,KAAC,4BAAW,KAAK,GAAG;AAC7B,cAAM,OAAO,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACA,aAAW,SAAS,MAAM;AACxB,aAAS,KAAK,GAAG,eAAe,KAAK,CAAC;AAAA,EACxC;AACA,SAAO,OAAO,OAAO,IAAI,EAAE,MAAM,OAAO,SAAS,CAAC;AACpD;AAtBS;AAyBT,IAAM,WAAW,IAAI,SAAS,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMhD;AAAA,CAED,CAAUA,aAAV;AACS,EAAMA,SAAA,MAAMA;AACZ,EAAMA,SAAA,OAAOA;AACb,EAAMA,SAAA,SAASA;AACf,EAAMA,SAAA,WAAW;AAOjB,WAAS,UAAU,QAAkB;AAC1C,QAAI,OAAO,WAAW;AAAU,aAAO,eAAe,MAAM;AAC5D,WAAOA,SAAQ,MAAM,MAAM;AAAA,EAC7B;AAHO,EAAAA,SAAS;AAAA;AAKT,WAAS,OAAO,QAAgB,SAAS,OAAO;AACrD,UAAM,SAAS,OACZ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AACvB,WAAO,SACH,OAAO,QAAQ,MAAM,QAAQ,IAC7B;AAAA,EACN;AARO,EAAAA,SAAS;AAAA;AAUT,WAAS,SAAS,QAAgB;AACvC,WAAO,OACJ,QAAQ,SAAS,GAAG,EACpB,QAAQ,SAAS,GAAG,EACpB,QAAQ,WAAW,GAAG,EACtB,QAAQ,aAAa,CAAC,GAAG,SAAS,SAAS,OAAO,IAAI,OAAO,aAAa,CAAC,IAAI,CAAC,EAChF,QAAQ,qBAAqB,CAAC,GAAG,SAAS,SAAS,OAAO,IAAI,OAAO,aAAa,SAAS,MAAM,EAAE,CAAC,CAAC,EACrG,QAAQ,qBAAqB,GAAG;AAAA,EACrC;AARO,EAAAA,SAAS;AAAA;AAgBT,WAAS,KAAK,QAAgB,UAAuB,CAAC,GAAY;AA1I3E;AA2II,UAAM,WAAW,MAAM,MAAM;AAC7B,QAAI,QAAQ,OAAO;AACjB,UAAI,QAAQ,UAAQ,cAAS,OAAT,mBAAa,UAAS,QAAQ;AAAM;AACxD,aAAO,SAAS;AAAA,IAClB;AACA,WAAO,OAAO,UAAU,QAAQ,QAAQ,GAAG,EAAE;AAAA,EAC/C;AAPO,EAAAA,SAAS;AAAA;AAgBhB,QAAM,aAAa;AAEZ,WAAS,cAAc,OAA6B;AACzD,WAAO,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,UAAU;AACrC,YAAM,YAAwB,CAAC;AAC/B,cAAQ,MAAM,KAAK;AACnB,UAAI,SAA0B,aAAyB;AACvD,aAAQ,UAAU,WAAW,KAAK,KAAK,GAAI;AACzC,kBAAU,KAAK,EAAE,MAAM,MAAM,MAAM,GAAG,QAAQ,KAAK,GAAG,WAAW,CAAC;AAClE,qBAAa,QAAQ;AACrB,gBAAQ,MAAM,MAAM,QAAQ,QAAQ,QAAQ,GAAG,MAAM;AAAA,MACvD;AACA,gBAAU,KAAK,EAAE,MAAM,OAAO,WAAW,CAAC;AAC1C,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAbO,EAAAA,SAAS;AAAA;AAeT,WAAS,OAAO,QAA4B,OAAyC;AAC1F,QAAI,OAAO,WAAW;AAAU,eAAS,MAAM,MAAM;AACrD,QAAI,OAAO,UAAU;AAAU,cAAQ,cAAc,KAAK;AAC1D,QAAI,CAAC,MAAM;AAAQ;AACnB,QAAI,WAAyB,CAAC;AAC9B,UAAM,UAAqB,CAAC;AAC5B,eAAW,CAAC,OAAO,OAAO,KAAK,OAAO,QAAQ,GAAG;AAC/C,YAAM,QAAsB,CAAC;AAC7B,YAAM,QAAQ,CAAC,GAAG,OAAO,GAAG,QAAQ;AACpC,iBAAW,CAAC;AACZ,UAAI,UAAU;AACd,iBAAW,SAAS,OAAO;AACzB,cAAM,EAAE,MAAM,WAAW,IAAI,MAAM;AACnC,YAAI,SAAS,QAAQ,QAAQ,SAAS,KAAK;AACzC,cAAI,MAAM,WAAW,GAAG;AACtB,sBAAU;AAAA,UACZ,WAAW,CAAC,KAAK,GAAG,EAAE,SAAS,MAAM,GAAG,UAAU,GAAG;AACnD,kBAAM,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,UAC3B,WAAW,MAAM,GAAG,eAAe,KAAK;AACtC,qBAAS,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,UAC9B,OAAO;AACL,kBAAM,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,UAC3B;AAAA,QACF;AACA,YAAI,eAAe,KAAK;AACtB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAAA,MACF;AACA,UAAI;AAAS,gBAAQ,KAAK,OAAO,MAAM;AACvC,cAAQ,KAAK,GAAG,OAAO,QAAQ,UAAU,KAAK,CAAC;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAhCO,EAAAA,SAAS;AAAA;AAkCT,WAAS,YAAY,MAAc,SAAc;AA7M1D;AA8MI,WAAO,KAAK,KAAK;AACjB,QAAI,CAAC,WAAW,KAAK,IAAI,GAAG;AAC1B,cAAO,cAAS,MAAM,OAAO,MAAtB,YAA2B;AAAA,IACpC;AACA,QAAI,QAAQ;AACZ,eAAW,QAAQ,KAAK,MAAM,GAAG,GAAG;AAClC,cAAQ,MAAM;AACd,cAAI,4BAAW,KAAK;AAAG,eAAO;AAAA,IAChC;AACA,WAAO,wBAAS;AAAA,EAClB;AAXO,EAAAA,SAAS;AAAA;AAahB,QAAM,YAAY;AAClB,QAAM,cAAc;AACpB,QAAM,cAAc;AACpB,QAAM,eAAe;AAUd,WAAS,MAAM,QAAgB,SAAe;AACnD,UAAM,SAA6B,CAAC;AACpC,UAAM,aAAa,UAAU,cAAc;AAC3C,QAAI;AACJ,WAAQ,SAAS,UAAU,KAAK,MAAM,GAAI;AACxC,eAAS,OAAO,MAAM,GAAG,OAAO,KAAK,CAAC;AACtC,YAAM,CAAC,GAAG,OAAO,MAAM,OAAO,KAAK,IAAI;AACvC,eAAS,OAAO,MAAM,OAAO,QAAQ,EAAE,MAAM;AAC7C,UAAI,EAAE,WAAW,IAAI;AAAG;AACxB,YAAM,QAAe,EAAE,QAAQ,GAAG,MAAM,QAAQA,SAAA,UAAU,OAAO,OAAO,OAAO,CAAC,EAAE;AAClF,UAAI;AACJ,aAAQ,UAAU,WAAW,KAAK,KAAK,GAAI;AACzC,cAAM,CAACC,IAAG,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,IAAI;AACvC,cAAM,UAAM,0BAAS,GAAG,KAAK,KACzB,YAAY,IAAI,OAAO,IACvB,SAAS,EAAE;AAAA,MACjB;AACA,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,aAAS,MAAM;AACf,aAAS,SAASC,SAAgB;AAChC,MAAAA,UAASA,QACN,QAAQ,aAAa,EAAE,EACvB,QAAQ,aAAa,EAAE;AAC1B,UAAI,SAAS;AACb,UAAI,SAAS;AACX,YAAI;AACJ,eAAQ,YAAY,aAAa,KAAKA,OAAM,GAAI;AAC9C,gBAAM,CAAC,GAAG,IAAI,IAAI;AAClB,oBAAU,SAASA,QAAO,MAAM,GAAG,UAAU,KAAK,CAAC;AACnD,oBAAU,YAAY,MAAM,OAAO;AACnC,UAAAA,UAASA,QAAO,MAAM,UAAU,QAAQ,EAAE,MAAM;AAAA,QAClD;AAAA,MACF;AACA,gBAAU,SAASA,OAAM;AACzB,UAAI;AAAQ,eAAO,KAAK,MAAM;AAAA,IAChC;AAhBS;AAkBT,UAAM,QAAQ,CAACF,SAAQA,SAAA,QAAQ,CAAC;AAChC,aAAS,SAAS,OAAe;AAC/B,aAAO,QAAQ,GAAG,SAAS;AACzB,cAAM,EAAE,SAAS,IAAI,MAAM,MAAM;AACjC,cAAM,EAAE,QAAAE,QAAO,IAAI,MAAM,GAAG,SAAS,IAAI;AACzC,cAAM,GAAG,SAAS,KAAKF,SAAQ,QAAQ,EAAE,SAASE,QAAO,CAAC,CAAC;AAC3D,cAAM,GAAG,SAAS,KAAK,GAAG,QAAQ;AAAA,MACpC;AAAA,IACF;AAPS;AAST,eAAW,SAAS,QAAQ;AAC1B,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,GAAG,SAAS,KAAKF,SAAQ,QAAQ,EAAE,SAAS,MAAM,CAAC,CAAC;AAAA,MAC5D,WAAW,MAAM,OAAO;AACtB,YAAI,QAAQ;AACZ,eAAO,QAAQ,MAAM,UAAU,MAAM,OAAO,SAAS,MAAM;AAAM;AACjE,YAAI,UAAU,MAAM,QAAQ;AAE1B,gBAAM,GAAG,SAAS,KAAKA,SAAQ,QAAQ,EAAE,SAAS,MAAM,OAAO,CAAC,CAAC;AAAA,QACnE,OAAO;AACL,mBAAS,KAAK;AACd,gBAAM,UAAU,MAAM,MAAM;AAC5B,iBAAO,QAAQ;AAAA,QACjB;AAAA,MACF,OAAO;AACL,cAAM,UAAUA,SAAQ,MAAM,MAAM,MAAM,KAAK;AAC/C,cAAM,GAAG,SAAS,KAAK,OAAO;AAC9B,YAAI,CAAC,MAAM,OAAO;AAChB,kBAAQ,SAAS,MAAM;AACvB,gBAAM,QAAQ,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AACA,aAAS,MAAM,SAAS,CAAC;AACzB,WAAO,MAAM,GAAG;AAAA,EAClB;AA1EO,EAAAA,SAAS;AAAA;AA8ET,WAAS,UAAa,QAA4B,OAA6B,SAAa;AACjG,UAAM,WAAW,OAAO,WAAW,WAAW,MAAM,MAAM,IAAI;AAC9D,UAAM,SAAoB,CAAC;AAC3B,aAAS,QAAQ,CAAC,YAAY;AAxTlC;AAyTM,YAAM,EAAE,MAAM,OAAO,SAAS,IAAI;AAClC,UAAI,UAAS,iBAAM,UAAN,YAAe,MAAM,YAArB,YAAgC;AAC7C,UAAI,OAAO,WAAW,YAAY;AAChC,iBAAS,OAAO,OAAO,UAAU,OAAO;AAAA,MAC1C;AACA,UAAI,WAAW,MAAM;AACnB,eAAO,KAAKA,SAAQ,MAAM,OAAO,UAAU,UAAU,OAAO,OAAO,CAAC,CAAC;AAAA,MACvE,WAAW,WAAW,OAAO;AAC3B,eAAO,KAAK,GAAG,eAAe,MAAM,CAAC;AAAA,MACvC;AAAA,IACF,CAAC;AACD,WAAO,OAAO,WAAW,WAAW,OAAO,KAAK,EAAE,IAAI;AAAA,EACxD;AAhBO,EAAAA,SAAS;AAAA;AAoBhB,iBAAsB,eAAkB,QAA4B,OAAkC,SAAa;AACjH,UAAM,WAAW,OAAO,WAAW,WAAW,MAAM,MAAM,IAAI;AAC9D,UAAM,YAAY,MAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,YAAY;AA3UxE;AA4UM,YAAM,EAAE,MAAM,OAAO,UAAAG,UAAS,IAAI;AAClC,UAAI,UAAS,iBAAM,UAAN,YAAe,MAAM,YAArB,YAAgC;AAC7C,UAAI,OAAO,WAAW,YAAY;AAChC,iBAAS,MAAM,OAAO,OAAOA,WAAU,OAAO;AAAA,MAChD;AACA,UAAI,WAAW,MAAM;AACnB,eAAO,CAACH,SAAQ,MAAM,OAAO,MAAM,eAAeG,WAAU,OAAO,OAAO,CAAC,CAAC;AAAA,MAC9E,WAAW,WAAW,OAAO;AAC3B,eAAO,eAAe,MAAM;AAAA,MAC9B,OAAO;AACL,eAAO,CAAC;AAAA,MACV;AAAA,IACF,CAAC,CAAC,GAAG,KAAK,CAAC;AACX,WAAO,OAAO,WAAW,WAAW,SAAS,KAAK,EAAE,IAAI;AAAA,EAC1D;AAjBA,EAAAH,SAAsB;AAAA;AAqBtB,WAAS,cAAuC,SAAiB,MAA4B;AAC3F,WAAO,IAAI,SAAgB;AACzB,YAAM,UAAUA,SAAQ,IAAI;AAC5B,WAAK,QAAQ,CAAC,KAAK,UAAU;AAC3B,YAAI,KAAC,4BAAW,KAAK,MAAM,GAAG;AAC5B,kBAAQ,MAAM,OAAO,KAAK;AAAA,QAC5B;AAAA,MACF,CAAC;AACD,UAAI,KAAK,KAAK,SAAS;AACrB,eAAO,OAAO,QAAQ,OAAO,KAAK,KAAK,OAAO;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAbS;AAeT,WAAS,mBAAmB,MAA8D;AACxF,WAAO,CAAC,OAAO,QAAQ,CAAC,MAAM;AAC5B,cAAI,oBAAG,UAAU,KAAK,GAAG;AACvB,gBAAQ,cAAc,MAAM,SAAS,QAAQ;AAAA,MAC/C,eAAW,oBAAG,eAAe,KAAK,GAAG;AACnC,gBAAQ,cAAc,OAAO,KAAK,KAAK,EAAE,SAAS,QAAQ;AAAA,MAC5D;AACA,aAAOA,SAAQ,MAAM,EAAE,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA,IAC/C;AAAA,EACF;AATS;AAWF,EAAMA,SAAA,KAAK,cAAyB,MAAM,IAAI;AAC9C,EAAMA,SAAA,QAAQ,cAAyB,SAAS,IAAI;AACpD,EAAMA,SAAA,QAAQ,cAAyB,SAAS,IAAI;AACpD,EAAMA,SAAA,QAAQ,mBAAmB,OAAO;AACxC,EAAMA,SAAA,QAAQ,mBAAmB,OAAO;AACxC,EAAMA,SAAA,QAAQ,mBAAmB,OAAO;AACxC,EAAMA,SAAA,OAAO,mBAAmB,MAAM;AAAA,GA9RrC;AAiSV,iBAAS;",
6
6
  "names": ["Element", "_", "source", "children"]
7
7
  }
package/lib/index.mjs CHANGED
@@ -180,18 +180,23 @@ var require_src = __commonJS({
180
180
  __name(select, "select");
181
181
  function interpolate(expr, context) {
182
182
  expr = expr.trim();
183
- if (/^\d+$/.test(expr)) {
184
- return context[expr] || "";
185
- } else {
186
- return evaluate(expr, context) || "";
183
+ if (!/^[\w.]+$/.test(expr)) {
184
+ return evaluate(expr, context) ?? "";
187
185
  }
186
+ let value = context;
187
+ for (const part of expr.split(".")) {
188
+ value = value[part];
189
+ if (isNullable(value))
190
+ return "";
191
+ }
192
+ return value ?? "";
188
193
  }
189
194
  Element2.interpolate = interpolate;
190
195
  __name(interpolate, "interpolate");
191
- const tagRegExp = /<(\/?)\s*([^\s>/]*)([^>]*?)\s*(\/?)>/;
196
+ const tagRegExp = /<!--[\s\S]*?-->|<(\/?)\s*([^!\s>/]*)([^>]*?)\s*(\/?)>/;
192
197
  const attrRegExp1 = /([^\s=]+)(?:="([^"]*)"|='([^']*)')?/g;
193
198
  const attrRegExp2 = /([^\s=]+)(?:="([^"]*)"|='([^']*)'|=\{([^}]+)\})?/g;
194
- const interpRegExp = /\{([^}]+)\}/;
199
+ const interpRegExp = /\{([^}]*)\}/;
195
200
  function parse(source, context) {
196
201
  const tokens = [];
197
202
  const attrRegExp = context ? attrRegExp2 : attrRegExp1;
@@ -199,6 +204,9 @@ var require_src = __commonJS({
199
204
  while (tagCap = tagRegExp.exec(source)) {
200
205
  pushText(source.slice(0, tagCap.index));
201
206
  const [_, close, type, attrs, empty] = tagCap;
207
+ source = source.slice(tagCap.index + _.length);
208
+ if (_.startsWith("<!"))
209
+ continue;
202
210
  const token = { source: _, type: type || Element2.Fragment, close, empty, attrs: {} };
203
211
  let attrCap;
204
212
  while (attrCap = attrRegExp.exec(attrs)) {
@@ -206,7 +214,6 @@ var require_src = __commonJS({
206
214
  token.attrs[camelize(key)] = v3 ? interpolate(v3, context) : unescape(v2);
207
215
  }
208
216
  tokens.push(token);
209
- source = source.slice(tagCap.index + _.length);
210
217
  }
211
218
  pushText(source);
212
219
  function pushText(source2) {
package/lib/index.mjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["import { Awaitable, camelize, capitalize, defineProperty, Dict, hyphenate, is, isNullable } from 'cosmokit'\n\nconst kElement = Symbol('element')\n\nfunction isElement(source: any): source is Element {\n return source && typeof source === 'object' && source[kElement]\n}\n\nfunction toElement(content: string | Element) {\n if (typeof content === 'string') {\n if (content) return Element('text', { content })\n } else if (isElement(content)) {\n return content\n } else if (!isNullable(content)) {\n throw new TypeError(`Invalid content: ${content}`)\n }\n}\n\nfunction toElementArray(content: Element.Fragment) {\n if (Array.isArray(content)) {\n return content.map(toElement).filter(x => x)\n } else {\n return [toElement(content)].filter(x => x)\n }\n}\n\ninterface Element {\n [kElement]: true\n type: string\n attrs: Dict<string>\n /** @deprecated use `attrs` instead */\n data: Dict<string>\n children: Element[]\n source?: string\n toString(strip?: boolean): string\n}\n\ninterface ElementConstructor extends Element {}\n\nclass ElementConstructor {\n get data() {\n return this.attrs\n }\n\n toString(strip = false) {\n if (this.type === 'text') return Element.escape(this.attrs.content)\n const inner = this.children.map(child => child.toString(strip)).join('')\n if (strip) return inner\n const attrs = Object.entries(this.attrs).map(([key, value]) => {\n key = hyphenate(key)\n if (value === '') return ` ${key}`\n return ` ${key}=\"${Element.escape(value, true)}\"`\n }).join('')\n if (!this.children.length) return `<${this.type}${attrs}/>`\n return `<${this.type}${attrs}>${inner}</${this.type}>`\n }\n}\n\ndefineProperty(ElementConstructor, 'name', 'Element')\ndefineProperty(ElementConstructor.prototype, kElement, true)\n\nfunction Element(type: string, ...children: Element.Fragment[]): Element\nfunction Element(type: string, attrs: Dict, ...children: Element.Fragment[]): Element\nfunction Element(type: string, ...args: any[]) {\n const el = Object.create(ElementConstructor.prototype)\n let attrs: Dict<string> = {}, children: Element[] = []\n if (args[0] && typeof args[0] === 'object' && !isElement(args[0]) && !Array.isArray(args[0])) {\n for (const [key, value] of Object.entries(args.shift())) {\n if (isNullable(value)) continue\n // https://github.com/reactjs/rfcs/pull/107\n if (key === 'children') {\n children = toElementArray(value as Element.Fragment)\n } else if (value === true) {\n attrs[key] = ''\n } else if (value === false) {\n attrs['no' + capitalize(key)] = ''\n } else if (!isNullable(value)) {\n attrs[key] = '' + value\n }\n }\n }\n for (const child of args) {\n children.push(...toElementArray(child))\n }\n return Object.assign(el, { type, attrs, children })\n}\n\n// eslint-disable-next-line no-new-func\nconst evaluate = new Function('expr', 'context', `\n try {\n with (context) {\n return eval(expr)\n }\n } catch {}\n`) as ((expr: string, context: object) => string)\n\nnamespace Element {\n export const jsx = Element\n export const jsxs = Element\n export const jsxDEV = Element\n export const Fragment = 'template'\n\n export type Fragment = string | Element | (string | Element)[]\n export type Render<T, S> = (attrs: Dict<any>, children: Element[], session: S) => T\n export type Transformer<S> = boolean | Fragment | Render<boolean | Fragment, S>\n export type AsyncTransformer<S> = boolean | Fragment | Render<Awaitable<boolean | Fragment>, S>\n\n export function normalize(source: Fragment) {\n if (typeof source !== 'string') return toElementArray(source)\n return Element.parse(source)\n }\n\n export function escape(source: string, inline = false) {\n const result = source\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n return inline\n ? result.replace(/\"/g, '&quot;')\n : result\n }\n\n export function unescape(source: string) {\n return source\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#(\\d+);/g, (_, code) => code === '38' ? _ : String.fromCharCode(+code))\n .replace(/&#x([0-9a-f]+);/gi, (_, code) => code === '26' ? _ : String.fromCharCode(parseInt(code, 16)))\n .replace(/&(amp|#38|#x26);/g, '&')\n }\n\n export interface FindOptions {\n type?: string\n caret?: boolean\n }\n\n /** @deprecated use `Element.select()` instead */\n export function from(source: string, options: FindOptions = {}): Element {\n const elements = parse(source)\n if (options.caret) {\n if (options.type && elements[0]?.type !== options.type) return\n return elements[0]\n }\n return select(elements, options.type || '*')[0]\n }\n\n type Combinator = ' ' | '>' | '+' | '~'\n\n export interface Selector {\n type: string\n combinator: Combinator\n }\n\n const combRegExp = / *([ >+~]) */g\n\n export function parseSelector(input: string): Selector[][] {\n return input.split(',').map((query) => {\n const selectors: Selector[] = []\n query = query.trim()\n let combCap: RegExpExecArray, combinator: Combinator = ' '\n while ((combCap = combRegExp.exec(query))) {\n selectors.push({ type: query.slice(0, combCap.index), combinator })\n combinator = combCap[1] as Combinator\n query = query.slice(combCap.index + combCap[0].length)\n }\n selectors.push({ type: query, combinator })\n return selectors\n })\n }\n\n export function select(source: string | Element[], query: string | Selector[][]): Element[] {\n if (typeof source === 'string') source = parse(source)\n if (typeof query === 'string') query = parseSelector(query)\n if (!query.length) return\n let adjacent: Selector[][] = []\n const results: Element[] = []\n for (const [index, element] of source.entries()) {\n const inner: Selector[][] = []\n const local = [...query, ...adjacent]\n adjacent = []\n let matched = false\n for (const group of local) {\n const { type, combinator } = group[0]\n if (type === element.type || type === '*') {\n if (group.length === 1) {\n matched = true\n } else if ([' ', '>'].includes(group[1].combinator)) {\n inner.push(group.slice(1))\n } else if (group[1].combinator === '+') {\n adjacent.push(group.slice(1))\n } else {\n query.push(group.slice(1))\n }\n }\n if (combinator === ' ') {\n inner.push(group)\n }\n }\n if (matched) results.push(source[index])\n results.push(...select(element.children, inner))\n }\n return results\n }\n\n export function interpolate(expr: string, context: any) {\n expr = expr.trim()\n if (/^\\d+$/.test(expr)) {\n return context[expr] || ''\n } else {\n return evaluate(expr, context) || ''\n }\n }\n\n const tagRegExp = /<(\\/?)\\s*([^\\s>/]*)([^>]*?)\\s*(\\/?)>/\n const attrRegExp1 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)')?/g\n const attrRegExp2 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)'|=\\{([^}]+)\\})?/g\n const interpRegExp = /\\{([^}]+)\\}/\n\n interface Token {\n type: string\n close: string\n empty: string\n attrs: Dict<string>\n source: string\n }\n\n export function parse(source: string, context?: any) {\n const tokens: (string | Token)[] = []\n const attrRegExp = context ? attrRegExp2 : attrRegExp1\n let tagCap: RegExpExecArray\n while ((tagCap = tagRegExp.exec(source))) {\n pushText(source.slice(0, tagCap.index))\n const [_, close, type, attrs, empty] = tagCap\n const token: Token = { source: _, type: type || Fragment, close, empty, attrs: {} }\n let attrCap: RegExpExecArray\n while ((attrCap = attrRegExp.exec(attrs))) {\n const [_, key, v1 = '', v2 = v1, v3] = attrCap\n token.attrs[camelize(key)] = v3\n ? interpolate(v3, context)\n : unescape(v2)\n }\n tokens.push(token)\n source = source.slice(tagCap.index + _.length)\n }\n\n pushText(source)\n function pushText(source: string) {\n source = source\n .replace(/^\\s*\\n\\s*/, '')\n .replace(/\\s*\\n\\s*$/, '')\n let result = ''\n if (context) {\n let interpCap: RegExpExecArray\n while ((interpCap = interpRegExp.exec(source))) {\n const [_, expr] = interpCap\n result += unescape(source.slice(0, interpCap.index))\n result += interpolate(expr, context)\n source = source.slice(interpCap.index + _.length)\n }\n }\n result += unescape(source)\n if (result) tokens.push(result)\n }\n\n const stack = [Element(Fragment)]\n function rollback(index: number) {\n for (; index > 0; index--) {\n const { children } = stack.shift()\n const { source } = stack[0].children.pop()\n stack[0].children.push(Element('text', { content: source }))\n stack[0].children.push(...children)\n }\n }\n\n for (const token of tokens) {\n if (typeof token === 'string') {\n stack[0].children.push(Element('text', { content: token }))\n } else if (token.close) {\n let index = 0\n while (index < stack.length && stack[index].type !== token.type) index++\n if (index === stack.length) {\n // no matching open tag\n stack[0].children.push(Element('text', { content: token.source }))\n } else {\n rollback(index)\n const element = stack.shift()\n delete element.source\n }\n } else {\n const element = Element(token.type, token.attrs)\n stack[0].children.push(element)\n if (!token.empty) {\n element.source = token.source\n stack.unshift(element)\n }\n }\n }\n rollback(stack.length - 1)\n return stack[0].children\n }\n\n export function transform<S>(source: string, rules: Dict<Transformer<S>>, session?: S): string\n export function transform<S>(source: Element[], rules: Dict<Transformer<S>>, session?: S): Element[]\n export function transform<S>(source: string | Element[], rules: Dict<Transformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const output: Element[] = []\n elements.forEach((element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = result(attrs, children, session)\n }\n if (result === true) {\n output.push(Element(type, attrs, transform(children, rules, session)))\n } else if (result !== false) {\n output.push(...toElementArray(result))\n }\n })\n return typeof source === 'string' ? output.join('') : output\n }\n\n export async function transformAsync<S>(source: string, rules: Dict<AsyncTransformer<S>>, session?: S): Promise<string>\n export async function transformAsync<S>(source: Element[], rules: Dict<AsyncTransformer<S>>, session?: S): Promise<Element[]>\n export async function transformAsync<S>(source: string | Element[], rules: Dict<AsyncTransformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const children = (await Promise.all(elements.map(async (element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = await result(attrs, children, session)\n }\n if (result === true) {\n return [Element(type, attrs, await transformAsync(children, rules, session))]\n } else if (result !== false) {\n return toElementArray(result)\n } else {\n return []\n }\n }))).flat(1)\n return typeof source === 'string' ? children.join('') : children\n }\n\n export type Factory<R extends any[]> = (...args: [...rest: R, attrs?: Dict<any>]) => Element\n\n function createFactory<R extends any[] = any[]>(type: string, ...keys: string[]): Factory<R> {\n return (...args: any[]) => {\n const element = Element(type)\n keys.forEach((key, index) => {\n if (!isNullable(args[index])) {\n element.attrs[key] = args[index]\n }\n })\n if (args[keys.length]) {\n Object.assign(element.attrs, args[keys.length])\n }\n return element\n }\n }\n\n function createAssetFactory(type: string): Factory<[data: string | Buffer | ArrayBuffer]> {\n return (value, attrs = {}) => {\n if (is('Buffer', value)) {\n value = 'base64://' + value.toString('base64')\n } else if (is('ArrayBuffer', value)) {\n value = 'base64://' + Buffer.from(value).toString('base64')\n }\n return Element(type, { ...attrs, url: value })\n }\n }\n\n export const at = createFactory<[id: any]>('at', 'id')\n export const sharp = createFactory<[id: any]>('sharp', 'id')\n export const quote = createFactory<[id: any]>('quote', 'id')\n export const image = createAssetFactory('image')\n export const video = createAssetFactory('video')\n export const audio = createAssetFactory('audio')\n export const file = createAssetFactory('file')\n}\n\nexport = Element\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Awaitable, camelize, capitalize, defineProperty, Dict, hyphenate, is, isNullable } from 'cosmokit'\n\nconst kElement = Symbol('element')\n\nfunction isElement(source: any): source is Element {\n return source && typeof source === 'object' && source[kElement]\n}\n\nfunction toElement(content: string | Element) {\n if (typeof content === 'string') {\n if (content) return Element('text', { content })\n } else if (isElement(content)) {\n return content\n } else if (!isNullable(content)) {\n throw new TypeError(`Invalid content: ${content}`)\n }\n}\n\nfunction toElementArray(content: Element.Fragment) {\n if (Array.isArray(content)) {\n return content.map(toElement).filter(x => x)\n } else {\n return [toElement(content)].filter(x => x)\n }\n}\n\ninterface Element {\n [kElement]: true\n type: string\n attrs: Dict<string>\n /** @deprecated use `attrs` instead */\n data: Dict<string>\n children: Element[]\n source?: string\n toString(strip?: boolean): string\n}\n\ninterface ElementConstructor extends Element {}\n\nclass ElementConstructor {\n get data() {\n return this.attrs\n }\n\n toString(strip = false) {\n if (this.type === 'text') return Element.escape(this.attrs.content)\n const inner = this.children.map(child => child.toString(strip)).join('')\n if (strip) return inner\n const attrs = Object.entries(this.attrs).map(([key, value]) => {\n key = hyphenate(key)\n if (value === '') return ` ${key}`\n return ` ${key}=\"${Element.escape(value, true)}\"`\n }).join('')\n if (!this.children.length) return `<${this.type}${attrs}/>`\n return `<${this.type}${attrs}>${inner}</${this.type}>`\n }\n}\n\ndefineProperty(ElementConstructor, 'name', 'Element')\ndefineProperty(ElementConstructor.prototype, kElement, true)\n\nfunction Element(type: string, ...children: Element.Fragment[]): Element\nfunction Element(type: string, attrs: Dict, ...children: Element.Fragment[]): Element\nfunction Element(type: string, ...args: any[]) {\n const el = Object.create(ElementConstructor.prototype)\n let attrs: Dict<string> = {}, children: Element[] = []\n if (args[0] && typeof args[0] === 'object' && !isElement(args[0]) && !Array.isArray(args[0])) {\n for (const [key, value] of Object.entries(args.shift())) {\n if (isNullable(value)) continue\n // https://github.com/reactjs/rfcs/pull/107\n if (key === 'children') {\n children = toElementArray(value as Element.Fragment)\n } else if (value === true) {\n attrs[key] = ''\n } else if (value === false) {\n attrs['no' + capitalize(key)] = ''\n } else if (!isNullable(value)) {\n attrs[key] = '' + value\n }\n }\n }\n for (const child of args) {\n children.push(...toElementArray(child))\n }\n return Object.assign(el, { type, attrs, children })\n}\n\n// eslint-disable-next-line no-new-func\nconst evaluate = new Function('expr', 'context', `\n try {\n with (context) {\n return eval(expr)\n }\n } catch {}\n`) as ((expr: string, context: object) => string)\n\nnamespace Element {\n export const jsx = Element\n export const jsxs = Element\n export const jsxDEV = Element\n export const Fragment = 'template'\n\n export type Fragment = string | Element | (string | Element)[]\n export type Render<T, S> = (attrs: Dict<any>, children: Element[], session: S) => T\n export type Transformer<S> = boolean | Fragment | Render<boolean | Fragment, S>\n export type AsyncTransformer<S> = boolean | Fragment | Render<Awaitable<boolean | Fragment>, S>\n\n export function normalize(source: Fragment) {\n if (typeof source !== 'string') return toElementArray(source)\n return Element.parse(source)\n }\n\n export function escape(source: string, inline = false) {\n const result = source\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n return inline\n ? result.replace(/\"/g, '&quot;')\n : result\n }\n\n export function unescape(source: string) {\n return source\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#(\\d+);/g, (_, code) => code === '38' ? _ : String.fromCharCode(+code))\n .replace(/&#x([0-9a-f]+);/gi, (_, code) => code === '26' ? _ : String.fromCharCode(parseInt(code, 16)))\n .replace(/&(amp|#38|#x26);/g, '&')\n }\n\n export interface FindOptions {\n type?: string\n caret?: boolean\n }\n\n /** @deprecated use `Element.select()` instead */\n export function from(source: string, options: FindOptions = {}): Element {\n const elements = parse(source)\n if (options.caret) {\n if (options.type && elements[0]?.type !== options.type) return\n return elements[0]\n }\n return select(elements, options.type || '*')[0]\n }\n\n type Combinator = ' ' | '>' | '+' | '~'\n\n export interface Selector {\n type: string\n combinator: Combinator\n }\n\n const combRegExp = / *([ >+~]) */g\n\n export function parseSelector(input: string): Selector[][] {\n return input.split(',').map((query) => {\n const selectors: Selector[] = []\n query = query.trim()\n let combCap: RegExpExecArray, combinator: Combinator = ' '\n while ((combCap = combRegExp.exec(query))) {\n selectors.push({ type: query.slice(0, combCap.index), combinator })\n combinator = combCap[1] as Combinator\n query = query.slice(combCap.index + combCap[0].length)\n }\n selectors.push({ type: query, combinator })\n return selectors\n })\n }\n\n export function select(source: string | Element[], query: string | Selector[][]): Element[] {\n if (typeof source === 'string') source = parse(source)\n if (typeof query === 'string') query = parseSelector(query)\n if (!query.length) return\n let adjacent: Selector[][] = []\n const results: Element[] = []\n for (const [index, element] of source.entries()) {\n const inner: Selector[][] = []\n const local = [...query, ...adjacent]\n adjacent = []\n let matched = false\n for (const group of local) {\n const { type, combinator } = group[0]\n if (type === element.type || type === '*') {\n if (group.length === 1) {\n matched = true\n } else if ([' ', '>'].includes(group[1].combinator)) {\n inner.push(group.slice(1))\n } else if (group[1].combinator === '+') {\n adjacent.push(group.slice(1))\n } else {\n query.push(group.slice(1))\n }\n }\n if (combinator === ' ') {\n inner.push(group)\n }\n }\n if (matched) results.push(source[index])\n results.push(...select(element.children, inner))\n }\n return results\n }\n\n export function interpolate(expr: string, context: any) {\n expr = expr.trim()\n if (!/^[\\w.]+$/.test(expr)) {\n return evaluate(expr, context) ?? ''\n }\n let value = context\n for (const part of expr.split('.')) {\n value = value[part]\n if (isNullable(value)) return ''\n }\n return value ?? ''\n }\n\n const tagRegExp = /<!--[\\s\\S]*?-->|<(\\/?)\\s*([^!\\s>/]*)([^>]*?)\\s*(\\/?)>/\n const attrRegExp1 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)')?/g\n const attrRegExp2 = /([^\\s=]+)(?:=\"([^\"]*)\"|='([^']*)'|=\\{([^}]+)\\})?/g\n const interpRegExp = /\\{([^}]*)\\}/\n\n interface Token {\n type: string\n close: string\n empty: string\n attrs: Dict<string>\n source: string\n }\n\n export function parse(source: string, context?: any) {\n const tokens: (string | Token)[] = []\n const attrRegExp = context ? attrRegExp2 : attrRegExp1\n let tagCap: RegExpExecArray\n while ((tagCap = tagRegExp.exec(source))) {\n pushText(source.slice(0, tagCap.index))\n const [_, close, type, attrs, empty] = tagCap\n source = source.slice(tagCap.index + _.length)\n if (_.startsWith('<!')) continue\n const token: Token = { source: _, type: type || Fragment, close, empty, attrs: {} }\n let attrCap: RegExpExecArray\n while ((attrCap = attrRegExp.exec(attrs))) {\n const [_, key, v1 = '', v2 = v1, v3] = attrCap\n token.attrs[camelize(key)] = v3\n ? interpolate(v3, context)\n : unescape(v2)\n }\n tokens.push(token)\n }\n\n pushText(source)\n function pushText(source: string) {\n source = source\n .replace(/^\\s*\\n\\s*/, '')\n .replace(/\\s*\\n\\s*$/, '')\n let result = ''\n if (context) {\n let interpCap: RegExpExecArray\n while ((interpCap = interpRegExp.exec(source))) {\n const [_, expr] = interpCap\n result += unescape(source.slice(0, interpCap.index))\n result += interpolate(expr, context)\n source = source.slice(interpCap.index + _.length)\n }\n }\n result += unescape(source)\n if (result) tokens.push(result)\n }\n\n const stack = [Element(Fragment)]\n function rollback(index: number) {\n for (; index > 0; index--) {\n const { children } = stack.shift()\n const { source } = stack[0].children.pop()\n stack[0].children.push(Element('text', { content: source }))\n stack[0].children.push(...children)\n }\n }\n\n for (const token of tokens) {\n if (typeof token === 'string') {\n stack[0].children.push(Element('text', { content: token }))\n } else if (token.close) {\n let index = 0\n while (index < stack.length && stack[index].type !== token.type) index++\n if (index === stack.length) {\n // no matching open tag\n stack[0].children.push(Element('text', { content: token.source }))\n } else {\n rollback(index)\n const element = stack.shift()\n delete element.source\n }\n } else {\n const element = Element(token.type, token.attrs)\n stack[0].children.push(element)\n if (!token.empty) {\n element.source = token.source\n stack.unshift(element)\n }\n }\n }\n rollback(stack.length - 1)\n return stack[0].children\n }\n\n export function transform<S>(source: string, rules: Dict<Transformer<S>>, session?: S): string\n export function transform<S>(source: Element[], rules: Dict<Transformer<S>>, session?: S): Element[]\n export function transform<S>(source: string | Element[], rules: Dict<Transformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const output: Element[] = []\n elements.forEach((element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = result(attrs, children, session)\n }\n if (result === true) {\n output.push(Element(type, attrs, transform(children, rules, session)))\n } else if (result !== false) {\n output.push(...toElementArray(result))\n }\n })\n return typeof source === 'string' ? output.join('') : output\n }\n\n export async function transformAsync<S>(source: string, rules: Dict<AsyncTransformer<S>>, session?: S): Promise<string>\n export async function transformAsync<S>(source: Element[], rules: Dict<AsyncTransformer<S>>, session?: S): Promise<Element[]>\n export async function transformAsync<S>(source: string | Element[], rules: Dict<AsyncTransformer<S>>, session?: S) {\n const elements = typeof source === 'string' ? parse(source) : source\n const children = (await Promise.all(elements.map(async (element) => {\n const { type, attrs, children } = element\n let result = rules[type] ?? rules.default ?? true\n if (typeof result === 'function') {\n result = await result(attrs, children, session)\n }\n if (result === true) {\n return [Element(type, attrs, await transformAsync(children, rules, session))]\n } else if (result !== false) {\n return toElementArray(result)\n } else {\n return []\n }\n }))).flat(1)\n return typeof source === 'string' ? children.join('') : children\n }\n\n export type Factory<R extends any[]> = (...args: [...rest: R, attrs?: Dict<any>]) => Element\n\n function createFactory<R extends any[] = any[]>(type: string, ...keys: string[]): Factory<R> {\n return (...args: any[]) => {\n const element = Element(type)\n keys.forEach((key, index) => {\n if (!isNullable(args[index])) {\n element.attrs[key] = args[index]\n }\n })\n if (args[keys.length]) {\n Object.assign(element.attrs, args[keys.length])\n }\n return element\n }\n }\n\n function createAssetFactory(type: string): Factory<[data: string | Buffer | ArrayBuffer]> {\n return (value, attrs = {}) => {\n if (is('Buffer', value)) {\n value = 'base64://' + value.toString('base64')\n } else if (is('ArrayBuffer', value)) {\n value = 'base64://' + Buffer.from(value).toString('base64')\n }\n return Element(type, { ...attrs, url: value })\n }\n }\n\n export const at = createFactory<[id: any]>('at', 'id')\n export const sharp = createFactory<[id: any]>('sharp', 'id')\n export const quote = createFactory<[id: any]>('quote', 'id')\n export const image = createAssetFactory('image')\n export const video = createAssetFactory('video')\n export const audio = createAssetFactory('audio')\n export const file = createAssetFactory('file')\n}\n\nexport = Element\n"],
5
+ "mappings": "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",
6
6
  "names": ["Element", "_", "source", "children"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@satorijs/element",
3
3
  "description": "Element Manipulation",
4
- "version": "2.1.2",
4
+ "version": "2.1.4",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "lib/index.mjs",
7
7
  "typings": "lib/index.d.ts",