ng-talkback 21.0.31 → 21.0.34

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.
Files changed (137) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/bin/ng-talkback +5 -0
  3. package/bin/ng-talkback-debug +5 -0
  4. package/bin/ng-talkback-debug-brk +4 -0
  5. package/browser/fesm2022/ng-talkback-browser.mjs +9 -2
  6. package/browser/fesm2022/ng-talkback-browser.mjs.map +1 -1
  7. package/browser/package.json +1 -1
  8. package/browser/types/ng-talkback-browser.d.ts +2 -2
  9. package/browser-prod/fesm2022/ng-talkback-browser-prod.mjs +9 -2
  10. package/browser-prod/fesm2022/ng-talkback-browser-prod.mjs.map +1 -1
  11. package/browser-prod/package.json +1 -1
  12. package/browser-prod/types/ng-talkback-browser-prod.d.ts +2 -2
  13. package/html/assets/generated/pwa/html-pwa.html +60 -0
  14. package/lib/build-info._auto-generated_.d.ts +1 -1
  15. package/lib/build-info._auto-generated_.js +1 -1
  16. package/lib/index.d.ts +1 -1
  17. package/lib/index.js +7 -3
  18. package/lib/index.js.map +1 -1
  19. package/lib/package.json +1 -1
  20. package/lib-esm/app.d.ts +0 -0
  21. package/lib-esm/app.electron.d.ts +2 -0
  22. package/lib-esm/app.electron.js +83 -0
  23. package/lib-esm/app.electron.js.map +1 -0
  24. package/lib-esm/app.hosts.d.ts +3 -0
  25. package/lib-esm/app.hosts.js +48 -0
  26. package/lib-esm/app.hosts.js.map +1 -0
  27. package/lib-esm/app.js +49 -0
  28. package/lib-esm/app.js.map +1 -0
  29. package/lib-esm/app.vscode.d.ts +9 -0
  30. package/lib-esm/app.vscode.js +31 -0
  31. package/lib-esm/app.vscode.js.map +1 -0
  32. package/lib-esm/index.d.ts +1 -0
  33. package/lib-esm/index.js +2 -0
  34. package/lib-esm/index.js.map +1 -0
  35. package/lib-esm/lib/build-info._auto-generated_.d.ts +24 -0
  36. package/lib-esm/lib/build-info._auto-generated_.js +27 -0
  37. package/lib-esm/lib/build-info._auto-generated_.js.map +1 -0
  38. package/lib-esm/lib/env/env.angular-node-app.d.ts +66 -0
  39. package/lib-esm/lib/env/env.angular-node-app.js +135 -0
  40. package/lib-esm/lib/env/env.angular-node-app.js.map +1 -0
  41. package/lib-esm/lib/env/env.docs-webapp.d.ts +66 -0
  42. package/lib-esm/lib/env/env.docs-webapp.js +135 -0
  43. package/lib-esm/lib/env/env.docs-webapp.js.map +1 -0
  44. package/lib-esm/lib/env/env.electron-app.d.ts +66 -0
  45. package/lib-esm/lib/env/env.electron-app.js +135 -0
  46. package/lib-esm/lib/env/env.electron-app.js.map +1 -0
  47. package/lib-esm/lib/env/env.mobile-app.d.ts +66 -0
  48. package/lib-esm/lib/env/env.mobile-app.js +135 -0
  49. package/lib-esm/lib/env/env.mobile-app.js.map +1 -0
  50. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +66 -0
  51. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +135 -0
  52. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
  53. package/lib-esm/lib/env/env.vscode-plugin.d.ts +66 -0
  54. package/lib-esm/lib/env/env.vscode-plugin.js +135 -0
  55. package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -0
  56. package/lib-esm/lib/env/index.d.ts +6 -0
  57. package/lib-esm/lib/env/index.js +7 -0
  58. package/lib-esm/lib/env/index.js.map +1 -0
  59. package/lib-esm/lib/es6.backend.d.ts +2 -0
  60. package/lib-esm/lib/es6.backend.js +3 -0
  61. package/lib-esm/lib/es6.backend.js.map +1 -0
  62. package/lib-esm/lib/features/error-rate.backend.d.ts +9 -0
  63. package/lib-esm/lib/features/error-rate.backend.js +23 -0
  64. package/lib-esm/lib/features/error-rate.backend.js.map +1 -0
  65. package/lib-esm/lib/features/latency.backend.d.ts +8 -0
  66. package/lib-esm/lib/features/latency.backend.js +30 -0
  67. package/lib-esm/lib/features/latency.backend.js.map +1 -0
  68. package/lib-esm/lib/index._auto-generated_.d.ts +0 -0
  69. package/lib-esm/lib/index._auto-generated_.js +6 -0
  70. package/lib-esm/lib/index._auto-generated_.js.map +1 -0
  71. package/lib-esm/lib/index.d.ts +41 -0
  72. package/lib-esm/lib/index.js +24 -0
  73. package/lib-esm/lib/index.js.map +1 -0
  74. package/lib-esm/lib/logger.backend.d.ts +7 -0
  75. package/lib-esm/lib/logger.backend.js +23 -0
  76. package/lib-esm/lib/logger.backend.js.map +1 -0
  77. package/lib-esm/lib/migrations/index.d.ts +1 -0
  78. package/lib-esm/lib/migrations/index.js +3 -0
  79. package/lib-esm/lib/migrations/index.js.map +1 -0
  80. package/lib-esm/lib/migrations/migrations_index._auto-generated_.d.ts +0 -0
  81. package/lib-esm/lib/migrations/migrations_index._auto-generated_.js +4 -0
  82. package/lib-esm/lib/migrations/migrations_index._auto-generated_.js.map +1 -0
  83. package/lib-esm/lib/options.backend.d.ts +52 -0
  84. package/lib-esm/lib/options.backend.js +87 -0
  85. package/lib-esm/lib/options.backend.js.map +1 -0
  86. package/lib-esm/lib/request-handler.backend.d.ts +13 -0
  87. package/lib-esm/lib/request-handler.backend.js +142 -0
  88. package/lib-esm/lib/request-handler.backend.js.map +1 -0
  89. package/lib-esm/lib/server.backend.d.ts +17 -0
  90. package/lib-esm/lib/server.backend.js +85 -0
  91. package/lib-esm/lib/server.backend.js.map +1 -0
  92. package/lib-esm/lib/summary.backend.d.ts +8 -0
  93. package/lib-esm/lib/summary.backend.js +22 -0
  94. package/lib-esm/lib/summary.backend.js.map +1 -0
  95. package/lib-esm/lib/talkback-factory.backend.d.ts +7 -0
  96. package/lib-esm/lib/talkback-factory.backend.js +17 -0
  97. package/lib-esm/lib/talkback-factory.backend.js.map +1 -0
  98. package/lib-esm/lib/tape-matcher.backend.d.ts +12 -0
  99. package/lib-esm/lib/tape-matcher.backend.js +94 -0
  100. package/lib-esm/lib/tape-matcher.backend.js.map +1 -0
  101. package/lib-esm/lib/tape-renderer.backend.d.ts +24 -0
  102. package/lib-esm/lib/tape-renderer.backend.js +96 -0
  103. package/lib-esm/lib/tape-renderer.backend.js.map +1 -0
  104. package/lib-esm/lib/tape-store.backend.d.ts +16 -0
  105. package/lib-esm/lib/tape-store.backend.js +96 -0
  106. package/lib-esm/lib/tape-store.backend.js.map +1 -0
  107. package/lib-esm/lib/tape.backend.d.ts +19 -0
  108. package/lib-esm/lib/tape.backend.js +76 -0
  109. package/lib-esm/lib/tape.backend.js.map +1 -0
  110. package/lib-esm/lib/types.backend.d.ts +43 -0
  111. package/lib-esm/lib/types.backend.js +2 -0
  112. package/lib-esm/lib/types.backend.js.map +1 -0
  113. package/lib-esm/lib/utils/content-encoding.backend.d.ts +10 -0
  114. package/lib-esm/lib/utils/content-encoding.backend.js +38 -0
  115. package/lib-esm/lib/utils/content-encoding.backend.js.map +1 -0
  116. package/lib-esm/lib/utils/headers.backend.d.ts +4 -0
  117. package/lib-esm/lib/utils/headers.backend.js +15 -0
  118. package/lib-esm/lib/utils/headers.backend.js.map +1 -0
  119. package/lib-esm/lib/utils/media-type.backend.d.ts +10 -0
  120. package/lib-esm/lib/utils/media-type.backend.js +51 -0
  121. package/lib-esm/lib/utils/media-type.backend.js.map +1 -0
  122. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  123. package/lib-prod/build-info._auto-generated_.js +1 -1
  124. package/lib-prod/index.d.ts +1 -1
  125. package/lib-prod/index.js +8 -4
  126. package/lib-prod/index.js.map +1 -1
  127. package/lib-prod/package.json +1 -1
  128. package/package.json +6 -2
  129. package/src.js +4 -20
  130. package/websql/fesm2022/ng-talkback-websql.mjs +9 -2
  131. package/websql/fesm2022/ng-talkback-websql.mjs.map +1 -1
  132. package/websql/package.json +1 -1
  133. package/websql/types/ng-talkback-websql.d.ts +2 -2
  134. package/websql-prod/fesm2022/ng-talkback-websql-prod.mjs +9 -2
  135. package/websql-prod/fesm2022/ng-talkback-websql-prod.mjs.map +1 -1
  136. package/websql-prod/package.json +1 -1
  137. package/websql-prod/types/ng-talkback-websql-prod.d.ts +2 -2
