mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			387 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			387 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| // Utilities
 | |
| 
 | |
| class ArrayMap {
 | |
| 	get: (key: any) => any;
 | |
| 	set: (key: any, value: any) => ArrayMap;
 | |
| 	remove: (key: any) => Boolean;
 | |
| 	clone: () => ArrayMap;
 | |
| }
 | |
| 
 | |
| class Tabable {
 | |
| 	static mixin: (pt: ClassPrototype) => void;
 | |
| 	applyPlugins: (name: String, args...) => void;
 | |
| 	applyPluginsAsync: (name: String, args..., callback: (err) => void) => void;
 | |
| 	applyPluginsBailResult: (name: String, args...) => void;
 | |
| 	addPlugin: (name: String, fn: (...) => any) => void
 | |
| }
 | |
| 
 | |
| class Plugin {
 | |
| 	apply: (tabable: Tabable) => void;
 | |
| }
 | |
| 
 | |
| // Module and Dependency stuff
 | |
| 
 | |
| class DependenciesBlock {
 | |
| 	dependencies: Dependency[];
 | |
| 	blocks: AsyncDependenciesBlock[];
 | |
| 	variables: Object; // Map<String, String>
 | |
| 
 | |
| 	addBlock: (block: AsyncDependenciesBlock) => void;
 | |
| 	addDependency: (dependency: Dependency) => void;
 | |
| 	addVariable: (name: String, expression: String) => void;
 | |
| 	updateHash: (hash: crypto.Hash) => void;
 | |
| }
 | |
| 
 | |
| class Module extends DependenciesBlock {
 | |
| 	abstract identifier: () => String;
 | |
| 	abstract build: (options: Options, callback: (err) => void) => void;
 | |
| 	abstract source: (template: ModuleTemplate) => Source;
 | |
| 	abstract size: () => Number;
 | |
| 
 | |
| 	separable: () => Boolean;
 | |
| 	abstract separateBuild: (options: Options, executor: Executor, callback: (err) => void) => void;
 | |
| 
 | |
| 	context: String;
 | |
| 	reasons: ModuleReason[];
 | |
| 	addReason: (reason: ModuleReason) => void;
 | |
| 	id: String;
 | |
| 	chunks: Chunk[];
 | |
| 	addChunk(chunk: Chunk) => void;
 | |
| }
 | |
| 
 | |
| class NormalModule extends Module {
 | |
| 	constructor(public request: String, preLoaders: String[], loaders: String[], postLoaders: String[]);
 | |
| 	identifier;
 | |
| 	build;
 | |
| 	source;
 | |
| 	size;
 | |
| }
 | |
| 
 | |
| class ContextModule extends Module {
 | |
| 	constructor(
 | |
| 		public request: String,
 | |
| 		public recursive: Boolean,
 | |
| 		public regExp: String
 | |
| 	);
 | |
| 	identifier;
 | |
| 	build;
 | |
| 	source;
 | |
| 	size;
 | |
| }
 | |
| 
 | |
| class Dependency {
 | |
| 	public module: Module;
 | |
| 
 | |
| 	public Class: Class;
 | |
| 	public loc: { line: int, col: int };
 | |
| 	public optional: Boolean;
 | |
| 
 | |
| 	public isEqualResource: (other: Dependency) => Boolean;
 | |
| 	public updateHash: (hash: crypto.Hash) => void;
 | |
| }
 | |
| 
 | |
| class ModuleDependency {
 | |
| 	constructor(public request: String);
 | |
| 	isEqualResource;
 | |
| }
 | |
| 
 | |
| class CommonJsRequireDependency extends ModuleDependency {}
 | |
| class AMDRequireDependency extends ModuleDependency {}
 | |
| class AMDDefineDependency extends ModuleDependency {}
 | |
| class RequireEnsureDependency extends ModuleDependency {}
 | |
| class RequireResolveDependency extends ModuleDependency {}
 | |
| 
 | |
