UNPKG

svelte-draft

Version:
110 lines (109 loc) 4.33 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const svelte = require("svelte/compiler"); const fs = require("fs"); const { resolve } = require("path"); const { transformSync } = require("@babel/core"); const traverse = require("@babel/traverse").default; const generate = require("@babel/generator").default; const traverseDirectory = require("filewalker"); function preprocessSvelte(path) { return __awaiter(this, void 0, void 0, function* () { const source = fs.readFileSync(path, "utf8"); const { code } = yield svelte.preprocess(source, { script: ({ content, filename }) => { const code = preprocessImport(content, filename); return { code }; }, }, { filename: path, }); return code; }); } /** * add .svelte in "import" if necessary */ function preprocessImport(content, filename) { const ast = transformSync(content, { filename, ast: true, }).ast; traverse(ast, { ImportDeclaration(astPath) { var _a; const sourceName = (_a = astPath.node.source) === null || _a === void 0 ? void 0 : _a.value; if (!sourceName) { return; } const importFrom = resolve(filename, "../", sourceName); const svelteFile = importFrom + ".svelte"; if (fs.existsSync(svelteFile)) { astPath.node.source.value += ".svelte"; } }, }); const code = generate(ast).code; return code; } function preprocessScript(content, filename) { const ast = transformSync(content, { filename, ast: true, }).ast; traverse(ast, { ImportDeclaration(astPath) { var _a; const sourceName = (_a = astPath.node.source) === null || _a === void 0 ? void 0 : _a.value; if (!sourceName) { return; } const importFrom = resolve(filename, "../", sourceName); const svelteFile = importFrom + ".svelte"; if (fs.existsSync(svelteFile)) { astPath.node.source.value += ".svelte"; } }, ExportDeclaration(astPath) { var _a; const sourceName = (_a = astPath.node.source) === null || _a === void 0 ? void 0 : _a.value; if (!sourceName) { return; } const importFrom = resolve(filename, "../", sourceName); const svelteFile = importFrom + ".svelte"; if (fs.existsSync(svelteFile)) { astPath.node.source.value += ".svelte"; } }, }); const code = generate(ast).code; return code; } function addSvelteExtension(path) { return __awaiter(this, void 0, void 0, function* () { traverseDirectory(path) .on("file", (relative, stats, absolute) => __awaiter(this, void 0, void 0, function* () { if (absolute.endsWith(".svelte")) { const code = yield preprocessSvelte(absolute); fs.writeFileSync(absolute, code, "utf8"); } else if (absolute.endsWith(".js")) { const code = fs.readFileSync(absolute, "utf8"); const withExtension = preprocessScript(code, absolute); fs.writeFileSync(absolute, withExtension, "utf8"); } })) .walk(); }); } exports.addSvelteExtension = addSvelteExtension;