development-core
Advanced tools
Comparing version 0.5.5 to 0.5.8
@@ -1,2 +0,2 @@ | ||
"use strict";function bindingConfig(e){return e.oper||(e.oper=currentOperation(e.env)),e.fileFilter=e.fileFilter||utils_1.files,e.runSequence=e.runSequence||taskSequence_1.runSequence,e.addToSequence=e.addToSequence||taskSequence_1.addToSequence,e.generateTask=e.generateTask||function(n,r){return generateTask_1.generateTask(n,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTasks=e.findTasks||function(n,r){return decorator_1.findTasksInModule(n,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTasksInDir=e.findTasksInDir||function(n,r){return decorator_1.findTasksInDir(n,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTaskDefine=e.findTaskDefine||decorator_1.findTaskDefineInModule.bind(e),e.findTaskDefineInDir=e.findTaskDefineInDir||decorator_1.findTaskDefineInDir.bind(e),e.subTaskName=e.subTaskName||function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t="";_.isString(n)?t=n:n&&(t=utils_1.taskStringVal(n.name,e.oper));var i=utils_1.taskStringVal(e.option.name,e.oper);return i?i+"-"+(t||r):t},e.getSrc=e.getSrc||function(n){var r=void 0;return n&&(r=utils_1.taskSourceVal(n.src,e.oper)),r||(r=utils_1.taskSourceVal(e.option.src,e.oper)),r},e.getDist=e.getDist||function(n){if(n){var r=getCurrentDist(n,e.oper);if(r)return r}return getCurrentDist(e.option,e.oper)},e}function currentOperation(e){var n=void 0;return n=e.deploy?TaskConfig_1.Operation.deploy:e.release?TaskConfig_1.Operation.release:e.e2e?TaskConfig_1.Operation.e2e:e.test?TaskConfig_1.Operation.test:TaskConfig_1.Operation.build}function getCurrentDist(e,n){var r=void 0;switch(n){case TaskConfig_1.Operation.build:r=e.build||utils_1.taskStringVal(e.dist,n);break;case TaskConfig_1.Operation.test:r=e.test||e.build||utils_1.taskStringVal(e.dist,n);break;case TaskConfig_1.Operation.e2e:r=e.e2e||e.build||utils_1.taskStringVal(e.dist,n);break;case TaskConfig_1.Operation.release:r=e.release||utils_1.taskStringVal(e.dist,n);break;case TaskConfig_1.Operation.deploy:r=e.deploy||utils_1.taskStringVal(e.dist,n);break;default:r=""}return r}var _=require("lodash"),TaskConfig_1=require("./TaskConfig"),generateTask_1=require("./generateTask"),taskSequence_1=require("./taskSequence"),utils_1=require("./utils"),decorator_1=require("./decorator");exports.bindingConfig=bindingConfig,exports.currentOperation=currentOperation; | ||
"use strict";function bindingConfig(e){return e.oper||(e.oper=currentOperation(e.env)),e.fileFilter=e.fileFilter||utils_1.files,e.runSequence=e.runSequence||taskSequence_1.runSequence,e.addToSequence=e.addToSequence||taskSequence_1.addToSequence,e.generateTask=e.generateTask||function(t,r){return generateTask_1.generateTask(t,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTasks=e.findTasks||function(t,r){return decorator_1.findTasksInModule(t,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTasksInDir=e.findTasksInDir||function(t,r){return decorator_1.findTasksInDir(t,_.extend({oper:e.oper,watch:e.env.watch},r||{}))},e.findTaskDefine=e.findTaskDefine||decorator_1.findTaskDefineInModule.bind(e),e.findTaskDefineInDir=e.findTaskDefineInDir||decorator_1.findTaskDefineInDir.bind(e),e.subTaskName=e.subTaskName||function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n="";_.isString(t)?n=t:t&&(n=utils_1.taskStringVal(t.name,e.oper));var i=utils_1.taskStringVal(e.option.name,e.oper);return i?i+"-"+(n||r):n},e.getSrc=e.getSrc||function(t,r){var n=void 0;return t&&(n=utils_1.taskSourceVal(getAssertSrc(t,r),e.oper)),n||(n=utils_1.taskSourceVal(getAssertSrc(e.option,r),e.oper)),n},e.getDist=e.getDist||function(t){if(t){var r=getCurrentDist(t,e.oper);if(r)return r}return getCurrentDist(e.option,e.oper)},e}function currentOperation(e){var t=void 0;return t=e.deploy?TaskConfig_1.Operation.deploy:e.release?TaskConfig_1.Operation.release:e.e2e?TaskConfig_1.Operation.e2e:e.test?TaskConfig_1.Operation.test:TaskConfig_1.Operation.build}function getAssertSrc(e,t){var r=null;return t&&(t.test?r=e.testSrc:t.e2e?r=e.e2eSrc:t.watch&&(r=e.watchSrc)),r||e.src}function getCurrentDist(e,t){var r=void 0;switch(t){case TaskConfig_1.Operation.build:r=e.buildDist||utils_1.taskStringVal(e.dist,t);break;case TaskConfig_1.Operation.test:r=e.testDist||e.buildDist||utils_1.taskStringVal(e.dist,t);break;case TaskConfig_1.Operation.e2e:r=e.e2eDist||e.buildDist||utils_1.taskStringVal(e.dist,t);break;case TaskConfig_1.Operation.release:r=e.releaseDist||utils_1.taskStringVal(e.dist,t);break;case TaskConfig_1.Operation.deploy:r=e.deployDist||utils_1.taskStringVal(e.dist,t);break;default:r=""}return r}var _=require("lodash"),TaskConfig_1=require("./TaskConfig"),generateTask_1=require("./generateTask"),taskSequence_1=require("./taskSequence"),utils_1=require("./utils"),decorator_1=require("./decorator");exports.bindingConfig=bindingConfig,exports.currentOperation=currentOperation; | ||
//# sourceMappingURL=sourcemaps/bindingConfig.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function generateTask(e,n){var t=[];return _.each(_.isArray(e)?e:[e],function(e){if(!(n&&n.oper&&e.oper&&(e.oper&n.oper)<=0)&&utils_1.matchTaskGroup(e,n))if(e.watchTasks&&(e.watch=e.watch||!!e.watchTasks),e.watch){if(!n||!n.watch)return;e.watch===n.watch&&t.push(createWatchTask(e))}else _.isFunction(e.task)?t.push(createTask(e)):t.push(createPipesTask(e))}),t}function createTask(e){var n=function(n,t){var r=n.subTaskName(e.name);return console.log("register custom dynamic task:",chalk.cyan(r)),t.task(r,function(){return e.task(n,e,t)}),r};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}function createWatchTask(e){var n=function(n,t){var r=_.isFunction(e.watchTasks)?e.watchTasks(n):e.watchTasks;_.isFunction(_.last(r))||r.push(function(t){e.watchChanged&&e.watchChanged(t,n)}),r=_.map(r,function(e){return _.isString(e)?n.subTaskName(e):e});var a=n.subTaskName(e);return console.log("register watch dynamic task:",chalk.cyan(a)),t.task(a,function(){console.log("watch, src:",chalk.cyan.call(chalk,n.option.src)),t.watch(n.getSrc(e),r)}),a};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}function createPipesTask(e){var n=function(n,t){var r=n.subTaskName(e);return console.log("register pipes dynamic task:",chalk.cyan(r)),t.task(r,function(){var r=Promise.resolve(t.src(n.getSrc(e)));return e.pipes?!function(){var a=_.isFunction(e.pipes)?e.pipes(n,e,t):e.pipes;r=r.then(function(r){return Promise.all(_.map(a,function(r){return _.isFunction(r)?r(n,e,t):r})).then(function(e){return _.each(e,function(e){r=r.pipe(e)}),r})})}():e.pipe&&(r=r.then(function(t){return new Promise(function(r,a){return e.pipe(t,n,e,function(e){e?a(e):r(t)})})})),r=null!==e.output?r.then(function(r){if(e.output){var a=_.isFunction(e.output)?e.output(n,e):e.output;return Promise.all(_.map(a,function(a){return Promise.resolve(_.isFunction(a)?a(r,n,e,t):a).then(function(e){return new Promise(function(n,t){e.once("end",function(){n(e)}).once("error",t)})})}))}return new Promise(function(a,c){var o=t.dest(n.getDist(e));r.pipe(o).once("end",function(){a(o)}).once("error",c)})}):r.then(function(e){return new Promise(function(n,t){e.once("end",function(){n(e)}).once("error",t)})}),r.catch(function(e){console.log(chalk.red(e)),process.exit(0)})}),r};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}var _createClass=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),_=require("lodash"),coregulp=require("gulp"),chalk=require("chalk"),utils_1=require("./utils"),DynamicTask=function(){function e(n,t){_classCallCheck(this,e),this.decorator=n,this.factory=t}return _createClass(e,[{key:"setup",value:function(e,n){var t=this.factory(e,n||coregulp);return t&&(this.decorator.taskName=t),t}}]),e}();exports.generateTask=generateTask; | ||
"use strict";function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function generateTask(e,n){var r=[];return _.each(_.isArray(e)?e:[e],function(e){if(!(n&&n.oper&&e.oper&&(e.oper&n.oper)<=0)&&utils_1.matchTaskGroup(e,n))if(e.watchTasks&&(e.watch=e.watch||!!e.watchTasks),e.watch){if(!n||!n.watch)return;e.watch===n.watch&&r.push(createWatchTask(e))}else _.isFunction(e.task)?r.push(createTask(e)):r.push(createPipesTask(e))}),r}function createTask(e){var n=function(n,r){var t=n.subTaskName(e.name);return console.log("register custom dynamic task:",chalk.cyan(t)),r.task(t,function(){return e.task(n,e,r)}),t};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}function createWatchTask(e){var n=function(n,r){var t=_.isFunction(e.watchTasks)?e.watchTasks(n):e.watchTasks;_.isFunction(_.last(t))||t.push(function(r){e.watchChanged&&e.watchChanged(r,n)}),t=_.map(t,function(e){return _.isString(e)?n.subTaskName(e):e});var a=n.subTaskName(e);return console.log("register watch dynamic task:",chalk.cyan(a)),r.task(a,function(){var a=n.getSrc(e,e);console.log("watch, src:",chalk.cyan.call(chalk,a)),r.watch(a,t)}),a};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}function createPipesTask(e){var n=function(n,r){var t=n.subTaskName(e);return console.log("register pipes dynamic task:",chalk.cyan(t)),r.task(t,function(){var t=Promise.resolve(r.src(n.getSrc(e,e)));return e.pipes?!function(){var a=_.isFunction(e.pipes)?e.pipes(n,e,r):e.pipes;t=t.then(function(t){return Promise.all(_.map(a,function(t){return _.isFunction(t)?t(n,e,r):t})).then(function(e){return _.each(e,function(e){t=t.pipe(e)}),t})})}():e.pipe&&(t=t.then(function(r){return new Promise(function(t,a){return e.pipe(r,n,e,function(e){e?a(e):t(r)})})})),t=null!==e.output?t.then(function(t){if(e.output){var a=_.isFunction(e.output)?e.output(n,e):e.output;return Promise.all(_.map(a,function(a){return Promise.resolve(_.isFunction(a)?a(t,n,e,r):a).then(function(e){return new Promise(function(n,r){e.once("end",function(){n(e)}).once("error",r)})})}))}return new Promise(function(a,c){var o=r.dest(n.getDist(e));t.pipe(o).once("end",function(){a(o)}).once("error",c)})}):t.then(function(e){return new Promise(function(n,r){e.once("end",function(){n(e)}).once("error",r)})}),t.catch(function(e){console.log(chalk.red(e)),process.exit(0)})}),t};return new DynamicTask({order:e.order,oper:e.oper,watch:e.watch,group:e.group},n)}var _createClass=function(){function e(e,n){for(var r=0;r<n.length;r++){var t=n[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}return function(n,r,t){return r&&e(n.prototype,r),t&&e(n,t),n}}(),_=require("lodash"),coregulp=require("gulp"),chalk=require("chalk"),utils_1=require("./utils"),DynamicTask=function(){function e(n,r){_classCallCheck(this,e),this.decorator=n,this.factory=r}return _createClass(e,[{key:"setup",value:function(e,n){var r=this.factory(e,n||coregulp);return r&&(this.decorator.taskName=r),r}}]),e}();exports.generateTask=generateTask; | ||
//# sourceMappingURL=sourcemaps/generateTask.js.map |
@@ -21,2 +21,4 @@ /// <reference types="gulp" /> | ||
watch?: boolean | string; | ||
test?: boolean | string; | ||
e2e?: boolean | string; | ||
group?: Src; | ||
@@ -56,12 +58,15 @@ } | ||
export declare type OutputPipe = (stream: IOutput, config?: ITaskConfig, dt?: IDynamicTask, gulp?: Gulp) => ITransform | Promise<ITransform>; | ||
export interface IOutputDist { | ||
export interface IAssertDist { | ||
src?: TaskSource; | ||
e2eSrc?: TaskSource; | ||
testSrc?: TaskSource; | ||
watchSrc?: TaskSource; | ||
dist?: TaskString; | ||
build?: string; | ||
test?: string; | ||
e2e?: string; | ||
release?: string; | ||
deploy?: string; | ||
buildDist?: string; | ||
testDist?: string; | ||
e2eDist?: string; | ||
releaseDist?: string; | ||
deployDist?: string; | ||
} | ||
export interface IDynamicTask extends IOutputDist, ITaskInfo { | ||
export interface IDynamicTask extends IAssertDist, ITaskInfo { | ||
name: TaskString; | ||
@@ -86,3 +91,3 @@ watchTasks?: Array<string | WatchCallback> | ((config?: ITaskConfig, dt?: IDynamicTask) => Array<string | WatchCallback>); | ||
} | ||
export interface IAsserts extends IOutputDist, ITaskLoaderOption { | ||
export interface IAsserts extends IAssertDist, ITaskLoaderOption { | ||
name?: TaskString; | ||
@@ -105,4 +110,4 @@ asserts?: IMap<Src | IAsserts | IDynamicTask[]>; | ||
option: IAsserts | ITaskOption; | ||
getSrc?(assert?: IAsserts): Src; | ||
getDist?(dist?: IOutputDist): string; | ||
getSrc?(assert?: IAssertDist, taskinfo?: ITaskInfo): Src; | ||
getDist?(dist?: IAssertDist): string; | ||
runTasks?(tasks?: Src[], assertTasks?: ITaskInfo, subGroupTask?: ITaskInfo): Src[]; | ||
@@ -109,0 +114,0 @@ printHelp?(lang: string): void; |
{ | ||
"name": "development-core", | ||
"version": "0.5.5", | ||
"version": "0.5.8", | ||
"description": "development build tools.", | ||
@@ -5,0 +5,0 @@ "main": "./lib/index.js", |
import * as _ from 'lodash'; | ||
import { IOutputDist, IEnvOption, Operation, ITaskConfig, IAsserts, Src } from './TaskConfig'; | ||
import { IAssertDist, IEnvOption, Operation, ITaskConfig, ITaskInfo, Src } from './TaskConfig'; | ||
import { generateTask } from './generateTask'; | ||
@@ -51,9 +51,9 @@ import { runSequence, addToSequence } from './taskSequence'; | ||
cfg.getSrc = cfg.getSrc || ((assert?: IAsserts): Src => { | ||
cfg.getSrc = cfg.getSrc || ((assert?: IAssertDist, taskinfo?: ITaskInfo): Src => { | ||
let src: Src; | ||
if (assert) { | ||
src = taskSourceVal(assert.src, cfg.oper) | ||
src = taskSourceVal(getAssertSrc(assert, taskinfo), cfg.oper) | ||
} | ||
if (!src) { | ||
src = taskSourceVal(cfg.option.src, cfg.oper) | ||
src = taskSourceVal(getAssertSrc(cfg.option, taskinfo), cfg.oper) | ||
} | ||
@@ -63,3 +63,3 @@ return src | ||
cfg.getDist = cfg.getDist || ((ds?: IOutputDist) => { | ||
cfg.getDist = cfg.getDist || ((ds?: IAssertDist) => { | ||
if (ds) { | ||
@@ -104,2 +104,16 @@ let dist = getCurrentDist(ds, cfg.oper); | ||
function getAssertSrc(assert: IAssertDist, taskinfo?: ITaskInfo) { | ||
let src = null; | ||
if (taskinfo) { | ||
if (taskinfo.test) { | ||
src = assert.testSrc; | ||
} else if (taskinfo.e2e) { | ||
src = assert.e2eSrc; | ||
} else if (taskinfo.watch) { | ||
src = assert.watchSrc; | ||
} | ||
} | ||
return src || assert.src; | ||
} | ||
/** | ||
@@ -112,19 +126,19 @@ * get dist. | ||
*/ | ||
function getCurrentDist(ds: IOutputDist, oper: Operation) { | ||
function getCurrentDist(ds: IAssertDist, oper: Operation) { | ||
let dist: string; | ||
switch (oper) { | ||
case Operation.build: | ||
dist = ds.build || taskStringVal(ds.dist, oper); | ||
dist = ds.buildDist || taskStringVal(ds.dist, oper); | ||
break; | ||
case Operation.test: | ||
dist = ds.test || ds.build || taskStringVal(ds.dist, oper); | ||
dist = ds.testDist || ds.buildDist || taskStringVal(ds.dist, oper); | ||
break; | ||
case Operation.e2e: | ||
dist = ds.e2e || ds.build || taskStringVal(ds.dist, oper); | ||
dist = ds.e2eDist || ds.buildDist || taskStringVal(ds.dist, oper); | ||
break; | ||
case Operation.release: | ||
dist = ds.release || taskStringVal(ds.dist, oper); | ||
dist = ds.releaseDist || taskStringVal(ds.dist, oper); | ||
break; | ||
case Operation.deploy: | ||
dist = ds.deploy || taskStringVal(ds.dist, oper); | ||
dist = ds.deployDist || taskStringVal(ds.dist, oper); | ||
break; | ||
@@ -131,0 +145,0 @@ default: |
@@ -110,4 +110,5 @@ import * as _ from 'lodash'; | ||
gulp.task(tk, () => { | ||
console.log('watch, src:', chalk.cyan.call(chalk, cfg.option.src)); | ||
gulp.watch(cfg.getSrc(dt), watchs) | ||
let src = cfg.getSrc(dt, dt); | ||
console.log('watch, src:', chalk.cyan.call(chalk, src)); | ||
gulp.watch(src, watchs) | ||
}); | ||
@@ -126,3 +127,3 @@ | ||
gulp.task(tk, () => { | ||
let taskPromise = Promise.resolve(gulp.src(cfg.getSrc(dt))); | ||
let taskPromise = Promise.resolve(gulp.src(cfg.getSrc(dt, dt))); | ||
if (dt.pipes) { | ||
@@ -129,0 +130,0 @@ let pipes = _.isFunction(dt.pipes) ? dt.pipes(cfg, dt, gulp) : dt.pipes; |
@@ -87,2 +87,18 @@ import { Gulp, WatchEvent, WatchCallback, TaskCallback } from 'gulp'; | ||
/** | ||
* is test or not. | ||
* | ||
* @type {(boolean | string)} | ||
* @memberOf ITaskInfo | ||
*/ | ||
test?: boolean | string; | ||
/** | ||
* is e2e test or not. | ||
* | ||
* @type {(boolean | string)} | ||
* @memberOf ITaskInfo | ||
*/ | ||
e2e?: boolean | string; | ||
/** | ||
* assert tasks. assert group name or extends name. | ||
@@ -266,3 +282,9 @@ * | ||
export interface IOutputDist { | ||
/** | ||
* assert dist. | ||
* | ||
* @export | ||
* @interface IAssertDist | ||
*/ | ||
export interface IAssertDist { | ||
/** | ||
@@ -272,7 +294,32 @@ * the src file filter string. default 'src'. | ||
* @type {TaskSource} | ||
* @memberOf IOutputDist | ||
* @memberOf IAssertDist | ||
*/ | ||
src?: TaskSource | ||
src?: TaskSource; | ||
/** | ||
* the e2e src file filter string. default 'src'. | ||
* | ||
* @type {TaskSource} | ||
* @memberOf IAssertDist | ||
*/ | ||
e2eSrc?: TaskSource; | ||
/** | ||
* the test src file filter string. default 'src'. | ||
* | ||
* @type {TaskSource} | ||
* @memberOf IAssertDist | ||
*/ | ||
testSrc?: TaskSource | ||
/** | ||
* the watch src file filter string. default 'src'. | ||
* | ||
* @type {TaskSource} | ||
* @memberOf IAssertDist | ||
*/ | ||
watchSrc?: TaskSource | ||
/** | ||
* default output folder. if empty use parent setting, or ues 'dist'. | ||
@@ -287,3 +334,3 @@ */ | ||
*/ | ||
build?: string; | ||
buildDist?: string; | ||
/** | ||
@@ -295,3 +342,3 @@ * test output folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
test?: string; | ||
testDist?: string; | ||
/** | ||
@@ -303,3 +350,3 @@ * e2e output folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
e2e?: string; | ||
e2eDist?: string; | ||
/** | ||
@@ -311,3 +358,3 @@ * release output folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
release?: string; | ||
releaseDist?: string; | ||
/** | ||
@@ -319,3 +366,3 @@ * deploy output folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
deploy?: string; | ||
deployDist?: string; | ||
} | ||
@@ -329,5 +376,5 @@ | ||
* @interface IDynamicTask | ||
* @extends {IOutputDist} | ||
* @extends {IAssertDist} | ||
*/ | ||
export interface IDynamicTask extends IOutputDist, ITaskInfo { | ||
export interface IDynamicTask extends IAssertDist, ITaskInfo { | ||
/** | ||
@@ -489,5 +536,5 @@ * task name | ||
* @interface IAsserts | ||
* @extends {IOutputDist} | ||
* @extends {IAssertDist} | ||
*/ | ||
export interface IAsserts extends IOutputDist, ITaskLoaderOption { | ||
export interface IAsserts extends IAssertDist, ITaskLoaderOption { | ||
/** | ||
@@ -612,3 +659,4 @@ * IAsserts extends name. for register dynamic task. | ||
* | ||
* @param {IAsserts} [assert] | ||
* @param {IAssertDist} [assert] | ||
* @param {ITaskInfo} [taskinfo] | ||
* @returns {Src} | ||
@@ -618,3 +666,3 @@ * | ||
*/ | ||
getSrc?(assert?: IAsserts): Src; | ||
getSrc?(assert?: IAssertDist, taskinfo?: ITaskInfo): Src; | ||
@@ -624,3 +672,3 @@ /** | ||
* | ||
* @param {IOutputDist} dist | ||
* @param {IAssertDist} dist | ||
* @returns {string} | ||
@@ -630,3 +678,3 @@ * | ||
*/ | ||
getDist?(dist?: IOutputDist): string; | ||
getDist?(dist?: IAssertDist): string; | ||
@@ -633,0 +681,0 @@ /** |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
178744
2272