Skip to content

Commit

Permalink
use more proper flow type syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Jul 26, 2016
1 parent d83088a commit 3ce450b
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 160 deletions.
205 changes: 103 additions & 102 deletions flow/compiler.js
Original file line number Diff line number Diff line change
@@ -1,146 +1,147 @@
declare type CompilerOptions = {
warn?: Function, // allow customizing warning in different environments, e.g. node
isIE?: boolean, // for detecting IE SVG innerHTML bug
expectHTML?: boolean, // only false for non-web builds
modules?: Array<ModuleOptions>, // platform specific modules, e.g. style, class
staticKeys?: string, // a list of AST properties to be considered static, for optimization
directives?: { [key: string]: Function }, // platform specific directives
isUnaryTag?: (tag: string) => ?boolean, // check if a tag is unary for the platform
isReservedTag?: (tag: string) => ?boolean, // check if a tag is a native for the platform
mustUseProp?: (attr: string) => ?boolean, // check if an attribute should be bound as a property
getTagNamespace?: (tag: string) => ?string, // check the namespace for a tag
transforms?: Array<Function>, // a list of transforms on parsed AST before codegen
preserveWhitespace?: boolean,
warn?: Function; // allow customizing warning in different environments; e.g. node
isIE?: boolean; // for detecting IE SVG innerHTML bug
expectHTML?: boolean; // only false for non-web builds
modules?: Array<ModuleOptions>; // platform specific modules; e.g. style; class
staticKeys?: string; // a list of AST properties to be considered static; for optimization
directives?: { [key: string]: Function }; // platform specific directives
isUnaryTag?: (tag: string) => ?boolean; // check if a tag is unary for the platform
isReservedTag?: (tag: string) => ?boolean; // check if a tag is a native for the platform
mustUseProp?: (attr: string) => ?boolean; // check if an attribute should be bound as a property
getTagNamespace?: (tag: string) => ?string; // check the namespace for a tag
transforms?: Array<Function>; // a list of transforms on parsed AST before codegen
preserveWhitespace?: boolean;
shouldDecodeAttr?: boolean;

// runtime user-configurable
delimiters?: [string, string] // template delimiters
delimiters?: [string, string]; // template delimiters
}

declare type CompiledResult = {
ast: ?ASTElement,
render: string,
staticRenderFns: Array<string>,
errors?: Array<string>
ast: ?ASTElement;
render: string;
staticRenderFns: Array<string>;
errors?: Array<string>;
}

declare type CompiledFunctionResult = {
render: Function,
staticRenderFns: Array<Function>
render: Function;
staticRenderFns: Array<Function>;
}

declare type ModuleOptions = {
transformNode: (el: ASTElement) => void, // transform an element's AST node
genData: (el: ASTElement) => string, // generate extra data string for an element
transformCode?: (el: ASTElement, code: string) => string, // further transform generated code for an element
staticKeys?: Array<string> // AST properties to be considered static
transformNode: (el: ASTElement) => void; // transform an element's AST node
genData: (el: ASTElement) => string; // generate extra data string for an element
transformCode?: (el: ASTElement, code: string) => string; // further transform generated code for an element
staticKeys?: Array<string>; // AST properties to be considered static
}

declare type ASTElementHandler = {
value: string,
modifiers: ?{ [key: string]: true }
value: string;
modifiers: ?{ [key: string]: true };
}

declare type ASTElementHandlers = {
[key: string]: ASTElementHandler | Array<ASTElementHandler>
[key: string]: ASTElementHandler | Array<ASTElementHandler>;
}

declare type ASTElementHooks = { [key: string]: Array<string> }

declare type ASTDirective = {
name: string,
value: ?string,
arg: ?string,
modifiers: ?{ [key: string]: true }
name: string;
value: ?string;
arg: ?string;
modifiers: ?{ [key: string]: true };
}

declare type ASTNode = ASTElement | ASTText | ASTExpression