| class ContextDependency {
 | |
| 	constructor(
 | |
| 		public request: String,
 | |
| 		public recursive: Boolean,
 | |
| 		public regExp: String
 | |
| 	);
 | |
| 	isEqual;
 | |
| }
 | |
| 
 | |
| class CommonJsExpressionRequireDependency extends ContextDependency {}
 | |
| class AMDExpressionRequireDependency extends ContextDependency {}
 | |
| class AMDExpressionDefineDependency extends ContextDependency {}
 | |
| class ExpressionRequireEnsureDependency extends ContextDependency {}
 | |
| class ExpressionRequireResolveDependency extends ContextDependency {}
 | |
| class RequireContextDependency extends ContextDependency {}
 | |
| class RequireExpressionDependency extends ContextDependency {}
 | |
| 
 | |
| 
 | |
| class AsyncDependenciesBlock extends DependenciesBlock {
 | |
| 	constructor(public name: String);
 | |
| 	public chunk: Chunk;
 | |
| }
 | |
| 
 | |
| class Chunk {
 | |
| 	constructor(public name: String);
 | |
| 	public id: Number;
 | |
| 	public addModule(module: Module) => Boolean;
 | |
| 	public addChunk(chunk: Chunk) => void;
 | |
| }
 | |
| 
 | |
| // Source stuff
 | |
| 
 | |
| interface Source {
 | |
| 	source: () => String;
 | |
| 	map: () => String;
 | |
| 	origins: () => any; // Map<String, Source>
 | |
| }
 | |
| 
 | |
| class StringSource implements Source {
 | |
| 	constructor(str: String);
 | |
| 	source: () => String;
 | |
| }
 | |
| 
 | |
| // Compilation stuff
 | |
| 
 | |
| class Compilation {
 | |
| 	constructor(public options: CompilationOptions);
 | |
| 
 | |
| 	public dependencyFactories: ArrayMap;
 | |
| 	public moduleTemplate: ModuleTemplate;
 | |
| 	public chunkTemplate: ChunkTemplate;
 | |
| 	public mainTemplate: MainTemplate;
 | |
| 
 | |
| 
 | |
| 	public entry: Module;
 | |
| 	public chunks: Chunk[];
 | |
| 	public namedChunks: Object; // Map<String, Chunk>
 | |
| 	public assets: Object; // Map<String, String | Buffer>
 | |
| 
 | |
| 	public process: (context: String, entry: Dependency, callback: (err) => void) => void;
 | |
| 	public getStats: () => Stats;
 | |
| 
 | |
| 	protected addModule(module: Module) => Boolean;
 | |
| 	protected getModule(module: Module) => Module;
 | |
| 	protected buildModule(module: Module, callback: (err) => void) => void;
 | |
| 	protected processModuleDependencies(module: Module, callback: (err) => void) => void;
 | |
| }
 | |
| 
 | |
| interface ModuleFactory {
 | |
| 	create: (context: String, dependency: Dependency, callback: (err, Module) => void) => void;
 | |
| }
 | |
| 
 | |
| class NormalModuleFactory {
 | |
| 	constructor(resolver, moduleOptions);
 | |
| 	create;
 | |
| }
 | |
| 
 | |
| class ContextModuleFactory {
 | |
| 	constructor(resolver, contextOptions);
 | |
| 	create;
 | |
| }
 | |
| 
 | |
| // Parser stuff
 | |
| 
 | |
