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
|
|
} |