UNPKG

svelte-draft

Version:
82 lines (81 loc) 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const traverse_1 = require("@babel/traverse"); const core_1 = require("@babel/core"); const typedraft_1 = require("typedraft"); const draft_plugin_svelte_filter_1 = require("../plug-in/draft-plugin-svelte-filter"); const script_section_1 = require("../section/script-section"); const template_section_1 = require("../section/template-section"); const import_section_1 = require("../section/import-section"); const draft_dsl_svelte_watch_1 = require("../dsl/draft-dsl-svelte-watch"); const typedraft_2 = require("typedraft"); const TypescriptPreset = require("@babel/preset-typescript"); class SvelteTranscriber extends typedraft_1.Transcriber { constructor(code) { super(code); this.m_DSLMap.set("watch", new draft_dsl_svelte_watch_1.SvelteWatch()); this.m_Plugins = [new typedraft_1.RefreshDraftPlugin(this), new typedraft_1.DSLPlugin(this), new typedraft_1.RefreshDraftPlugin(this), new typedraft_1.LocalContextPlugin(this), new typedraft_1.ClassPlugin(this), new draft_plugin_svelte_filter_1.SvelteFilterPlugin(this)]; } get m_Path() { return this.m_Module.m_Path; } ExtractModuleContext() { new typedraft_1.RefreshDraftPlugin(this).Transcribe(); const statements = this.m_Path.get("body").filter(each => !each.isExportDefaultDeclaration() && !typedraft_2.IsLocalContext(each)).map(each => each.node); if (statements.length === 0) { return ""; } const module_context_ts = statements.map(each => typedraft_2.ToString(each)).join("\n"); const module_context_js = core_1.transformSync(module_context_ts, { filename: "script.tsx", ast: true, presets: [[TypescriptPreset, { jsxPragma: "preserve", isTSX: true, allExtensions: true }]] }).code; return module_context_js; } TranscribeToSections() { const component = this.Transcribe(); const component_ast = core_1.transformSync(component, { filename: "script.tsx", ast: true, presets: [[TypescriptPreset, { jsxPragma: "preserve", isTSX: true, allExtensions: true }]] }).ast; let program = null; traverse_1.default(component_ast, { Program(path) { program = path; } }); const deps = FindAllImport(program); const import_section = import_section_1.TranslateImport(deps); const body = FindComponentBody(program); const script_section = script_section_1.TranslateScript(body); const template_section = template_section_1.TranslateTemplate(body); return { import_section, script_section, template_section }; } } exports.SvelteTranscriber = SvelteTranscriber; function FindAllImport(program) { const deps = program.get("body").filter(each => each.isImportDeclaration()); return deps; } exports.FindAllImport = FindAllImport; function FindComponentBody(program) { const statements = program.get("body").filter(each => !template_section_1.IsTemplate(each)); const component = statements.find(each => each.isExportDefaultDeclaration()); const body = component.get("declaration").get("body"); return body; } exports.FindComponentBody = FindComponentBody;