| class Parser extends Tabable {
 | |
| 	parse: (source: String) => Object;
 | |
| 
 | |
| 	scope: {
 | |
| 		inTry: Boolean;
 | |
| 	};
 | |
| 	state: Object;
 | |
| 
 | |
| 	waltStatements: (statements: Statement[]) => void;
 | |
| 	walkStatement: (statement: Statement) => void;
 | |
| 	walkSwitchCases: (switchCases: SwitchCase[]) => void;
 | |
| 	walkCatchClauses: (catchClauses: CatchClause[]) => void;
 | |
| 	walkVariableDeclarators: (declarators: Declarator[]) => void;
 | |
| 	walkExpressions: (expressions: Expression[]) => void;
 | |
| 	walkExpression: (expression: Expression) => void;
 | |
| 
 | |
| 	inScope: (params: Expression[], fn: () => void) => void;
 | |
| 
 | |
| 	evaluateExpression: (expression: Expression) => EvaluatedExpression;
 | |
| 
 | |
| 	// parseStringArray: (expression: Expression) => String[];
 | |
| 	// parseString: (expression: Expression) => String;
 | |
| 	// parseCalculatedStringArray: (expression: Expression) => CalculatedString[];
 | |
| 	// parseCalculatedString: (expression: Expression) => CalculatedString;
 | |
| 
 | |
| 	tab "call *": (expr) => void; // * = methodName, i.e. "require", "require.ensure"
 | |
| 	tab "expression *": (expr) => void; // * =
 | |
| 	tab "evaluate *": (expr) => void;
 | |
| }
 | |
| 
 | |
| interface EvaluatedExpression {
 | |
| 	isString: () => Boolean;
 | |
| 	isNumber: () => Boolean;
 | |
| 	isRegExp: () => Boolean;
 | |
| 	isConditional: () => Boolean;
 | |
| 	isArray: () => Boolean;
 | |
| 	isWrapped: () => Boolean;
 | |
| 
 | |
| 	range: Number[2];
 | |
| 
 | |
| 	// isConditional
 | |
| 	options: EvaluatedExpression[];
 | |
| 
 | |
| 	// isArray
 | |
| 	items: EvaluatedExpression[];
 | |
| 
 | |
| 	// isConstant && isString
 | |
| 	string: String;
 | |
| 
 | |
| 	// isConstant && isNumber
 | |
| 	number: Number;
 | |
| 
 | |
| 	// isConstant && isRegExp
 | |
| 	regExp: RegExp;
 | |
| 
 | |
| 	// !isConstant && isWrapped
 | |
| 	prefix: EvaluatedExpression;
 | |
| 
 | |
| 	// !isConstant && isWrapped
 | |
| 	postfix: EvaluatedExpression;
 | |
| }
 | |
| 
 | |
| type CalculatedString {
 | |
| 	range: Number[];
 | |
| 	value: String;
 | |
| 	code: Boolean;
 | |
| }
 | |
| 
 | |
| // Options stuff
 | |
| 
 | |
| interface CompilationOptions {
 | |
| 
 | |
| 	context: String;
 | |
| 	entry: String;
 | |
| 	resolve: ResolveOptions;
 | |
| 
 | |
| 	module: {
 | |
| 		preLoaders: MatchableLoader[];
 | |
| 		postLoaders: MatchableLoader[];
 | |
| 		loaders: MatchableLoader[];
 | |
| 		loader: Object;
 | |
| 		parse: ParseOptions;
 | |
| 	};
 | |
| 
 | |
| 	optimize: {
 | |
| 		maxChunks: Number;
 | |
| 		chunkOverhead: Number;
 | |
| 		entryChunkMultiplicator: Number;
 | |
| 	};
 | |
| 
 | |
| 	debug: Boolean;
 | |
| 	devtool: false | "eval" | "sourcemap";
 | |
| 	minimize: UglifyJs2Options;
 | |
| 
 | |
| 	separate: {
 | |
| 
 | |
| 	};
 | |
| 
 | |
| 	output: {
 | |
| 		path: String;
 | |
| 		publicPath: String;
 | |
| 		filename: String;
 | |
| 		chunkFilename: String;
 | |
| 		namedChunkFilename: String;
 | |
| 		pathinfo: Boolean;
 | |
| 		jsonpFunction?: String;
 | |
| 		libraryName?: String;
 | |
| 	};
 | |
| 
 | |
| }
 | |
| 
 | |
