diff options
author | 2021-03-16 16:08:11 -0400 | |
---|---|---|
committer | 2021-03-16 16:08:11 -0400 | |
commit | 588b086a4dc45e717341e18728fff65a90ddf46c (patch) | |
tree | fbabfff761add5217963a3d341d68392bea2cccf /src/compiler/interfaces.ts | |
parent | 174fc1d669fea1cf8be0d873fdb232fd0169abe6 (diff) | |
download | astro-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.ts | 179 |
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; +} |