@xsynaptic/unified-tools 5.0.0 → 5.1.1
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 +4 -2
- package/dist/index.mjs +46 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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
|
|
80
|
-
return
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
function
|
|
86
|
-
|
|
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 =
|
|
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
|
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;AAUA,MAAMA,mCAAiB,IAAI,IAAqB;AAEhD,SAASC,kBAAgB,gBAA+C;CACvE,OAAO,QAAQ,CAAC,CACd,IAAI,aAAa,EAAE,UAAU,KAAK,CAAC,CAAC,CACpC,IAAI,cAAc,CAAC,CACnB,IAAI,eAAe,cAAc,CAAC,CAClC,IAAI,eAAe,CAAC,CACpB,OAAO;AACV;AAEA,SAASC,eAAa,gBAA+C;CACpE,MAAM,WAAW,KAAK,cAAc;CAEpC,IAAI,YAAYF,iBAAe,IAAI,QAAQ;CAE3C,IAAI,CAAC,WAAW;EACf,YAAYC,kBAAgB,cAAc;EAC1C,iBAAe,IAAI,UAAU,SAAS;CACvC;CAEA,OAAO;AACR;AAGA,MAAM,YAA2C;CAChD,WAAW;CACX,OAAO;AACR;AACA,MAAM,YAA2C;CAChD,WAAW;CACX,OAAO;AACR;AACA,MAAM,YAA2C;CAChD,WAAW;CACX,OAAO;AACR;AAEA,SAAgB,YAAY,OAAuB;CAClD,OAAOC,eAAa,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS;AAC5D;AAEA,SAAgB,aAAa,OAAuB;CACnD,OAAOA,eAAa,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS;AAC5D;AAEA,SAAgB,WAAW,OAAuB;CACjD,OAAOA,eAAa,SAAS,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS;AAC5D;AAGA,SAAgB,QAAQ,EACvB,OACA,kBAIU;CACV,OAAOA,eAAa,cAAc,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS;AACjE;;;AC5DA,MAAMC,mCAAiB,IAAI,IAAqB;AAEhD,SAASC,kBAAgB,SAAiC;CACzD,OAAO,QAAQ,CAAC,CACd,IAAI,aAAa,EAAE,UAAU,KAAK,CAAC,CAAC,CACpC,IAAI,gBAAgB,OAAO,CAAC,CAC5B,IAAI,eAAe,CAAC,CACpB,OAAO;AACV;AAEA,SAASC,eAAa,SAAiC;CACtD,MAAM,WAAW,UAAU,KAAK,OAAO,IAAI;CAE3C,IAAI,YAAYF,iBAAe,IAAI,QAAQ;CAE3C,IAAI,CAAC,WAAW;EACf,YAAYC,kBAAgB,OAAO;EACnC,iBAAe,IAAI,UAAU,SAAS;CACvC;CAEA,OAAO;AACR;AAEA,SAAgB,aAAa,OAAe,SAAyC;CACpF,MAAM,YAAYC,eAAa,OAAO;CAEtC,OAAO,OAAO,UAAU,YAAY,KAAK,CAAC;AAC3C;AAGA,SAAgB,UAAU,OAAe,SAAyC;CACjF,OAAO,aAAa,OAAO;EAAE,GAAG;EAAS,UAAU,CAAC;CAAE,CAAC;AACxD;;;ACxBA,MAAMC,mCAAiB,IAAI,IAAqB;AAEhD,SAAS,uBAAuB,gBAA+C;CAC9E,OAAO,QAAQ,CAAC,CACd,IAAI,WAAW,CAAC,CAChB,IAAI,iBAAiB,CAAC,CACtB,IAAI,YAAY,CAAC,CACjB,IAAI,cAAc,CAAC,CACnB,IAAI,eAAe,cAAc,CAAC,CAClC,IAAI,eAAe,CAAC,CACpB,OAAO;AACV;AAGA,SAAS,4BAA4B;CACpC,OAAO,QAAQ,CAAC,CACd,IAAI,WAAW,CAAC,CAChB,IAAI,iBAAiB,CAAC,CACtB,IAAI,YAAY,CAAC,CACjB,IAAI,cAAc,CAAC,CACnB,IAAI,eAAe,CAAC,CACpB,OAAO;AACV;AAEA,SAASC,eAAa,gBAAgD;CAErE,MAAM,WAAW,iBAAiB,KAAK,cAAc,IAAI;CAEzD,IAAI,YAAYD,iBAAe,IAAI,QAAQ;CAE3C,IAAI,CAAC,WAAW;EACf,YAAY,iBACT,uBAAuB,cAAc,IACrC,0BAA0B;EAC7B,iBAAe,IAAI,UAAU,SAAS;CACvC;CAEA,OAAO;AACR;AAEA,SAAgB,kBAAkB,EAAE,OAAO,kBAAoD;CAC9F,OAAOC,eAAa,cAAc,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK;AACxE;;;AChDA,MAAMC,mCAAiB,IAAI,IAAqB;AAGhD,MAAM,iBAAwC,EAAE,UAAU,CAAC,EAAE;AAE7D,SAASC,kBAAgB,SAAgC;CACxD,OAAO,QAAQ,CAAC,CACd,IAAI,WAAW,CAAC,CAChB,IAAI,SAAS,CAAC,CACd,IAAI,YAAY,CAAC,CACjB,IAAI,gBAAgB,OAAO,CAAC,CAC5B,IAAI,eAAe,CAAC,CACpB,OAAO;AACV;AAEA,SAASC,eAAa,SAAiC;CACtD,MAAM,mBAAmB,WAAW;CACpC,MAAM,WAAW,KAAK,gBAAgB;CAEtC,IAAI,YAAYF,iBAAe,IAAI,QAAQ;CAE3C,IAAI,CAAC,WAAW;EACf,YAAYC,kBAAgB,gBAAgB;EAC5C,iBAAe,IAAI,UAAU,SAAS;CACvC;CAEA,OAAO;AACR;AAEA,SAAgB,YAAY,OAAe,SAAyC;CACnF,OAAO,OAAOC,eAAa,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CACrD,WAAW,QAAQ,GAAG,CAAC,CACvB,KAAK;AACR;;;ACrCA,MAAM,iCAAiB,IAAI,IAAqB;AAEhD,SAAS,gBAAgB,SAAoC;CAC5D,OAAO,OAAO,CAAC,CAAC,IAAI,mBAAmB,OAAO,CAAC,CAAC,OAAO;AACxD;AAEA,SAAS,aAAa,SAAoC;CACzD,MAAM,WAAW,UAAU,KAAK,OAAO,IAAI;CAE3C,IAAI,YAAY,eAAe,IAAI,QAAQ;CAE3C,IAAI,CAAC,WAAW;EACf,YAAY,gBAAgB,OAAO;EACnC,eAAe,IAAI,UAAU,SAAS;CACvC;CAEA,OAAO;AACR;AAEA,SAAgB,YAAY,OAAe,SAA4C;CACtF,OAAO,OAAO,aAAa,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK;AAC9D"}
|
|
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.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "A common set of tools for transforming and manipulating markup and text",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"retext": "^9.0.0",
|
|
46
46
|
"retext-smartypants": "^6.2.0",
|
|
47
47
|
"unified": "^11.0.5",
|
|
48
|
-
"@xsynaptic/rehype-wrap-cjk": "3.0.
|
|
48
|
+
"@xsynaptic/rehype-wrap-cjk": "3.0.1"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "tsdown",
|