| interface ResolveOptions {
 | |
| 	paths: String[];
 | |
| 	modulesDirectories: String[];
 | |
| 
 | |
| 	resourcePaths: String[];
 | |
| 	resourceModulesDirectories: String[];
 | |
| 	alias: Object; // Map<String, String>
 | |
| 	extensions: String[];
 | |
| 	packageMains: String[];
 | |
| 
 | |
| 	loaderPaths: String[];
 | |
| 	loaderModulesDirectories: String[];
 | |
| 	loaderAlias: Object; // Map<String, String>
 | |
| 	loaderPostfixes: String[];
 | |
| 	loaderExtensions: String[];
 | |
| 	loaderPackageMains: String[];
 | |
| 
 | |
| 	disableLoaders: Boolean;
 | |
| 	disableResourceQuery: Boolean;
 | |
| 	disableResourcePureQuery: Boolean;
 | |
| 	disableLoaderQuery: Boolean;
 | |
| }
 | |
| 
 | |
| interface MatchableLoader {
 | |
| 	test: StringOrRegExp | StringOrRegExp[];
 | |
| 	include?: StringOrRegExp | StringOrRegExp[];
 | |
| 	exclude?: StringOrRegExp | StringOrRegExp[];
 | |
| 	loader: String;
 | |
| }
 | |
| 
 | |
| // Compiler stuff
 | |
| 
 | |
| interface Resolver {
 | |
| 	resolveModuleRequest: (context: String, request: String, callback: (err, request) => void) => void;
 | |
| 	resolveContextRequest: (context: String, request: String, callback: (err, request) => void) => void;
 | |
| 	resolveLoader: (context: String, request: String, callback: (err, request) => void) => void;
 | |
| }
 | |
| 
 | |
| interface Executor {
 | |
| 	static availible: () => Boolean;
 | |
| 	ready: () => Boolean;
 | |
| 	execute: (
 | |
| 		module: String;
 | |
| 		params: Object[];
 | |
| 		callback: (err, results...) => void
 | |
| 	) => void;
 | |
| }
 | |
| 
 | |
| interface CompilationOptimizer {
 | |
| 	optimize(compilation: Compilation, callback: (err) => void);
 | |
| }
 | |
| 
 | |
| interface FileEmitter {
 | |
| 	emitFile(name: String, content: Buffer | String, callback: (err) => void) => void;
 | |
| }
 | |
| 
 | |
| class Compiler {
 | |
| 	constructor(options);
 | |
| 
 | |
| 	resolver: Resolver;
 | |
| 	separateExecutor: Executor;
 | |
| 	optimizers: CompilationOptimizer[];
 | |
| 	dependencyTemplates: ArrayMap; // Dependency Class -> DependencyTemplate
 | |
| 	moduleTemplate: ModuleTemplate;
 | |
| 	chunkTemplate: ChunkTemplate;
 | |
| 	mainTemplate: ChunkTemplate;
 | |
| 	fileEmitter: FileEmitter;
 | |
| 
 | |
| 	plugins: CompilationPlugin[];
 | |
| 
 | |
| 	run(callback: (err, stats: Stats) => void) => void;
 | |
| }
 | |
| 
 | |
| // Node specifiy stuff
 | |
| 
 | |
| class NodeSubProcessExecutor implements Executor {
 | |
| 	static availible;
 | |
| 	constructor(count: Number);
 | |
| 	ready;
 | |
| 	execute;
 | |
| }
 | |
| 
 | |
| class NodeFileEmitter implements FileEmitter {
 | |
| 	constructor(outputPath: String);
 | |
| 	emitFile;
 | |
| }
 | |
| 
 | |
| class NodeResolver implements Resolver {
 | |
| 	constructor(options: ResolveOptions);
 | |
| 	resolveModuleRequest;
 | |
| 	resolveContextRequest;
 | |
| 	resolveLoader;
 | |
| }
 | |
| 
 | |
| class NodeCompiler {
 | |
| 	constructor(options);
 | |
| 
 | |
| 	resolver: NodeResolver
 | |
| } |