UNPKG

1.59 kBJavaScriptView Raw
1// src/shim/server/index.ts
2import htmlparser2Tokenizer from "htmlparser2/lib/Tokenizer";
3import {tw as defaultTW} from "twind";
4export * from "twind";
5export * from "twind/sheets";
6var Tokenizer = htmlparser2Tokenizer.default || htmlparser2Tokenizer;
7var noop = () => void 0;
8var shim = (markup, options = {}) => {
9 const {tw = defaultTW} = typeof options == "function" ? {tw: options} : options;
10 let lastAttribName = "";
11 let lastChunkStart = 0;
12 const chunks = [];
13 const tokenizer = new Tokenizer({
14 decodeEntities: false,
15 xmlMode: false
16 }, {
17 onattribend: noop,
18 onattribdata: (value) => {
19 if (lastAttribName == "class") {
20 const currentIndex = tokenizer.getAbsoluteIndex();
21 const startIndex = currentIndex - value.length;
22 const parsedClassNames = tw(value);
23 if (parsedClassNames !== value) {
24 chunks.push(markup.slice(lastChunkStart, startIndex));
25 chunks.push(parsedClassNames);
26 lastChunkStart = currentIndex;
27 }
28 }
29 lastAttribName = "";
30 },
31 onattribname: (name) => {
32 lastAttribName = name;
33 },
34 oncdata: noop,
35 onclosetag: noop,
36 oncomment: noop,
37 ondeclaration: noop,
38 onend: noop,
39 onerror: noop,
40 onopentagend: noop,
41 onopentagname: noop,
42 onprocessinginstruction: noop,
43 onselfclosingtag: noop,
44 ontext: noop
45 });
46 tokenizer.end(markup);
47 if (!chunks.length) {
48 return markup;
49 }
50 return chunks.join("") + markup.slice(lastChunkStart || 0, markup.length);
51};
52export {
53 shim
54};
55//# sourceMappingURL=server.esnext.js.map