UNPKG

svelte-ast-print

Version:

Serialize Svelte AST nodes into stringified syntax. A.k.a parse in reverse.

200 lines 5.52 kB
/** * Printers related to Svelte **element**-like related AST nodes only. * @module svelte-ast-print/template/element-like */ import { print_maybe_self_closing_el, print_non_self_closing_el, print_self_closing_el, } from "../_internal/template/element-like.js"; /** * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printElementLike(n, opts = {}) { // biome-ignore format: Prettier // prettier-ignore switch (n.type) { case "Component": return printComponent(n, opts); case "RegularElement": return printRegularElement(n, opts); case "SlotElement": return printSlotElement(n, opts); case "SvelteBody": return printSvelteBody(n, opts); case "SvelteBoundary": return printSvelteBoundary(n, opts); case "SvelteComponent": return printSvelteComponent(n, opts); case "SvelteDocument": return printSvelteDocument(n, opts); case "SvelteElement": return printSvelteElement(n, opts); case "SvelteFragment": return printSvelteFragment(n, opts); case "SvelteHead": return printSvelteHead(n, opts); case "SvelteOptions": return printSvelteOptions(n, opts); case "SvelteSelf": return printSvelteSelf(n, opts); case "SvelteWindow": return printSvelteWindow(n, opts); case "TitleElement": return printTitleElement(n, opts); } } /** * @see {@link https://svelte.dev/docs/svelte-components} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printComponent(n, opts = {}) { return print_maybe_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte-components} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printRegularElement(n, opts = {}) { return print_maybe_self_closing_el({ n, opts }); } /** * @deprecated Will be removed from Svelte `v6` {@link https://svelte.dev/docs/svelte/legacy-slot} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSlotElement(n, opts = {}) { return print_maybe_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-body} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteBody(n, opts = {}) { return print_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-boundary} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteBoundary(n, opts = {}) { return print_non_self_closing_el({ n, opts }); } /** * @deprecated Will be removed from Svelte `v6` {@link https://svelte.dev/docs/svelte/legacy-svelte-component} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteComponent(n, opts = {}) { return print_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-document} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteDocument(n, opts = {}) { return print_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-element} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteElement(n, opts = {}) { n.attributes.unshift({ type: "Attribute", name: "this", value: { type: "ExpressionTag", expression: n.tag, }, }); return print_non_self_closing_el({ n, opts }); } /** * @deprecated Will be removed from Svelte `v6` {@link https://svelte.dev/docs/svelte/legacy-svelte-fragment} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteFragment(n, opts = {}) { return print_non_self_closing_el({ n, opts }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-head} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteHead(n, opts = {}) { return print_non_self_closing_el({ n, opts, }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-options} * * @example * ```svelte * <svelte:options option={value} /> * ``` * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ * WARN: This one is different, because it can be extracted only from {@link SV.Root} */ export function printSvelteOptions(n, opts = {}) { // @ts-expect-error let { attributes, customElement, options, start, end, ...rest } = n; if (!attributes) attributes = options.attributes; // @ts-expect-error return print_self_closing_el({ // @ts-expect-error n: { type: "SvelteOptions", name: "svelte:options", attributes, // @ts-expect-error start: start || n.options?.start, // @ts-expect-error end: end || n.options?.end, ...rest, }, opts, }); } /** * @deprecated Will be removed from Svelte `v6` {@link https://svelte.dev/docs/svelte/legacy-svelte-self} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteSelf(n, opts = {}) { return print_self_closing_el({ n, opts, }); } /** * @see {@link https://svelte.dev/docs/svelte/svelte-window} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printSvelteWindow(n, opts = {}) { return print_self_closing_el({ n, opts, }); } /** * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title} * * @since 1.0.0 * @__NO_SIDE_EFFECTS__ */ export function printTitleElement(n, opts = {}) { return print_non_self_closing_el({ n, opts, }); } //# sourceMappingURL=element-like.js.map