ng-talkback 18.0.19 → 18.0.21
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/assets/shared/shared_folder_info.txt +1 -1
- package/index.js +15 -2
- package/index.js.map +1 -1
- package/lib/build-info._auto-generated_.js.map +1 -1
- package/lib/es6.backend.js +1 -1
- package/lib/es6.backend.js.map +1 -1
- package/lib/features/error-rate.backend.js +13 -13
- package/lib/features/error-rate.backend.js.map +1 -1
- package/lib/features/latency.backend.js +27 -33
- package/lib/features/latency.backend.js.map +1 -1
- package/lib/index._auto-generated_.d.ts +1 -0
- package/lib/index._auto-generated_.js.map +1 -1
- package/lib/index.js +21 -8
- package/lib/index.js.map +1 -1
- package/lib/logger.backend.js +10 -10
- package/lib/logger.backend.js.map +1 -1
- package/lib/options.backend.js +29 -25
- package/lib/options.backend.js.map +1 -1
- package/lib/request-handler.backend.js +133 -162
- package/lib/request-handler.backend.js.map +1 -1
- package/lib/server.backend.d.ts +1 -1
- package/lib/server.backend.js +60 -77
- package/lib/server.backend.js.map +1 -1
- package/lib/summary.backend.js +12 -11
- package/lib/summary.backend.js.map +1 -1
- package/lib/talkback-factory.backend.js +15 -29
- package/lib/talkback-factory.backend.js.map +1 -1
- package/lib/tape-matcher.backend.js +43 -42
- package/lib/tape-matcher.backend.js.map +1 -1
- package/lib/tape-renderer.backend.js +90 -121
- package/lib/tape-renderer.backend.js.map +1 -1
- package/lib/tape-store.backend.js +76 -115
- package/lib/tape-store.backend.js.map +1 -1
- package/lib/tape.backend.js +43 -50
- package/lib/tape.backend.js.map +1 -1
- package/lib/types.backend.js.map +1 -1
- package/lib/utils/content-encoding.backend.js +29 -40
- package/lib/utils/content-encoding.backend.js.map +1 -1
- package/lib/utils/headers.backend.js +7 -10
- package/lib/utils/headers.backend.js.map +1 -1
- package/lib/utils/media-type.backend.js +27 -27
- package/lib/utils/media-type.backend.js.map +1 -1
- package/migrations/index.js +15 -2
- package/migrations/index.js.map +1 -1
- package/migrations/migrations_index._auto-generated_.d.ts +1 -0
- package/migrations/migrations_index._auto-generated_.js.map +1 -1
- package/package.json +21 -76
- package/src.d.ts +1 -1
- package/tmp-environment.json +8 -409
- package/browser/package.json +0 -25
- package/taon.jsonc +0 -47
- package/websql/package.json +0 -25
|
@@ -1,138 +1,99 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
const tnp_core_1 = require("tnp-core");
|
|
4
|
+
const tape_backend_1 = require("./tape.backend");
|
|
5
|
+
const tape_matcher_backend_1 = require("./tape-matcher.backend");
|
|
6
|
+
const tape_renderer_backend_1 = require("./tape-renderer.backend");
|
|
7
|
+
class TapeStore {
|
|
8
|
+
path;
|
|
9
|
+
options;
|
|
10
|
+
tapes;
|
|
11
|
+
constructor(options) {
|
|
10
12
|
this.path = tnp_core_1.path.normalize(options.path + "/");
|
|
11
13
|
this.options = options;
|
|
12
14
|
this.tapes = [];
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
async load() {
|
|
17
|
+
tnp_core_1.mkdirp.sync(this.path);
|
|
18
|
+
await this.loadTapesAtDir(this.path);
|
|
19
|
+
console.log(`Loaded ${this.tapes.length} tapes`);
|
|
20
|
+
}
|
|
21
|
+
async loadTapesAtDir(directory) {
|
|
22
|
+
const items = tnp_core_1.fse.readdirSync(directory);
|
|
23
|
+
for (let i = 0; i < items.length; i++) {
|
|
24
|
+
const filename = items[i];
|
|
25
|
+
const fullPath = `${directory}${filename}`;
|
|
26
|
+
const stat = tnp_core_1.fse.statSync(fullPath);
|
|
27
|
+
if (!stat.isDirectory()) {
|
|
28
|
+
try {
|
|
29
|
+
const data = tnp_core_1.fse.readFileSync(fullPath, "utf8");
|
|
30
|
+
const raw = tnp_core_1.json5.parse(data);
|
|
31
|
+
const tape = await tape_backend_1.default.fromStore(raw, this.options);
|
|
32
|
+
tape.path = filename;
|
|
33
|
+
this.tapes.push(tape);
|
|
25
34
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
};
|
|
29
|
-
TapeStore.prototype.loadTapesAtDir = function (directory) {
|
|
30
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
31
|
-
var items, i, filename, fullPath, stat, data, raw, tape, e_1;
|
|
32
|
-
return tslib_1.__generator(this, function (_a) {
|
|
33
|
-
switch (_a.label) {
|
|
34
|
-
case 0:
|
|
35
|
-
items = tnp_core_1.fse.readdirSync(directory);
|
|
36
|
-
i = 0;
|
|
37
|
-
_a.label = 1;
|
|
38
|
-
case 1:
|
|
39
|
-
if (!(i < items.length)) return [3 /*break*/, 8];
|
|
40
|
-
filename = items[i];
|
|
41
|
-
fullPath = "".concat(directory).concat(filename);
|
|
42
|
-
stat = tnp_core_1.fse.statSync(fullPath);
|
|
43
|
-
if (!!stat.isDirectory()) return [3 /*break*/, 6];
|
|
44
|
-
_a.label = 2;
|
|
45
|
-
case 2:
|
|
46
|
-
_a.trys.push([2, 4, , 5]);
|
|
47
|
-
data = tnp_core_1.fse.readFileSync(fullPath, "utf8");
|
|
48
|
-
raw = tnp_core_1.json5.parse(data);
|
|
49
|
-
return [4 /*yield*/, tape_backend_1.default.fromStore(raw, this.options)];
|
|
50
|
-
case 3:
|
|
51
|
-
tape = _a.sent();
|
|
52
|
-
tape.path = filename;
|
|
53
|
-
this.tapes.push(tape);
|
|
54
|
-
return [3 /*break*/, 5];
|
|
55
|
-
case 4:
|
|
56
|
-
e_1 = _a.sent();
|
|
57
|
-
console.log("Error reading tape ".concat(fullPath), e_1.message);
|
|
58
|
-
return [3 /*break*/, 5];
|
|
59
|
-
case 5: return [3 /*break*/, 7];
|
|
60
|
-
case 6:
|
|
61
|
-
this.loadTapesAtDir(fullPath + "/");
|
|
62
|
-
_a.label = 7;
|
|
63
|
-
case 7:
|
|
64
|
-
i++;
|
|
65
|
-
return [3 /*break*/, 1];
|
|
66
|
-
case 8: return [2 /*return*/];
|
|
35
|
+
catch (e) {
|
|
36
|
+
console.log(`Error reading tape ${fullPath}`, e.message);
|
|
67
37
|
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.loadTapesAtDir(fullPath + "/");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
find(newTape) {
|
|
45
|
+
const foundTape = this.tapes.find(t => {
|
|
46
|
+
this.options.logger.debug(`Comparing against tape ${t.path}`);
|
|
47
|
+
return new tape_matcher_backend_1.default(t, this.options).sameAs(newTape);
|
|
76
48
|
});
|
|
77
49
|
if (foundTape) {
|
|
78
50
|
foundTape.used = true;
|
|
79
|
-
this.options.logger.log(
|
|
51
|
+
this.options.logger.log(`Found matching tape for ${newTape.req.url} at ${foundTape.path}`);
|
|
80
52
|
return foundTape;
|
|
81
53
|
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return [4 /*yield*/, tapeRenderer.render()];
|
|
104
|
-
case 1:
|
|
105
|
-
toSave = _a.sent();
|
|
106
|
-
tnp_core_1.fse.writeFileSync(fullFilename, tnp_core_1.json5.stringify(toSave, null, 4));
|
|
107
|
-
return [2 /*return*/];
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
TapeStore.prototype.currentTapeId = function () {
|
|
54
|
+
}
|
|
55
|
+
async save(tape) {
|
|
56
|
+
tape.new = true;
|
|
57
|
+
tape.used = true;
|
|
58
|
+
const tapePath = tape.path;
|
|
59
|
+
let fullFilename;
|
|
60
|
+
if (tapePath) {
|
|
61
|
+
fullFilename = tnp_core_1.path.join(this.path, tapePath);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// If the tape doesn't have a path then it's new
|
|
65
|
+
this.tapes.push(tape);
|
|
66
|
+
fullFilename = this.createTapePath(tape);
|
|
67
|
+
tape.path = tnp_core_1.path.relative(this.path, fullFilename);
|
|
68
|
+
}
|
|
69
|
+
this.options.logger.log(`Saving request ${tape.req.url} at ${tape.path}`);
|
|
70
|
+
const tapeRenderer = new tape_renderer_backend_1.default(tape);
|
|
71
|
+
const toSave = await tapeRenderer.render();
|
|
72
|
+
tnp_core_1.fse.writeFileSync(fullFilename, tnp_core_1.json5.stringify(toSave, null, 4));
|
|
73
|
+
}
|
|
74
|
+
currentTapeId() {
|
|
113
75
|
return this.tapes.length;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return this.tapes.some(
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return this.tapes.forEach(
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
76
|
+
}
|
|
77
|
+
hasTapeBeenUsed(tapeName) {
|
|
78
|
+
return this.tapes.some(t => t.used && t.path === tapeName);
|
|
79
|
+
}
|
|
80
|
+
resetTapeUsage() {
|
|
81
|
+
return this.tapes.forEach(t => t.used = false);
|
|
82
|
+
}
|
|
83
|
+
createTapePath(tape) {
|
|
84
|
+
const currentTapeId = this.currentTapeId();
|
|
85
|
+
let tapePath = `unnamed-${currentTapeId}.json5`;
|
|
124
86
|
if (this.options.tapeNameGenerator) {
|
|
125
87
|
tapePath = this.options.tapeNameGenerator(currentTapeId, tape);
|
|
126
88
|
}
|
|
127
|
-
|
|
89
|
+
let result = tnp_core_1.path.normalize(tnp_core_1.path.join(this.options.path, tapePath));
|
|
128
90
|
if (!result.endsWith(".json5")) {
|
|
129
|
-
result =
|
|
91
|
+
result = `${result}.json5`;
|
|
130
92
|
}
|
|
131
|
-
|
|
93
|
+
const dir = tnp_core_1.path.dirname(result);
|
|
132
94
|
tnp_core_1.mkdirp.sync(dir);
|
|
133
95
|
return result;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
}());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
137
98
|
exports.default = TapeStore;
|
|
138
99
|
//# sourceMappingURL=tape-store.backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tape-store.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tape-store.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/tape-store.backend.ts"],"names":[],"mappings":"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"}
|
package/lib/tape.backend.js
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Tape = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var querystring = require("querystring");
|
|
4
|
+
const media_type_backend_1 = require("./utils/media-type.backend");
|
|
5
|
+
const tape_renderer_backend_1 = require("./tape-renderer.backend");
|
|
6
|
+
const content_encoding_backend_1 = require("./utils/content-encoding.backend");
|
|
7
|
+
const URL = require("url");
|
|
8
|
+
const querystring = require("querystring");
|
|
10
9
|
// const URL = require('url')
|
|
11
10
|
// const querystring = require('querystring')
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
class Tape {
|
|
12
|
+
req;
|
|
13
|
+
res;
|
|
14
|
+
options;
|
|
15
|
+
queryParamsToIgnore;
|
|
16
|
+
meta;
|
|
17
|
+
path;
|
|
18
|
+
new = false;
|
|
19
|
+
used = false;
|
|
20
|
+
constructor(req, options) {
|
|
21
|
+
this.req = { ...req };
|
|
17
22
|
this.options = options;
|
|
18
23
|
// This needs to happen before we erase headers since we could lose information
|
|
19
24
|
this.normalizeBody();
|
|
@@ -25,29 +30,28 @@ var Tape = /** @class */ (function () {
|
|
|
25
30
|
host: this.options.host
|
|
26
31
|
};
|
|
27
32
|
}
|
|
28
|
-
|
|
29
|
-
return
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Tape.prototype.cleanupQueryParams = function () {
|
|
33
|
+
static async fromStore(raw, options) {
|
|
34
|
+
return tape_renderer_backend_1.default.fromStore(raw, options);
|
|
35
|
+
}
|
|
36
|
+
cleanupHeaders() {
|
|
37
|
+
const newHeaders = { ...this.req.headers };
|
|
38
|
+
this.options.ignoreHeaders.forEach(h => delete newHeaders[h]);
|
|
39
|
+
this.req = {
|
|
40
|
+
...this.req,
|
|
41
|
+
headers: newHeaders
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
cleanupQueryParams() {
|
|
41
45
|
if (this.queryParamsToIgnore.length === 0) {
|
|
42
46
|
return;
|
|
43
47
|
}
|
|
44
|
-
|
|
48
|
+
const url = URL.parse(this.req.url, true);
|
|
45
49
|
if (!url.search) {
|
|
46
50
|
return;
|
|
47
51
|
}
|
|
48
|
-
|
|
49
|
-
this.queryParamsToIgnore.forEach(
|
|
50
|
-
|
|
52
|
+
const query = { ...url.query };
|
|
53
|
+
this.queryParamsToIgnore.forEach(q => delete query[q]);
|
|
54
|
+
const newQuery = querystring.stringify(query);
|
|
51
55
|
if (newQuery) {
|
|
52
56
|
url.query = query;
|
|
53
57
|
url.search = "?" + newQuery;
|
|
@@ -57,31 +61,20 @@ var Tape = /** @class */ (function () {
|
|
|
57
61
|
url.search = null;
|
|
58
62
|
}
|
|
59
63
|
this.req.url = URL.format(url);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
}
|
|
65
|
+
normalizeBody() {
|
|
66
|
+
const mediaType = new media_type_backend_1.default(this.req);
|
|
67
|
+
const contentEncoding = new content_encoding_backend_1.default(this.req);
|
|
64
68
|
if (contentEncoding.isUncompressed() && mediaType.isJSON() && this.req.body.length > 0) {
|
|
65
69
|
this.req.body = Buffer.from(JSON.stringify(JSON.parse(this.req.body.toString()), null, 2));
|
|
66
70
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
tapeRenderer = new tape_renderer_backend_1.default(this);
|
|
75
|
-
return [4 /*yield*/, tapeRenderer.render()];
|
|
76
|
-
case 1:
|
|
77
|
-
raw = _a.sent();
|
|
78
|
-
return [2 /*return*/, Tape.fromStore(raw, this.options)];
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
return Tape;
|
|
84
|
-
}());
|
|
71
|
+
}
|
|
72
|
+
async clone() {
|
|
73
|
+
const tapeRenderer = new tape_renderer_backend_1.default(this);
|
|
74
|
+
const raw = await tapeRenderer.render();
|
|
75
|
+
return Tape.fromStore(raw, this.options);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
85
78
|
exports.Tape = Tape;
|
|
86
79
|
exports.default = Tape;
|
|
87
80
|
//# sourceMappingURL=tape.backend.js.map
|
package/lib/tape.backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tape.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tape.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/tape.backend.ts"],"names":[],"mappings":"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"}
|
package/lib/types.backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/types.backend.ts"],"names":[],"mappings":""}
|
|
@@ -1,52 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var ALGORITHMS = {
|
|
3
|
+
const zlib = require('zlib');
|
|
4
|
+
const headers_backend_1 = require("./headers.backend");
|
|
5
|
+
const ALGORITHMS = {
|
|
7
6
|
gzip: { compress: zlib.gzipSync, uncompress: zlib.gunzipSync },
|
|
8
7
|
deflate: { compress: zlib.deflateSync, uncompress: zlib.inflateSync }
|
|
9
8
|
};
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
class ContentEncoding {
|
|
10
|
+
reqRes;
|
|
11
|
+
constructor(reqRes) {
|
|
12
12
|
this.reqRes = reqRes;
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
isUncompressed() {
|
|
15
|
+
const contentEncoding = this.contentEncoding();
|
|
16
16
|
return !contentEncoding || contentEncoding === "identity";
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
}
|
|
18
|
+
supportedAlgorithm() {
|
|
19
|
+
const contentEncoding = this.contentEncoding();
|
|
20
20
|
return Object.keys(ALGORITHMS).includes(contentEncoding);
|
|
21
|
-
}
|
|
22
|
-
|
|
21
|
+
}
|
|
22
|
+
contentEncoding() {
|
|
23
23
|
return headers_backend_1.default.read(this.reqRes.headers, "content-encoding");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return tslib_1.__generator(this, function (_a) {
|
|
41
|
-
contentEncoding = this.contentEncoding();
|
|
42
|
-
if (!this.supportedAlgorithm()) {
|
|
43
|
-
throw new Error("Unsupported content-encoding ".concat(contentEncoding));
|
|
44
|
-
}
|
|
45
|
-
return [2 /*return*/, ALGORITHMS[contentEncoding].compress(body)];
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
return ContentEncoding;
|
|
50
|
-
}());
|
|
24
|
+
}
|
|
25
|
+
async uncompressedBody(body) {
|
|
26
|
+
const contentEncoding = this.contentEncoding();
|
|
27
|
+
if (!this.supportedAlgorithm()) {
|
|
28
|
+
throw new Error(`Unsupported content-encoding ${contentEncoding}`);
|
|
29
|
+
}
|
|
30
|
+
return ALGORITHMS[contentEncoding].uncompress(body);
|
|
31
|
+
}
|
|
32
|
+
async compressedBody(body) {
|
|
33
|
+
const contentEncoding = this.contentEncoding();
|
|
34
|
+
if (!this.supportedAlgorithm()) {
|
|
35
|
+
throw new Error(`Unsupported content-encoding ${contentEncoding}`);
|
|
36
|
+
}
|
|
37
|
+
return ALGORITHMS[contentEncoding].compress(body);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
51
40
|
exports.default = ContentEncoding;
|
|
52
41
|
//# sourceMappingURL=content-encoding.backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-encoding.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-encoding.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/utils/content-encoding.backend.ts"],"names":[],"mappings":";;AAEA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,uDAAwC;AAExC,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAC;IAC5D,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAC;CACpE,CAAA;AAID,MAAqB,eAAe;IAC1B,MAAM,CAAQ;IAEtB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,cAAc;QACZ,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC9C,OAAO,CAAC,eAAe,IAAI,eAAe,KAAK,UAAU,CAAA;IAC3D,CAAC;IAED,kBAAkB;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC1D,CAAC;IAED,eAAe;QACb,OAAO,yBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,eAAe,EAAE,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,UAAU,CAAC,eAAsC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,eAAe,EAAE,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,UAAU,CAAC,eAAsC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1E,CAAC;CACF;AAxCD,kCAwCC"}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Headers.read = function (headers, headerName) {
|
|
7
|
-
var value = headers[headerName];
|
|
3
|
+
class Headers {
|
|
4
|
+
static read(headers, headerName) {
|
|
5
|
+
const value = headers[headerName];
|
|
8
6
|
if (Array.isArray(value)) {
|
|
9
7
|
return value[0];
|
|
10
8
|
}
|
|
11
9
|
else {
|
|
12
10
|
return value;
|
|
13
11
|
}
|
|
14
|
-
}
|
|
15
|
-
|
|
12
|
+
}
|
|
13
|
+
static write(headers, headerName, value, type) {
|
|
16
14
|
headers[headerName] = type === "req" ? value : [value];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
}());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
20
17
|
exports.default = Headers;
|
|
21
18
|
//# sourceMappingURL=headers.backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;AAAA;
|
|
1
|
+
{"version":3,"file":"headers.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/utils/headers.backend.ts"],"names":[],"mappings":";;AAAA,MAAqB,OAAO;IAC1B,MAAM,CAAC,IAAI,CAAC,OAAY,EAAE,UAAkB;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAY,EAAE,UAAkB,EAAE,KAAa,EAAE,IAAiB;QAC7E,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACxD,CAAC;CACF;AAbD,0BAaC"}
|
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.jsonTypes = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var equals = function (to) { return function (contentType) { return to == contentType; }; };
|
|
4
|
+
const tnp_core_1 = require("tnp-core");
|
|
5
|
+
const headers_backend_1 = require("./headers.backend");
|
|
6
|
+
const contentTypeParser = require('content-type');
|
|
7
|
+
const equals = (to) => (contentType) => to == contentType;
|
|
9
8
|
exports.jsonTypes = [
|
|
10
9
|
equals("application/json"),
|
|
11
|
-
|
|
10
|
+
(contentType) => contentType.startsWith("application/") && contentType.endsWith("+json")
|
|
12
11
|
];
|
|
13
|
-
|
|
12
|
+
const humanReadableContentTypes = [
|
|
14
13
|
equals("application/javascript"),
|
|
15
14
|
equals("text/css"),
|
|
16
15
|
equals("text/html"),
|
|
17
16
|
equals("text/javascript"),
|
|
18
|
-
equals("text/plain")
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
equals("text/plain"),
|
|
18
|
+
...exports.jsonTypes
|
|
19
|
+
];
|
|
20
|
+
class MediaType {
|
|
21
|
+
htmlReqRes;
|
|
22
|
+
constructor(htmlReqRes) {
|
|
22
23
|
this.htmlReqRes = htmlReqRes;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
isHumanReadable() {
|
|
26
|
+
const contentType = this.contentType();
|
|
26
27
|
if (!contentType) {
|
|
27
28
|
return false;
|
|
28
29
|
}
|
|
29
|
-
return humanReadableContentTypes.some(
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
return humanReadableContentTypes.some(comparator => comparator(contentType));
|
|
31
|
+
}
|
|
32
|
+
isJSON() {
|
|
33
|
+
const contentType = this.contentType();
|
|
33
34
|
if (!contentType) {
|
|
34
35
|
return false;
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
const result = exports.jsonTypes.some(comparator => comparator('application/json'));
|
|
37
38
|
return result;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
}
|
|
40
|
+
contentType() {
|
|
41
|
+
const contentTypeHeader = headers_backend_1.default.read(this.headers(), "content-type");
|
|
41
42
|
if (!contentTypeHeader) {
|
|
42
43
|
return null;
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
+
const parsedContentType = contentTypeParser.parse(contentTypeHeader);
|
|
45
46
|
return parsedContentType.type;
|
|
46
|
-
}
|
|
47
|
-
|
|
47
|
+
}
|
|
48
|
+
headers() {
|
|
48
49
|
return tnp_core_1._.merge(this.htmlReqRes.headers, {
|
|
49
50
|
'content-type': 'application/json'
|
|
50
51
|
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
}());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
54
|
exports.default = MediaType;
|
|
55
55
|
//# sourceMappingURL=media-type.backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-type.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"media-type.backend.js","sourceRoot":"","sources":["/Users/dfilipiak/projects/npm/taon-dev/ng-talkback/src/lib/utils/media-type.backend.ts"],"names":[],"mappings":";;;AAAA,uCAA6B;AAE7B,uDAAwC;AAExC,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAEjD,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,EAAE,IAAI,WAAW,CAAA;AAE5D,QAAA,SAAS,GAAG;IACvB,MAAM,CAAC,kBAAkB,CAAC;IAC1B,CAAC,WAAmB,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;CACjG,CAAA;AAED,MAAM,yBAAyB,GAAG;IAChC,MAAM,CAAC,wBAAwB,CAAC;IAChC,MAAM,CAAC,UAAU,CAAC;IAClB,MAAM,CAAC,WAAW,CAAC;IACnB,MAAM,CAAC,iBAAiB,CAAC;IACzB,MAAM,CAAC,YAAY,CAAC;IACpB,GAAG,iBAAS;CACb,CAAA;AAED,MAAqB,SAAS;IACpB,UAAU,CAAQ;IAE1B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,eAAe;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM;QACJ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,MAAM,GAAG,iBAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,MAAM,iBAAiB,GAAG,yBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpE,OAAO,iBAAiB,CAAC,IAAc,CAAA;IACzC,CAAC;IAED,OAAO;QACL,OAAO,YAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC,CAAA;IACJ,CAAC;CACF;AAvCD,4BAuCC"}
|