svelte-draft
Version:
Develop svelte app in typedraft
82 lines (81 loc) • 3.65 kB
JavaScript
;
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;