|
import { AssignmentExpression, 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' | 'RawMustacheTag'; |
|
expression: Node; |
|
} |
|
|
|
export interface Comment extends BaseNode { |
|
type: 'Comment'; |
|
data: string; |
|
ignores: string[]; |
|
} |
|
|
|
export interface ConstTag extends BaseNode { |
|
type: 'ConstTag'; |
|
expression: AssignmentExpression; |
|
} |
|
|
|
interface DebugTag extends BaseNode { |
|
type: 'DebugTag'; |
|
identifiers: Node[]; |
|
} |
|
|
|
export type DirectiveType = |
|
| 'Action' |
|
| 'Animation' |
|
| 'Binding' |
|
| 'Class' |
|
| 'StyleDirective' |
|
| 'EventHandler' |
|
| 'Let' |
|
| 'Ref' |
|
| 'Transition'; |
|
|
|
export interface BaseDirective extends BaseNode { |
|
type: DirectiveType; |
|
name: string; |
|
} |
|
|
|
interface BaseExpressionDirective extends BaseDirective { |
|
type: DirectiveType; |
|
expression: null | Node; |
|
name: string; |
|
modifiers: string[]; |
|
} |
|
|
|
export interface Element extends BaseNode { |
|
type: |
|
| 'InlineComponent' |
|
| 'SlotTemplate' |
|
| 'Title' |
|
| 'Slot' |
|
| 'Element' |
|
| 'Head' |
|
| 'Options' |
|
| 'Window' |
|
| 'Document' |
|
| 'Body'; |
|
attributes: Array<BaseDirective | Attribute | SpreadAttribute>; |
|
name: string; |
|
} |
|
|
|
export interface Attribute extends BaseNode { |
|
type: 'Attribute'; |
|
name: string; |
|
value: any[]; |
|
} |
|
|
|
export interface SpreadAttribute extends BaseNode { |
|
type: 'Spread'; |
|
expression: Node; |
|
} |
|
|
|
export interface Transition extends BaseExpressionDirective { |
|
type: 'Transition'; |
|
intro: boolean; |
|
outro: boolean; |
|
} |
|
|
|
export type Directive = BaseDirective | BaseExpressionDirective | Transition; |
|
|
|
export type TemplateNode = |
|
| Text |
|
| ConstTag |
|
| DebugTag |
|
| MustacheTag |
|
| BaseNode |
|
| Element |
|
| Attribute |
|
| SpreadAttribute |
|
| Directive |
|
| Transition |
|
| Comment; |
|
|
|
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: Program; |
|
} |
|
|
|
export interface Style extends BaseNode { |
|
type: 'Style'; |
|
attributes: any[]; |
|
children: any[]; |
|
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 EnableSourcemap = boolean | { js: boolean; css: boolean }; |
|
|
|
export type CssHashGetter = (args: { |
|
name: string; |
|
filename: string | undefined; |
|
css: string; |
|
hash: (input: string) => string; |
|
}) => string; |
|
|
|
export interface CompileOptions { |
|
|
|
|
|
|
|
|
|
|
|
|
|
name?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
filename?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generate?: 'dom' | 'ssr' | false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
errorMode?: 'throw' | 'warn'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
varsReport?: 'full' | 'strict' | false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sourcemap?: object | string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enableSourcemap?: EnableSourcemap; |
|
|
|
|
|
|
|
|
|
|
|
|
|
outputFilename?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
cssOutputFilename?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sveltePath?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
dev?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
accessors?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
immutable?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hydratable?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
legacy?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
customElement?: boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tag?: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
css?: 'injected' | 'external' | 'none' | boolean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loopGuardTimeout?: number; |
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace?: string; |
|
|
|
/** |
|
* A function that takes a `{ hash, css, name, filename }` argument and returns the string that is used as a classname for scoped CSS. |
|
* It defaults to returning `svelte-${hash(css)}`. |
|
* |
|
* @default undefined |
|
*/ |
|
cssHash?: CssHashGetter; |
|
|
|
/** |
|
* If `true`, your HTML comments will be preserved during server-side rendering. By default, they are stripped out. |
|
* |
|
* @default false |
|
*/ |
|
preserveComments?: boolean; |
|
|
|
/** |
|
* If `true`, whitespace inside and between elements is kept as you typed it, rather than removed or collapsed to a single space where possible. |
|
* |
|
* @default false |
|
*/ |
|
preserveWhitespace?: boolean; |
|
/** |
|
* If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`. |
|
* |
|
* @default true |
|
*/ |
|
discloseVersion?: boolean; |
|
} |
|
|
|
export interface ParserOptions { |
|
filename?: string; |
|
customElement?: boolean; |
|
css?: 'injected' | 'external' | 'none' | 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; |
|
/** the `bar` in `export { foo as bar }` or `export let bar` */ |
|
export_name?: string; |
|
/** true if assigned a boolean default value (`export let foo = true`) */ |
|
is_boolean?: boolean; |
|
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; |
|
} |
|
|
|
/** The returned shape of `compile` from `svelte/compiler` */ |
|
export interface CompileResult { |
|
/** The resulting JavaScript code from compling the component */ |
|
js: { |
|
/** Code as a string */ |
|
code: string; |
|
/** A source map */ |
|
map: any; |
|
}; |
|
/** The resulting CSS code from compling the component */ |
|
css: CssResult; |
|
/** The abstract syntax tree representing the structure of the component */ |
|
ast: Ast; |
|
/** |
|
* An array of warning objects that were generated during compilation. Each warning has several properties: |
|
* - code is a string identifying the category of warning |
|
* - message describes the issue in human-readable terms |
|
* - start and end, if the warning relates to a specific location, are objects with line, column and character properties |
|
* - frame, if applicable, is a string highlighting the offending code with line numbers |
|
* */ |
|
warnings: Warning[]; |
|
/** An array of the component's declarations used by tooling in the ecosystem (like our ESLint plugin) to infer more information */ |
|
vars: Var[]; |
|
/** An object used by the Svelte developer team for diagnosing the compiler. Avoid relying on it to stay the same! */ |
|
stats: { |
|
timings: { |
|
total: number; |
|
}; |
|
}; |
|
} |
|
|