declare type ASTElement = {
type: 1,
tag: string,
attrsList: Array<{ name: string, value: string }>,
attrsMap: { [key: string]: string | null },
parent: ASTElement | void,
children: Array<ASTNode>,

static?: boolean,
staticRoot?: boolean,
staticProcessed?: boolean,

text?: string,
attrs?: Array<{ name: string, value: string }>,
props?: Array<{ name: string, value: string }>,
staticAttrs?: Array<{ name: string, value: string }>,
plain?: boolean,
pre?: true,
ns?: string,

component?: string,
keepAlive?: boolean,
inlineTemplate?: true,
transitionMode?: string | null,
slotName?: ?string,
slotTarget?: ?string,

ref?: string,
refInFor?: boolean,

if?: string,
ifProcessed?: boolean,
else?: true,
elseBlock?: ASTElement,

for?: string,
forProcessed?: boolean,
key?: string,
alias?: string,
iterator1?: string,
iterator2?: string,

staticClass?: string,
classBinding?: string,
styleBinding?: string,
hooks?: ASTElementHooks,
events?: ASTElementHandlers,
nativeEvents?: ASTElementHandlers,

transition?: string | true,
transitionOnAppear?: boolean,

directives?: Array<ASTDirective>,

forbidden?: true,
once?: true
type: 1;
tag: string;
attrsList: Array<{ name: string; value: string }>;
attrsMap: { [key: string]: string | null };
parent: ASTElement | void;
children: Array<ASTNode>;

static?: boolean;
staticRoot?: boolean;
staticProcessed?: boolean;

text?: string;
attrs?: Array<{ name: string; value: string }>;
props?: Array<{ name: string; value: string }>;
staticAttrs?: Array<{ name: string; value: string }>;
plain?: boolean;
pre?: true;
ns?: string;

component?: string;
keepAlive?: boolean;
inlineTemplate?: true;
transitionMode?: string | null;
slotName?: ?string;
slotTarget?: ?string;

ref?: string;
refInFor?: boolean;

if?: string;
ifProcessed?: boolean;
else?: true;
elseBlock?: ASTElement;

for?: string;
forProcessed?: boolean;
key?: string;
alias?: string;
iterator1?: string;
iterator2?: string;

staticClass?: string;
classBinding?: string;
styleBinding?: string;
hooks?: ASTElementHooks;
events?: ASTElementHandlers;
nativeEvents?: ASTElementHandlers;

transition?: string | true;
transitionOnAppear?: boolean;

directives?: Array<ASTDirective>;

forbidden?: true;
once?: true;
}

declare type ASTExpression = {
type: 2,
expression: string,
text: string,
static?: boolean
type: 2;
expression: string;
text: string;
static?: boolean;
}

declare type ASTText = {
type: 3,
text: string,
static?: boolean
type: 3;
text: string;
static?: boolean;
}

// SFC-parser related declarations

// an object format describing a single-file component.
declare type SFCDescriptor = {
template: ?SFCBlock,
script: ?SFCBlock,
styles: Array<SFCBlock>
template: ?SFCBlock;
script: ?SFCBlock;
styles: Array<SFCBlock>;
}

declare type SFCBlock = {
type: string,
content: string,
start?: number,
end?: number,
lang?: string,
src?: string,
scoped?: boolean
type: string;
content: string;
start?: number;
end?: number;
lang?: string;
src?: string;
scoped?: boolean;
}
86 changes: 43 additions & 43 deletions flow/options.js
Original file line number Diff line number Diff line change
@@ -1,68 +1,68 @@
declare type InternalComponentOptions = {
_isComponent: true,
parent: Component,
propsData: ?Object,
_parentVnode: VNode,
_parentListeners: ?Object,
_renderChildren: ?VNodeChildren,
_componentTag: ?string,
render?: Function,
_isComponent: true;
parent: Component;
propsData: ?Object;
_parentVnode: VNode;
_parentListeners: ?Object;
_renderChildren: ?VNodeChildren;
_componentTag: ?string;
render?: Function;
staticRenderFns?: Array<Function>
}

declare type ComponentOptions = {
// data
data: Object | Function | void,
props?: { [key: string]: PropOptions },
propsData?: ?Object,
data: Object | Function | void;
props?: { [key: string]: PropOptions };
propsData?: ?Object;
computed?: {
[key: string]: Function | {
get?: Function,
set?: Function,
get?: Function;
set?: Function;
cache?: boolean
}
},
};
methods?: {
[key: string]: Function
},
};
watch?: {
[key: string]: Function | string
},
};
// DOM
el?: string | Element,
template?: string,
render: () => VNode,
staticRenderFns?: Array<() => VNode>,
el?: string | Element;
template?: string;
render: () => VNode;
staticRenderFns?: Array<() => VNode>;
// lifecycle
init?: Function,
created?: Function,
beforeMount?: Function,
mounted?: Function,
beforeUpdate?: Function,
updated?: Function,
init?: Function;
created?: Function;
beforeMount?: Function;
mounted?: Function;
beforeUpdate?: Function;
updated?: Function;
// assets
directives?: { [key: string]: Object },
components?: { [key: string]: Class<Component> },
transitions?: { [key: string]: Object },
filters?: { [key: string]: Function },
directives?: { [key: string]: Object };
components?: { [key: string]: Class<Component> };
transitions?: { [key: string]: Object };
filters?: { [key: string]: Function };
// misc
parent?: Component,
mixins?: Array<Object>,
name?: string,
extends?: Class<Component> | Object,
delimiters?: [string, string],
parent?: Component;
mixins?: Array<Object>;
name?: string;
extends?: Class<Component> | Object;
delimiters?: [string, string];

// private
_isComponent?: true,
_propKeys?: Array<string>,
_parentVnode?: VNode,
_parentListeners?: ?Object,
_isComponent?: true;
_propKeys?: Array<string>;
_parentVnode?: VNode;
_parentListeners?: ?Object;
_renderChildren?: ?VNodeChildren
}

declare type PropOptions = {
type: Function | Array<Function> | null,
default: any,
required: ?boolean,
validator: ?Function
type: Function | Array<Function> | null;
default: any;
required: ?boolean;
validator: ?Function;
}

0 comments on commit 3ce450b

Please sign in to comment.