@xsynaptic/unified-tools 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -4,8 +4,6 @@ import { Options as Options$1 } from "retext-smartypants";
4
4
 
5
5
  //#region src/html-cjk.d.ts
6
6
  declare function wrapChinese(input: string): string;
7
- declare function wrapJapanese(input: string): string;
8
- declare function wrapKorean(input: string): string;
9
7
  declare function wrapCjk({
10
8
  input,
11
9
  wrapCjkOptions
@@ -13,6 +11,8 @@ declare function wrapCjk({
13
11
  input: string;
14
12
  wrapCjkOptions: Partial<RehypeWrapCjkOptions>;
15
13
  }): string;
14
+ declare function wrapJapanese(input: string): string;
15
+ declare function wrapKorean(input: string): string;
16
16
  //#endregion
17
17
  //#region src/html.d.ts
18
18
  declare function sanitizeHtml(input: string, options?: Options): string;
@@ -21,10 +21,12 @@ declare function stripTags(input: string, options?: Options): string;
21
21
  //#region src/markdown.d.ts
22
22
  interface TransformMarkdownOptions {
23
23
  input: string;
24
+ smartypantsOptions?: Options$1 | undefined;
24
25
  wrapCjkOptions?: Partial<RehypeWrapCjkOptions> | undefined;
25
26
  }
26
27
  declare function transformMarkdown({
27
28
  input,
29
+ smartypantsOptions,
28
30
  wrapCjkOptions
29
31
  }: TransformMarkdownOptions): string;
30
32
  //#endregion
package/dist/index.mjs CHANGED
@@ -39,18 +39,28 @@ const koOptions = {
39
39
  function wrapChinese(input) {
40
40
  return getProcessor$4(zhOptions).processSync(input).toString();
41
41
  }
42
+ function wrapCjk({ input, wrapCjkOptions }) {
43
+ return getProcessor$4(wrapCjkOptions).processSync(input).toString();
44
+ }
42
45
  function wrapJapanese(input) {
43
46
  return getProcessor$4(jaOptions).processSync(input).toString();
44
47
  }
45
48
  function wrapKorean(input) {
46
49
  return getProcessor$4(koOptions).processSync(input).toString();
47
50
  }
48
- function wrapCjk({ input, wrapCjkOptions }) {
49
- return getProcessor$4(wrapCjkOptions).processSync(input).toString();
50
- }
51
51
  //#endregion
52
52
  //#region src/html.ts
53
53
  const processorCache$3 = /* @__PURE__ */ new Map();
54
+ function sanitizeHtml(input, options) {
55
+ const processor = getProcessor$3(options);
56
+ return String(processor.processSync(input));
57
+ }
58
+ function stripTags(input, options) {
59
+ return sanitizeHtml(input, {
60
+ ...options,
61
+ tagNames: []
62
+ });
63
+ }
54
64
  function createProcessor$2(options) {
55
65
  return unified().use(rehypeParse, { fragment: true }).use(rehypeSanitize, options).use(rehypeStringify).freeze();
56
66
  }
@@ -63,46 +73,46 @@ function getProcessor$3(options) {
63
73
  }
64
74
  return processor;
65
75
  }
66
- function sanitizeHtml(input, options) {
67
- const processor = getProcessor$3(options);
68
- return String(processor.processSync(input));
69
- }
70
- function stripTags(input, options) {
71
- return sanitizeHtml(input, {
72
- ...options,
73
- tagNames: []
74
- });
75
- }
76
76
  //#endregion
77
77
  //#region src/markdown.ts
78
+ const defaultSmartypantsOptions = { dashes: "oldschool" };
78
79
  const processorCache$2 = /* @__PURE__ */ new Map();
79
- function createProcessorWithCjk(wrapCjkOptions) {
80
- return unified().use(remarkParse).use(remarkSmartyPants).use(remarkRehype).use(rehypeSanitize).use(rehypeWrapCjk, wrapCjkOptions).use(rehypeStringify).freeze();
81
- }
82
- function createProcessorWithoutCjk() {
83
- return unified().use(remarkParse).use(remarkSmartyPants).use(remarkRehype).use(rehypeSanitize).use(rehypeStringify).freeze();
84
- }
85
- function getProcessor$2(wrapCjkOptions) {
86
- const cacheKey = wrapCjkOptions ? hash(wrapCjkOptions) : "";
80
+ function transformMarkdown({ input, smartypantsOptions, wrapCjkOptions }) {
81
+ return getProcessor$2({
82
+ ...defaultSmartypantsOptions,
83
+ ...smartypantsOptions
84
+ }, wrapCjkOptions).processSync(input).toString().trim();
85
+ }
86
+ function createProcessorWithCjk(smartypantsOptions, wrapCjkOptions) {
87
+ return unified().use(remarkParse).use(remarkSmartyPants, smartypantsOptions).use(remarkRehype).use(rehypeSanitize).use(rehypeWrapCjk, wrapCjkOptions).use(rehypeStringify).freeze();
88
+ }
89
+ function createProcessorWithoutCjk(smartypantsOptions) {
90
+ return unified().use(remarkParse).use(remarkSmartyPants, smartypantsOptions).use(remarkRehype).use(rehypeSanitize).use(rehypeStringify).freeze();
91
+ }
92
+ function getProcessor$2(smartypantsOptions, wrapCjkOptions) {
93
+ const cacheKey = hash({
94
+ smartypantsOptions,
95
+ wrapCjkOptions
96
+ });
87
97
  let processor = processorCache$2.get(cacheKey);
88
98
  if (!processor) {
89
- processor = wrapCjkOptions ? createProcessorWithCjk(wrapCjkOptions) : createProcessorWithoutCjk();
99
+ processor = wrapCjkOptions ? createProcessorWithCjk(smartypantsOptions, wrapCjkOptions) : createProcessorWithoutCjk(smartypantsOptions);
90
100
  processorCache$2.set(cacheKey, processor);
91
101
  }
92
102
  return processor;
93
103
  }
94
- function transformMarkdown({ input, wrapCjkOptions }) {
95
- return getProcessor$2(wrapCjkOptions).processSync(input).toString().trim();
96
- }
97
104
  //#endregion
98
105
  //#region src/mdx.ts
99
106
  const processorCache$1 = /* @__PURE__ */ new Map();
100
- const defaultOptions = { tagNames: [] };
107
+ const defaultOptions$1 = { tagNames: [] };
108
+ function sanitizeMdx(input, options) {
109
+ return String(getProcessor$1(options).processSync(input)).replaceAll(/\s+/g, " ").trim();
110
+ }
101
111
  function createProcessor$1(options) {
102
112
  return unified().use(remarkParse).use(remarkMdx).use(remarkRehype).use(rehypeSanitize, options).use(rehypeStringify).freeze();
103
113
  }
104
114
  function getProcessor$1(options) {
105
- const effectiveOptions = options ?? defaultOptions;
115
+ const effectiveOptions = options ?? defaultOptions$1;
106
116
  const cacheKey = hash(effectiveOptions);
107
117
  let processor = processorCache$1.get(cacheKey);
108
118
  if (!processor) {
@@ -111,17 +121,22 @@ function getProcessor$1(options) {
111
121
  }
112
122
  return processor;
113
123
  }
114
- function sanitizeMdx(input, options) {
115
- return String(getProcessor$1(options).processSync(input)).replaceAll(/\s+/g, " ").trim();
116
- }
117
124
  //#endregion
118
125
  //#region src/text.ts
126
+ const defaultOptions = { dashes: "oldschool" };
119
127
  const processorCache = /* @__PURE__ */ new Map();
128
+ function stylizeText(input, options) {
129
+ const resolvedOptions = {
130
+ ...defaultOptions,
131
+ ...options
132
+ };
133
+ return String(getProcessor(resolvedOptions).processSync(input)).trim();
134
+ }
120
135
  function createProcessor(options) {
121
136
  return retext().use(retextSmartypants, options).freeze();
122
137
  }
123
138
  function getProcessor(options) {
124
- const cacheKey = options ? hash(options) : "";
139
+ const cacheKey = hash(options);
125
140
  let processor = processorCache.get(cacheKey);
126
141
  if (!processor) {
127
142
  processor = createProcessor(options);
@@ -129,9 +144,6 @@ function getProcessor(options) {
129
144
  }
130
145
  return processor;
131
146
  }
132
- function stylizeText(input, options) {
133
- return String(getProcessor(options).processSync(input)).trim();
134
- }
135
147
  //#endregion
136
148
  export { defaultSchema, sanitizeHtml, sanitizeMdx, stripTags, stylizeText, transformMarkdown, wrapChinese, wrapCjk, wrapJapanese, wrapKorean };
137
149
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["processorCache","createProcessor","getProcessor","processorCache","createProcessor","getProcessor","processorCache","getProcessor","processorCache","createProcessor","getProcessor"],"sources":["../src/html-cjk.ts","../src/html.ts","../src/markdown.ts","../src/mdx.ts","../src/text.ts"],"sourcesContent":["import type { RehypeWrapCjkOptions } from '@xsynaptic/rehype-wrap-cjk';\n\nimport { rehypeWrapCjk } from '@xsynaptic/rehype-wrap-cjk';\nimport { hash } from 'ohash';\nimport rehypeParse from 'rehype-parse';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nfunction createProcessor(wrapCjkOptions: Partial<RehypeWrapCjkOptions>) {\n\treturn unified()\n\t\t.use(rehypeParse, { fragment: true })\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeWrapCjk, wrapCjkOptions)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(wrapCjkOptions: Partial<RehypeWrapCjkOptions>) {\n\tconst cacheKey = hash(wrapCjkOptions);\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(wrapCjkOptions);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n\n// Pre-defined options for common language codes\nconst zhOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'zh',\n};\nconst jaOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'ja',\n};\nconst koOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'ko',\n};\n\nexport function wrapChinese(input: string): string {\n\treturn getProcessor(zhOptions).processSync(input).toString();\n}\n\nexport function wrapJapanese(input: string): string {\n\treturn getProcessor(jaOptions).processSync(input).toString();\n}\n\nexport function wrapKorean(input: string): string {\n\treturn getProcessor(koOptions).processSync(input).toString();\n}\n\n// wrapCjkOptions is required so a no-op call cannot be written; pass `{}` for the default `cjk` preset\nexport function wrapCjk({\n\tinput,\n\twrapCjkOptions,\n}: {\n\tinput: string;\n\twrapCjkOptions: Partial<RehypeWrapCjkOptions>;\n}): string {\n\treturn getProcessor(wrapCjkOptions).processSync(input).toString();\n}\n","import type { Options as RehypeSanitizeOptions } from 'rehype-sanitize';\n\nimport { hash } from 'ohash';\nimport rehypeParse from 'rehype-parse';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nfunction createProcessor(options?: RehypeSanitizeOptions) {\n\treturn unified()\n\t\t.use(rehypeParse, { fragment: true })\n\t\t.use(rehypeSanitize, options)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(options?: RehypeSanitizeOptions) {\n\tconst cacheKey = options ? hash(options) : '';\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(options);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n\nexport function sanitizeHtml(input: string, options?: RehypeSanitizeOptions): string {\n\tconst processor = getProcessor(options);\n\n\treturn String(processor.processSync(input));\n}\n\n// Handy shortcut for when you just want to strip tags from text\nexport function stripTags(input: string, options?: RehypeSanitizeOptions): string {\n\treturn sanitizeHtml(input, { ...options, tagNames: [] });\n}\n","import type { RehypeWrapCjkOptions } from '@xsynaptic/rehype-wrap-cjk';\n\nimport { rehypeWrapCjk } from '@xsynaptic/rehype-wrap-cjk';\nimport { hash } from 'ohash';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport remarkSmartyPants from 'remark-smartypants';\nimport { unified } from 'unified';\n\ninterface TransformMarkdownOptions {\n\tinput: string;\n\twrapCjkOptions?: Partial<RehypeWrapCjkOptions> | undefined;\n}\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nfunction createProcessorWithCjk(wrapCjkOptions: Partial<RehypeWrapCjkOptions>) {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkSmartyPants)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeWrapCjk, wrapCjkOptions)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\n// Processor without CJK wrapping\nfunction createProcessorWithoutCjk() {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkSmartyPants)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(wrapCjkOptions?: Partial<RehypeWrapCjkOptions>) {\n\t// Generate stable cache key from options (empty string for no options)\n\tconst cacheKey = wrapCjkOptions ? hash(wrapCjkOptions) : '';\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = wrapCjkOptions\n\t\t\t? createProcessorWithCjk(wrapCjkOptions)\n\t\t\t: createProcessorWithoutCjk();\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessorWithoutCjk>;\n}\n\nexport function transformMarkdown({ input, wrapCjkOptions }: TransformMarkdownOptions): string {\n\treturn getProcessor(wrapCjkOptions).processSync(input).toString().trim();\n}\n","import type { Options as RehypeSanitizeOptions } from 'rehype-sanitize';\n\nimport { hash } from 'ohash';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkMdx from 'remark-mdx';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\n// Default options for stripping all tags\nconst defaultOptions: RehypeSanitizeOptions = { tagNames: [] };\n\nfunction createProcessor(options: RehypeSanitizeOptions) {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkMdx)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize, options)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(options?: RehypeSanitizeOptions) {\n\tconst effectiveOptions = options ?? defaultOptions;\n\tconst cacheKey = hash(effectiveOptions);\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(effectiveOptions);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n\nexport function sanitizeMdx(input: string, options?: RehypeSanitizeOptions): string {\n\treturn String(getProcessor(options).processSync(input))\n\t\t.replaceAll(/\\s+/g, ' ') // Normalize whitespace\n\t\t.trim();\n}\n","import type { Options as RetextSmartypantsOptions } from 'retext-smartypants';\n\nimport { hash } from 'ohash';\nimport { retext } from 'retext';\nimport retextSmartypants from 'retext-smartypants';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nfunction createProcessor(options?: RetextSmartypantsOptions) {\n\treturn retext().use(retextSmartypants, options).freeze();\n}\n\nfunction getProcessor(options?: RetextSmartypantsOptions) {\n\tconst cacheKey = options ? hash(options) : '';\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(options);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n\nexport function stylizeText(input: string, options?: RetextSmartypantsOptions): string {\n\treturn String(getProcessor(options).processSync(input)).trim();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["processorCache","createProcessor","getProcessor","processorCache","getProcessor","createProcessor","processorCache","getProcessor","processorCache","defaultOptions","getProcessor","createProcessor"],"sources":["../src/html-cjk.ts","../src/html.ts","../src/markdown.ts","../src/mdx.ts","../src/text.ts"],"sourcesContent":["import type { RehypeWrapCjkOptions } from '@xsynaptic/rehype-wrap-cjk';\n\nimport { rehypeWrapCjk } from '@xsynaptic/rehype-wrap-cjk';\nimport { hash } from 'ohash';\nimport rehypeParse from 'rehype-parse';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nfunction createProcessor(wrapCjkOptions: Partial<RehypeWrapCjkOptions>) {\n\treturn unified()\n\t\t.use(rehypeParse, { fragment: true })\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeWrapCjk, wrapCjkOptions)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(wrapCjkOptions: Partial<RehypeWrapCjkOptions>) {\n\tconst cacheKey = hash(wrapCjkOptions);\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(wrapCjkOptions);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n\n// Pre-defined options for common language codes\nconst zhOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'zh',\n};\nconst jaOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'ja',\n};\nconst koOptions: Partial<RehypeWrapCjkOptions> = {\n\tattribute: 'lang',\n\tvalue: 'ko',\n};\n\nexport function wrapChinese(input: string): string {\n\treturn getProcessor(zhOptions).processSync(input).toString();\n}\n\n// wrapCjkOptions is required so a no-op call cannot be written; pass `{}` for the default `cjk` preset\nexport function wrapCjk({\n\tinput,\n\twrapCjkOptions,\n}: {\n\tinput: string;\n\twrapCjkOptions: Partial<RehypeWrapCjkOptions>;\n}): string {\n\treturn getProcessor(wrapCjkOptions).processSync(input).toString();\n}\n\nexport function wrapJapanese(input: string): string {\n\treturn getProcessor(jaOptions).processSync(input).toString();\n}\n\nexport function wrapKorean(input: string): string {\n\treturn getProcessor(koOptions).processSync(input).toString();\n}\n","import type { Options as RehypeSanitizeOptions } from 'rehype-sanitize';\n\nimport { hash } from 'ohash';\nimport rehypeParse from 'rehype-parse';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nexport function sanitizeHtml(input: string, options?: RehypeSanitizeOptions): string {\n\tconst processor = getProcessor(options);\n\n\treturn String(processor.processSync(input));\n}\n\n// Handy shortcut for when you just want to strip tags from text\nexport function stripTags(input: string, options?: RehypeSanitizeOptions): string {\n\treturn sanitizeHtml(input, { ...options, tagNames: [] });\n}\n\nfunction createProcessor(options?: RehypeSanitizeOptions) {\n\treturn unified()\n\t\t.use(rehypeParse, { fragment: true })\n\t\t.use(rehypeSanitize, options)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(options?: RehypeSanitizeOptions) {\n\tconst cacheKey = options ? hash(options) : '';\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(options);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n","import type { RehypeWrapCjkOptions } from '@xsynaptic/rehype-wrap-cjk';\nimport type { Options as SmartypantsOptions } from 'retext-smartypants';\n\nimport { rehypeWrapCjk } from '@xsynaptic/rehype-wrap-cjk';\nimport { hash } from 'ohash';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport remarkSmartyPants from 'remark-smartypants';\nimport { unified } from 'unified';\n\ninterface TransformMarkdownOptions {\n\tinput: string;\n\tsmartypantsOptions?: SmartypantsOptions | undefined;\n\twrapCjkOptions?: Partial<RehypeWrapCjkOptions> | undefined;\n}\n\nconst defaultSmartypantsOptions: SmartypantsOptions = { dashes: 'oldschool' };\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nexport function transformMarkdown({\n\tinput,\n\tsmartypantsOptions,\n\twrapCjkOptions,\n}: TransformMarkdownOptions): string {\n\tconst resolvedSmartypantsOptions = { ...defaultSmartypantsOptions, ...smartypantsOptions };\n\n\treturn getProcessor(resolvedSmartypantsOptions, wrapCjkOptions)\n\t\t.processSync(input)\n\t\t.toString()\n\t\t.trim();\n}\n\nfunction createProcessorWithCjk(\n\tsmartypantsOptions: SmartypantsOptions,\n\twrapCjkOptions: Partial<RehypeWrapCjkOptions>,\n) {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkSmartyPants, smartypantsOptions)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeWrapCjk, wrapCjkOptions)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\n// Processor without CJK wrapping\nfunction createProcessorWithoutCjk(smartypantsOptions: SmartypantsOptions) {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkSmartyPants, smartypantsOptions)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(\n\tsmartypantsOptions: SmartypantsOptions,\n\twrapCjkOptions?: Partial<RehypeWrapCjkOptions>,\n) {\n\tconst cacheKey = hash({ smartypantsOptions, wrapCjkOptions });\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = wrapCjkOptions\n\t\t\t? createProcessorWithCjk(smartypantsOptions, wrapCjkOptions)\n\t\t\t: createProcessorWithoutCjk(smartypantsOptions);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessorWithoutCjk>;\n}\n","import type { Options as RehypeSanitizeOptions } from 'rehype-sanitize';\n\nimport { hash } from 'ohash';\nimport rehypeSanitize from 'rehype-sanitize';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkMdx from 'remark-mdx';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { unified } from 'unified';\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\n// Default options for stripping all tags\nconst defaultOptions: RehypeSanitizeOptions = { tagNames: [] };\n\nexport function sanitizeMdx(input: string, options?: RehypeSanitizeOptions): string {\n\treturn String(getProcessor(options).processSync(input))\n\t\t.replaceAll(/\\s+/g, ' ') // Normalize whitespace\n\t\t.trim();\n}\n\nfunction createProcessor(options: RehypeSanitizeOptions) {\n\treturn unified()\n\t\t.use(remarkParse)\n\t\t.use(remarkMdx)\n\t\t.use(remarkRehype)\n\t\t.use(rehypeSanitize, options)\n\t\t.use(rehypeStringify)\n\t\t.freeze();\n}\n\nfunction getProcessor(options?: RehypeSanitizeOptions) {\n\tconst effectiveOptions = options ?? defaultOptions;\n\tconst cacheKey = hash(effectiveOptions);\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(effectiveOptions);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n","import type { Options as RetextSmartypantsOptions } from 'retext-smartypants';\n\nimport { hash } from 'ohash';\nimport { retext } from 'retext';\nimport retextSmartypants from 'retext-smartypants';\n\nconst defaultOptions: RetextSmartypantsOptions = { dashes: 'oldschool' };\n\n// Cache frozen processors by options hash\nconst processorCache = new Map<string, unknown>();\n\nexport function stylizeText(input: string, options?: RetextSmartypantsOptions): string {\n\tconst resolvedOptions = { ...defaultOptions, ...options };\n\n\treturn String(getProcessor(resolvedOptions).processSync(input)).trim();\n}\n\nfunction createProcessor(options: RetextSmartypantsOptions) {\n\treturn retext().use(retextSmartypants, options).freeze();\n}\n\nfunction getProcessor(options: RetextSmartypantsOptions) {\n\tconst cacheKey = hash(options);\n\n\tlet processor = processorCache.get(cacheKey);\n\n\tif (!processor) {\n\t\tprocessor = createProcessor(options);\n\t\tprocessorCache.set(cacheKey, processor);\n\t}\n\n\treturn processor as ReturnType<typeof createProcessor>;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsynaptic/unified-tools",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "A common set of tools for transforming and manipulating markup and text",
5
5
  "type": "module",
6
6
  "license": "MIT",