use std::collections::{BTreeSet, HashMap, HashSet};
use oxc_ast::ast::{Declaration, Expression as OxcExpression, Statement as OxcStatement};
use oxc_codegen::{Codegen, Context, Gen};
use oxc_span::GetSpan;
use crate::api::GenerateTarget;
use crate::ast::modern::{
Alternate, Attribute, AttributeValue, AttributeValueKind, Component as ComponentNode,
EachBlock, Fragment, IfBlock, Node,
RegularElement, Root, Script, SnippetBlock, SvelteElement,
};
use crate::js::{Render, codegen_options};
use super::{
SourceReplacement, oxc_codegen_for, oxc_state_call_argument, replace_source_ranges,
};
use super::static_markup::{component_name_from_filename, escape_js_template_literal};
#[derive(Debug)]
pub(super) struct RuneCallInfo {
pub rune: &'static str,
pub argument: String,
}
#[derive(Debug)]
pub(super) struct ServerAsyncRunInfo {
pub run_slot_count: usize,
pub async_vars: Vec<String>,
pub state_vars: Vec<String>,
pub has_sync_derived: bool,
pub promise_var: String,
}
#[derive(Debug)]
pub(super) struct InstanceScriptResult {
pub body: String,
pub async_run_info: Option<ServerAsyncRunInfo>,
}
mod state;
use state::*;
mod util;
use util::*;
mod server;
use server::*;
mod instance;
use instance::*;
mod client;
use client::*;
pub(crate) fn compile_dynamic_markup_js(ctx: &super::ComponentCodegenContext<'_>) -> Option<String> {
let _ = ctx.hmr; let component_name = component_name_from_filename(ctx.filename);
match ctx.target {
GenerateTarget::Client => compile_client(ctx.source, ctx.root, ctx.runes_mode, &component_name),
GenerateTarget::Server => compile_server(ctx.source, ctx.root, ctx.runes_mode, &component_name),
GenerateTarget::None => Some(String::new()),
}
}