import { Src, Order, IAssertOption, ITaskContext, TaskSource, TaskString, IMap } from 'development-core'; import { Options, FileCallback } from 'browser-sync'; import * as karma from 'karma'; /** * jspm mate. * * @export * @interface ISystemjsMate */ export interface ISystemjsMate { loader: string; } export type FilePattern = karma.FilePattern | string; export type LoaderFilePattern = FilePattern[] | ((ctx: ITaskContext) => FilePattern[]); /** * jspm Option. * * @export * @interface SystemjsOption */ export interface SystemjsOption { /** * baseURL for test path. * * @type {TaskString} * @memberOf SystemjsOption */ baseURL?: TaskString; /** * config file. default use package setting. * * @type {TaskSource} * @memberOf SystemjsOption */ config?: TaskSource; /** * jspm package path. default use package setting. * * @type {TaskString} * @memberOf SystemjsOption */ packages?: TaskString; /** * systemjs files. * * @type {TaskSource} * @memberOf KarmaSystemjs */ systemjs?: TaskSource; } /** * karma jspm test config. * * @export * @interface KarmaSystemjs */ export interface KarmaSystemjs extends SystemjsOption { /** * baseURL for test path. * * @type {string} * @memberOf KarmaSystemjs */ baseURL?: string; /** * config file. default use package setting. * * @type {Src} * @memberOf KarmaSystemjs */ config?: Src; /** * jspm package path. default use package setting. * * @type {string} * @memberOf KarmaSystemjs */ packages?: string; /** * load test files. * * @type {FilePattern[]} * @memberOf KarmaSystemjs */ loadFiles?: FilePattern[] /** * server files. * * @type {FilePattern[]} * @memberOf KarmaSystemjs */ serveFiles?: FilePattern[]; /** * need jspm ^0.17 * * @type {string} * @memberOf KarmaSystemjs */ browser?: string; paths?: IMap; meta?: IMap; useBundles?: boolean; stripExtension?: string | boolean; cachePackages?: boolean; } /** * karma jspm test config. * * @export * @interface KarmaSystemjs */ export interface KarmaSystemjsOption extends SystemjsOption { /** * public resource to root. * * @type {TaskSource} * @memberOf KarmaSystemjsOption */ resource?: TaskSource; /** * load test files. * * @type {TaskSource} * @memberOf KarmaSystemjs */ loadFiles?: LoaderFilePattern /** * server files. * * @type {TaskSource} * @memberOf KarmaSystemjs */ serveFiles?: LoaderFilePattern; /** * need jspm ^0.17 * * @type {TaskString} * @memberOf KarmaSystemjs */ browser?: TaskString; paths?: IMap; meta?: IMap; useBundles?: boolean; stripExtension?: string | boolean; cachePackages?: boolean; karmaloader?: { name: string; template: string; } } export interface IBrowsersyncOption extends Options { /** * server load files. * * @type {(string | (string | FileCallback)[])} * @memberof IBrowsersyncOption */ files?: string | (string | FileCallback)[]; /** * get files by context. */ filesByCtx?: ((ctx: ITaskContext) => string | (string | FileCallback)[]); /** * server base dir. * * @type {TaskSource} * @memberOf IWebTaskOption */ baseDir?: TaskSource; /** * systemjs option. * * @type {SystemjsOption} * @memberof IBrowsersyncOption */ systemjs?: SystemjsOption; } export interface IKarmaOption { /** * karma jspm test * * @memberOf IWebTaskOption */ systemjs?: boolean | KarmaSystemjsOption | ((ctx: ITaskContext) => KarmaSystemjsOption); /** * karma test base path. default context dist. * * @type {TaskString} * @memberOf IWebTaskOption */ basePath?: TaskString; /** * karma config File * * @type {string} * @memberOf WebTaskOption */ configFile?: string; /** * karma test config setting. * @type {((ctx: ITaskContext) => karmaConfig)} * * @memberOf IWebTaskOption */ config?: ((ctx: ITaskContext) => karma.ConfigOptions); } export interface IWebTaskOption extends IAssertOption { browsersync?: IBrowsersyncOption; karma?: IKarmaOption; /** * force test */ forceTest?: boolean; test?: boolean; testOrder?: Order }