summaryrefslogtreecommitdiff
path: root/src/compiler/interfaces.ts
diff options
context:
space:
mode:
authorGravatar Matthew Phillips <matthew@matthewphillips.info> 2021-03-16 16:08:11 -0400
committerGravatar GitHub <noreply@github.com> 2021-03-16 16:08:11 -0400
commit588b086a4dc45e717341e18728fff65a90ddf46c (patch)
treefbabfff761add5217963a3d341d68392bea2cccf /src/compiler/interfaces.ts
parent174fc1d669fea1cf8be0d873fdb232fd0169abe6 (diff)
downloadastro-588b086a4dc45e717341e18728fff65a90ddf46c.tar.gz
astro-588b086a4dc45e717341e18728fff65a90ddf46c.tar.zst
astro-588b086a4dc45e717341e18728fff65a90ddf46c.zip
Bring compiler into Astro (#4)
* include source compiler * Import from JS * Conditionally use the instance contents Co-authored-by: Fred K. Schott <fkschott@gmail.com>
Diffstat (limited to 'src/compiler/interfaces.ts')
-rw-r--r--src/compiler/interfaces.ts179
1 files changed, 179 insertions, 0 deletions
diff --git a/src/compiler/interfaces.ts b/src/compiler/interfaces.ts
new file mode 100644
index 000000000..dcc943141
--- /dev/null
+++ b/src/compiler/interfaces.ts
@@ -0,0 +1,179 @@
+import { Node, Program } from 'estree';
+import { SourceMap } from 'magic-string';
+
+interface BaseNode {
+ start: number;
+ end: number;
+ type: string;
+ children?: TemplateNode[];
+ [prop_name: string]: any;
+}
+
+export interface Fragment extends BaseNode {
+ type: 'Fragment';
+ children: TemplateNode[];
+}
+
+export interface Text extends BaseNode {
+ type: 'Text';
+ data: string;
+}
+
+export interface MustacheTag extends BaseNode {
+ type: 'MustacheTag';
+ expression: string;
+}
+
+export type DirectiveType = 'Action'
+| 'Animation'
+| 'Binding'
+| 'Class'
+| 'EventHandler'
+| 'Let'
+| 'Ref'
+| 'Transition';
+
+interface BaseDirective extends BaseNode {
+ type: DirectiveType;
+ expression: null | Node;
+ name: string;
+ modifiers: string[];
+}
+
+export interface Transition extends BaseDirective{
+ type: 'Transition';
+ intro: boolean;
+ outro: boolean;
+}
+
+export type Directive = BaseDirective | Transition;
+
+export type TemplateNode = Text
+| MustacheTag
+| BaseNode
+| Directive
+| Transition;
+
+export interface Parser {
+ readonly template: string;
+ readonly filename?: string;
+
+ index: number;
+ stack: Node[];
+
+ html: Node;
+ css: Node;
+ js: Node;
+ meta_tags: {};
+}
+
+export interface Script extends BaseNode {
+ type: 'Script';
+ context: string;
+ content: string;
+}
+
+export interface Style extends BaseNode {
+ type: 'Style';
+ attributes: any[]; // TODO
+ content: {
+ start: number;
+ end: number;
+ styles: string;
+ };
+}
+
+export interface Ast {
+ html: TemplateNode;
+ css: Style;
+ instance: Script;
+ module: Script;
+}
+
+export interface Warning {
+ start?: { line: number; column: number; pos?: number };
+ end?: { line: number; column: number };
+ pos?: number;
+ code: string;
+ message: string;
+ filename?: string;
+ frame?: string;
+ toString: () => string;
+}
+
+export type ModuleFormat = 'esm' | 'cjs';
+
+export type CssHashGetter = (args: {
+ name: string;
+ filename: string | undefined;
+ css: string;
+ hash: (input: string) => string;
+}) => string;
+
+export interface CompileOptions {
+ format?: ModuleFormat;
+ name?: string;
+ filename?: string;
+ generate?: 'dom' | 'ssr' | false;
+
+ sourcemap?: object | string;
+ outputFilename?: string;
+ cssOutputFilename?: string;
+ sveltePath?: string;
+
+ dev?: boolean;
+ accessors?: boolean;
+ immutable?: boolean;
+ hydratable?: boolean;
+ legacy?: boolean;
+ customElement?: boolean;
+ tag?: string;
+ css?: boolean;
+ loopGuardTimeout?: number;
+ namespace?: string;
+ cssHash?: CssHashGetter;
+
+ preserveComments?: boolean;
+ preserveWhitespace?: boolean;
+}
+
+export interface ParserOptions {
+ filename?: string;
+ customElement?: boolean;
+}
+
+export interface Visitor {
+ enter: (node: Node) => void;
+ leave?: (node: Node) => void;
+}
+
+export interface AppendTarget {
+ slots: Record<string, string>;
+ slot_stack: string[];
+}
+
+export interface Var {
+ name: string;
+ export_name?: string; // the `bar` in `export { foo as bar }`
+ injected?: boolean;
+ module?: boolean;
+ mutated?: boolean;
+ reassigned?: boolean;
+ referenced?: boolean; // referenced from template scope
+ referenced_from_script?: boolean; // referenced from script
+ writable?: boolean;
+
+ // used internally, but not exposed
+ global?: boolean;
+ internal?: boolean; // event handlers, bindings
+ initialised?: boolean;
+ hoistable?: boolean;
+ subscribable?: boolean;
+ is_reactive_dependency?: boolean;
+ imported?: boolean;
+}
+
+export interface CssResult {
+ code: string;
+ map: SourceMap;
+}