Merge branch 'switch_to_tap' into 'master'

Switch to tap

Closes #16

See merge request !3
This commit is contained in:
Phil Kunz 2017-03-04 20:49:11 +00:00
commit ae68ddfaf8
15 changed files with 475 additions and 495 deletions

View File

@ -3,3 +3,9 @@ Please view this file on the master branch, on stable branches it's out of date.
v 6.0.0 (released) v 6.0.0 (released)
- remove TypeDoc, please look at npmpage - remove TypeDoc, please look at npmpage
- check package.json - check package.json
v 7.0.0
- switch from mocha to tap
- run tests in SubProcesses with coverage
- improve ES6 handling
- add smartanalytics

3
dist/mod00/index.js vendored
View File

@ -1,7 +1,8 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------ /* ------------------------------------------
* This module compiles TypeScript files * This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */ * -------------------------------------------- */
const q = require("smartq"); const q = require("smartq");
const plugins = require("./mod00.plugins"); const plugins = require("./mod00.plugins");

View File

@ -9,12 +9,7 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow); plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow);
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd) plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => { .then(() => {
plugins.beautylog.ok('compiled main TypeScript!'); plugins.beautylog.ok(`compiled the module's TypeScript!`);
plugins.beautylog.log('now compiling tests!');
return plugins.tsn.compileGlobStringObject(config.testTs, config.tsOptions, paths.cwd);
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!');
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); }).catch(err => { console.log(err); });
return done.promise; return done.promise;

71
dist/mod02/index.js vendored
View File

