84 lines
2.1 KiB
JavaScript
84 lines
2.1 KiB
JavaScript
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.transformer = void 0;
|
||
|
const detect_indent_1 = __importDefault(require("detect-indent"));
|
||
|
const pug_1 = __importDefault(require("pug"));
|
||
|
// Mixins to use svelte template features
|
||
|
const GET_MIXINS = (indentationType) => `mixin if(condition)
|
||
|
%_| {#if !{condition}}
|
||
|
%_block
|
||
|
%_| {/if}
|
||
|
|
||
|
mixin else
|
||
|
%_| {:else}
|
||
|
%_block
|
||
|
|
||
|
mixin elseif(condition)
|
||
|
%_| {:else if !{condition}}
|
||
|
%_block
|
||
|
|
||
|
mixin key(expression)
|
||
|
%_| {#key !{expression}}
|
||
|
%_block
|
||
|
%_| {/key}
|
||
|
|
||
|
mixin each(loop)
|
||
|
%_| {#each !{loop}}
|
||
|
%_block
|
||
|
%_| {/each}
|
||
|
|
||
|
mixin await(promise)
|
||
|
%_| {#await !{promise}}
|
||
|
%_block
|
||
|
%_| {/await}
|
||
|
|
||
|
mixin then(answer)
|
||
|
%_| {:then !{answer}}
|
||
|
%_block
|
||
|
|
||
|
mixin catch(error)
|
||
|
%_| {:catch !{error}}
|
||
|
%_block
|
||
|
|
||
|
mixin html(expression)
|
||
|
%_| {@html !{expression}}
|
||
|
|
||
|
mixin const(expression)
|
||
|
%_| {@const !{expression}}
|
||
|
|
||
|
mixin debug(variables)
|
||
|
%_| {@debug !{variables}}`.replace(/%_/g, indentationType === 'tab' ? '\t' : ' ');
|
||
|
const transformer = async ({ content, filename, options, }) => {
|
||
|
var _a;
|
||
|
const pugOptions = {
|
||
|
// needed so pug doesn't mirror boolean attributes
|
||
|
// and prop spreading expressions.
|
||
|
doctype: 'html',
|
||
|
compileDebug: false,
|
||
|
filename,
|
||
|
...options,
|
||
|
};
|
||
|
const { type: indentationType } = (0, detect_indent_1.default)(content);
|
||
|
const input = `${GET_MIXINS(indentationType !== null && indentationType !== void 0 ? indentationType : 'space')}\n${content}`;
|
||
|
const compiled = pug_1.default.compile(input, pugOptions);
|
||
|
let code;
|
||
|
try {
|
||
|
code = compiled();
|
||
|
}
|
||
|
catch (e) {
|
||
|
// The error message does not have much context, add more of it
|
||
|
if (e instanceof Error) {
|
||
|
e.message = `[svelte-preprocess] Pug error while preprocessing ${filename}\n\n${e.message}`;
|
||
|
}
|
||
|
throw e;
|
||
|
}
|
||
|
return {
|
||
|
code,
|
||
|
dependencies: (_a = compiled.dependencies) !== null && _a !== void 0 ? _a : [],
|
||
|
};
|
||
|
};
|
||
|
exports.transformer = transformer;
|