svelte-ast-print
Version:
Serialize Svelte AST nodes into stringified syntax. A.k.a parse in reverse.
200 lines • 5.52 kB
JavaScript
/**
* 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