miqro 1.6.7 → 1.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -6,6 +6,7 @@ const core_1 = require("@miqro/core");
6
6
  const start_1 = require("./cmds/start");
7
7
  const new_1 = require("./cmds/new");
8
8
  const new_2 = require("./cmds/new");
9
+ const test_1 = require("./cmds/test");
9
10
  const doc_json_1 = require("./cmds/doc-json");
10
11
  const doc_md_1 = require("./cmds/doc-md");
11
12
  const config_init_1 = require("./cmds/config-init");
@@ -38,6 +39,7 @@ core_1.CLIUtil.cliFlow({
38
39
  ["start"]: { section: "cluster start", cb: start_1.main, description: "\t\t\t\tstart a nodejs script in cluster mode and restart if crash." },
39
40
  ["doc"]: { section: "api documentation", cb: doc_json_1.main, description: "\t\t\t\toutputs to stdout an api folder auto doc as a json" },
40
41
  ["doc:md"]: { cb: doc_md_1.main, description: "\t\t\t\toutputs to a file an api folder auto doc as a markdown" },
42
+ ["test"]: { cb: test_1.main, description: "\t\t\t\trun test files." },
41
43
  ["db:console"]: { section: "sequelize helpers", cb: db_console_1.main, description: "\t\t\truns a readline interface that send the input as a query" },
42
44
  ["db:dump:data"]: { cb: db_dump_data_1.main, description: "\t\t\tdump the data of the database (only defined models)" },
43
45
  ["db:push:data"]: { cb: db_push_data_1.main, description: "\t\t\tpush a dump to the database" },
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,aAAa;AACb,sCAAsC;AACtC,wCAA6C;AAC7C,oCAA6C;AAC7C,oCAA6C;AAC7C,8CAAqD;AACrD,0CAAiD;AACjD,oDAAwD;AACxD,0CAA+C;AAC/C,oDAAwD;AACxD,kDAAsD;AACtD,sEAA+D;AAC/D,8DAA0D;AAC1D,iBAAiB;AACjB,4CAAgD;AAChD,gEAAkE;AAClE,0EAA2E;AAC3E,kDAAuD;AACvD,0DAA4D;AAC5D,sDAAuD;AACvD,sDAAuD;AAEvD,uCAAuC;AACvC,cAAO,CAAC,OAAO,CAAC;IAEd,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE;IAC3F,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,uCAAuC,EAAE;IAEvF,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,uBAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACvG,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,2BAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAEzE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAM,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACtH,CAAC,aAAa,CAAC,EAAE;QACf,EAAE,EAAE,kBAAU;QACd,WAAW,EAAE,qDAAqD;KACnE;IACD,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,iBAAS,EAAE,WAAW,EAAE,kDAAkD,EAAE;IAClG,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,kBAAU,EAAE,WAAW,EAAE,gCAAgC,EAAE;IAElF,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,qEAAqE,EAAE;IAEtI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAU,EAAE,WAAW,EAAE,4DAA4D,EAAE;IACpI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,aAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;IAE3G,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,iBAAU,EAAE,WAAW,EAAE,gEAAgE,EAAE;IAC/I,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;IAC5G,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACpF,CAAC,mBAAmB,CAAC,EAAE;QACrB,EAAE,EAAE,wBAAc;QAClB,WAAW,EAAE,yDAAyD;KACvE;IACD,CAAC,qCAAqC,CAAC,EAAE;QACvC,EAAE,EAAE,6BAAkB;QACtB,WAAW,EAAE,8HAA8H;KAC5I;IACD,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,cAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACjF,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,qBAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;CACxF,EAAE,4BAA4B,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,aAAa;AACb,sCAAsC;AACtC,wCAA6C;AAC7C,oCAA6C;AAC7C,oCAA6C;AAC7C,sCAA+C;AAC/C,8CAAqD;AACrD,0CAAiD;AACjD,oDAAwD;AACxD,0CAA+C;AAC/C,oDAAwD;AACxD,kDAAsD;AACtD,sEAA+D;AAC/D,8DAA0D;AAC1D,iBAAiB;AACjB,4CAAgD;AAChD,gEAAkE;AAClE,0EAA2E;AAC3E,kDAAuD;AACvD,0DAA4D;AAC5D,sDAAuD;AACvD,sDAAuD;AAEvD,uCAAuC;AACvC,cAAO,CAAC,OAAO,CAAC;IAEd,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE;IAC3F,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,uCAAuC,EAAE;IAEvF,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,uBAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACvG,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,2BAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAEzE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAM,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACtH,CAAC,aAAa,CAAC,EAAE;QACf,EAAE,EAAE,kBAAU;QACd,WAAW,EAAE,qDAAqD;KACnE;IACD,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,iBAAS,EAAE,WAAW,EAAE,kDAAkD,EAAE;IAClG,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,kBAAU,EAAE,WAAW,EAAE,gCAAgC,EAAE;IAElF,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,YAAK,EAAE,WAAW,EAAE,qEAAqE,EAAE;IAEtI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAU,EAAE,WAAW,EAAE,4DAA4D,EAAE;IACpI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,aAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;IAE3G,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,WAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;IAElE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,iBAAU,EAAE,WAAW,EAAE,gEAAgE,EAAE;IAC/I,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;IAC5G,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACpF,CAAC,mBAAmB,CAAC,EAAE;QACrB,EAAE,EAAE,wBAAc;QAClB,WAAW,EAAE,yDAAyD;KACvE;IACD,CAAC,qCAAqC,CAAC,EAAE;QACvC,EAAE,EAAE,6BAAkB;QACtB,WAAW,EAAE,8HAA8H;KAC5I;IACD,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,cAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACjF,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,qBAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;CACxF,EAAE,4BAA4B,EAAE,OAAO,CAAC,CAAC"}
package/dist/cmds/new.js CHANGED
@@ -86,12 +86,12 @@ const mainJS = (typescript = false) => {
86
86
  "src"
87
87
  ]
88
88
  }`);
89
- (0, utils_1.execSync)(`npm install typescript --save-dev`, {
90
- cwd: appFolder
91
- });
92
- (0, utils_1.execSync)(`npm install @types/node --save-dev`, {
93
- cwd: appFolder
89
+ /*execSync(`npm install typescript --save-dev`, {
90
+ cwd: appFolder
94
91
  });
92
+ execSync(`npm install @types/node --save-dev`, {
93
+ cwd: appFolder
94
+ });*/
95
95
  }
96
96
  (0, utils_1.execSync)(`npx miqro new:main src_main`, {
97
97
  cwd: appFolder
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/cmds/new.ts"],"names":[],"mappings":";;;AAAA,2BAA0D;AAC1D,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,CAAC,IAAY,EAAE,EAAE,CACnB;aACS,IAAI;;;;;;;;;;;;;;;EAef;IACA,EAAE,EAAE,CAAC,IAAY,EAAE,EAAE,CACnB;aACS,IAAI;;;;;;;;;;;;;;EAcf;CACD,CAAA;AAEM,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,KAAK,EAAQ,EAAE;IACjD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAEvD,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,kBAAkB,CAAC,CAAC;KACjD;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;IAErC,IAAA,cAAS,EAAC,SAAS,EAAE;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,IAAA,kBAAa,EAAC,IAAA,cAAO,EAAC,SAAS,EAAE,cAAc,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzG,IAAA,gBAAQ,EACN,8BAA8B,EAC9B;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAA,gBAAQ,EACN,gCAAgC,EAChC;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAI,UAAU,EAAE;QACd,IAAA,kBAAa,EAAC,IAAA,cAAO,EAAC,SAAS,EAAE,eAAe,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;EAyBrD,CAAC,CAAC;QACA,IAAA,gBAAQ,EAAC,mCAAmC,EAAE;YAC5C,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;QACH,IAAA,gBAAQ,EAAC,oCAAoC,EAAE;YAC7C,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;KACJ;IAED,IAAA,gBAAQ,EACN,6BAA6B,EAC7B;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAA,gBAAQ,EACN,oCAAoC,EACpC;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;AACJ,CAAC,CAAA;AAnFY,QAAA,MAAM,UAmFlB;AAEM,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;AAAlC,QAAA,MAAM,UAA4B"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/cmds/new.ts"],"names":[],"mappings":";;;AAAA,2BAA0D;AAC1D,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,CAAC,IAAY,EAAE,EAAE,CACnB;aACS,IAAI;;;;;;;;;;;;;;;EAef;IACA,EAAE,EAAE,CAAC,IAAY,EAAE,EAAE,CACnB;aACS,IAAI;;;;;;;;;;;;;;EAcf;CACD,CAAA;AAEM,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,KAAK,EAAQ,EAAE;IACjD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAEvD,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,kBAAkB,CAAC,CAAC;KACjD;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;IAErC,IAAA,cAAS,EAAC,SAAS,EAAE;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,IAAA,kBAAa,EAAC,IAAA,cAAO,EAAC,SAAS,EAAE,cAAc,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzG,IAAA,gBAAQ,EACN,8BAA8B,EAC9B;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAA,gBAAQ,EACN,gCAAgC,EAChC;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAI,UAAU,EAAE;QACd,IAAA,kBAAa,EAAC,IAAA,cAAO,EAAC,SAAS,EAAE,eAAe,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;EAyBrD,CAAC,CAAC;QACA;;;;;aAKK;KACN;IAED,IAAA,gBAAQ,EACN,6BAA6B,EAC7B;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;IAEF,IAAA,gBAAQ,EACN,oCAAoC,EACpC;QACE,GAAG,EAAE,SAAS;KACf,CACF,CAAC;AACJ,CAAC,CAAA;AAnFY,QAAA,MAAM,UAmFlB;AAEM,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;AAAlC,QAAA,MAAM,UAA4B"}
@@ -0,0 +1 @@
1
+ export declare const main: () => Promise<void>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = void 0;
4
+ const path_1 = require("path");
5
+ const core_1 = require("@miqro/core");
6
+ const test_1 = require("../test");
7
+ const main = async () => {
8
+ if (process.argv.length < 4) {
9
+ throw new Error(`bad arguments`);
10
+ }
11
+ const startMS = Date.now();
12
+ const args = core_1.CLIUtil.extractFlags(process.argv.slice(3));
13
+ const modules = args.cmds.map(m => (0, path_1.resolve)(process.cwd(), m));
14
+ const name = args.flags.n ? args.flags.n : "all";
15
+ const logger = console;
16
+ const ret = await (0, test_1.runTestModules)(modules, typeof name === "string" && name.toLowerCase() === "all" ? undefined : name, console);
17
+ const took = Date.now() - startMS;
18
+ ret.failed.forEach(e => {
19
+ logger.log("");
20
+ logger.log("");
21
+ logger.error("\x1b[31m%s\x1b[0m", e.fullName);
22
+ logger.error(e.error);
23
+ logger.log("");
24
+ logger.log("");
25
+ });
26
+ logger.log("");
27
+ logger.log("");
28
+ logger.log(ret.passed + " tests pased");
29
+ logger.log(ret.failed.length + " failed");
30
+ logger.log("took " + took + "ms");
31
+ logger.log("");
32
+ logger.log("");
33
+ process.exit(ret.failed.length > 0 ? 1 : 0);
34
+ };
35
+ exports.main = main;
36
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/cmds/test.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,sCAAsC;AACtC,kCAAyC;AAElC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IAE1C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;KACpC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,cAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjD,MAAM,MAAM,GAAG,OAAO,CAAC;IAEvB,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAc,EAAC,OAAO,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAElC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACnB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhD,CAAC,CAAA;AAvCY,QAAA,IAAI,QAuChB"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1 @@
1
- export * from "@miqro/core";
2
- export * from "@miqro/runner";
1
+ export * from "./test";
package/dist/index.js CHANGED
@@ -10,6 +10,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("@miqro/core"), exports);
14
- __exportStar(require("@miqro/runner"), exports);
13
+ __exportStar(require("./test"), exports);
15
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuB"}
@@ -0,0 +1,5 @@
1
+ import { RequestOptions, RequestResponse } from "@miqro/core";
2
+ import { RequestListener } from "http";
3
+ export declare const TestHelper: (app: {
4
+ listener: RequestListener;
5
+ }, options: RequestOptions, cb?: ((response: RequestResponse) => void) | undefined) => Promise<RequestResponse>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestHelper = void 0;
4
+ const core_1 = require("@miqro/core");
5
+ const fs_1 = require("fs");
6
+ const http_1 = require("http");
7
+ const TestHelper = async (app, options, cb) => {
8
+ const unixSocket = `/tmp/socket.test.helper${Date.now()}`;
9
+ if ((0, fs_1.existsSync)(unixSocket)) {
10
+ (0, fs_1.unlinkSync)(unixSocket);
11
+ }
12
+ const server = (0, http_1.createServer)(app.listener);
13
+ return new Promise((resolve, reject) => {
14
+ server.listen(unixSocket, () => {
15
+ (0, core_1.request)({
16
+ disableThrow: true,
17
+ ...options,
18
+ socketPath: unixSocket
19
+ }).then((response) => {
20
+ server.close(() => {
21
+ if (cb) {
22
+ try {
23
+ cb(response);
24
+ }
25
+ catch (ee) {
26
+ reject(ee);
27
+ }
28
+ }
29
+ resolve(response);
30
+ });
31
+ }).catch((e) => {
32
+ server.close(() => {
33
+ if (cb) {
34
+ try {
35
+ cb(e);
36
+ }
37
+ catch (ee) {
38
+ reject(ee);
39
+ }
40
+ resolve(undefined);
41
+ }
42
+ else {
43
+ reject(e);
44
+ }
45
+ });
46
+ });
47
+ });
48
+ });
49
+ };
50
+ exports.TestHelper = TestHelper;
51
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/test/common/app.ts"],"names":[],"mappings":";;;AAAA,sCAAuE;AAEvE,2BAA4C;AAC5C,+BAAqD;AAE9C,MAAM,UAAU,GAAG,KAAK,EAAE,GAEhC,EAAE,OAAuB,EAAE,EAAwC,EAA4B,EAAE;IAChG,MAAM,UAAU,GAAG,0BAA0B,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC1D,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE;QAC1B,IAAA,eAAU,EAAC,UAAU,CAAC,CAAC;KACxB;IACD,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtD,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,IAAA,cAAO,EAAC;gBACN,YAAY,EAAE,IAAI;gBAClB,GAAG,OAAO;gBACV,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBAChB,IAAI,EAAE,EAAE;wBACN,IAAI;4BACF,EAAE,CAAC,QAAQ,CAAC,CAAC;yBACd;wBAAC,OAAO,EAAE,EAAE;4BACX,MAAM,CAAC,EAAE,CAAC,CAAC;yBACZ;qBACF;oBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBAChB,IAAI,EAAE,EAAE;wBACN,IAAI;4BACF,EAAE,CAAC,CAAQ,CAAC,CAAC;yBACd;wBAAC,OAAO,EAAE,EAAE;4BACX,MAAM,CAAC,EAAE,CAAC,CAAC;yBACZ;wBACD,OAAO,CAAC,SAAgB,CAAC,CAAC;qBAC3B;yBAAM;wBACL,MAAM,CAAC,CAAC,CAAC,CAAC;qBACX;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAA;AAzCY,QAAA,UAAU,cAyCtB"}
@@ -0,0 +1,6 @@
1
+ export declare type Callback<T = any> = (...args: any[]) => T;
2
+ export interface FakeCallback<T = any> extends Callback<T> {
3
+ callCount: number;
4
+ callArgs: T[];
5
+ }
6
+ export declare const fake: (cb: Callback) => FakeCallback;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fake = void 0;
4
+ const fake = (cb) => {
5
+ const ret = (...args) => {
6
+ ret.callCount++;
7
+ ret.callArgs.push(args);
8
+ return cb(...args);
9
+ };
10
+ ret.callCount = 0;
11
+ ret.callArgs = [];
12
+ return ret;
13
+ };
14
+ exports.fake = fake;
15
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/test/common/common.ts"],"names":[],"mappings":";;;AAOO,MAAM,IAAI,GAAG,CAAC,EAAY,EAAgB,EAAE;IACjD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC7B,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IAClB,GAAG,CAAC,QAAQ,GAAG,EAAS,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC,CAAA;AATY,QAAA,IAAI,QAShB"}
@@ -0,0 +1,3 @@
1
+ export * from "./common";
2
+ export * from "./app";
3
+ export * from "./runner";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./common"), exports);
14
+ __exportStar(require("./app"), exports);
15
+ __exportStar(require("./runner"), exports);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB;AACzB,wCAAsB;AACtB,2CAAyB"}
@@ -0,0 +1,34 @@
1
+ /// <reference types="node" />
2
+ import { Console } from "console";
3
+ export declare type TestFunction = () => void | Promise<void>;
4
+ export declare const getTestCount: () => number;
5
+ export declare const it: (title: string, impl: TestFunction, options?: {
6
+ category?: string | undefined;
7
+ timeout?: number | undefined;
8
+ before?: TestFunction | undefined;
9
+ after?: TestFunction | undefined;
10
+ } | undefined, logger?: Console | {
11
+ log: (...args: any[]) => void;
12
+ }) => void;
13
+ export declare const runTests: (title?: string | string[] | undefined, logger?: Console | {
14
+ error: (...args: any[]) => void;
15
+ }) => Promise<{
16
+ passed: number;
17
+ total: number;
18
+ ignored: number;
19
+ failed: {
20
+ error: any;
21
+ fullName: string;
22
+ }[];
23
+ }>;
24
+ export declare const runTestModules: (modules: string[], title?: string | string[] | undefined, logger?: Console | {
25
+ error: (...args: any[]) => void;
26
+ }) => Promise<{
27
+ passed: number;
28
+ total: number;
29
+ ignored: number;
30
+ failed: {
31
+ error: any;
32
+ fullName: string;
33
+ }[];
34
+ }>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runTestModules = exports.runTests = exports.it = exports.getTestCount = void 0;
4
+ const console_1 = require("console");
5
+ const util_1 = require("util");
6
+ const DEFAULT_TIMEOUT = 2000;
7
+ const tests = [];
8
+ const getTestCount = () => tests.length;
9
+ exports.getTestCount = getTestCount;
10
+ const it = (title, impl, options, logger = new console_1.Console(process.stdout)) => {
11
+ const category = options && options.category ? options.category : undefined;
12
+ const fullName = `${category ? `${category} [` : ""}${title}${category ? "]" : ""}`;
13
+ tests.push({
14
+ run: () => new Promise((resolve, reject) => {
15
+ const timeoutMS = options && options.timeout ? options.timeout : DEFAULT_TIMEOUT;
16
+ const timeout = setTimeout(() => {
17
+ reject(new Error((0, util_1.format)("%s failed\x1b[31m\n%s timeout %o\x1b", fullName, fullName, timeoutMS)));
18
+ }, timeoutMS);
19
+ try {
20
+ (async () => {
21
+ if (options && options.before) {
22
+ await options.before();
23
+ }
24
+ const startMS = Date.now();
25
+ await impl();
26
+ const took = Date.now() - startMS;
27
+ if (options && options.after) {
28
+ await options.after();
29
+ }
30
+ return took;
31
+ })().then((took) => {
32
+ clearTimeout(timeout);
33
+ logger.log("\x1b[32mpassed %s (took %sms)\x1b[0m", fullName, took);
34
+ resolve();
35
+ }).catch(e => {
36
+ clearTimeout(timeout);
37
+ reject(new Error((0, util_1.format)("%s failed\n%s finished with errors %o", fullName, fullName, e)));
38
+ });
39
+ }
40
+ catch (e) {
41
+ clearTimeout(timeout);
42
+ reject(new Error((0, util_1.format)("%s failed\n%s finished with errors %o", fullName, fullName, e)));
43
+ }
44
+ }), title,
45
+ category,
46
+ fullName
47
+ });
48
+ };
49
+ exports.it = it;
50
+ const runTests = async (title, logger = new console_1.Console(process.stdout)) => {
51
+ const titles = title ? title instanceof Array ? title : [title] : [undefined];
52
+ const ret = {
53
+ total: tests.length,
54
+ ignored: 0,
55
+ passed: 0,
56
+ failed: []
57
+ };
58
+ for (const test of tests) {
59
+ for (const title of titles) {
60
+ if (title && test.fullName.indexOf(title) !== -1 || !title) {
61
+ try {
62
+ await test.run();
63
+ ret.passed++;
64
+ }
65
+ catch (e) {
66
+ logger.error("\x1b[31m%s\x1b[0m", e);
67
+ ret.failed.push({
68
+ error: e,
69
+ fullName: test.fullName
70
+ });
71
+ }
72
+ }
73
+ else {
74
+ ret.ignored++;
75
+ }
76
+ }
77
+ }
78
+ return ret;
79
+ };
80
+ exports.runTests = runTests;
81
+ const runTestModules = async (modules, title, logger = new console_1.Console(process.stdout)) => {
82
+ for (const path of modules) {
83
+ require(path);
84
+ }
85
+ return await (0, exports.runTests)(title, logger);
86
+ };
87
+ exports.runTestModules = runTestModules;
88
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/test/common/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./common";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./common"), exports);
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miqro",
3
- "version": "1.6.7",
3
+ "version": "1.6.8",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "author": "claukers",
19
19
  "license": "ISC",
20
20
  "dependencies": {
21
- "@miqro/core": "^1.3.5",
21
+ "@miqro/core": "^1.3.11",
22
22
  "@miqro/runner": "^1.1.6"
23
23
  },
24
24
  "devDependencies": {
package/src/cli.ts CHANGED
@@ -4,6 +4,7 @@ import { CLIUtil } from "@miqro/core";
4
4
  import { main as start } from "./cmds/start";
5
5
  import { mainJS as newJS } from "./cmds/new";
6
6
  import { mainTS as newTS } from "./cmds/new";
7
+ import { main as testMain } from "./cmds/test";
7
8
  import { main as apiDocJSON } from "./cmds/doc-json";
8
9
  import { main as apiDocMD } from "./cmds/doc-md";
9
10
  import { main as configInit } from "./cmds/config-init";
@@ -43,6 +44,8 @@ CLIUtil.cliFlow({
43
44
  ["doc"]: { section: "api documentation", cb: apiDocJSON, description: "\t\t\t\toutputs to stdout an api folder auto doc as a json" },
44
45
  ["doc:md"]: { cb: apiDocMD, description: "\t\t\t\toutputs to a file an api folder auto doc as a markdown" },
45
46
 
47
+ ["test"]: { cb: testMain, description: "\t\t\t\trun test files." },
48
+
46
49
  ["db:console"]: { section: "sequelize helpers", cb: consoleCMD, description: "\t\t\truns a readline interface that send the input as a query" },
47
50
  ["db:dump:data"]: { cb: dumpData, description: "\t\t\tdump the data of the database (only defined models)" },
48
51
  ["db:push:data"]: { cb: pushData, description: "\t\t\tpush a dump to the database" },
package/src/cmds/new.ts CHANGED
@@ -102,12 +102,12 @@ export const mainJS = (typescript = false): void => {
102
102
  "src"
103
103
  ]
104
104
  }`);
