@maizzle/framework 6.0.0-rc.9 → 6.0.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/README.md +3 -3
- package/bin/maizzle.mjs +1 -1
- package/dist/build.d.ts +38 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +234 -0
- package/dist/build.js.map +1 -0
- package/dist/components/Body.vue +32 -3
- package/dist/components/Button.vue +91 -62
- package/dist/components/CodeBlock.vue +6 -4
- package/dist/components/CodeInline.vue +77 -6
- package/dist/components/Column.vue +67 -31
- package/dist/components/Container.vue +73 -12
- package/dist/components/Font.vue +96 -0
- package/dist/components/Head.vue +1 -1
- package/dist/components/Heading.vue +1 -1
- package/dist/components/Hr.vue +33 -0
- package/dist/components/Html.vue +36 -3
- package/dist/components/Img.vue +332 -0
- package/dist/components/Layout.vue +73 -21
- package/dist/components/Link.vue +1 -1
- package/dist/components/Markdown.vue +51 -24
- package/dist/components/MarkdownLayout.vue +39 -0
- package/dist/components/NotPlaintext.vue +14 -0
- package/dist/components/Outlook.vue +38 -11
- package/dist/components/OutlookBg.vue +241 -0
- package/dist/components/Plaintext.vue +14 -0
- package/dist/components/Preheader.vue +35 -10
- package/dist/components/QrCode.vue +157 -0
- package/dist/components/Raw.vue +28 -0
- package/dist/components/Row.vue +115 -22
- package/dist/components/Section.vue +65 -26
- package/dist/components/Spacer.vue +35 -29
- package/dist/components/Tailwind.vue +45 -0
- package/dist/components/Text.vue +3 -3
- package/dist/components/Vml.vue +207 -94
- package/dist/components/utils.d.ts +53 -0
- package/dist/components/utils.d.ts.map +1 -0
- package/dist/components/utils.js +80 -0
- package/dist/components/utils.js.map +1 -0
- package/dist/components/utils.ts +102 -0
- package/dist/composables/defineConfig.d.ts +13 -0
- package/dist/composables/defineConfig.d.ts.map +1 -0
- package/dist/composables/{defineConfig.mjs → defineConfig.js} +7 -9
- package/dist/composables/defineConfig.js.map +1 -0
- package/dist/composables/renderContext.d.ts +37 -0
- package/dist/composables/renderContext.d.ts.map +1 -0
- package/dist/composables/renderContext.js +6 -0
- package/dist/composables/renderContext.js.map +1 -0
- package/dist/composables/useBaseUrl.d.ts +19 -0
- package/dist/composables/useBaseUrl.d.ts.map +1 -0
- package/dist/composables/useBaseUrl.js +26 -0
- package/dist/composables/useBaseUrl.js.map +1 -0
- package/dist/composables/useConfig.d.ts +16 -0
- package/dist/composables/useConfig.d.ts.map +1 -0
- package/dist/composables/useConfig.js +19 -0
- package/dist/composables/useConfig.js.map +1 -0
- package/dist/composables/useCurrentTemplate.d.ts +31 -0
- package/dist/composables/useCurrentTemplate.d.ts.map +1 -0
- package/dist/composables/useCurrentTemplate.js +42 -0
- package/dist/composables/useCurrentTemplate.js.map +1 -0
- package/dist/composables/{useDoctype.d.mts → useDoctype.d.ts} +1 -1
- package/dist/composables/useDoctype.d.ts.map +1 -0
- package/dist/composables/{useDoctype.mjs → useDoctype.js} +3 -4
- package/dist/composables/useDoctype.js.map +1 -0
- package/dist/composables/{useEvent.d.mts → useEvent.d.ts} +3 -3
- package/dist/composables/useEvent.d.ts.map +1 -0
- package/dist/composables/{useEvent.mjs → useEvent.js} +4 -5
- package/dist/composables/useEvent.js.map +1 -0
- package/dist/composables/useFont.d.ts +50 -0
- package/dist/composables/useFont.d.ts.map +1 -0
- package/dist/composables/useFont.js +92 -0
- package/dist/composables/useFont.js.map +1 -0
- package/dist/composables/useOutlookFallback.d.ts +21 -0
- package/dist/composables/useOutlookFallback.d.ts.map +1 -0
- package/dist/composables/useOutlookFallback.js +29 -0
- package/dist/composables/useOutlookFallback.js.map +1 -0
- package/dist/composables/useOutputPath.d.ts +17 -0
- package/dist/composables/useOutputPath.d.ts.map +1 -0
- package/dist/composables/useOutputPath.js +23 -0
- package/dist/composables/useOutputPath.js.map +1 -0
- package/dist/composables/{usePlaintext.d.mts → usePlaintext.d.ts} +3 -1
- package/dist/composables/usePlaintext.d.ts.map +1 -0
- package/dist/composables/{usePlaintext.mjs → usePlaintext.js} +4 -4
- package/dist/composables/usePlaintext.js.map +1 -0
- package/dist/composables/usePreheader.d.ts +25 -0
- package/dist/composables/usePreheader.d.ts.map +1 -0
- package/dist/composables/usePreheader.js +28 -0
- package/dist/composables/usePreheader.js.map +1 -0
- package/dist/composables/useTransformers.d.ts +34 -0
- package/dist/composables/useTransformers.d.ts.map +1 -0
- package/dist/composables/useTransformers.js +48 -0
- package/dist/composables/useTransformers.js.map +1 -0
- package/dist/composables/useUrlQuery.d.ts +19 -0
- package/dist/composables/useUrlQuery.d.ts.map +1 -0
- package/dist/composables/useUrlQuery.js +26 -0
- package/dist/composables/useUrlQuery.js.map +1 -0
- package/dist/config/{defaults.d.mts → defaults.d.ts} +2 -2
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/{defaults.mjs → defaults.js} +10 -6
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +33 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +136 -0
- package/dist/config/index.js.map +1 -0
- package/dist/events/{index.d.mts → index.d.ts} +35 -12
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/{index.mjs → index.js} +31 -13
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +40 -0
- package/dist/{plaintext.d.mts → plaintext.d.ts} +1 -1
- package/dist/plaintext.d.ts.map +1 -0
- package/dist/{plaintext.mjs → plaintext.js} +4 -5
- package/dist/plaintext.js.map +1 -0
- package/dist/{plugin.d.mts → plugin.d.ts} +2 -2
- package/dist/plugin.d.ts.map +1 -0
- package/dist/{plugin.mjs → plugin.js} +8 -9
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.d.mts → mergeMediaQueries.d.ts} +2 -2
- package/dist/plugins/postcss/mergeMediaQueries.d.ts.map +1 -0
- package/dist/plugins/postcss/{mergeMediaQueries.mjs → mergeMediaQueries.js} +2 -3
- package/dist/plugins/postcss/mergeMediaQueries.js.map +1 -0
- package/dist/plugins/postcss/{pruneVars.d.mts → pruneVars.d.ts} +1 -1
- package/dist/plugins/postcss/pruneVars.d.ts.map +1 -0
- package/dist/plugins/postcss/{pruneVars.mjs → pruneVars.js} +2 -2
- package/dist/plugins/postcss/pruneVars.js.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts +13 -0
- package/dist/plugins/postcss/quoteFontFamilies.d.ts.map +1 -0
- package/dist/plugins/postcss/quoteFontFamilies.js +84 -0
- package/dist/plugins/postcss/quoteFontFamilies.js.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.d.mts → removeDeclarations.d.ts} +1 -1
- package/dist/plugins/postcss/removeDeclarations.d.ts.map +1 -0
- package/dist/plugins/postcss/{removeDeclarations.mjs → removeDeclarations.js} +2 -2
- package/dist/plugins/postcss/removeDeclarations.js.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts +16 -0
- package/dist/plugins/postcss/resolveMaizzleImports.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js +39 -0
- package/dist/plugins/postcss/resolveMaizzleImports.js.map +1 -0
- package/dist/plugins/postcss/resolveProps.d.ts +8 -0
- package/dist/plugins/postcss/resolveProps.d.ts.map +1 -0
- package/dist/plugins/postcss/resolveProps.js +155 -0
- package/dist/plugins/postcss/resolveProps.js.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.d.mts → tailwindCleanup.d.ts} +2 -2
- package/dist/plugins/postcss/tailwindCleanup.d.ts.map +1 -0
- package/dist/plugins/postcss/{tailwindCleanup.mjs → tailwindCleanup.js} +5 -3
- package/dist/plugins/postcss/tailwindCleanup.js.map +1 -0
- package/dist/prepare.d.ts +17 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +44 -0
- package/dist/prepare.js.map +1 -0
- package/dist/render/active.d.ts +8 -0
- package/dist/render/active.d.ts.map +1 -0
- package/dist/render/active.js +12 -0
- package/dist/render/active.js.map +1 -0
- package/dist/render/buildTemplate.d.ts +49 -0
- package/dist/render/buildTemplate.d.ts.map +1 -0
- package/dist/render/buildTemplate.js +141 -0
- package/dist/render/buildTemplate.js.map +1 -0
- package/dist/render/{createRenderer.d.mts → createRenderer.d.ts} +14 -6
- package/dist/render/createRenderer.d.ts.map +1 -0
- package/dist/render/createRenderer.js +468 -0
- package/dist/render/createRenderer.js.map +1 -0
- package/dist/render/index.d.ts +18 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +59 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/injectFonts.d.ts +15 -0
- package/dist/render/injectFonts.d.ts.map +1 -0
- package/dist/render/injectFonts.js +45 -0
- package/dist/render/injectFonts.js.map +1 -0
- package/dist/render/parallel/buildWorker.d.ts +31 -0
- package/dist/render/parallel/buildWorker.d.ts.map +1 -0
- package/dist/render/parallel/buildWorker.js +66 -0
- package/dist/render/parallel/buildWorker.js.map +1 -0
- package/dist/render/parallel/worker.mjs +28 -0
- package/dist/render/plugins/codeBlockExtract.d.ts +14 -0
- package/dist/render/plugins/codeBlockExtract.d.ts.map +1 -0
- package/dist/render/plugins/codeBlockExtract.js +38 -0
- package/dist/render/plugins/codeBlockExtract.js.map +1 -0
- package/dist/render/plugins/markdownExtract.d.ts +12 -0
- package/dist/render/plugins/markdownExtract.d.ts.map +1 -0
- package/dist/render/plugins/markdownExtract.js +49 -0
- package/dist/render/plugins/markdownExtract.js.map +1 -0
- package/dist/render/plugins/rawExtract.d.ts +14 -0
- package/dist/render/plugins/rawExtract.d.ts.map +1 -0
- package/dist/render/plugins/rawExtract.js +34 -0
- package/dist/render/plugins/rawExtract.js.map +1 -0
- package/dist/render/plugins/rowSourceLocation.d.ts +18 -0
- package/dist/render/plugins/rowSourceLocation.d.ts.map +1 -0
- package/dist/render/plugins/rowSourceLocation.js +45 -0
- package/dist/render/plugins/rowSourceLocation.js.map +1 -0
- package/dist/{serve.d.mts → serve.d.ts} +5 -3
- package/dist/serve.d.ts.map +1 -0
- package/dist/{serve.mjs → serve.js} +248 -119
- package/dist/serve.js.map +1 -0
- package/dist/server/compatibility.d.ts +59 -0
- package/dist/server/compatibility.d.ts.map +1 -0
- package/dist/server/compatibility.js +959 -0
- package/dist/server/compatibility.js.map +1 -0
- package/dist/server/{email.d.mts → email.d.ts} +2 -2
- package/dist/server/email.d.ts.map +1 -0
- package/dist/server/{email.mjs → email.js} +2 -3
- package/dist/server/email.js.map +1 -0
- package/dist/server/linter.d.ts +20 -0
- package/dist/server/linter.d.ts.map +1 -0
- package/dist/server/linter.js +345 -0
- package/dist/server/linter.js.map +1 -0
- package/dist/server/sfc-utils.d.ts +21 -0
- package/dist/server/sfc-utils.d.ts.map +1 -0
- package/dist/server/sfc-utils.js +198 -0
- package/dist/server/sfc-utils.js.map +1 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js +44967 -0
- package/dist/server/ui/.vite/deps/@lucide_vue.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js +8155 -0
- package/dist/server/ui/.vite/deps/@vueuse_core.js.map +1 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js +1859 -0
- package/dist/server/ui/.vite/deps/@vueuse_shared.js.map +1 -0
- package/dist/server/ui/.vite/deps/_metadata.json +78 -0
- package/dist/server/ui/.vite/deps/chunk-EAsCxrDo.js +14 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js +57 -0
- package/dist/server/ui/.vite/deps/class-variance-authority.js.map +1 -0
- package/dist/server/ui/.vite/deps/clsx.js +18 -0
- package/dist/server/ui/.vite/deps/clsx.js.map +1 -0
- package/dist/server/ui/.vite/deps/culori.js +4312 -0
- package/dist/server/ui/.vite/deps/culori.js.map +1 -0
- package/dist/server/ui/.vite/deps/package.json +3 -0
- package/dist/server/ui/.vite/deps/reka-ui.js +44464 -0
- package/dist/server/ui/.vite/deps/reka-ui.js.map +1 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js +3458 -0
- package/dist/server/ui/.vite/deps/tailwind-merge.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue-router.js +6383 -0
- package/dist/server/ui/.vite/deps/vue-router.js.map +1 -0
- package/dist/server/ui/.vite/deps/vue.js +2 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js +8800 -0
- package/dist/server/ui/.vite/deps/vue.runtime.esm-bundler-N1X0OxKs.js.map +1 -0
- package/dist/server/ui/App.vue +106 -66
- package/dist/server/ui/components/SidebarClose.vue +12 -0
- package/dist/server/ui/components/ui/checkbox/Checkbox.vue +1 -1
- package/dist/server/ui/components/ui/command/Command.vue +5 -1
- package/dist/server/ui/components/ui/command/CommandInput.vue +2 -2
- package/dist/server/ui/components/ui/dialog/DialogContent.vue +1 -1
- package/dist/server/ui/components/ui/dialog/DialogScrollContent.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -1
- package/dist/server/ui/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -1
- package/dist/server/ui/components/ui/input/Input.vue +1 -1
- package/dist/server/ui/components/ui/sheet/SheetContent.vue +1 -1
- package/dist/server/ui/components/ui/sidebar/SidebarTrigger.vue +2 -2
- package/dist/server/ui/components/ui/tags-input/TagsInputInput.vue +1 -1
- package/dist/server/ui/components/ui/tags-input/TagsInputItemDelete.vue +1 -1
- package/dist/server/ui/lib/emulated-dark-mode.ts +146 -0
- package/dist/server/ui/main.css +25 -0
- package/dist/server/ui/pages/Home.vue +1 -1
- package/dist/server/ui/pages/Preview.vue +377 -186
- package/dist/server/ui/vite-env.d.ts +1 -0
- package/dist/tests/render/_helpers.d.ts +6 -0
- package/dist/tests/render/_helpers.d.ts.map +1 -0
- package/dist/tests/render/_helpers.js +16 -0
- package/dist/tests/render/_helpers.js.map +1 -0
- package/dist/transformers/addAttributes.d.ts +42 -0
- package/dist/transformers/addAttributes.d.ts.map +1 -0
- package/dist/transformers/{addAttributes.mjs → addAttributes.js} +40 -24
- package/dist/transformers/addAttributes.js.map +1 -0
- package/dist/transformers/attributeToStyle.d.ts +38 -0
- package/dist/transformers/attributeToStyle.d.ts.map +1 -0
- package/dist/transformers/attributeToStyle.js +94 -0
- package/dist/transformers/attributeToStyle.js.map +1 -0
- package/dist/transformers/base.d.ts +71 -0
- package/dist/transformers/base.d.ts.map +1 -0
- package/dist/transformers/{base.mjs → base.js} +65 -40
- package/dist/transformers/base.js.map +1 -0
- package/dist/transformers/columnWidth.d.ts +31 -0
- package/dist/transformers/columnWidth.d.ts.map +1 -0
- package/dist/transformers/columnWidth.js +527 -0
- package/dist/transformers/columnWidth.js.map +1 -0
- package/dist/transformers/entities.d.ts +37 -0
- package/dist/transformers/entities.d.ts.map +1 -0
- package/dist/transformers/entities.js +74 -0
- package/dist/transformers/entities.js.map +1 -0
- package/dist/transformers/filters/{defaults.d.mts → defaults.d.ts} +1 -1
- package/dist/transformers/filters/defaults.d.ts.map +1 -0
- package/dist/transformers/filters/{defaults.mjs → defaults.js} +2 -2
- package/dist/transformers/filters/defaults.js.map +1 -0
- package/dist/transformers/filters/index.d.ts +43 -0
- package/dist/transformers/filters/index.d.ts.map +1 -0
- package/dist/transformers/filters/index.js +89 -0
- package/dist/transformers/filters/index.js.map +1 -0
- package/dist/transformers/format.d.ts +22 -0
- package/dist/transformers/format.d.ts.map +1 -0
- package/dist/transformers/format.js +30 -0
- package/dist/transformers/format.js.map +1 -0
- package/dist/transformers/imgWidth.d.ts +20 -0
- package/dist/transformers/imgWidth.d.ts.map +1 -0
- package/dist/transformers/imgWidth.js +76 -0
- package/dist/transformers/imgWidth.js.map +1 -0
- package/dist/transformers/{index.d.mts → index.d.ts} +4 -3
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +163 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/inlineCss.d.ts +85 -0
- package/dist/transformers/inlineCss.d.ts.map +1 -0
- package/dist/transformers/inlineCss.js +112 -0
- package/dist/transformers/inlineCss.js.map +1 -0
- package/dist/transformers/inlineLink.d.ts +35 -0
- package/dist/transformers/inlineLink.d.ts.map +1 -0
- package/dist/transformers/{inlineLink.mjs → inlineLink.js} +35 -11
- package/dist/transformers/inlineLink.js.map +1 -0
- package/dist/transformers/minify.d.ts +21 -0
- package/dist/transformers/minify.d.ts.map +1 -0
- package/dist/transformers/minify.js +25 -0
- package/dist/transformers/minify.js.map +1 -0
- package/dist/transformers/minifyCodeInline.d.ts +29 -0
- package/dist/transformers/minifyCodeInline.d.ts.map +1 -0
- package/dist/transformers/minifyCodeInline.js +36 -0
- package/dist/transformers/minifyCodeInline.js.map +1 -0
- package/dist/transformers/msoPlaceholders.d.ts +33 -0
- package/dist/transformers/msoPlaceholders.d.ts.map +1 -0
- package/dist/transformers/msoPlaceholders.js +114 -0
- package/dist/transformers/msoPlaceholders.js.map +1 -0
- package/dist/transformers/purgeCss.d.ts +43 -0
- package/dist/transformers/purgeCss.d.ts.map +1 -0
- package/dist/transformers/purgeCss.js +207 -0
- package/dist/transformers/purgeCss.js.map +1 -0
- package/dist/transformers/removeAttributes.d.ts +54 -0
- package/dist/transformers/removeAttributes.d.ts.map +1 -0
- package/dist/transformers/removeAttributes.js +72 -0
- package/dist/transformers/removeAttributes.js.map +1 -0
- package/dist/transformers/{replaceStrings.d.mts → replaceStrings.d.ts} +2 -2
- package/dist/transformers/replaceStrings.d.ts.map +1 -0
- package/dist/transformers/{replaceStrings.mjs → replaceStrings.js} +2 -2
- package/dist/transformers/replaceStrings.js.map +1 -0
- package/dist/transformers/safeSelectors.d.ts +37 -0
- package/dist/transformers/safeSelectors.d.ts.map +1 -0
- package/dist/transformers/{safeClassNames.mjs → safeSelectors.js} +40 -10
- package/dist/transformers/safeSelectors.js.map +1 -0
- package/dist/transformers/shorthandCss.d.ts +47 -0
- package/dist/transformers/shorthandCss.d.ts.map +1 -0
- package/dist/transformers/shorthandCss.js +92 -0
- package/dist/transformers/shorthandCss.js.map +1 -0
- package/dist/transformers/sixHex.d.ts +25 -0
- package/dist/transformers/sixHex.d.ts.map +1 -0
- package/dist/transformers/sixHex.js +42 -0
- package/dist/transformers/sixHex.js.map +1 -0
- package/dist/transformers/tailwindComponent.d.ts +16 -0
- package/dist/transformers/tailwindComponent.d.ts.map +1 -0
- package/dist/transformers/tailwindComponent.js +101 -0
- package/dist/transformers/tailwindComponent.js.map +1 -0
- package/dist/transformers/{tailwindcss.d.mts → tailwindcss.d.ts} +2 -2
- package/dist/transformers/tailwindcss.d.ts.map +1 -0
- package/dist/transformers/{tailwindcss.mjs → tailwindcss.js} +33 -74
- package/dist/transformers/tailwindcss.js.map +1 -0
- package/dist/transformers/urlQuery.d.ts +36 -0
- package/dist/transformers/urlQuery.d.ts.map +1 -0
- package/dist/transformers/urlQuery.js +77 -0
- package/dist/transformers/urlQuery.js.map +1 -0
- package/dist/types/{config.d.mts → config.d.ts} +231 -46
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/utils/ast/index.d.ts +4 -0
- package/dist/utils/ast/index.js +4 -0
- package/dist/utils/ast/{parser.d.mts → parser.d.ts} +1 -1
- package/dist/utils/ast/parser.d.ts.map +1 -0
- package/dist/utils/ast/{parser.mjs → parser.js} +2 -3
- package/dist/utils/ast/parser.js.map +1 -0
- package/dist/utils/ast/{serializer.d.mts → serializer.d.ts} +1 -1
- package/dist/utils/ast/serializer.d.ts.map +1 -0
- package/dist/utils/ast/serializer.js +46 -0
- package/dist/utils/ast/serializer.js.map +1 -0
- package/dist/utils/ast/{walker.d.mts → walker.d.ts} +1 -1
- package/dist/utils/ast/walker.d.ts.map +1 -0
- package/dist/utils/ast/{walker.mjs → walker.js} +2 -2
- package/dist/utils/ast/walker.js.map +1 -0
- package/dist/utils/cloneConfig.d.ts +13 -0
- package/dist/utils/cloneConfig.d.ts.map +1 -0
- package/dist/utils/cloneConfig.js +21 -0
- package/dist/utils/cloneConfig.js.map +1 -0
- package/dist/utils/compileTailwindCss.d.ts +16 -0
- package/dist/utils/compileTailwindCss.d.ts.map +1 -0
- package/dist/utils/compileTailwindCss.js +55 -0
- package/dist/utils/compileTailwindCss.js.map +1 -0
- package/dist/utils/componentSources.d.ts +50 -0
- package/dist/utils/componentSources.d.ts.map +1 -0
- package/dist/utils/componentSources.js +50 -0
- package/dist/utils/componentSources.js.map +1 -0
- package/dist/utils/cssBox.d.ts +42 -0
- package/dist/utils/cssBox.d.ts.map +1 -0
- package/dist/utils/cssBox.js +151 -0
- package/dist/utils/cssBox.js.map +1 -0
- package/dist/utils/decodeStyleEntities.d.ts +15 -0
- package/dist/utils/decodeStyleEntities.d.ts.map +1 -0
- package/dist/utils/decodeStyleEntities.js +18 -0
- package/dist/utils/decodeStyleEntities.js.map +1 -0
- package/dist/utils/{detect.d.mts → detect.d.ts} +1 -1
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/{detect.mjs → detect.js} +2 -3
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/output-markers.d.ts +29 -0
- package/dist/utils/output-markers.d.ts.map +1 -0
- package/dist/utils/output-markers.js +68 -0
- package/dist/utils/output-markers.js.map +1 -0
- package/dist/utils/{url.d.mts → url.d.ts} +1 -1
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/{url.mjs → url.js} +2 -3
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/watchPaths.d.ts +11 -0
- package/dist/utils/watchPaths.d.ts.map +1 -0
- package/dist/utils/watchPaths.js +19 -0
- package/dist/utils/watchPaths.js.map +1 -0
- package/node_modules/@clack/core/CHANGELOG.md +44 -0
- package/node_modules/@clack/core/dist/index.d.mts +125 -5
- package/node_modules/@clack/core/dist/index.mjs +972 -11
- package/node_modules/@clack/core/package.json +6 -2
- package/node_modules/@clack/prompts/CHANGELOG.md +70 -0
- package/node_modules/@clack/prompts/README.md +129 -3
- package/node_modules/@clack/prompts/dist/index.d.mts +567 -33
- package/node_modules/@clack/prompts/dist/index.mjs +1378 -133
- package/node_modules/@clack/prompts/package.json +7 -4
- package/node_modules/fast-string-truncated-width/dist/index.js +36 -96
- package/node_modules/fast-string-truncated-width/dist/types.d.ts +0 -3
- package/node_modules/fast-string-truncated-width/dist/utils.d.ts +3 -3
- package/node_modules/fast-string-truncated-width/dist/utils.js +14 -9
- package/node_modules/fast-string-truncated-width/package.json +1 -1
- package/node_modules/fast-string-truncated-width/readme.md +2 -3
- package/node_modules/fast-string-width/package.json +2 -2
- package/node_modules/fast-string-width/readme.md +0 -3
- package/node_modules/fast-wrap-ansi/lib/main.js +4 -2
- package/node_modules/fast-wrap-ansi/package.json +11 -11
- package/node_modules/maizzle/README.md +24 -0
- package/node_modules/maizzle/dist/commands/make/component.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/config.mjs +8 -7
- package/node_modules/maizzle/dist/commands/make/layout.mjs +3 -3
- package/node_modules/maizzle/dist/commands/make/scaffold.mjs +1 -1
- package/node_modules/maizzle/dist/commands/make/stubs/Layout.vue +146 -0
- package/node_modules/maizzle/dist/commands/make/stubs/component.vue +2 -4
- package/node_modules/maizzle/dist/commands/make/stubs/config.ts +1 -5
- package/node_modules/maizzle/dist/commands/make/template.mjs +1 -1
- package/node_modules/maizzle/dist/commands/new.mjs +46 -135
- package/node_modules/maizzle/dist/index.d.mts +1 -0
- package/node_modules/maizzle/dist/index.mjs +30 -7
- package/node_modules/maizzle/package.json +5 -4
- package/node_modules/nypm/dist/cli.mjs +28 -5
- package/node_modules/nypm/dist/index.d.mts +0 -8
- package/node_modules/nypm/dist/index.mjs +27 -4
- package/node_modules/nypm/package.json +12 -12
- package/node_modules/tinyexec/README.md +9 -1
- package/node_modules/tinyexec/dist/main.d.mts +22 -7
- package/node_modules/tinyexec/dist/main.mjs +189 -491
- package/node_modules/tinyexec/package.json +14 -16
- package/package.json +38 -31
- package/dist/_virtual/_rolldown/runtime.mjs +0 -32
- package/dist/build.d.mts +0 -19
- package/dist/build.d.mts.map +0 -1
- package/dist/build.mjs +0 -141
- package/dist/build.mjs.map +0 -1
- package/dist/components/Divider.vue +0 -133
- package/dist/components/Image.vue +0 -70
- package/dist/components/Overlap.vue +0 -80
- package/dist/components/utils.d.mts +0 -5
- package/dist/components/utils.d.mts.map +0 -1
- package/dist/components/utils.mjs +0 -9
- package/dist/components/utils.mjs.map +0 -1
- package/dist/composables/defineConfig.d.mts +0 -14
- package/dist/composables/defineConfig.d.mts.map +0 -1
- package/dist/composables/defineConfig.mjs.map +0 -1
- package/dist/composables/renderContext.d.mts +0 -24
- package/dist/composables/renderContext.d.mts.map +0 -1
- package/dist/composables/renderContext.mjs +0 -6
- package/dist/composables/renderContext.mjs.map +0 -1
- package/dist/composables/useConfig.d.mts +0 -9
- package/dist/composables/useConfig.d.mts.map +0 -1
- package/dist/composables/useConfig.mjs +0 -13
- package/dist/composables/useConfig.mjs.map +0 -1
- package/dist/composables/useDoctype.d.mts.map +0 -1
- package/dist/composables/useDoctype.mjs.map +0 -1
- package/dist/composables/useEvent.d.mts.map +0 -1
- package/dist/composables/useEvent.mjs.map +0 -1
- package/dist/composables/usePlaintext.d.mts.map +0 -1
- package/dist/composables/usePlaintext.mjs.map +0 -1
- package/dist/composables/usePreviewText.d.mts +0 -24
- package/dist/composables/usePreviewText.d.mts.map +0 -1
- package/dist/composables/usePreviewText.mjs +0 -29
- package/dist/composables/usePreviewText.mjs.map +0 -1
- package/dist/config/defaults.d.mts.map +0 -1
- package/dist/config/defaults.mjs.map +0 -1
- package/dist/config/index.d.mts +0 -15
- package/dist/config/index.d.mts.map +0 -1
- package/dist/config/index.mjs +0 -71
- package/dist/config/index.mjs.map +0 -1
- package/dist/events/index.d.mts.map +0 -1
- package/dist/events/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -31
- package/dist/index.mjs +0 -31
- package/dist/node_modules/picomatch/index.mjs +0 -13
- package/dist/node_modules/picomatch/index.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/constants.mjs +0 -174
- package/dist/node_modules/picomatch/lib/constants.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/parse.mjs +0 -1067
- package/dist/node_modules/picomatch/lib/parse.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/picomatch.mjs +0 -304
- package/dist/node_modules/picomatch/lib/picomatch.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/scan.mjs +0 -296
- package/dist/node_modules/picomatch/lib/scan.mjs.map +0 -1
- package/dist/node_modules/picomatch/lib/utils.mjs +0 -53
- package/dist/node_modules/picomatch/lib/utils.mjs.map +0 -1
- package/dist/plaintext.d.mts.map +0 -1
- package/dist/plaintext.mjs.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/plugin.mjs.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.d.mts.map +0 -1
- package/dist/plugins/postcss/mergeMediaQueries.mjs.map +0 -1
- package/dist/plugins/postcss/pruneVars.d.mts.map +0 -1
- package/dist/plugins/postcss/pruneVars.mjs.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.d.mts.map +0 -1
- package/dist/plugins/postcss/removeDeclarations.mjs.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.d.mts.map +0 -1
- package/dist/plugins/postcss/tailwindCleanup.mjs.map +0 -1
- package/dist/render/createRenderer.d.mts.map +0 -1
- package/dist/render/createRenderer.mjs +0 -286
- package/dist/render/createRenderer.mjs.map +0 -1
- package/dist/render/index.d.mts +0 -26
- package/dist/render/index.d.mts.map +0 -1
- package/dist/render/index.mjs +0 -46
- package/dist/render/index.mjs.map +0 -1
- package/dist/serve.d.mts.map +0 -1
- package/dist/serve.mjs.map +0 -1
- package/dist/server/compatibility.d.mts +0 -5
- package/dist/server/compatibility.d.mts.map +0 -1
- package/dist/server/compatibility.mjs +0 -97
- package/dist/server/compatibility.mjs.map +0 -1
- package/dist/server/email.d.mts.map +0 -1
- package/dist/server/email.mjs.map +0 -1
- package/dist/server/linter.d.mts +0 -5
- package/dist/server/linter.d.mts.map +0 -1
- package/dist/server/linter.mjs +0 -189
- package/dist/server/linter.mjs.map +0 -1
- package/dist/transformers/addAttributes.d.mts +0 -32
- package/dist/transformers/addAttributes.d.mts.map +0 -1
- package/dist/transformers/addAttributes.mjs.map +0 -1
- package/dist/transformers/attributeToStyle.d.mts +0 -25
- package/dist/transformers/attributeToStyle.d.mts.map +0 -1
- package/dist/transformers/attributeToStyle.mjs +0 -80
- package/dist/transformers/attributeToStyle.mjs.map +0 -1
- package/dist/transformers/base.d.mts +0 -8
- package/dist/transformers/base.d.mts.map +0 -1
- package/dist/transformers/base.mjs.map +0 -1
- package/dist/transformers/entities.d.mts +0 -8
- package/dist/transformers/entities.d.mts.map +0 -1
- package/dist/transformers/entities.mjs +0 -41
- package/dist/transformers/entities.mjs.map +0 -1
- package/dist/transformers/filters/defaults.d.mts.map +0 -1
- package/dist/transformers/filters/defaults.mjs.map +0 -1
- package/dist/transformers/filters/index.d.mts +0 -22
- package/dist/transformers/filters/index.d.mts.map +0 -1
- package/dist/transformers/filters/index.mjs +0 -67
- package/dist/transformers/filters/index.mjs.map +0 -1
- package/dist/transformers/format.d.mts +0 -15
- package/dist/transformers/format.d.mts.map +0 -1
- package/dist/transformers/format.mjs +0 -26
- package/dist/transformers/format.mjs.map +0 -1
- package/dist/transformers/index.d.mts.map +0 -1
- package/dist/transformers/index.mjs +0 -81
- package/dist/transformers/index.mjs.map +0 -1
- package/dist/transformers/inlineCSS.d.mts +0 -17
- package/dist/transformers/inlineCSS.d.mts.map +0 -1
- package/dist/transformers/inlineCSS.mjs +0 -70
- package/dist/transformers/inlineCSS.mjs.map +0 -1
- package/dist/transformers/inlineLink.d.mts +0 -14
- package/dist/transformers/inlineLink.d.mts.map +0 -1
- package/dist/transformers/inlineLink.mjs.map +0 -1
- package/dist/transformers/minify.d.mts +0 -17
- package/dist/transformers/minify.d.mts.map +0 -1
- package/dist/transformers/minify.mjs +0 -24
- package/dist/transformers/minify.mjs.map +0 -1
- package/dist/transformers/purgeCSS.d.mts +0 -23
- package/dist/transformers/purgeCSS.d.mts.map +0 -1
- package/dist/transformers/purgeCSS.mjs +0 -132
- package/dist/transformers/purgeCSS.mjs.map +0 -1
- package/dist/transformers/removeAttributes.d.mts +0 -31
- package/dist/transformers/removeAttributes.d.mts.map +0 -1
- package/dist/transformers/removeAttributes.mjs +0 -63
- package/dist/transformers/removeAttributes.mjs.map +0 -1
- package/dist/transformers/replaceStrings.d.mts.map +0 -1
- package/dist/transformers/replaceStrings.mjs.map +0 -1
- package/dist/transformers/safeClassNames.d.mts +0 -22
- package/dist/transformers/safeClassNames.d.mts.map +0 -1
- package/dist/transformers/safeClassNames.mjs.map +0 -1
- package/dist/transformers/shorthandCSS.d.mts +0 -24
- package/dist/transformers/shorthandCSS.d.mts.map +0 -1
- package/dist/transformers/shorthandCSS.mjs +0 -48
- package/dist/transformers/shorthandCSS.mjs.map +0 -1
- package/dist/transformers/sixHex.d.mts +0 -16
- package/dist/transformers/sixHex.d.mts.map +0 -1
- package/dist/transformers/sixHex.mjs +0 -30
- package/dist/transformers/sixHex.mjs.map +0 -1
- package/dist/transformers/tailwindcss.d.mts.map +0 -1
- package/dist/transformers/tailwindcss.mjs.map +0 -1
- package/dist/transformers/urlQuery.d.mts +0 -24
- package/dist/transformers/urlQuery.d.mts.map +0 -1
- package/dist/transformers/urlQuery.mjs +0 -65
- package/dist/transformers/urlQuery.mjs.map +0 -1
- package/dist/types/config.d.mts.map +0 -1
- package/dist/types/config.mjs +0 -1
- package/dist/types/index.d.mts +0 -2
- package/dist/types/index.mjs +0 -1
- package/dist/utils/ast/index.d.mts +0 -4
- package/dist/utils/ast/index.mjs +0 -5
- package/dist/utils/ast/parser.d.mts.map +0 -1
- package/dist/utils/ast/parser.mjs.map +0 -1
- package/dist/utils/ast/serializer.d.mts.map +0 -1
- package/dist/utils/ast/serializer.mjs +0 -37
- package/dist/utils/ast/serializer.mjs.map +0 -1
- package/dist/utils/ast/walker.d.mts.map +0 -1
- package/dist/utils/ast/walker.mjs.map +0 -1
- package/dist/utils/detect.d.mts.map +0 -1
- package/dist/utils/detect.mjs.map +0 -1
- package/dist/utils/url.d.mts.map +0 -1
- package/dist/utils/url.mjs.map +0 -1
- package/node_modules/@clack/core/dist/index.mjs.map +0 -1
- package/node_modules/@clack/prompts/dist/index.mjs.map +0 -1
- package/node_modules/fast-wrap-ansi/lib/main.js.map +0 -1
- package/node_modules/maizzle/dist/commands/make/stubs/layout.vue +0 -39
- package/node_modules/tinyexec/dist/LICENSES.txt +0 -83
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.d.ts","names":[],"sources":["../../src/transformers/entities.ts"],"mappings":";;;;;;;AAsDA;;;;;;;;AAAoE;AASpE;;;;;;;;;;;iBATgB,QAAA,CAAS,IAAA,UAAc,MAAA,GAAQ,cAAqB;;;AASmB;;;iBAAvE,WAAA,CAAY,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,cAAA,GAAwB,SAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { parse } from "../utils/ast/parser.js";
|
|
2
|
+
import { walk } from "../utils/ast/walker.js";
|
|
3
|
+
import { serialize } from "../utils/ast/serializer.js";
|
|
4
|
+
import "../utils/ast/index.js";
|
|
5
|
+
import { defu as defu$1 } from "defu";
|
|
6
|
+
//#region src/transformers/entities.ts
|
|
7
|
+
const DEFAULT_ENTITIES = {
|
|
8
|
+
"": "‍",
|
|
9
|
+
"": "‌",
|
|
10
|
+
"\xA0": " ",
|
|
11
|
+
"": "­",
|
|
12
|
+
"": "​",
|
|
13
|
+
" ": " ",
|
|
14
|
+
"": "",
|
|
15
|
+
"͏": "͏",
|
|
16
|
+
" ": " ",
|
|
17
|
+
"\u2028": "&LineSeparator;",
|
|
18
|
+
"\u2029": "&ParagraphSeparator;",
|
|
19
|
+
"·": "·",
|
|
20
|
+
"–": "–",
|
|
21
|
+
"—": "—",
|
|
22
|
+
"‘": "‘",
|
|
23
|
+
"’": "’",
|
|
24
|
+
"“": "“",
|
|
25
|
+
"”": "”",
|
|
26
|
+
"«": "«",
|
|
27
|
+
"»": "»",
|
|
28
|
+
"•": "•",
|
|
29
|
+
"‹": "‹",
|
|
30
|
+
"›": "›"
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Replace literal Unicode characters in text nodes with their HTML entity
|
|
34
|
+
* equivalents (zero-width joiners, non-breaking spaces, smart quotes,
|
|
35
|
+
* dashes, etc.) for better email-client rendering.
|
|
36
|
+
*
|
|
37
|
+
* @param html HTML string to transform.
|
|
38
|
+
* @param custom Extra entries merged on top of the built-in entity map, or
|
|
39
|
+
* `false` to disable the transform. Defaults to `true`
|
|
40
|
+
* (built-ins only).
|
|
41
|
+
* @returns The transformed HTML string.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* import { entities } from '@maizzle/framework'
|
|
45
|
+
*
|
|
46
|
+
* // Defaults only
|
|
47
|
+
* entities('hello world') // → 'hello world'
|
|
48
|
+
*
|
|
49
|
+
* // Add a custom mapping
|
|
50
|
+
* entities('© Maizzle', { '©': '©' })
|
|
51
|
+
*
|
|
52
|
+
* // Disable the transform
|
|
53
|
+
* entities('hello world', false)
|
|
54
|
+
*/
|
|
55
|
+
function entities(html, custom = true) {
|
|
56
|
+
return serialize(entitiesDom(parse(html), custom));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* DOM-form of {@link entities} used by the internal transformer pipeline.
|
|
60
|
+
* Takes a parsed DOM, returns a parsed DOM — avoids redundant
|
|
61
|
+
* serialize/parse round-trips when chained with other transformers.
|
|
62
|
+
*/
|
|
63
|
+
function entitiesDom(dom, custom = true) {
|
|
64
|
+
if (!custom) return dom;
|
|
65
|
+
const map = typeof custom === "object" ? defu$1(custom, DEFAULT_ENTITIES) : DEFAULT_ENTITIES;
|
|
66
|
+
walk(dom, (node) => {
|
|
67
|
+
if (node.type === "text") for (const [char, entity] of Object.entries(map)) node.data = node.data.split(char).join(entity);
|
|
68
|
+
});
|
|
69
|
+
return dom;
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { entities, entitiesDom };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","names":["merge"],"sources":["../../src/transformers/entities.ts"],"sourcesContent":["import { defu as merge } from 'defu'\nimport type { ChildNode } from 'domhandler'\nimport { parse, serialize, walk } from '../utils/ast/index.ts'\nimport type { EntitiesConfig } from '../types/index.ts'\n\nconst DEFAULT_ENTITIES: Record<string, string> = {\n '\\u200D': '‍',\n '\\u200C': '‌',\n '\\u00A0': ' ',\n '\\u00AD': '­',\n '\\u200B': '​',\n '\\u2007': ' ',\n '\\uFEFF': '',\n '\\u034F': '͏',\n '\\u2003': ' ',\n '\\u2028': '&LineSeparator;',\n '\\u2029': '&ParagraphSeparator;',\n '\\u00B7': '·',\n '\\u2013': '–',\n '\\u2014': '—',\n '\\u2018': '‘',\n '\\u2019': '’',\n '\\u201C': '“',\n '\\u201D': '”',\n '\\u00AB': '«',\n '\\u00BB': '»',\n '\\u2022': '•',\n '\\u2039': '‹',\n '\\u203A': '›'\n}\n\n/**\n * Replace literal Unicode characters in text nodes with their HTML entity\n * equivalents (zero-width joiners, non-breaking spaces, smart quotes,\n * dashes, etc.) for better email-client rendering.\n *\n * @param html HTML string to transform.\n * @param custom Extra entries merged on top of the built-in entity map, or\n * `false` to disable the transform. Defaults to `true`\n * (built-ins only).\n * @returns The transformed HTML string.\n *\n * @example\n * import { entities } from '@maizzle/framework'\n *\n * // Defaults only\n * entities('hello world') // → 'hello world'\n *\n * // Add a custom mapping\n * entities('© Maizzle', { '©': '©' })\n *\n * // Disable the transform\n * entities('hello world', false)\n */\nexport function entities(html: string, custom: EntitiesConfig = true): string {\n return serialize(entitiesDom(parse(html), custom))\n}\n\n/**\n * DOM-form of {@link entities} used by the internal transformer pipeline.\n * Takes a parsed DOM, returns a parsed DOM — avoids redundant\n * serialize/parse round-trips when chained with other transformers.\n */\nexport function entitiesDom(dom: ChildNode[], custom: EntitiesConfig = true): ChildNode[] {\n if (!custom) return dom\n\n const map = typeof custom === 'object'\n ? merge(custom as Record<string, string>, DEFAULT_ENTITIES)\n : DEFAULT_ENTITIES\n\n walk(dom, (node) => {\n if (node.type === 'text') {\n for (const [char, entity] of Object.entries(map)) {\n node.data = node.data.split(char).join(entity)\n }\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;AAKA,MAAM,mBAA2C;CAC/C,KAAU;CACV,KAAU;CACV,QAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,UAAU;CACV,UAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;CACV,KAAU;AACZ;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,SAAS,MAAc,SAAyB,MAAc;CAC5E,OAAO,UAAU,YAAY,MAAM,IAAI,GAAG,MAAM,CAAC;AACnD;;;;;;AAOA,SAAgB,YAAY,KAAkB,SAAyB,MAAmB;CACxF,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,MAAM,OAAO,WAAW,WAC1BA,OAAM,QAAkC,gBAAgB,IACxD;CAEJ,KAAK,MAAM,SAAS;EAClB,IAAI,KAAK,SAAS,QAChB,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,GAAG,GAC7C,KAAK,OAAO,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,MAAM;CAGnD,CAAC;CAED,OAAO;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","names":[],"sources":["../../../src/transformers/filters/defaults.ts"],"mappings":";KAAY,cAAA,IAAkB,GAAA,UAAa,KAAa;AAAA,cAgB3C,QAAA,EAAU,MAAM,SAAS,cAAA"}
|
|
@@ -72,7 +72,7 @@ const defaults = {
|
|
|
72
72
|
"url-decode": (str) => decodeURIComponent(str.replace(/\+/g, " ")),
|
|
73
73
|
"url-encode": (str) => encodeURIComponent(str)
|
|
74
74
|
};
|
|
75
|
-
|
|
76
75
|
//#endregion
|
|
77
76
|
export { defaults };
|
|
78
|
-
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","names":[],"sources":["../../../src/transformers/filters/defaults.ts"],"sourcesContent":["export type FilterFunction = (str: string, value: string) => string\n\nconst escapeMap: Record<string, string> = {\n '\"': '"',\n '&': '&',\n \"'\": ''',\n '<': '<',\n '>': '>',\n}\n\nconst escapeRegex = /[\"&'<>]/g\n\nfunction escapeHtml(str: string): string {\n return str.replace(escapeRegex, ch => escapeMap[ch])\n}\n\nexport const defaults: Record<string, FilterFunction> = {\n append: (str, value) => str + value,\n prepend: (str, value) => value + str,\n uppercase: str => str.toUpperCase(),\n lowercase: str => str.toLowerCase(),\n capitalize: str => str.charAt(0).toUpperCase() + str.slice(1),\n ceil: str => String(Math.ceil(Number.parseFloat(str))),\n floor: str => String(Math.floor(Number.parseFloat(str))),\n round: str => String(Math.round(Number.parseFloat(str))),\n escape: str => escapeHtml(str),\n 'escape-once': str => {\n const decoded = str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\")\n\n return escapeHtml(decoded)\n },\n lstrip: str => str.trimStart(),\n rstrip: str => str.trimEnd(),\n trim: str => str.trim(),\n minus: (str, value) => String(Number.parseFloat(str) - Number.parseFloat(value)),\n plus: (str, value) => String(Number.parseFloat(str) + Number.parseFloat(value)),\n multiply: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),\n times: (str, value) => String(Number.parseFloat(str) * Number.parseFloat(value)),\n 'divide-by': (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),\n divide: (str, value) => String(Number.parseFloat(str) / Number.parseFloat(value)),\n modulo: (str, value) => String(Number.parseFloat(str) % Number.parseFloat(value)),\n 'newline-to-br': str => str.replace(/\\n/g, '<br>'),\n 'strip-newlines': str => str.replace(/\\n/g, ''),\n remove: (str, value) => str.split(value).join(''),\n 'remove-first': (str, value) => {\n const i = str.indexOf(value)\n return i === -1 ? str : str.slice(0, i) + str.slice(i + value.length)\n },\n replace: (str, value) => {\n const [search = '', replacement = ''] = value.split('|')\n return str.split(search).join(replacement)\n },\n 'replace-first': (str, value) => {\n const [search = '', replacement = ''] = value.split('|')\n const i = str.indexOf(search)\n return i === -1 ? str : str.slice(0, i) + replacement + str.slice(i + search.length)\n },\n size: str => String(str.length),\n slice: (str, value) => {\n const args = value.split(',').map(s => Number.parseInt(s.trim(), 10))\n return str.slice(args[0], args[1])\n },\n truncate: (str, value) => {\n const commaIndex = value.indexOf(',')\n const length = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10)\n const ellipsis = commaIndex === -1 ? '...' : value.slice(commaIndex + 1)\n\n if (str.length <= length) return str\n\n return str.slice(0, length) + ellipsis\n },\n 'truncate-words': (str, value) => {\n const commaIndex = value.indexOf(',')\n const count = Number.parseInt(commaIndex === -1 ? value : value.slice(0, commaIndex), 10)\n const ellipsis = commaIndex === -1 ? '...' : value.slice(commaIndex + 1)\n const words = str.split(/\\s+/).filter(Boolean)\n\n if (words.length <= count) return str\n\n return words.slice(0, count).join(' ') + ellipsis\n },\n 'url-decode': str => decodeURIComponent(str.replace(/\\+/g, ' ')),\n 'url-encode': str => encodeURIComponent(str),\n}\n"],"mappings":";AAEA,MAAM,YAAoC;CACxC,MAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;AACP;AAEA,MAAM,cAAc;AAEpB,SAAS,WAAW,KAAqB;CACvC,OAAO,IAAI,QAAQ,cAAa,OAAM,UAAU,GAAG;AACrD;AAEA,MAAa,WAA2C;CACtD,SAAS,KAAK,UAAU,MAAM;CAC9B,UAAU,KAAK,UAAU,QAAQ;CACjC,YAAW,QAAO,IAAI,YAAY;CAClC,YAAW,QAAO,IAAI,YAAY;CAClC,aAAY,QAAO,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;CAC5D,OAAM,QAAO,OAAO,KAAK,KAAK,OAAO,WAAW,GAAG,CAAC,CAAC;CACrD,QAAO,QAAO,OAAO,KAAK,MAAM,OAAO,WAAW,GAAG,CAAC,CAAC;CACvD,QAAO,QAAO,OAAO,KAAK,MAAM,OAAO,WAAW,GAAG,CAAC,CAAC;CACvD,SAAQ,QAAO,WAAW,GAAG;CAC7B,gBAAe,QAAO;EAUpB,OAAO,WATS,IACb,QAAQ,UAAU,GAAG,CAAC,CACtB,QAAQ,SAAS,GAAG,CAAC,CACrB,QAAQ,SAAS,GAAG,CAAC,CACrB,QAAQ,UAAU,IAAG,CAAC,CACtB,QAAQ,WAAW,IAAG,CAAC,CACvB,QAAQ,UAAU,GAAG,CAAC,CACtB,QAAQ,WAAW,GAEE,CAAC;CAC3B;CACA,SAAQ,QAAO,IAAI,UAAU;CAC7B,SAAQ,QAAO,IAAI,QAAQ;CAC3B,OAAM,QAAO,IAAI,KAAK;CACtB,QAAQ,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAC/E,OAAO,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAC9E,WAAW,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAClF,QAAQ,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAC/E,cAAc,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CACrF,SAAS,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAChF,SAAS,KAAK,UAAU,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,WAAW,KAAK,CAAC;CAChF,kBAAiB,QAAO,IAAI,QAAQ,OAAO,MAAM;CACjD,mBAAkB,QAAO,IAAI,QAAQ,OAAO,EAAE;CAC9C,SAAS,KAAK,UAAU,IAAI,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE;CAChD,iBAAiB,KAAK,UAAU;EAC9B,MAAM,IAAI,IAAI,QAAQ,KAAK;EAC3B,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,MAAM;CACtE;CACA,UAAU,KAAK,UAAU;EACvB,MAAM,CAAC,SAAS,IAAI,cAAc,MAAM,MAAM,MAAM,GAAG;EACvD,OAAO,IAAI,MAAM,MAAM,CAAC,CAAC,KAAK,WAAW;CAC3C;CACA,kBAAkB,KAAK,UAAU;EAC/B,MAAM,CAAC,SAAS,IAAI,cAAc,MAAM,MAAM,MAAM,GAAG;EACvD,MAAM,IAAI,IAAI,QAAQ,MAAM;EAC5B,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,cAAc,IAAI,MAAM,IAAI,OAAO,MAAM;CACrF;CACA,OAAM,QAAO,OAAO,IAAI,MAAM;CAC9B,QAAQ,KAAK,UAAU;EACrB,MAAM,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC,KAAI,MAAK,OAAO,SAAS,EAAE,KAAK,GAAG,EAAE,CAAC;EACpE,OAAO,IAAI,MAAM,KAAK,IAAI,KAAK,EAAE;CACnC;CACA,WAAW,KAAK,UAAU;EACxB,MAAM,aAAa,MAAM,QAAQ,GAAG;EACpC,MAAM,SAAS,OAAO,SAAS,eAAe,KAAK,QAAQ,MAAM,MAAM,GAAG,UAAU,GAAG,EAAE;EACzF,MAAM,WAAW,eAAe,KAAK,QAAQ,MAAM,MAAM,aAAa,CAAC;EAEvE,IAAI,IAAI,UAAU,QAAQ,OAAO;EAEjC,OAAO,IAAI,MAAM,GAAG,MAAM,IAAI;CAChC;CACA,mBAAmB,KAAK,UAAU;EAChC,MAAM,aAAa,MAAM,QAAQ,GAAG;EACpC,MAAM,QAAQ,OAAO,SAAS,eAAe,KAAK,QAAQ,MAAM,MAAM,GAAG,UAAU,GAAG,EAAE;EACxF,MAAM,WAAW,eAAe,KAAK,QAAQ,MAAM,MAAM,aAAa,CAAC;EACvE,MAAM,QAAQ,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;EAE7C,IAAI,MAAM,UAAU,OAAO,OAAO;EAElC,OAAO,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI;CAC3C;CACA,eAAc,QAAO,mBAAmB,IAAI,QAAQ,OAAO,GAAG,CAAC;CAC/D,eAAc,QAAO,mBAAmB,GAAG;AAC7C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FilterFunction } from "./defaults.js";
|
|
2
|
+
import { ChildNode } from "domhandler";
|
|
3
|
+
|
|
4
|
+
//#region src/transformers/filters/index.d.ts
|
|
5
|
+
type FiltersConfig = false | Record<string, (str: string, value: string) => string>;
|
|
6
|
+
/**
|
|
7
|
+
* Apply transformation functions to the content of elements that have
|
|
8
|
+
* matching filter attributes. Multiple filters on the same element are
|
|
9
|
+
* executed in the order the attributes are defined.
|
|
10
|
+
*
|
|
11
|
+
* Default filters include string manipulation (`uppercase`, `lowercase`,
|
|
12
|
+
* `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),
|
|
13
|
+
* and more.
|
|
14
|
+
*
|
|
15
|
+
* @param html HTML string to transform.
|
|
16
|
+
* @param custom Custom filters to merge with the defaults. Pass `false`
|
|
17
|
+
* to disable all filters (including the defaults).
|
|
18
|
+
* @returns The transformed HTML string.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* import { filters } from '@maizzle/framework'
|
|
22
|
+
*
|
|
23
|
+
* // Defaults only
|
|
24
|
+
* const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'
|
|
25
|
+
*
|
|
26
|
+
* // Add a custom filter
|
|
27
|
+
* filters('<p suffix=" world">hello</p>', {
|
|
28
|
+
* suffix: (s, v) => s + v,
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* // Disable all filters
|
|
32
|
+
* filters('<p uppercase>foo</p>', false)
|
|
33
|
+
*/
|
|
34
|
+
declare function filters(html: string, custom?: FiltersConfig): string;
|
|
35
|
+
/**
|
|
36
|
+
* DOM-form of {@link filters} used by the internal transformer pipeline.
|
|
37
|
+
* Takes a parsed DOM, returns a parsed DOM — avoids redundant
|
|
38
|
+
* serialize/parse round-trips when chained with other transformers.
|
|
39
|
+
*/
|
|
40
|
+
declare function filtersDom(dom: ChildNode[], custom?: FiltersConfig): ChildNode[];
|
|
41
|
+
//#endregion
|
|
42
|
+
export { type FilterFunction, FiltersConfig, filters, filtersDom };
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/transformers/filters/index.ts"],"mappings":";;;;KAMY,aAAA,WAAwB,MAAM,UAAU,GAAA,UAAa,KAAA;;AAAjE;;;;;;;;AAA8E;AA2C9E;;;;;;;;AAAgE;AAShE;;;;;;;;;iBATgB,OAAA,CAAQ,IAAA,UAAc,MAAA,GAAQ,aAAkB;;;;;AASmB;iBAAnE,UAAA,CAAW,GAAA,EAAK,SAAA,IAAa,MAAA,GAAQ,aAAA,GAAqB,SAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { parse } from "../../utils/ast/parser.js";
|
|
2
|
+
import { serialize } from "../../utils/ast/serializer.js";
|
|
3
|
+
import "../../utils/ast/index.js";
|
|
4
|
+
import { defaults } from "./defaults.js";
|
|
5
|
+
import { Text } from "domhandler";
|
|
6
|
+
//#region src/transformers/filters/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* Process children before parents so nested filter elements work correctly.
|
|
9
|
+
*/
|
|
10
|
+
function walkBottomUp(nodes, callback) {
|
|
11
|
+
for (const node of nodes.slice()) {
|
|
12
|
+
if ("children" in node && node.children?.length) walkBottomUp(node.children, callback);
|
|
13
|
+
callback(node);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Apply transformation functions to the content of elements that have
|
|
18
|
+
* matching filter attributes. Multiple filters on the same element are
|
|
19
|
+
* executed in the order the attributes are defined.
|
|
20
|
+
*
|
|
21
|
+
* Default filters include string manipulation (`uppercase`, `lowercase`,
|
|
22
|
+
* `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),
|
|
23
|
+
* and more.
|
|
24
|
+
*
|
|
25
|
+
* @param html HTML string to transform.
|
|
26
|
+
* @param custom Custom filters to merge with the defaults. Pass `false`
|
|
27
|
+
* to disable all filters (including the defaults).
|
|
28
|
+
* @returns The transformed HTML string.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* import { filters } from '@maizzle/framework'
|
|
32
|
+
*
|
|
33
|
+
* // Defaults only
|
|
34
|
+
* const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'
|
|
35
|
+
*
|
|
36
|
+
* // Add a custom filter
|
|
37
|
+
* filters('<p suffix=" world">hello</p>', {
|
|
38
|
+
* suffix: (s, v) => s + v,
|
|
39
|
+
* })
|
|
40
|
+
*
|
|
41
|
+
* // Disable all filters
|
|
42
|
+
* filters('<p uppercase>foo</p>', false)
|
|
43
|
+
*/
|
|
44
|
+
function filters(html, custom = {}) {
|
|
45
|
+
return serialize(filtersDom(parse(html), custom));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* DOM-form of {@link filters} used by the internal transformer pipeline.
|
|
49
|
+
* Takes a parsed DOM, returns a parsed DOM — avoids redundant
|
|
50
|
+
* serialize/parse round-trips when chained with other transformers.
|
|
51
|
+
*/
|
|
52
|
+
function filtersDom(dom, custom = {}) {
|
|
53
|
+
if (custom === false) return dom;
|
|
54
|
+
const allFilters = {
|
|
55
|
+
...defaults,
|
|
56
|
+
...custom
|
|
57
|
+
};
|
|
58
|
+
const filterNames = new Set(Object.keys(allFilters));
|
|
59
|
+
walkBottomUp(dom, (node) => {
|
|
60
|
+
const el = node;
|
|
61
|
+
if (!el.attribs) return;
|
|
62
|
+
const matched = [];
|
|
63
|
+
for (const attr of Object.keys(el.attribs)) if (filterNames.has(attr)) matched.push({
|
|
64
|
+
name: attr,
|
|
65
|
+
value: el.attribs[attr]
|
|
66
|
+
});
|
|
67
|
+
if (matched.length === 0) return;
|
|
68
|
+
let content = serialize(el.children);
|
|
69
|
+
for (const { name, value } of matched) {
|
|
70
|
+
content = allFilters[name](content, value);
|
|
71
|
+
delete el.attribs[name];
|
|
72
|
+
}
|
|
73
|
+
if (content === "") el.children = [];
|
|
74
|
+
else if (/<[a-z/!]/i.test(content)) {
|
|
75
|
+
const newChildren = parse(content);
|
|
76
|
+
for (const child of newChildren) child.parent = el;
|
|
77
|
+
el.children = newChildren;
|
|
78
|
+
} else {
|
|
79
|
+
const textNode = new Text(content);
|
|
80
|
+
textNode.parent = el;
|
|
81
|
+
el.children = [textNode];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return dom;
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { filters, filtersDom };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/transformers/filters/index.ts"],"sourcesContent":["import { Text } from 'domhandler'\nimport type { ChildNode, Element } from 'domhandler'\nimport { parse, serialize } from '../../utils/ast/index.ts'\nimport { defaults } from './defaults.ts'\n\nexport type { FilterFunction } from './defaults.ts'\nexport type FiltersConfig = false | Record<string, (str: string, value: string) => string>\n\n/**\n * Process children before parents so nested filter elements work correctly.\n */\nfunction walkBottomUp(nodes: ChildNode[], callback: (node: ChildNode) => void): void {\n for (const node of nodes.slice()) {\n if ('children' in node && node.children?.length) {\n walkBottomUp(node.children as ChildNode[], callback)\n }\n\n callback(node)\n }\n}\n\n/**\n * Apply transformation functions to the content of elements that have\n * matching filter attributes. Multiple filters on the same element are\n * executed in the order the attributes are defined.\n *\n * Default filters include string manipulation (`uppercase`, `lowercase`,\n * `trim`, etc.), math operations (`plus`, `minus`, `multiply`, etc.),\n * and more.\n *\n * @param html HTML string to transform.\n * @param custom Custom filters to merge with the defaults. Pass `false`\n * to disable all filters (including the defaults).\n * @returns The transformed HTML string.\n *\n * @example\n * import { filters } from '@maizzle/framework'\n *\n * // Defaults only\n * const out = filters('<p uppercase>foo</p>') // → '<p>FOO</p>'\n *\n * // Add a custom filter\n * filters('<p suffix=\" world\">hello</p>', {\n * suffix: (s, v) => s + v,\n * })\n *\n * // Disable all filters\n * filters('<p uppercase>foo</p>', false)\n */\nexport function filters(html: string, custom: FiltersConfig = {}): string {\n return serialize(filtersDom(parse(html), custom))\n}\n\n/**\n * DOM-form of {@link filters} used by the internal transformer pipeline.\n * Takes a parsed DOM, returns a parsed DOM — avoids redundant\n * serialize/parse round-trips when chained with other transformers.\n */\nexport function filtersDom(dom: ChildNode[], custom: FiltersConfig = {}): ChildNode[] {\n if (custom === false) return dom\n\n const allFilters = { ...defaults, ...custom }\n const filterNames = new Set(Object.keys(allFilters))\n\n walkBottomUp(dom, (node) => {\n const el = node as Element\n\n if (!el.attribs) return\n\n // Collect matching filter attributes in source order\n const matched: Array<{ name: string; value: string }> = []\n\n for (const attr of Object.keys(el.attribs)) {\n if (filterNames.has(attr)) {\n matched.push({ name: attr, value: el.attribs[attr] })\n }\n }\n\n if (matched.length === 0) return\n\n // Serialize children to get innerHTML\n let content = serialize(el.children as ChildNode[])\n\n // Apply each filter in attribute order\n for (const { name, value } of matched) {\n content = allFilters[name](content, value)\n delete el.attribs[name]\n }\n\n // Replace children with the filtered content\n if (content === '') {\n el.children = []\n } else if (/<[a-z/!]/i.test(content)) {\n // Result contains HTML elements — parse back to DOM\n const newChildren = parse(content)\n\n for (const child of newChildren) {\n child.parent = el as any\n }\n\n el.children = newChildren as ChildNode[]\n } else {\n // Text-only result — create a text node directly to preserve entity strings\n const textNode = new Text(content)\n textNode.parent = el as any\n el.children = [textNode]\n }\n })\n\n return dom\n}\n"],"mappings":";;;;;;;;;AAWA,SAAS,aAAa,OAAoB,UAA2C;CACnF,KAAK,MAAM,QAAQ,MAAM,MAAM,GAAG;EAChC,IAAI,cAAc,QAAQ,KAAK,UAAU,QACvC,aAAa,KAAK,UAAyB,QAAQ;EAGrD,SAAS,IAAI;CACf;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,QAAQ,MAAc,SAAwB,CAAC,GAAW;CACxE,OAAO,UAAU,WAAW,MAAM,IAAI,GAAG,MAAM,CAAC;AAClD;;;;;;AAOA,SAAgB,WAAW,KAAkB,SAAwB,CAAC,GAAgB;CACpF,IAAI,WAAW,OAAO,OAAO;CAE7B,MAAM,aAAa;EAAE,GAAG;EAAU,GAAG;CAAO;CAC5C,MAAM,cAAc,IAAI,IAAI,OAAO,KAAK,UAAU,CAAC;CAEnD,aAAa,MAAM,SAAS;EAC1B,MAAM,KAAK;EAEX,IAAI,CAAC,GAAG,SAAS;EAGjB,MAAM,UAAkD,CAAC;EAEzD,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,OAAO,GACvC,IAAI,YAAY,IAAI,IAAI,GACtB,QAAQ,KAAK;GAAE,MAAM;GAAM,OAAO,GAAG,QAAQ;EAAM,CAAC;EAIxD,IAAI,QAAQ,WAAW,GAAG;EAG1B,IAAI,UAAU,UAAU,GAAG,QAAuB;EAGlD,KAAK,MAAM,EAAE,MAAM,WAAW,SAAS;GACrC,UAAU,WAAW,KAAK,CAAC,SAAS,KAAK;GACzC,OAAO,GAAG,QAAQ;EACpB;EAGA,IAAI,YAAY,IACd,GAAG,WAAW,CAAC;OACV,IAAI,YAAY,KAAK,OAAO,GAAG;GAEpC,MAAM,cAAc,MAAM,OAAO;GAEjC,KAAK,MAAM,SAAS,aAClB,MAAM,SAAS;GAGjB,GAAG,WAAW;EAChB,OAAO;GAEL,MAAM,WAAW,IAAI,KAAK,OAAO;GACjC,SAAS,SAAS;GAClB,GAAG,WAAW,CAAC,QAAQ;EACzB;CACF,CAAC;CAED,OAAO;AACT"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FormatOptions, FormatOptions as FormatOptions$1 } from "oxfmt";
|
|
2
|
+
|
|
3
|
+
//#region src/transformers/format.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Pretty-print an HTML string with `oxfmt`. Maizzle defaults
|
|
6
|
+
* (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,
|
|
7
|
+
* `embeddedLanguageFormatting: 'off'`) are merged underneath any options
|
|
8
|
+
* you pass.
|
|
9
|
+
*
|
|
10
|
+
* @param html HTML string to format.
|
|
11
|
+
* @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).
|
|
12
|
+
* @returns The formatted HTML string.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { format } from '@maizzle/framework'
|
|
16
|
+
*
|
|
17
|
+
* const pretty = await format(html, { useTabs: true, tabWidth: 4 })
|
|
18
|
+
*/
|
|
19
|
+
declare function format(html: string, options?: FormatOptions$1): Promise<string>;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { type FormatOptions, format };
|
|
22
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","names":[],"sources":["../../src/transformers/format.ts"],"mappings":";;;;AA2BA;;;;;;;;;AAAgF;;;;;iBAA1D,MAAA,CAAO,IAAA,UAAc,OAAA,GAAS,eAAA,GAAqB,OAAO"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defu as defu$1 } from "defu";
|
|
2
|
+
import { format as format$1 } from "oxfmt";
|
|
3
|
+
//#region src/transformers/format.ts
|
|
4
|
+
const DEFAULT_OPTIONS = {
|
|
5
|
+
printWidth: 320,
|
|
6
|
+
htmlWhitespaceSensitivity: "ignore",
|
|
7
|
+
embeddedLanguageFormatting: "off"
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Pretty-print an HTML string with `oxfmt`. Maizzle defaults
|
|
11
|
+
* (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,
|
|
12
|
+
* `embeddedLanguageFormatting: 'off'`) are merged underneath any options
|
|
13
|
+
* you pass.
|
|
14
|
+
*
|
|
15
|
+
* @param html HTML string to format.
|
|
16
|
+
* @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).
|
|
17
|
+
* @returns The formatted HTML string.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* import { format } from '@maizzle/framework'
|
|
21
|
+
*
|
|
22
|
+
* const pretty = await format(html, { useTabs: true, tabWidth: 4 })
|
|
23
|
+
*/
|
|
24
|
+
async function format(html, options = {}) {
|
|
25
|
+
return (await format$1("input.html", html, defu$1(options, DEFAULT_OPTIONS))).code;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { format };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","names":["oxfmt","merge"],"sources":["../../src/transformers/format.ts"],"sourcesContent":["import { format as oxfmt } from 'oxfmt'\nimport { defu as merge } from 'defu'\nimport type { FormatOptions } from 'oxfmt'\n\nexport type { FormatOptions } from 'oxfmt'\n\nconst DEFAULT_OPTIONS: FormatOptions = {\n printWidth: 320,\n htmlWhitespaceSensitivity: 'ignore',\n embeddedLanguageFormatting: 'off',\n}\n\n/**\n * Pretty-print an HTML string with `oxfmt`. Maizzle defaults\n * (`printWidth: 320`, `htmlWhitespaceSensitivity: 'ignore'`,\n * `embeddedLanguageFormatting: 'off'`) are merged underneath any options\n * you pass.\n *\n * @param html HTML string to format.\n * @param options [oxfmt `FormatOptions`](https://github.com/oxc-project/oxfmt).\n * @returns The formatted HTML string.\n *\n * @example\n * import { format } from '@maizzle/framework'\n *\n * const pretty = await format(html, { useTabs: true, tabWidth: 4 })\n */\nexport async function format(html: string, options: FormatOptions = {}): Promise<string> {\n const merged = merge(options, DEFAULT_OPTIONS)\n const result = await oxfmt('input.html', html, merged)\n return result.code\n}\n"],"mappings":";;;AAMA,MAAM,kBAAiC;CACrC,YAAY;CACZ,2BAA2B;CAC3B,4BAA4B;AAC9B;;;;;;;;;;;;;;;;AAiBA,eAAsB,OAAO,MAAc,UAAyB,CAAC,GAAoB;CAGvF,QAAO,MADcA,SAAM,cAAc,MAD1BC,OAAM,SAAS,eACsB,CAAC,EAAA,CACvC;AAChB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChildNode } from "domhandler";
|
|
2
|
+
|
|
3
|
+
//#region src/transformers/imgWidth.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Backfill the `width` attribute on `<Img>`-emitted images that were left
|
|
6
|
+
* without an explicit width. Runs after `columnWidth`, so every
|
|
7
|
+
* Container/Section/Column ancestor already carries a resolved pixel
|
|
8
|
+
* width in its inline style.
|
|
9
|
+
*
|
|
10
|
+
* For each marked `<img>`, walk up the ancestor chain accumulating
|
|
11
|
+
* horizontal padding+border, stopping at the nearest ancestor with a
|
|
12
|
+
* resolvable pixel width. The image width is that source minus the
|
|
13
|
+
* accumulated inset (so padding on wrappers narrows the image to its
|
|
14
|
+
* content box). When no pixel width is found anywhere, the marker is
|
|
15
|
+
* dropped and the image stays fluid.
|
|
16
|
+
*/
|
|
17
|
+
declare function imgWidthDom(dom: ChildNode[]): ChildNode[];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { imgWidthDom };
|
|
20
|
+
//# sourceMappingURL=imgWidth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imgWidth.d.ts","names":[],"sources":["../../src/transformers/imgWidth.ts"],"mappings":";;;;;AAgDA;;;;;;;;AAAwD;;;iBAAxC,WAAA,CAAY,GAAA,EAAK,SAAA,KAAc,SAAS"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { walk } from "../utils/ast/walker.js";
|
|
2
|
+
import "../utils/ast/index.js";
|
|
3
|
+
import { horizontalBorderPx, horizontalPaddingPx, lengthToPx } from "../utils/cssBox.js";
|
|
4
|
+
import safeParser from "postcss-safe-parser";
|
|
5
|
+
//#region src/transformers/imgWidth.ts
|
|
6
|
+
const MARKER = "data-maizzle-img-width";
|
|
7
|
+
function firstDeclValue(root, prop) {
|
|
8
|
+
let found;
|
|
9
|
+
root.walkDecls(prop, (d) => {
|
|
10
|
+
found = d.value;
|
|
11
|
+
return false;
|
|
12
|
+
});
|
|
13
|
+
return found;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve an element's own pixel width from its inlined style (`max-width`
|
|
17
|
+
* then `width`) or, failing that, its `width` attribute. Percentages and
|
|
18
|
+
* other non-pixel lengths return null — the caller leaves the image fluid.
|
|
19
|
+
*/
|
|
20
|
+
function pixelWidthOf(el, root) {
|
|
21
|
+
if (root) {
|
|
22
|
+
const fromStyle = firstDeclValue(root, "max-width") ?? "";
|
|
23
|
+
const styleMax = fromStyle ? lengthToPx(fromStyle) : null;
|
|
24
|
+
if (styleMax != null) return styleMax;
|
|
25
|
+
const w = firstDeclValue(root, "width");
|
|
26
|
+
const styleWidth = w ? lengthToPx(w) : null;
|
|
27
|
+
if (styleWidth != null) return styleWidth;
|
|
28
|
+
}
|
|
29
|
+
const attrWidth = el.attribs?.width;
|
|
30
|
+
return attrWidth ? lengthToPx(attrWidth) : null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Backfill the `width` attribute on `<Img>`-emitted images that were left
|
|
34
|
+
* without an explicit width. Runs after `columnWidth`, so every
|
|
35
|
+
* Container/Section/Column ancestor already carries a resolved pixel
|
|
36
|
+
* width in its inline style.
|
|
37
|
+
*
|
|
38
|
+
* For each marked `<img>`, walk up the ancestor chain accumulating
|
|
39
|
+
* horizontal padding+border, stopping at the nearest ancestor with a
|
|
40
|
+
* resolvable pixel width. The image width is that source minus the
|
|
41
|
+
* accumulated inset (so padding on wrappers narrows the image to its
|
|
42
|
+
* content box). When no pixel width is found anywhere, the marker is
|
|
43
|
+
* dropped and the image stays fluid.
|
|
44
|
+
*/
|
|
45
|
+
function imgWidthDom(dom) {
|
|
46
|
+
const targets = [];
|
|
47
|
+
walk(dom, (node) => {
|
|
48
|
+
const el = node;
|
|
49
|
+
if (el.attribs && MARKER in el.attribs) targets.push(el);
|
|
50
|
+
});
|
|
51
|
+
for (const img of targets) {
|
|
52
|
+
let cur = img.parent;
|
|
53
|
+
let insetPx = 0;
|
|
54
|
+
let resolvedPx = null;
|
|
55
|
+
while (cur) {
|
|
56
|
+
const el = cur;
|
|
57
|
+
if (el.attribs) {
|
|
58
|
+
const root = el.attribs.style ? safeParser(el.attribs.style) : null;
|
|
59
|
+
if (root) insetPx += horizontalPaddingPx(root) + horizontalBorderPx(root);
|
|
60
|
+
const px = pixelWidthOf(el, root);
|
|
61
|
+
if (px != null) {
|
|
62
|
+
resolvedPx = px;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
cur = cur.parent ?? null;
|
|
67
|
+
}
|
|
68
|
+
if (resolvedPx != null) img.attribs.width = String(Math.max(0, Math.round(resolvedPx - insetPx)));
|
|
69
|
+
delete img.attribs[MARKER];
|
|
70
|
+
}
|
|
71
|
+
return dom;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { imgWidthDom };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=imgWidth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imgWidth.js","names":[],"sources":["../../src/transformers/imgWidth.ts"],"sourcesContent":["import safeParser from 'postcss-safe-parser'\nimport type { Root } from 'postcss'\nimport { walk } from '../utils/ast/index.ts'\nimport { horizontalBorderPx, horizontalPaddingPx, lengthToPx } from '../utils/cssBox.ts'\nimport type { ChildNode, Element, ParentNode } from 'domhandler'\n\nconst MARKER = 'data-maizzle-img-width'\n\nfunction firstDeclValue(root: Root, prop: string): string | undefined {\n let found: string | undefined\n root.walkDecls(prop, (d) => {\n found = d.value\n return false\n })\n return found\n}\n\n/**\n * Resolve an element's own pixel width from its inlined style (`max-width`\n * then `width`) or, failing that, its `width` attribute. Percentages and\n * other non-pixel lengths return null — the caller leaves the image fluid.\n */\nfunction pixelWidthOf(el: Element, root: Root | null): number | null {\n if (root) {\n const fromStyle = (firstDeclValue(root, 'max-width') ?? '')\n const styleMax = fromStyle ? lengthToPx(fromStyle) : null\n if (styleMax != null) return styleMax\n const w = firstDeclValue(root, 'width')\n const styleWidth = w ? lengthToPx(w) : null\n if (styleWidth != null) return styleWidth\n }\n const attrWidth = el.attribs?.width\n return attrWidth ? lengthToPx(attrWidth) : null\n}\n\n/**\n * Backfill the `width` attribute on `<Img>`-emitted images that were left\n * without an explicit width. Runs after `columnWidth`, so every\n * Container/Section/Column ancestor already carries a resolved pixel\n * width in its inline style.\n *\n * For each marked `<img>`, walk up the ancestor chain accumulating\n * horizontal padding+border, stopping at the nearest ancestor with a\n * resolvable pixel width. The image width is that source minus the\n * accumulated inset (so padding on wrappers narrows the image to its\n * content box). When no pixel width is found anywhere, the marker is\n * dropped and the image stays fluid.\n */\nexport function imgWidthDom(dom: ChildNode[]): ChildNode[] {\n const targets: Element[] = []\n\n walk(dom, (node) => {\n const el = node as Element\n if (el.attribs && MARKER in el.attribs) targets.push(el)\n })\n\n for (const img of targets) {\n let cur: ParentNode | null = img.parent\n let insetPx = 0\n let resolvedPx: number | null = null\n\n while (cur) {\n const el = cur as Element\n if (el.attribs) {\n const root = el.attribs.style ? safeParser(el.attribs.style) : null\n if (root) insetPx += horizontalPaddingPx(root) + horizontalBorderPx(root)\n\n const px = pixelWidthOf(el, root)\n if (px != null) {\n resolvedPx = px\n break\n }\n }\n cur = (cur as any).parent ?? null\n }\n\n if (resolvedPx != null) {\n img.attribs.width = String(Math.max(0, Math.round(resolvedPx - insetPx)))\n }\n\n delete img.attribs[MARKER]\n }\n\n return dom\n}\n"],"mappings":";;;;;AAMA,MAAM,SAAS;AAEf,SAAS,eAAe,MAAY,MAAkC;CACpE,IAAI;CACJ,KAAK,UAAU,OAAO,MAAM;EAC1B,QAAQ,EAAE;EACV,OAAO;CACT,CAAC;CACD,OAAO;AACT;;;;;;AAOA,SAAS,aAAa,IAAa,MAAkC;CACnE,IAAI,MAAM;EACR,MAAM,YAAa,eAAe,MAAM,WAAW,KAAK;EACxD,MAAM,WAAW,YAAY,WAAW,SAAS,IAAI;EACrD,IAAI,YAAY,MAAM,OAAO;EAC7B,MAAM,IAAI,eAAe,MAAM,OAAO;EACtC,MAAM,aAAa,IAAI,WAAW,CAAC,IAAI;EACvC,IAAI,cAAc,MAAM,OAAO;CACjC;CACA,MAAM,YAAY,GAAG,SAAS;CAC9B,OAAO,YAAY,WAAW,SAAS,IAAI;AAC7C;;;;;;;;;;;;;;AAeA,SAAgB,YAAY,KAA+B;CACzD,MAAM,UAAqB,CAAC;CAE5B,KAAK,MAAM,SAAS;EAClB,MAAM,KAAK;EACX,IAAI,GAAG,WAAW,UAAU,GAAG,SAAS,QAAQ,KAAK,EAAE;CACzD,CAAC;CAED,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,MAAyB,IAAI;EACjC,IAAI,UAAU;EACd,IAAI,aAA4B;EAEhC,OAAO,KAAK;GACV,MAAM,KAAK;GACX,IAAI,GAAG,SAAS;IACd,MAAM,OAAO,GAAG,QAAQ,QAAQ,WAAW,GAAG,QAAQ,KAAK,IAAI;IAC/D,IAAI,MAAM,WAAW,oBAAoB,IAAI,IAAI,mBAAmB,IAAI;IAExE,MAAM,KAAK,aAAa,IAAI,IAAI;IAChC,IAAI,MAAM,MAAM;KACd,aAAa;KACb;IACF;GACF;GACA,MAAO,IAAY,UAAU;EAC/B;EAEA,IAAI,cAAc,MAChB,IAAI,QAAQ,QAAQ,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,OAAO,CAAC,CAAC;EAG1E,OAAO,IAAI,QAAQ;CACrB;CAEA,OAAO;AACT"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { MaizzleConfig } from "../types/config.
|
|
1
|
+
import { MaizzleConfig } from "../types/config.js";
|
|
2
|
+
import { TailwindBlock } from "../composables/renderContext.js";
|
|
2
3
|
|
|
3
4
|
//#region src/transformers/index.d.ts
|
|
4
5
|
/**
|
|
@@ -31,7 +32,7 @@ import { MaizzleConfig } from "../types/config.mjs";
|
|
|
31
32
|
* 15. Prettify
|
|
32
33
|
* 16. Minify
|
|
33
34
|
*/
|
|
34
|
-
declare function runTransformers(html: string, config: MaizzleConfig, filePath?: string, doctype?: string): Promise<string>;
|
|
35
|
+
declare function runTransformers(html: string, config: MaizzleConfig, filePath?: string, doctype?: string, tailwindBlocks?: TailwindBlock[]): Promise<string>;
|
|
35
36
|
//#endregion
|
|
36
37
|
export { runTransformers };
|
|
37
|
-
//# sourceMappingURL=index.d.
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/transformers/index.ts"],"mappings":";;;;;;AAwDA;;;;;;;;;;;;;;;;;AAMU;;;;;;;;;;;iBANY,eAAA,CACpB,IAAA,UACA,MAAA,EAAQ,aAAA,EACR,QAAA,WACA,OAAA,WACA,cAAA,GAAiB,aAAA,KAChB,OAAA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { parse } from "../utils/ast/parser.js";
|
|
2
|
+
import { serialize } from "../utils/ast/serializer.js";
|
|
3
|
+
import "../utils/ast/index.js";
|
|
4
|
+
import { inlineLinkDom } from "./inlineLink.js";
|
|
5
|
+
import { tailwindComponent } from "./tailwindComponent.js";
|
|
6
|
+
import { tailwindcss } from "./tailwindcss.js";
|
|
7
|
+
import { safeSelectorsDom } from "./safeSelectors.js";
|
|
8
|
+
import { attributeToStyleDom } from "./attributeToStyle.js";
|
|
9
|
+
import { inlineCssDom } from "./inlineCss.js";
|
|
10
|
+
import { msoPlaceholders } from "./msoPlaceholders.js";
|
|
11
|
+
import { columnWidth } from "./columnWidth.js";
|
|
12
|
+
import { imgWidthDom } from "./imgWidth.js";
|
|
13
|
+
import { removeAttributesDom } from "./removeAttributes.js";
|
|
14
|
+
import { shorthandCssDom } from "./shorthandCss.js";
|
|
15
|
+
import { sixHexDom } from "./sixHex.js";
|
|
16
|
+
import { addAttributesDom } from "./addAttributes.js";
|
|
17
|
+
import { filtersDom } from "./filters/index.js";
|
|
18
|
+
import { baseDom } from "./base.js";
|
|
19
|
+
import { entitiesDom } from "./entities.js";
|
|
20
|
+
import { urlQueryDom } from "./urlQuery.js";
|
|
21
|
+
import { purgeCssDom } from "./purgeCss.js";
|
|
22
|
+
import { replaceStrings } from "./replaceStrings.js";
|
|
23
|
+
import { format } from "./format.js";
|
|
24
|
+
import { minifyCodeInline } from "./minifyCodeInline.js";
|
|
25
|
+
import { minify } from "./minify.js";
|
|
26
|
+
//#region src/transformers/index.ts
|
|
27
|
+
/**
|
|
28
|
+
* Run all Maizzle transformers on the rendered HTML.
|
|
29
|
+
*
|
|
30
|
+
* The HTML is parsed into a DOM once at the start and passed through all
|
|
31
|
+
* DOM-based transformers as a shared `ChildNode[]`. After all DOM transformers
|
|
32
|
+
* complete, the DOM is serialized back to a string exactly once.
|
|
33
|
+
*
|
|
34
|
+
* String-only transformers (those that rely on external tools that require a
|
|
35
|
+
* raw HTML string) then run on the serialized output.
|
|
36
|
+
*
|
|
37
|
+
* Transformers run in a specific order:
|
|
38
|
+
* 0. Inline link stylesheets — replace `<link rel="stylesheet">` with `<style>` tags
|
|
39
|
+
* 1. Tailwind CSS — compile CSS, lower syntax, optimize (cleanup + merge media queries)
|
|
40
|
+
* 2. Safe class names
|
|
41
|
+
* 3. Attribute to style
|
|
42
|
+
* 4. CSS inliner
|
|
43
|
+
* 5. Remove attributes
|
|
44
|
+
* 6. Shorthand CSS
|
|
45
|
+
* 7. Six-digit HEX
|
|
46
|
+
* 8. Add attributes
|
|
47
|
+
* 9. Filters
|
|
48
|
+
* 10. Base URL
|
|
49
|
+
* 11. URL query
|
|
50
|
+
* 12. Purge CSS (serializes/parses internally around email-comb)
|
|
51
|
+
* 13. Entities
|
|
52
|
+
* + Vue-generated comments stripped here (on serialized string)
|
|
53
|
+
* 14. Replace strings
|
|
54
|
+
* 15. Prettify
|
|
55
|
+
* 16. Minify
|
|
56
|
+
*/
|
|
57
|
+
async function runTransformers(html, config, filePath, doctype, tailwindBlocks) {
|
|
58
|
+
/**
|
|
59
|
+
* Per-transformer skip map — only honored when useTransformers is an object.
|
|
60
|
+
* Whole-pipeline opt-out (`useTransformers === false`) is handled upstream
|
|
61
|
+
* in build.ts / render so we never reach this function in that case.
|
|
62
|
+
*
|
|
63
|
+
* A toggle set to `true` *force-enables* its transformer for this run
|
|
64
|
+
* by layering on the matching config slice (e.g. `prettify: true`
|
|
65
|
+
* sets `html.format = true`). This only applies to transformers
|
|
66
|
+
* whose enable flag is a plain boolean — data-driven ones
|
|
67
|
+
* (filters, baseURL, urlQuery, etc.) need actual config
|
|
68
|
+
* values, so a bare `true` for those is a no-op.
|
|
69
|
+
*/
|
|
70
|
+
const toggles = typeof config.useTransformers === "object" ? config.useTransformers : null;
|
|
71
|
+
const enabled = (key) => toggles?.[key] !== false;
|
|
72
|
+
let effective = config;
|
|
73
|
+
if (toggles) {
|
|
74
|
+
const cssOver = {};
|
|
75
|
+
const htmlOver = {};
|
|
76
|
+
if (toggles.inlineCss === true) cssOver.inline = true;
|
|
77
|
+
if (toggles.purgeCss === true) cssOver.purge = true;
|
|
78
|
+
if (toggles.safeSelectors === true) cssOver.safe = true;
|
|
79
|
+
if (toggles.shorthandCss === true) cssOver.shorthand = true;
|
|
80
|
+
if (toggles.sixHex === true) cssOver.sixHex = true;
|
|
81
|
+
if (toggles.prettify === true) htmlOver.format = true;
|
|
82
|
+
if (toggles.minify === true) htmlOver.minify = true;
|
|
83
|
+
if (toggles.entities === true) htmlOver.decodeEntities = true;
|
|
84
|
+
if (Object.keys(cssOver).length || Object.keys(htmlOver).length) effective = {
|
|
85
|
+
...config,
|
|
86
|
+
css: {
|
|
87
|
+
...config.css,
|
|
88
|
+
...cssOver
|
|
89
|
+
},
|
|
90
|
+
html: {
|
|
91
|
+
...config.html,
|
|
92
|
+
...htmlOver
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
let dom = parse(html);
|
|
97
|
+
dom = await inlineLinkDom(dom, filePath);
|
|
98
|
+
if (tailwindBlocks?.length) dom = await tailwindComponent(dom, tailwindBlocks, effective, filePath);
|
|
99
|
+
dom = await tailwindcss(dom, effective, filePath);
|
|
100
|
+
if (enabled("safeSelectors")) dom = safeSelectorsDom(dom, effective.css);
|
|
101
|
+
if (enabled("attributeToStyle") && typeof effective.css?.inline === "object" && effective.css.inline.attributeToStyle) dom = attributeToStyleDom(dom, effective.css.inline.attributeToStyle);
|
|
102
|
+
if (enabled("inlineCss") && effective.css?.inline) {
|
|
103
|
+
const inlineOptions = typeof effective.css.inline === "object" ? effective.css.inline : {};
|
|
104
|
+
dom = inlineCssDom(dom, inlineOptions);
|
|
105
|
+
}
|
|
106
|
+
dom = msoPlaceholders(dom);
|
|
107
|
+
dom = columnWidth(dom);
|
|
108
|
+
dom = imgWidthDom(dom);
|
|
109
|
+
if (enabled("removeAttributes")) {
|
|
110
|
+
const removeRules = effective.html?.attributes?.remove;
|
|
111
|
+
dom = removeAttributesDom(dom, Array.isArray(removeRules) ? removeRules : []);
|
|
112
|
+
}
|
|
113
|
+
if (enabled("shorthandCss") && effective.css?.shorthand) {
|
|
114
|
+
const shorthandOptions = typeof effective.css.shorthand === "object" ? effective.css.shorthand : {};
|
|
115
|
+
dom = shorthandCssDom(dom, shorthandOptions);
|
|
116
|
+
}
|
|
117
|
+
if (enabled("sixHex") && effective.css?.sixHex !== false) dom = sixHexDom(dom);
|
|
118
|
+
if (enabled("addAttributes")) dom = addAttributesDom(dom, effective.html?.attributes);
|
|
119
|
+
if (enabled("filters")) dom = filtersDom(dom, effective.filters);
|
|
120
|
+
if (enabled("baseURL") && effective.url?.base) dom = baseDom(dom, effective.url.base);
|
|
121
|
+
if (enabled("urlQuery") && effective.url?.query && Object.keys(effective.url.query).length > 0) {
|
|
122
|
+
const { _options: queryOptions, ...queryParams } = effective.url.query;
|
|
123
|
+
dom = urlQueryDom(dom, queryParams, queryOptions ?? {});
|
|
124
|
+
}
|
|
125
|
+
if (enabled("purgeCss") && effective.css?.purge) {
|
|
126
|
+
const purgeOptions = typeof effective.css.purge === "object" ? effective.css.purge : {};
|
|
127
|
+
dom = purgeCssDom(dom, purgeOptions);
|
|
128
|
+
}
|
|
129
|
+
if (enabled("entities")) dom = entitiesDom(dom, effective.html?.decodeEntities);
|
|
130
|
+
const isXhtml = doctype ? /xhtml/i.test(doctype) : false;
|
|
131
|
+
let result = serialize(dom, { selfClosingTags: isXhtml });
|
|
132
|
+
if (enabled("replaceStrings")) result = replaceStrings(result, effective);
|
|
133
|
+
const minifyWillRun = enabled("minify") && !!effective.html?.minify;
|
|
134
|
+
if (enabled("prettify") && !minifyWillRun && effective.html?.format) {
|
|
135
|
+
const formatOptions = typeof effective.html.format === "object" ? effective.html.format : {};
|
|
136
|
+
result = await format(result, formatOptions);
|
|
137
|
+
}
|
|
138
|
+
if (enabled("minify") && effective.html?.minify) {
|
|
139
|
+
const minifyOptions = typeof effective.html.minify === "object" ? effective.html.minify : {};
|
|
140
|
+
result = minify(result, minifyOptions);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Strip self-closing slashes for HTML5 doctypes, but preserve content
|
|
144
|
+
* inside MSO conditional comments (XML-ish, case/syntax sensitive).
|
|
145
|
+
* MUST run BEFORE minifyCodeInline: at this point, CodeInline's
|
|
146
|
+
* shiki output is still marker-encoded (§MZLT§/§MZGT§), so any
|
|
147
|
+
* ` />` in the highlighted source code (e.g. a Vue self-close
|
|
148
|
+
* tag) hasn't materialized yet and can't be mistakenly
|
|
149
|
+
* stripped from inside a `<code>` element.
|
|
150
|
+
*/
|
|
151
|
+
if (!isXhtml) result = result.replace(/<!--\[if [^\]]*\]>[\s\S]*?<!\[endif\]-->|( \/>)/g, (match, selfClose) => selfClose ? ">" : match);
|
|
152
|
+
/**
|
|
153
|
+
* 16.5. Strip whitespace inside `data-minify-inline` markers (CodeInline's
|
|
154
|
+
* Shiki output, etc.). Runs after format/minify so it cleans up the
|
|
155
|
+
* pretty-printer's indentation between sibling tags.
|
|
156
|
+
*/
|
|
157
|
+
result = minifyCodeInline(result);
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
export { runTransformers };
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=index.js.map
|