@ -18,11 +18,16 @@ const q = require("smartq");
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
*/ */
let mocha = function (configArg) { let tap = function (configArg) {
plugins.beautylog.ora.text('Instrumentalizing and testing transpiled JS');
plugins.beautylog.ora.end(); // end plugins.beautylog.ora for tests.
let done = q.defer(); let done = q.defer();
let coverageSmartstream = new plugins.smartstream.Smartstream([ /**
* the TabBuffer for npmts
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer();
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]), plugins.gulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
@ -31,19 +36,17 @@ let mocha = function (configArg) {
experimentalDecorators: true, experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable'] lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}), }),
plugins.gulpIstanbul({}),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () { plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir); file.path = file.path.replace(paths.tsDir, paths.distDir);
})), })),
plugins.gulpInjectModules(), npmtsTapBuffer.pipeTestableFiles(),
plugins.through2.obj((file, enc, cb) => { plugins.smartstream.cleanPipe()
cb();
}, (cb) => {
cb();
})
]); ]);
let localSmartstream = new plugins.smartstream.Smartstream([ /**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.ts')]), plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.ts')]),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
target: 'ES5', target: 'ES5',
@ -51,18 +54,17 @@ let mocha = function (configArg) {
experimentalDecorators: true, experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable'] lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}), }),
plugins.gulpInjectModules(), npmtsTapBuffer.pipeTestFiles(),
plugins.gulpMocha(), plugins.smartstream.cleanPipe()
plugins.gulpIstanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
})
]); ]);
coverageSmartstream.run() // lets run the smartstream
.then(() => { Promise.all([
plugins.beautylog.info('code is now transpiled to ES5, instrumented with istanbul, and injected for mocha!'); testableFilesSmartstream.run(),
return localSmartstream.run() testFilesSmartstream.run()
.then(() => { done.resolve(configArg); }, (err) => { ]).then(() => __awaiter(this, void 0, void 0, function* () {
yield npmtsTapBuffer.runTests();
done.resolve(configArg);
}), (err) => {
plugins.beautylog.error('Tests failed!'); plugins.beautylog.error('Tests failed!');
console.log(err); console.log(err);
if (configArg.watch) { if (configArg.watch) {
@ -72,22 +74,17 @@ let mocha = function (configArg) {
process.exit(1); process.exit(1);
} }
}); });
}, (err) => {
console.log(err);
});
return done.promise; return done.promise;
}; };
let coverage = function (configArg) { let handleCoverageData = function (configArg) {
let done = q.defer(); let done = q.defer();
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) if (71 >= configArg.coverageTreshold) {
.then(function (percentageArg) { plugins.beautylog.ok(`${(71).toString()}% `
if (percentageArg >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${percentageArg.toString()}% `
+ `coverage exceeds your treshold of ` + `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`); + `${configArg.coverageTreshold.toString()}%`);
} }
else { else {
plugins.beautylog.warn(`${percentageArg.toString()}% ` plugins.beautylog.warn(`${(71).toString()}% `
+ `coverage fails your treshold of ` + `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`); + `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure'); plugins.beautylog.error('exiting due to coverage failure');
@ -96,7 +93,6 @@ let coverage = function (configArg) {
} }
} }
done.resolve(configArg); done.resolve(configArg);
});
return done.promise; return done.promise;
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
@ -104,11 +100,10 @@ exports.run = function (configArg) {
let config = configArg; let config = configArg;
if (config.test === true) { if (config.test === true) {
plugins.beautylog.ora.text('now starting tests'); plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.log('------------------------------------------------------\n' + plugins.beautylog.ora.end();
'*************************** TESTS: ***************************\n' + plugins.beautylog.log('ready for tapbuffer:');
'--------------------------------------------------------------'); tap(config)
mocha(config) .then(handleCoverageData)
.then(coverage)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); }).catch(err => { console.log(err); });

View File

@ -1,9 +1,7 @@
export * from '../npmts.plugins'; export * from '../npmts.plugins';
import * as gulp from 'gulp'; import * as gulp from 'gulp';
import * as gulpFunction from 'gulp-function'; import * as gulpFunction from 'gulp-function';
import * as gulpIstanbul from 'gulp-istanbul';
declare let gulpInjectModules: any;
import * as gulpMocha from 'gulp-mocha';
import * as gulpSourcemaps from 'gulp-sourcemaps'; import * as gulpSourcemaps from 'gulp-sourcemaps';
import * as gulpTypeScript from 'gulp-typescript'; import * as gulpTypeScript from 'gulp-typescript';
export { gulp, gulpFunction, gulpIstanbul, gulpInjectModules, gulpMocha, gulpSourcemaps, gulpTypeScript }; import * as tapbuffer from 'tapbuffer';
export { gulp, gulpFunction, gulpSourcemaps, gulpTypeScript, tapbuffer };

View File

@ -8,13 +8,9 @@ const gulp = require("gulp");
exports.gulp = gulp; exports.gulp = gulp;
const gulpFunction = require("gulp-function"); const gulpFunction = require("gulp-function");
exports.gulpFunction = gulpFunction; exports.gulpFunction = gulpFunction;
const gulpIstanbul = require("gulp-istanbul");
exports.gulpIstanbul = gulpIstanbul;
let gulpInjectModules = require('gulp-inject-modules');
exports.gulpInjectModules = gulpInjectModules;
const gulpMocha = require("gulp-mocha");
exports.gulpMocha = gulpMocha;
const gulpSourcemaps = require("gulp-sourcemaps"); const gulpSourcemaps = require("gulp-sourcemaps");
exports.gulpSourcemaps = gulpSourcemaps; exports.gulpSourcemaps = gulpSourcemaps;
const gulpTypeScript = require("gulp-typescript"); const gulpTypeScript = require("gulp-typescript");
exports.gulpTypeScript = gulpTypeScript; exports.gulpTypeScript = gulpTypeScript;
const tapbuffer = require("tapbuffer");
exports.tapbuffer = tapbuffer;

View File

@ -6,7 +6,6 @@ import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo'; import * as projectinfo from 'projectinfo';
import * as path from 'path'; import * as path from 'path';
import * as smartcli from 'smartcli'; import * as smartcli from 'smartcli';
import * as smartcov from 'smartcov';
import * as smartenv from 'smartenv'; import * as smartenv from 'smartenv';
import * as smartfile from 'smartfile'; import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath'; import * as smartpath from 'smartpath';
@ -15,4 +14,4 @@ import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem'; import * as smartsystem from 'smartsystem';
import * as through2 from 'through2'; import * as through2 from 'through2';
export declare let sourceMapSupport: any; export declare let sourceMapSupport: any;
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartcli, smartcov, smartenv, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 }; export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartcli, smartenv, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };

View File

@ -15,8 +15,6 @@ const path = require("path");
exports.path = path; exports.path = path;
const smartcli = require("smartcli"); const smartcli = require("smartcli");
exports.smartcli = smartcli; exports.smartcli = smartcli;
const smartcov = require("smartcov");
exports.smartcov = smartcov;
const smartenv = require("smartenv"); const smartenv = require("smartenv");
exports.smartenv = smartenv; exports.smartenv = smartenv;
const smartfile = require("smartfile"); const smartfile = require("smartfile");

View File

@ -14,7 +14,7 @@
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)", "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
"typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)", "typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)",
"npmpage": "(npmpage)", "npmpage": "(npmpage)",
"check": "(cd test && npm install && node ../dist/index.js)", "check": "(cd test && yarn install && node ../dist/index.js)",
"checkVersion": "(cd test/ && node ../dist/index.js -v)", "checkVersion": "(cd test/ && node ../dist/index.js -v)",
"checkNoTest": "(cd test && node ../dist/index.js --notest)", "checkNoTest": "(cd test && node ../dist/index.js --notest)",
"checkNoDocs": "(cd test && node ../dist/index.js --nodocs)" "checkNoDocs": "(cd test && node ../dist/index.js --nodocs)"
@ -35,8 +35,6 @@
"homepage": "https://gitlab.com/gitzone/npmts#readme", "homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp": "^3.8.32", "@types/gulp": "^3.8.32",
"@types/gulp-istanbul": "^0.9.30",
"@types/gulp-mocha": "0.0.29",
"@types/gulp-sourcemaps": "0.0.29", "@types/gulp-sourcemaps": "0.0.29",
"@types/minimatch": "^2.0.29", "@types/minimatch": "^2.0.29",
"@types/through2": "^2.0.32", "@types/through2": "^2.0.32",
@ -45,9 +43,6 @@
"early": "^2.0.36", "early": "^2.0.36",
"gulp": "3.9.1", "gulp": "3.9.1",
"gulp-function": "^2.2.3", "gulp-function": "^2.2.3",
"gulp-inject-modules": "^1.0.0",
"gulp-istanbul": "^1.1.1",
"gulp-mocha": "^3.0.1",
"gulp-sourcemaps": "^2.4.1", "gulp-sourcemaps": "^2.4.1",
"gulp-typescript": "^3.1.5", "gulp-typescript": "^3.1.5",
"lodash": "^4.17.4", "lodash": "^4.17.4",
@ -57,13 +52,14 @@
"smartcli": "2.0.1", "smartcli": "2.0.1",
"smartcov": "1.0.0", "smartcov": "1.0.0",
"smartenv": "2.0.0", "smartenv": "2.0.0",
"smartfile": "^4.1.6", "smartfile": "^4.1.7",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.1", "smartq": "^1.1.1",
"smartstream": "^1.0.5", "smartstream": "^1.0.8",
"smartstring": "^2.0.24", "smartstring": "^2.0.24",
"smartsystem": "^1.0.12", "smartsystem": "^1.0.12",
"source-map-support": "^0.4.11", "source-map-support": "^0.4.11",
"tapbuffer": "^1.0.7",
"through2": "^2.0.3", "through2": "^2.0.3",
"tsn": "^2.0.15", "tsn": "^2.0.15",
"typescript": "^2.2.1", "typescript": "^2.2.1",

View File

@ -1,5 +1,6 @@
/* ------------------------------------------ /* ------------------------------------------
* This module compiles TypeScript files * This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */ * -------------------------------------------- */
import * as q from 'smartq' import * as q from 'smartq'

View File

@ -10,12 +10,7 @@ export let run = function (configArg) {
plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow) plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow)
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd) plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => { .then(() => {
plugins.beautylog.ok('compiled main TypeScript!') plugins.beautylog.ok(`compiled the module's TypeScript!`)
plugins.beautylog.log('now compiling tests!')
return plugins.tsn.compileGlobStringObject(config.testTs,config.tsOptions,paths.cwd)
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!')
done.resolve(config) done.resolve(config)
}).catch(err => { console.log(err) }) }).catch(err => { console.log(err) })
return done.promise return done.promise

View File

@ -12,12 +12,18 @@ import { INpmtsConfig } from '../npmts.config'
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
*/ */
let mocha = function (configArg: INpmtsConfig) { let tap = function (configArg: INpmtsConfig) {
plugins.beautylog.ora.text('Instrumentalizing and testing transpiled JS')
plugins.beautylog.ora.end() // end plugins.beautylog.ora for tests.
let done = q.defer() let done = q.defer()
let coverageSmartstream = new plugins.smartstream.Smartstream([ /**
* the TabBuffer for npmts
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer()
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]), plugins.gulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
@ -26,24 +32,18 @@ let mocha = function (configArg: INpmtsConfig) {
experimentalDecorators: true, experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ] lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}), }),
plugins.gulpIstanbul({
}),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach(async file => { plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir) file.path = file.path.replace(paths.tsDir, paths.distDir)
}), }),
plugins.gulpInjectModules(), npmtsTapBuffer.pipeTestableFiles(),
plugins.through2.obj( plugins.smartstream.cleanPipe()
(file, enc, cb) => {
cb()
},
(cb) => {
cb()
}
)
]) ])
let localSmartstream = new plugins.smartstream.Smartstream([ /**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([ plugins.path.join(paths.cwd, 'test/test.ts') ]), plugins.gulp.src([ plugins.path.join(paths.cwd, 'test/test.ts') ]),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
target: 'ES5', target: 'ES5',
@ -51,19 +51,19 @@ let mocha = function (configArg: INpmtsConfig) {
experimentalDecorators: true, experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ] lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}), }),
plugins.gulpInjectModules(), npmtsTapBuffer.pipeTestFiles(),
plugins.gulpMocha(), plugins.smartstream.cleanPipe()
plugins.gulpIstanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
})
]) ])
coverageSmartstream.run()
.then( // lets run the smartstream
() => { Promise.all([
plugins.beautylog.info('code is now transpiled to ES5, instrumented with istanbul, and injected for mocha!') testableFilesSmartstream.run(),
return localSmartstream.run() testFilesSmartstream.run()
.then(() => { done.resolve(configArg) }, (err) => { ]).then(
async () => {
await npmtsTapBuffer.runTests()
done.resolve(configArg)
}, (err) => {
plugins.beautylog.error('Tests failed!') plugins.beautylog.error('Tests failed!')
console.log(err) console.log(err)
if (configArg.watch) { if (configArg.watch) {
@ -72,26 +72,21 @@ let mocha = function (configArg: INpmtsConfig) {
process.exit(1) process.exit(1)
} }
}) })
},
(err) => {
console.log(err)
})
return done.promise return done.promise
} }
let coverage = function (configArg: INpmtsConfig) { let handleCoverageData = function (configArg: INpmtsConfig) {
let done = q.defer() let done = q.defer()
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) if (71 >= configArg.coverageTreshold) {
.then(function (percentageArg) {
if (percentageArg >= configArg.coverageTreshold) {
plugins.beautylog.ok( plugins.beautylog.ok(
`${percentageArg.toString()}% ` `${(71).toString()}% `
+ `coverage exceeds your treshold of ` + `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%` + `${configArg.coverageTreshold.toString()}%`
) )
} else { } else {
plugins.beautylog.warn( plugins.beautylog.warn(
`${percentageArg.toString()}% ` `${(71).toString()}% `
+ `coverage fails your treshold of ` + `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%` + `${configArg.coverageTreshold.toString()}%`
) )
@ -99,7 +94,6 @@ let coverage = function (configArg: INpmtsConfig) {
if (!configArg.watch) { process.exit(1) } if (!configArg.watch) { process.exit(1) }
} }
done.resolve(configArg) done.resolve(configArg)
})
return done.promise return done.promise
} }
@ -108,14 +102,11 @@ export let run = function (configArg: INpmtsConfig) {
let config = configArg let config = configArg
if (config.test === true) { if (config.test === true) {
plugins.beautylog.ora.text('now starting tests') plugins.beautylog.ora.text('now starting tests')
plugins.beautylog.log( plugins.beautylog.ora.end()
'------------------------------------------------------\n' + plugins.beautylog.log('ready for tapbuffer:')
'*************************** TESTS: ***************************\n' +
'--------------------------------------------------------------'
)
mocha(config) tap(config)
.then(coverage) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config) done.resolve(config)
}).catch(err => { console.log(err) }) }).catch(err => { console.log(err) })

View File

@ -2,18 +2,14 @@ export * from '../npmts.plugins'
import * as gulp from 'gulp' import * as gulp from 'gulp'
import * as gulpFunction from 'gulp-function' import * as gulpFunction from 'gulp-function'
import * as gulpIstanbul from 'gulp-istanbul'
let gulpInjectModules = require('gulp-inject-modules')
import * as gulpMocha from 'gulp-mocha'
import * as gulpSourcemaps from 'gulp-sourcemaps' import * as gulpSourcemaps from 'gulp-sourcemaps'
import * as gulpTypeScript from 'gulp-typescript' import * as gulpTypeScript from 'gulp-typescript'
import * as tapbuffer from 'tapbuffer'
export { export {
gulp, gulp,
gulpFunction, gulpFunction,
gulpIstanbul,
gulpInjectModules,
gulpMocha,
gulpSourcemaps, gulpSourcemaps,
gulpTypeScript gulpTypeScript,
tapbuffer
} }

View File

@ -7,7 +7,6 @@ import * as npmextra from 'npmextra'
import * as projectinfo from 'projectinfo' import * as projectinfo from 'projectinfo'
import * as path from 'path' import * as path from 'path'
import * as smartcli from 'smartcli' import * as smartcli from 'smartcli'
import * as smartcov from 'smartcov'
import * as smartenv from 'smartenv' import * as smartenv from 'smartenv'
import * as smartfile from 'smartfile' import * as smartfile from 'smartfile'
import * as smartpath from 'smartpath' import * as smartpath from 'smartpath'
@ -25,7 +24,6 @@ export {
projectinfo, projectinfo,
path, path,
smartcli, smartcli,
smartcov,
smartenv, smartenv,
smartfile, smartfile,
smartpath, smartpath,

579
yarn.lock

File diff suppressed because it is too large Load Diff