105
- execSync(`npm install typescript --save-dev`, {
105
+ /*execSync(`npm install typescript --save-dev`, {
106
106
  cwd: appFolder
107
107
  });
108
108
  execSync(`npm install @types/node --save-dev`, {
109
109
  cwd: appFolder
110
- });
110
+ });*/
111
111
  }
112
112
 
113
113
  execSync(
@@ -0,0 +1,45 @@
1
+ import { resolve } from "path";
2
+ import { CLIUtil } from "@miqro/core";
3
+ import { runTestModules } from "../test";
4
+
5
+ export const main = async (): Promise<void> => {
6
+
7
+ if (process.argv.length < 4) {
8
+ throw new Error(`bad arguments`);
9
+ }
10
+
11
+ const startMS = Date.now();
12
+
13
+ const args = CLIUtil.extractFlags(process.argv.slice(3));
14
+
15
+ const modules = args.cmds.map(m => resolve(process.cwd(), m));
16
+
17
+ const name = args.flags.n ? args.flags.n : "all";
18
+
19
+ const logger = console;
20
+
21
+ const ret = await runTestModules(modules, typeof name === "string" && name.toLowerCase() === "all" ? undefined : name, console);
22
+
23
+ const took = Date.now() - startMS;
24
+
25
+ ret.failed.forEach(e => {
26
+ logger.log("");
27
+ logger.log("");
28
+ logger.error("\x1b[31m%s\x1b[0m", e.fullName);
29
+ logger.error(e.error);
30
+ logger.log("");
31
+ logger.log("");
32
+ });
33
+
34
+ logger.log("");
35
+ logger.log("");
36
+ logger.log(ret.passed + " tests pased");
37
+ logger.log(ret.failed.length + " failed");
38
+ logger.log("took " + took + "ms");
39
+ logger.log("");
40
+ logger.log("");
41
+
42
+ process.exit(ret.failed.length > 0 ? 1 : 0);
43
+
44
+ }
45
+
package/src/index.ts CHANGED
@@ -1,2 +1 @@
1
- export * from "@miqro/core";
2
- export * from "@miqro/runner";
1
+ export * from "./test";
@@ -0,0 +1,47 @@
1
+ import { request, RequestOptions, RequestResponse } from "@miqro/core";
2
+
3
+ import { existsSync, unlinkSync } from "fs";
4
+ import { createServer, RequestListener } from "http";
5
+
6
+ export const TestHelper = async (app: {
7
+ listener: RequestListener;
8
+ }, options: RequestOptions, cb?: (response: RequestResponse) => void): Promise<RequestResponse> => {
9
+ const unixSocket = `/tmp/socket.test.helper${Date.now()}`;
10
+ if (existsSync(unixSocket)) {
11
+ unlinkSync(unixSocket);
12
+ }
13
+ const server = createServer(app.listener);
14
+ return new Promise<RequestResponse>((resolve, reject) => {
15
+ server.listen(unixSocket, () => {
16
+ request({
17
+ disableThrow: true,
18
+ ...options,
19
+ socketPath: unixSocket
20
+ }).then((response) => {
21
+ server.close(() => {
22
+ if (cb) {
23
+ try {
24
+ cb(response);
25
+ } catch (ee) {
26
+ reject(ee);
27
+ }
28
+ }
29
+ resolve(response);
30
+ });
31
+ }).catch((e: any) => {
32
+ server.close(() => {
33
+ if (cb) {
34
+ try {
35
+ cb(e as any);
36
+ } catch (ee) {
37
+ reject(ee);
38
+ }
39
+ resolve(undefined as any);
40
+ } else {
41
+ reject(e);
42
+ }
43
+ });
44
+ });
45
+ });
46
+ });
47
+ }
@@ -0,0 +1,17 @@
1
+ export type Callback<T = any> = (...args: any[]) => T;
2
+
3
+ export interface FakeCallback<T = any> extends Callback<T> {
4
+ callCount: number;
5
+ callArgs: T[];
6
+ }
7
+
8
+ export const fake = (cb: Callback): FakeCallback => {
9
+ const ret = (...args: any[]) => {
10
+ ret.callCount++;
11
+ ret.callArgs.push(args);
12
+ return cb(...args);
13
+ };
14
+ ret.callCount = 0;
15
+ ret.callArgs = [] as any;
16
+ return ret;
17
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./common";
2
+ export * from "./app";
3
+ export * from "./runner";
@@ -0,0 +1,121 @@
1
+ import { Console } from "console";
2
+ import { format } from "util";
3
+
4
+ export type TestFunction = () => void | Promise<void>;
5
+ const DEFAULT_TIMEOUT = 2000;
6
+
7
+ interface Test { run: TestFunction; title: string; category?: string; fullName: string; }
8
+
9
+ const tests: Test[] = [];
10
+
11
+ export const getTestCount = () => tests.length;
12
+
13
+ export const it = (title: string, impl: TestFunction, options?: {
14
+ category?: string;
15
+ timeout?: number;
16
+ before?: TestFunction;
17
+ after?: TestFunction;
18
+ }, logger: {
19
+ log: (...args: any[]) => void
20
+ } | Console = new Console(process.stdout)): void => {
21
+ const category = options && options.category ? options.category : undefined;
22
+ const fullName = `${category ? `${category} [` : ""}${title}${category ? "]" : ""}`;
23
+ tests.push({
24
+ run: () => new Promise((resolve, reject) => {
25
+ const timeoutMS = options && options.timeout ? options.timeout : DEFAULT_TIMEOUT;
26
+ const timeout = setTimeout(() => {
27
+ reject(new Error(format("%s failed\x1b[31m\n%s timeout %o\x1b", fullName, fullName, timeoutMS)));
28
+ }, timeoutMS);
29
+ try {
30
+ (async () => {
31
+ if (options && options.before) {
32
+ await options.before();
33
+ }
34
+ const startMS = Date.now();
35
+ await impl();
36
+ const took = Date.now() - startMS;
37
+ if (options && options.after) {
38
+ await options.after();
39
+ }
40
+ return took;
41
+ })().then((took) => {
42
+ clearTimeout(timeout);
43
+ logger.log("\x1b[32mpassed %s (took %sms)\x1b[0m", fullName, took);
44
+ resolve();
45
+ }).catch(e => {
46
+ clearTimeout(timeout);
47
+ reject(new Error(format("%s failed\n%s finished with errors %o", fullName, fullName, e)));
48
+ });
49
+ } catch (e) {
50
+ clearTimeout(timeout);
51
+ reject(new Error(format("%s failed\n%s finished with errors %o", fullName, fullName, e)));
52
+ }
53
+ }), title,
54
+ category,
55
+ fullName
56
+ });
57
+ };
58
+
59
+ export const runTests = async (title?: string | string[], logger: {
60
+ error: (...args: any[]) => void;
61
+ } | Console = new Console(process.stdout)): Promise<{
62
+ passed: number;
63
+ total: number;
64
+ ignored: number;
65
+ failed: {
66
+ error: any;
67
+ fullName: string;
68
+ }[];
69
+ }> => {
70
+ const titles = title ? title instanceof Array ? title : [title] : [undefined];
71
+ const ret: {
72
+ passed: number;
73
+ total: number;
74
+ ignored: number;
75
+ failed: {
76
+ error: any;
77
+ fullName: string;
78
+ }[];
79
+ } = {
80
+ total: tests.length,
81
+ ignored: 0,
82
+ passed: 0,
83
+ failed: []
84
+ };
85
+ for (const test of tests) {
86
+ for (const title of titles) {
87
+ if (title && test.fullName.indexOf(title) !== -1 || !title) {
88
+ try {
89
+ await test.run();
90
+ ret.passed++;
91
+ } catch (e) {
92
+ logger.error("\x1b[31m%s\x1b[0m", e);
93
+ ret.failed.push({
94
+ error: e,
95
+ fullName: test.fullName
96
+ })
97
+ }
98
+ } else {
99
+ ret.ignored++;
100
+ }
101
+ }
102
+ }
103
+ return ret;
104
+ };
105
+
106
+ export const runTestModules = async (modules: string[], title?: string | string[], logger: {
107
+ error: (...args: any[]) => void;
108
+ } | Console = new Console(process.stdout)): Promise<{
109
+ passed: number;
110
+ total: number;
111
+ ignored: number;
112
+ failed: {
113
+ error: any;
114
+ fullName: string;
115
+ }[];
116
+ }> => {
117
+ for (const path of modules) {
118
+ require(path);
119
+ }
120
+ return await runTests(title, logger);
121
+ }
@@ -0,0 +1 @@
1
+ export * from "./common";