@@ -0,0 +1,7 @@
1
+ export * from './env.angular-node-app';
2
+ export * from './env.docs-webapp';
3
+ export * from './env.electron-app';
4
+ export * from './env.mobile-app';
5
+ export * from './env.npm-lib-and-cli-tool';
6
+ export * from './env.vscode-plugin';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import talkbackFn from './index';
2
+ export default talkbackFn;
@@ -0,0 +1,3 @@
1
+ import talkbackFn from './index';
2
+ export default talkbackFn;
3
+ //# sourceMappingURL=es6.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es6.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,SAAS,CAAA;AAEhC,eAAe,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Options } from '../options.backend';
2
+ import Tape from '../tape.backend';
3
+ import { Req, Res } from '../types.backend';
4
+ export default class ErrorRate {
5
+ private options;
6
+ constructor(options: Options);
7
+ shouldSimulate(req: Req, tape?: Tape): boolean;
8
+ simulate(req: Req): Res;
9
+ }
@@ -0,0 +1,23 @@
1
+ import OptionsFactory from '../options.backend';
2
+ export default class ErrorRate {
3
+ options;
4
+ constructor(options) {
5
+ this.options = options;
6
+ }
7
+ shouldSimulate(req, tape) {
8
+ const globalErrorRate = typeof (this.options.errorRate) === 'number' ? this.options.errorRate : this.options.errorRate(req);
9
+ const errorRate = tape && tape.meta.errorRate !== undefined ? tape.meta.errorRate : globalErrorRate;
10
+ OptionsFactory.validateErrorRate(errorRate);
11
+ const random = Math.random() * 100;
12
+ return random < errorRate;
13
+ }
14
+ simulate(req) {
15
+ this.options.logger.log(`Simulating error for ${req.url}`);
16
+ return {
17
+ status: 503,
18
+ headers: { 'content-type': ['text/plain'] },
19
+ body: Buffer.from("talkback - failure injection")
20
+ };
21
+ }
22
+ }
23
+ //# sourceMappingURL=error-rate.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-rate.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,cAAyB,MAAM,oBAAoB,CAAC;AAI3D,MAAM,CAAC,OAAO,OAAO,SAAS;IACpB,OAAO,CAAS;IAExB,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,cAAc,CAAC,GAAO,EAAE,IAAW;QACjC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAE3H,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAA;QAEnG,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAA;QAClC,OAAO,MAAM,GAAG,SAAS,CAAA;IAC3B,CAAC;IAED,QAAQ,CAAC,GAAQ;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QAC1D,OAAO;YACL,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAC,cAAc,EAAE,CAAC,YAAY,CAAC,EAAC;YACzC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC;SAC3C,CAAA;IACV,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Options } from '../options.backend';
2
+ import { Req } from '../types.backend';
3
+ import Tape from '../tape.backend';
4
+ export default class Latency {
5
+ private options;
6
+ constructor(options: Options);
7
+ simulate(req: Req, tape?: Tape): Promise<unknown>;
8
+ }
@@ -0,0 +1,30 @@
1
+ import OptionsFactory from '../options.backend';
2
+ export default class Latency {
3
+ options;
4
+ constructor(options) {
5
+ this.options = options;
6
+ }
7
+ async simulate(req, tape) {
8
+ const resolved = Promise.resolve();
9
+ const latencyGenerator = tape && tape.meta.latency !== undefined ? tape.meta.latency : this.options.latency;
10
+ if (!latencyGenerator) {
11
+ return resolved;
12
+ }
13
+ OptionsFactory.validateLatency(latencyGenerator);
14
+ let latency = 0;
15
+ const type = typeof latencyGenerator;
16
+ if (type === "number") {
17
+ latency = latencyGenerator;
18
+ }
19
+ else if (Array.isArray(latencyGenerator)) {
20
+ const high = latencyGenerator[1];
21
+ const low = latencyGenerator[0];
22
+ latency = Math.random() * (high - low) + low;
23
+ }
24
+ else {
25
+ latency = latencyGenerator(req);
26
+ }
27
+ return new Promise(r => setTimeout(r, latency));
28
+ }
29
+ }
30
+ //# sourceMappingURL=latency.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latency.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,cAAyB,MAAM,oBAAoB,CAAC;AAI3D,MAAM,CAAC,OAAO,OAAO,OAAO;IAClB,OAAO,CACJ;IAEX,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,IAAW;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAElC,MAAM,gBAAgB,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QAC3G,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;QAEhD,IAAI,OAAO,GAAG,CAAC,CAAA;QAEf,MAAM,IAAI,GAAG,OAAO,gBAAgB,CAAA;QACpC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,GAAG,gBAA0B,CAAA;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YAChC,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YAC/B,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,GAAI,gBAAuC,CAAC,GAAG,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,CAAC;CACF"}
File without changes
@@ -0,0 +1,6 @@
1
+ // @ts-nocheck
2
+ // This file is auto-generated during init process. Do not modify.
3
+ // This is only placeholder.
4
+ // Use property "shouldGenerateAutogenIndexFile: true"
5
+ // in taon.jsonc to enable ts exports auto generation.
6
+ //# sourceMappingURL=index._auto-generated_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc;AACd,kEAAkE;AAClE,4BAA4B;AAC5B,uDAAuD;AACvD,uDAAuD"}
@@ -0,0 +1,41 @@
1
+ export type DummyASDASDASd = 'asdas$asd$as';
2
+ export * from './options.backend';
3
+ export * from './tape.backend';
4
+ import Options from './options.backend';
5
+ declare const talkbackFn: {
6
+ (options: Partial<Options>): import("./server.backend").default;
7
+ Options: {
8
+ Default: import("./options.backend").Options;
9
+ FallbackMode: {
10
+ NOT_FOUND: string;
11
+ PROXY: string;
12
+ ALL: string[];
13
+ };
14
+ RecordMode: {
15
+ NEW: string;
16
+ OVERWRITE: string;
17
+ DISABLED: string;
18
+ ALL: string[];
19
+ };
20
+ };
21
+ requestHandler(options: Partial<Options>): Promise<import("./request-handler.backend").default>;
22
+ };
23
+ export declare const talkback: {
24
+ (options: Partial<Options>): import("./server.backend").default;
25
+ Options: {
26
+ Default: import("./options.backend").Options;
27
+ FallbackMode: {
28
+ NOT_FOUND: string;
29
+ PROXY: string;
30
+ ALL: string[];
31
+ };
32
+ RecordMode: {
33
+ NEW: string;
34
+ OVERWRITE: string;
35
+ DISABLED: string;
36
+ ALL: string[];
37
+ };
38
+ };
39
+ requestHandler(options: Partial<Options>): Promise<import("./request-handler.backend").default>;
40
+ };
41
+ export default talkbackFn;
@@ -0,0 +1,24 @@
1
+ // let a = 234343;
2
+ /* */
3
+ /* */
4
+ //#region @backend
5
+ // const aa = 'ssssss';
6
+ //#endregion
7
+ //#region @backend
8
+ export * from './options.backend';
9
+ export * from './tape.backend';
10
+ import TalkbackFactory from './talkback-factory.backend';
11
+ import { DefaultOptions, FallbackMode, RecordMode, } from './options.backend';
12
+ const talkbackFn = (options) => {
13
+ return TalkbackFactory.server(options);
14
+ };
15
+ talkbackFn.Options = {
16
+ Default: DefaultOptions,
17
+ FallbackMode,
18
+ RecordMode,
19
+ };
20
+ talkbackFn.requestHandler = (options) => TalkbackFactory.requestHandler(options);
21
+ export const talkback = talkbackFn;
22
+ export default talkbackFn;
23
+ //#endregion
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AACA,kBAAkB;AAClB,KAAK;AACL,KAAK;AAEL,kBAAkB;AAClB,uBAAuB;AACvB,YAAY;AAEZ,kBAAkB;AAClB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAgB,EACd,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,GAAG,CAAC,OAAyB,EAAE,EAAE;IAC/C,OAAO,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,UAAU,CAAC,OAAO,GAAG;IACnB,OAAO,EAAE,cAAc;IACvB,YAAY;IACZ,UAAU;CACX,CAAC;AAEF,UAAU,CAAC,cAAc,GAAG,CAAC,OAAyB,EAAE,EAAE,CACxD,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,eAAe,UAAU,CAAC;AAC1B,YAAY"}
@@ -0,0 +1,7 @@
1
+ export default class Logger {
2
+ options: any;
3
+ constructor(options: any);
4
+ log(message: any): void;
5
+ debug(message: any): void;
6
+ error(message: any): void;
7
+ }
@@ -0,0 +1,23 @@
1
+ export default class Logger {
2
+ options;
3
+ constructor(options) {
4
+ this.options = options;
5
+ if (this.options.debug) {
6
+ console.debug("DEBUG mode active");
7
+ }
8
+ }
9
+ log(message) {
10
+ if (!this.options.silent || this.options.debug) {
11
+ console.log(message);
12
+ }
13
+ }
14
+ debug(message) {
15
+ if (this.options.debug) {
16
+ console.debug(message);
17
+ }
18
+ }
19
+ error(message) {
20
+ console.error(message);
21
+ }
22
+ }
23
+ //# sourceMappingURL=logger.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAM;IAEb,YAAY,OAAY;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAY;QACd,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAY;QAChB,IAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAY;QAChB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from './migrations_index._auto-generated_';
@@ -0,0 +1,3 @@
1
+ //@ts-nocheck
2
+ export * from './migrations_index._auto-generated_';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,4 @@
1
+ // THIS FILE IS GENERATED - DO NOT MODIFY
2
+ // THIS FILE IS GENERATED - DO NOT MODIFY
3
+ // THIS FILE IS GENERATED - DO NOT MODIFY
4
+ //# sourceMappingURL=migrations_index._auto-generated_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations_index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,yCAAyC;AAEzC,yCAAyC"}
@@ -0,0 +1,52 @@
1
+ import Logger from './logger.backend';
2
+ import Tape from './tape.backend';
3
+ import { Req, MatchingContext } from './types.backend';
4
+ export declare const RecordMode: {
5
+ NEW: string;
6
+ OVERWRITE: string;
7
+ DISABLED: string;
8
+ ALL: string[];
9
+ };
10
+ export declare const FallbackMode: {
11
+ NOT_FOUND: string;
12
+ PROXY: string;
13
+ ALL: string[];
14
+ };
15
+ export interface Options {
16
+ host: string;
17
+ port: number;
18
+ path: string;
19
+ record: string | ((req: Req) => string);
20
+ fallbackMode: string | ((req: Req) => string);
21
+ name: string;
22
+ tapeNameGenerator?: (tapeNumber: number, tape: Tape) => string;
23
+ https: {
24
+ enabled: boolean;
25
+ keyPath?: string;
26
+ certPath?: string;
27
+ };
28
+ ignoreHeaders: string[];
29
+ ignoreQueryParams: string[];
30
+ ignoreBody: boolean;
31
+ bodyMatcher?: (tape: Tape, req: Req) => boolean;
32
+ urlMatcher?: (tape: Tape, req: Req) => boolean;
33
+ requestDecorator?: (req: Req, context: MatchingContext) => Req;
34
+ responseDecorator?: (tape: Tape, req: Req, context: MatchingContext) => Tape;
35
+ tapeDecorator?: (tape: Tape, context: MatchingContext) => Tape;
36
+ latency: number | number[] | ((req: Req) => number);
37
+ errorRate: number | ((req: Req) => number);
38
+ silent: boolean;
39
+ summary: boolean;
40
+ debug: boolean;
41
+ logger: Logger;
42
+ }
43
+ export declare const DefaultOptions: Options;
44
+ export default class OptionsFactory {
45
+ private static logger;
46
+ static prepare(usrOpts?: Partial<Options>): Options;
47
+ static validateOptions(opts: Options): void;
48
+ static validateRecord(record: any): void;
49
+ static validateFallbackMode(fallbackMode: any): void;
50
+ static validateLatency(latency: any): void;
51
+ static validateErrorRate(errorRate: any): void;
52
+ }
@@ -0,0 +1,87 @@
1
+ import Logger from './logger.backend';
2
+ export const RecordMode = {
3
+ NEW: "NEW", // If no tape matches the request, proxy it and save the response to a tape
4
+ OVERWRITE: "OVERWRITE", // Always proxy the request and save the response to a tape, overwriting any existing one
5
+ DISABLED: "DISABLED", // If a matching tape exists, return it. Otherwise, don't proxy the request and use `fallbackMode` for the response
6
+ ALL: []
7
+ };
8
+ RecordMode.ALL = [RecordMode.NEW, RecordMode.OVERWRITE, RecordMode.DISABLED];
9
+ export const FallbackMode = {
10
+ NOT_FOUND: "NOT_FOUND",
11
+ PROXY: "PROXY",
12
+ ALL: []
13
+ };
14
+ FallbackMode.ALL = [FallbackMode.NOT_FOUND, FallbackMode.PROXY];
15
+ export const DefaultOptions = {
16
+ host: "",
17
+ port: 8080,
18
+ path: "./tapes/",
19
+ record: RecordMode.NEW,
20
+ fallbackMode: FallbackMode.NOT_FOUND,
21
+ name: "unnamed",
22
+ tapeNameGenerator: undefined,
23
+ https: {
24
+ enabled: false,
25
+ keyPath: undefined,
26
+ certPath: undefined
27
+ },
28
+ ignoreHeaders: ["content-length", "host"],
29
+ ignoreQueryParams: [],
30
+ ignoreBody: false,
31
+ bodyMatcher: undefined,
32
+ urlMatcher: undefined,
33
+ requestDecorator: undefined,
34
+ responseDecorator: undefined,
35
+ tapeDecorator: undefined,
36
+ latency: 0,
37
+ errorRate: 0,
38
+ silent: false,
39
+ summary: true,
40
+ debug: false,
41
+ logger: new Logger({})
42
+ };
43
+ export default class OptionsFactory {
44
+ static logger;
45
+ static prepare(usrOpts = {}) {
46
+ const opts = {
47
+ ...DefaultOptions,
48
+ name: usrOpts.host,
49
+ ...usrOpts,
50
+ ignoreHeaders: [
51
+ ...DefaultOptions.ignoreHeaders,
52
+ ...(usrOpts.ignoreHeaders || [])
53
+ ]
54
+ };
55
+ this.logger = new Logger(opts);
56
+ opts.logger = this.logger;
57
+ this.validateOptions(opts);
58
+ return opts;
59
+ }
60
+ static validateOptions(opts) {
61
+ this.validateRecord(opts.record);
62
+ this.validateFallbackMode(opts.fallbackMode);
63
+ this.validateLatency(opts.latency);
64
+ this.validateErrorRate(opts.errorRate);
65
+ }
66
+ static validateRecord(record) {
67
+ if (typeof (record) === "string" && !RecordMode.ALL.includes(record)) {
68
+ throw `INVALID OPTION: record has an invalid value of '${record}'`;
69
+ }
70
+ }
71
+ static validateFallbackMode(fallbackMode) {
72
+ if (typeof (fallbackMode) === "string" && !FallbackMode.ALL.includes(fallbackMode)) {
73
+ throw `INVALID OPTION: fallbackMode has an invalid value of '${fallbackMode}'`;
74
+ }
75
+ }
76
+ static validateLatency(latency) {
77
+ if (Array.isArray(latency) && latency.length !== 2) {
78
+ throw `Invalid LATENCY option. If using a range, the array should only have 2 values [min, max]. Current=[${latency}]`;
79
+ }
80
+ }
81
+ static validateErrorRate(errorRate) {
82
+ if (typeof (errorRate) !== "function" && (errorRate < 0 || errorRate > 100)) {
83
+ throw `Invalid ERRORRATE option. Value should be between 0 and 100. Current=[${errorRate}]`;
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=options.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAItC,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,KAAK,EAAE,2EAA2E;IACvF,SAAS,EAAE,WAAW,EAAE,yFAAyF;IACjH,QAAQ,EAAE,UAAU,EAAE,mHAAmH;IACzI,GAAG,EAAE,EAAc;CACpB,CAAA;AACD,UAAU,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,EAAc;CACpB,CAAA;AACD,YAAY,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;AAmC/D,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU,CAAC,GAAG;IACtB,YAAY,EAAE,YAAY,CAAC,SAAS;IACpC,IAAI,EAAE,SAAS;IACf,iBAAiB,EAAE,SAAS;IAE5B,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,SAAS;KACpB;IAED,aAAa,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACzC,iBAAiB,EAAE,EAAE;IACrB,UAAU,EAAE,KAAK;IAEjB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IAErB,gBAAgB,EAAE,SAAS;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,aAAa,EAAE,SAAS;IAExB,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IAEZ,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC;CACvB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,cAAc;IACzB,MAAM,CAAC,MAAM,CAAQ;IAE7B,MAAM,CAAC,OAAO,CAAC,UAA4B,EAAE;QAC3C,MAAM,IAAI,GAA0B;YAClC,GAAG,cAAc;YACjB,IAAI,EAAE,OAAO,CAAC,IAAK;YACnB,GAAG,OAAO;YACV,aAAa,EAAE;gBACb,GAAG,cAAc,CAAC,aAAa;gBAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;aACjC;SACF,CAAA;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAEzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAE1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAa;QAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAW;QAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrE,MAAM,mDAAmD,MAAM,GAAG,CAAA;QACpE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,YAAiB;QAC3C,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACnF,MAAM,yDAAyD,YAAY,GAAG,CAAA;QAChF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAY;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,sGAAsG,OAAO,GAAG,CAAA;QACxH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAc;QACrC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;YAC5E,MAAM,yEAAyE,SAAS,GAAG,CAAA;QAC7F,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import TapeStore from './tape-store.backend';
2
+ import { Options } from './options.backend';
3
+ import { HttpRequest, HttpResponse } from './types.backend';
4
+ export default class RequestHandler {
5
+ private readonly tapeStore;
6
+ private readonly options;
7
+ private readonly errorRate;
8
+ private readonly latency;
9
+ constructor(tapeStore: TapeStore, options: Options);
10
+ handle(req: HttpRequest): Promise<HttpResponse>;
11
+ private onNoRecord;
12
+ private makeRealRequest;
13
+ }
@@ -0,0 +1,142 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import axios from 'axios';
3
+ import Tape from './tape.backend';
4
+ import OptionsFactory, { RecordMode, FallbackMode } from './options.backend';
5
+ import ErrorRate from './features/error-rate.backend';
6
+ import Latency from './features/latency.backend';
7
+ export default class RequestHandler {
8
+ tapeStore;
9
+ options;
10
+ errorRate;
11
+ latency;
12
+ constructor(tapeStore, options) {
13
+ this.tapeStore = tapeStore;
14
+ this.options = options;
15
+ this.errorRate = new ErrorRate(this.options);
16
+ this.latency = new Latency(this.options);
17
+ }
18
+ async handle(req) {
19
+ const matchingContext = {
20
+ id: uuidv4()
21
+ };
22
+ const recordMode = typeof (this.options.record) === "string" ? this.options.record : this.options.record(req);
23
+ OptionsFactory.validateRecord(recordMode);
24
+ if (this.options.requestDecorator) {
25
+ req = this.options.requestDecorator(req, matchingContext);
26
+ if (!req) {
27
+ throw new Error("requestDecorator didn't return a req object");
28
+ }
29
+ }
30
+ let newTape = new Tape(req, this.options);
31
+ let matchingTape = this.tapeStore.find(newTape);
32
+ let resObj, responseTape;
33
+ if (recordMode !== RecordMode.OVERWRITE && matchingTape) {
34
+ responseTape = matchingTape;
35
+ if (this.errorRate.shouldSimulate(req, matchingTape)) {
36
+ return this.errorRate.simulate(req);
37
+ }
38
+ await this.latency.simulate(req, matchingTape);
39
+ }
40
+ else {
41
+ if (matchingTape) {
42
+ responseTape = matchingTape;
43
+ }
44
+ else {
45
+ responseTape = newTape;
46
+ }
47
+ if (recordMode === RecordMode.NEW || recordMode === RecordMode.OVERWRITE) {
48
+ resObj = await this.makeRealRequest(req);
49
+ responseTape.res = { ...resObj };
50
+ if (this.options.tapeDecorator) {
51
+ responseTape = this.options.tapeDecorator(responseTape, matchingContext);
52
+ if (!responseTape) {
53
+ throw new Error("tapeDecorator didn't return a tape object");
54
+ }
55
+ }
56
+ await this.tapeStore.save(responseTape);
57
+ }
58
+ else {
59
+ resObj = await this.onNoRecord(req);
60
+ responseTape.res = { ...resObj };
61
+ }
62
+ }
63
+ resObj = responseTape.res;
64
+ if (this.options.responseDecorator) {
65
+ const clonedTape = await responseTape.clone();
66
+ const resTape = this.options.responseDecorator(clonedTape, req, matchingContext);
67
+ if (!resTape) {
68
+ throw new Error("responseDecorator didn't return a tape object");
69
+ }
70
+ if (resTape.res.headers["content-length"]) {
71
+ resTape.res.headers["content-length"] = resTape.res.body.length;
72
+ }
73
+ resObj = resTape.res;
74
+ }
75
+ return resObj;
76
+ }
77
+ async onNoRecord(req) {
78
+ const fallbackMode = typeof (this.options.fallbackMode) === "string" ? this.options.fallbackMode : this.options.fallbackMode(req);
79
+ OptionsFactory.validateFallbackMode(fallbackMode);
80
+ this.options.logger.log(`Tape for ${req.url} not found and recording is disabled (fallbackMode: ${fallbackMode})`);
81
+ this.options.logger.log({
82
+ url: req.url,
83
+ headers: req.headers
84
+ });
85
+ if (fallbackMode === FallbackMode.PROXY) {
86
+ if (this.errorRate.shouldSimulate(req, undefined)) {
87
+ return this.errorRate.simulate(req);
88
+ }
89
+ await this.latency.simulate(req, undefined);
90
+ return await this.makeRealRequest(req);
91
+ }
92
+ return {
93
+ status: 404,
94
+ headers: { "content-type": ["text/plain"] },
95
+ body: Buffer.from("talkback - tape not found")
96
+ };
97
+ }
98
+ async makeRealRequest(req) {
99
+ // let fetchBody: Buffer | null
100
+ let { method, url, body } = req;
101
+ // fetchBody = body
102
+ const headers = { ...req.headers };
103
+ delete headers.host;
104
+ const host = this.options.host;
105
+ // this.options.logger.log(`Making real request to ${host}${url}`)
106
+ // if (method === "GET" || method === "HEAD") {
107
+ // fetchBody = null
108
+ // }
109
+ let urlToGetData = `${host}${url}`;
110
+ // console.log(`host: "${urlToGetData}"` )
111
+ // console.log(`url: "${url}"` )
112
+ var fRes = {
113
+ status: 400,
114
+ headers: {},
115
+ body: new Buffer('')
116
+ };
117
+ try {
118
+ // console.log(body.toString())
119
+ const r = await axios({
120
+ url: urlToGetData,
121
+ method,
122
+ headers,
123
+ data: body,
124
+ responseType: 'arraybuffer',
125
+ });
126
+ fRes = {
127
+ status: r.status,
128
+ headers: r.headers,
129
+ body: r.data
130
+ };
131
+ }
132
+ catch (err) {
133
+ fRes = {
134
+ status: err?.response?.status,
135
+ headers: err?.response?.headers,
136
+ body: err?.response?.data
137
+ };
138
+ }
139
+ return fRes;
140
+ }
141
+ }
142
+ //# sourceMappingURL=request-handler.backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-handler.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import TapeStore from './tape-store.backend';
2
+ import * as http from 'http';
3
+ import { Options } from './options.backend';
4
+ export default class TalkbackServer {
5
+ private readonly options;
6
+ readonly tapeStore: TapeStore;
7
+ private requestHandler;
8
+ private readonly closeSignalHandler?;
9
+ private server?;
10
+ private closed;
11
+ constructor(options: Options);
12
+ handleRequest(rawReq: http.IncomingMessage, res: http.ServerResponse): void;
13
+ start(callback?: () => void): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>;
14
+ hasTapeBeenUsed(tapeName: string): boolean;
15
+ resetTapeUsage(): void;
16
+ close(callback?: () => void): void;
17
+ }