@squiz/dx-common-lib 1.2.12 → 1.2.13-alpha.1
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/CHANGELOG.md +9 -69
- package/lib/api-key-validation/ApiKeyValidationService.d.ts +4 -0
- package/lib/api-key-validation/ApiKeyValidationService.js +3 -0
- package/lib/api-key-validation/ApiKeyValidationService.js.map +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.d.ts +17 -0
- package/lib/api-key-validation/CloudflareApiKeyService.js +72 -0
- package/lib/api-key-validation/CloudflareApiKeyService.js.map +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.js +93 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.js.map +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.d.ts +5 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.js +13 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.js.map +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.js +17 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.js.map +1 -0
- package/lib/api-key-validation/getApiKeyService.d.ts +6 -0
- package/lib/api-key-validation/getApiKeyService.js +23 -0
- package/lib/api-key-validation/getApiKeyService.js.map +1 -0
- package/lib/api-key-validation/getApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/getApiKeyService.spec.js +24 -0
- package/lib/api-key-validation/getApiKeyService.spec.js.map +1 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.d.ts +19 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.js +21 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.js.map +1 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.d.ts +1 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js +97 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js.map +1 -0
- package/lib/cache/cacheControlToString.d.ts +2 -0
- package/lib/cache/cacheControlToString.js +24 -0
- package/lib/cache/cacheControlToString.js.map +1 -0
- package/lib/cache/cacheControlToString.spec.d.ts +1 -0
- package/lib/cache/cacheControlToString.spec.js +34 -0
- package/lib/cache/cacheControlToString.spec.js.map +1 -0
- package/lib/cache/index.d.ts +4 -0
- package/lib/cache/index.js +21 -0
- package/lib/cache/index.js.map +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.d.ts +5 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.js +26 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.js.map +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.d.ts +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js +21 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js.map +1 -0
- package/lib/cache/parseCacheControl.d.ts +19 -0
- package/lib/cache/parseCacheControl.js +46 -0
- package/lib/cache/parseCacheControl.js.map +1 -0
- package/lib/cache/parseCacheControl.spec.d.ts +1 -0
- package/lib/cache/parseCacheControl.spec.js +70 -0
- package/lib/cache/parseCacheControl.spec.js.map +1 -0
- package/lib/error/InvalidTokenError.d.ts +5 -0
- package/lib/error/InvalidTokenError.js +12 -0
- package/lib/error/InvalidTokenError.js.map +1 -0
- package/lib/error/UnAuthenticatedRequestError.d.ts +4 -0
- package/lib/error/UnAuthenticatedRequestError.js +11 -0
- package/lib/error/UnAuthenticatedRequestError.js.map +1 -0
- package/lib/error/UnprivilegedError.d.ts +5 -0
- package/lib/error/UnprivilegedError.js +12 -0
- package/lib/error/UnprivilegedError.js.map +1 -0
- package/lib/error/index.d.ts +3 -0
- package/lib/error/index.js +3 -0
- package/lib/error/index.js.map +1 -1
- package/lib/formatted-text/formattedTextToHtmlSting.d.ts +4 -0
- package/lib/formatted-text/formattedTextToHtmlSting.js +85 -0
- package/lib/formatted-text/formattedTextToHtmlSting.js.map +1 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.d.ts +1 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.js +212 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/server-utils/apiKeyMiddleware.d.ts +3 -0
- package/lib/server-utils/apiKeyMiddleware.js +20 -0
- package/lib/server-utils/apiKeyMiddleware.js.map +1 -0
- package/lib/server-utils/apiKeyMiddleware.spec.d.ts +1 -0
- package/lib/server-utils/apiKeyMiddleware.spec.js +39 -0
- package/lib/server-utils/apiKeyMiddleware.spec.js.map +1 -0
- package/package.json +9 -7
- package/src/api-key-validation/ApiKeyValidationService.ts +4 -0
- package/src/api-key-validation/CloudflareApiKeyService.spec.ts +122 -0
- package/src/api-key-validation/CloudflareApiKeyService.ts +96 -0
- package/src/api-key-validation/DevelopmentApiKeyService.spec.ts +17 -0
- package/src/api-key-validation/DevelopmentApiKeyService.ts +10 -0
- package/src/api-key-validation/getApiKeyService.spec.ts +32 -0
- package/src/api-key-validation/getApiKeyService.ts +27 -0
- package/src/cache/applyDefaultRulesToCacheControlObject.spec.ts +126 -0
- package/src/cache/applyDefaultRulesToCacheControlObject.ts +23 -0
- package/src/cache/cacheControlToString.spec.ts +43 -0
- package/src/cache/cacheControlToString.ts +22 -0
- package/src/cache/index.ts +4 -0
- package/src/cache/parseAndSanitiseCacheControlHeader.spec.ts +25 -0
- package/src/cache/parseAndSanitiseCacheControlHeader.ts +28 -0
- package/src/cache/parseCacheControl.spec.ts +89 -0
- package/src/cache/parseCacheControl.ts +74 -0
- package/src/error/InvalidTokenError.ts +8 -0
- package/src/error/UnAuthenticatedRequestError.ts +7 -0
- package/src/error/UnprivilegedError.ts +8 -0
- package/src/error/index.ts +4 -0
- package/src/formatted-text/formattedTextToHtmlSting.spec.ts +235 -0
- package/src/formatted-text/formattedTextToHtmlSting.ts +100 -0
- package/src/index.ts +7 -0
- package/src/server-utils/apiKeyMiddleware.spec.ts +50 -0
- package/src/server-utils/apiKeyMiddleware.ts +23 -0
- package/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,97 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const applyDefaultRulesToCacheControlObject_1 = require("./applyDefaultRulesToCacheControlObject");
|
4
|
+
describe('applyDefaultRulesToCacheControlObject', () => {
|
5
|
+
const MIN_CACHE_SECONDS = 30;
|
6
|
+
const MAX_CACHE_SECONDS = 1800;
|
7
|
+
it('should return a Cache-Control object with the max-age directive clamped to the minimum allowed value if the value is 0', () => {
|
8
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
9
|
+
'max-age': 0,
|
10
|
+
})).toEqual({
|
11
|
+
'max-age': MIN_CACHE_SECONDS,
|
12
|
+
});
|
13
|
+
});
|
14
|
+
it('should return a Cache-Control object with the max-age directive clamped to the minimum allowed value if it is less than the minimum', () => {
|
15
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
16
|
+
'max-age': MIN_CACHE_SECONDS - 1,
|
17
|
+
})).toEqual({
|
18
|
+
'max-age': MIN_CACHE_SECONDS,
|
19
|
+
});
|
20
|
+
});
|
21
|
+
it('should return a Cache-Control object with the max-age directive clamped to the maximum allowed value if it is greater than the maximum', () => {
|
22
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
23
|
+
'max-age': MAX_CACHE_SECONDS + 1,
|
24
|
+
})).toEqual({
|
25
|
+
'max-age': MAX_CACHE_SECONDS,
|
26
|
+
});
|
27
|
+
});
|
28
|
+
it('should return a Cache-Control object with the s-maxage directive clamped to the minimum allowed value if the value is 0', () => {
|
29
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
30
|
+
's-maxage': 0,
|
31
|
+
})).toEqual({
|
32
|
+
's-maxage': MIN_CACHE_SECONDS,
|
33
|
+
});
|
34
|
+
});
|
35
|
+
it('should return a Cache-Control object with the s-maxage directive clamped to the minimum allowed value if it is less than the minimum', () => {
|
36
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
37
|
+
's-maxage': MIN_CACHE_SECONDS - 1,
|
38
|
+
})).toEqual({
|
39
|
+
's-maxage': MIN_CACHE_SECONDS,
|
40
|
+
});
|
41
|
+
});
|
42
|
+
it('should return a Cache-Control object with the s-maxage directive clamped to the maximum allowed value if it is greater than the maximum', () => {
|
43
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
44
|
+
's-maxage': MAX_CACHE_SECONDS + 1,
|
45
|
+
})).toEqual({
|
46
|
+
's-maxage': MAX_CACHE_SECONDS,
|
47
|
+
});
|
48
|
+
});
|
49
|
+
it('should return a Cache-Control object with the min-fresh directive clamped to the minimum allowed value if the value is 0', () => {
|
50
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
51
|
+
'min-fresh': 0,
|
52
|
+
})).toEqual({
|
53
|
+
'min-fresh': MIN_CACHE_SECONDS,
|
54
|
+
});
|
55
|
+
});
|
56
|
+
it('should return a Cache-Control object with the min-fresh directive clamped to the maximum allowed value if it is greater than the maximum', () => {
|
57
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
58
|
+
'min-fresh': MAX_CACHE_SECONDS + 1,
|
59
|
+
})).toEqual({
|
60
|
+
'min-fresh': MAX_CACHE_SECONDS,
|
61
|
+
});
|
62
|
+
});
|
63
|
+
it('should remove the no-store directive from the input Cache-Control object', () => {
|
64
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
65
|
+
'max-age': MAX_CACHE_SECONDS,
|
66
|
+
'no-store': true,
|
67
|
+
})).toEqual({
|
68
|
+
'max-age': MAX_CACHE_SECONDS,
|
69
|
+
});
|
70
|
+
});
|
71
|
+
it('should remove the no-cache directive from the input Cache-Control object', () => {
|
72
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
73
|
+
'max-age': MAX_CACHE_SECONDS,
|
74
|
+
'no-cache': true,
|
75
|
+
})).toEqual({
|
76
|
+
'max-age': MAX_CACHE_SECONDS,
|
77
|
+
});
|
78
|
+
});
|
79
|
+
it('should return a Cache-Control object with all other directives unchanged from the input Cache-Control object', () => {
|
80
|
+
expect((0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)({
|
81
|
+
'max-age': MAX_CACHE_SECONDS,
|
82
|
+
's-maxage': MAX_CACHE_SECONDS,
|
83
|
+
'min-fresh': MAX_CACHE_SECONDS,
|
84
|
+
'stale-while-revalidate': MAX_CACHE_SECONDS,
|
85
|
+
'stale-if-error': MAX_CACHE_SECONDS,
|
86
|
+
extension: 'foo',
|
87
|
+
})).toEqual({
|
88
|
+
'max-age': MAX_CACHE_SECONDS,
|
89
|
+
's-maxage': MAX_CACHE_SECONDS,
|
90
|
+
'min-fresh': MAX_CACHE_SECONDS,
|
91
|
+
'stale-while-revalidate': MAX_CACHE_SECONDS,
|
92
|
+
'stale-if-error': MAX_CACHE_SECONDS,
|
93
|
+
extension: 'foo',
|
94
|
+
});
|
95
|
+
});
|
96
|
+
});
|
97
|
+
//# sourceMappingURL=applyDefaultRulesToCacheControlObject.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"applyDefaultRulesToCacheControlObject.spec.js","sourceRoot":"","sources":["../../src/cache/applyDefaultRulesToCacheControlObject.spec.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.cacheControlToString = void 0;
|
4
|
+
function cacheControlToString(cacheControl) {
|
5
|
+
const parts = [];
|
6
|
+
for (const key of Object.keys(cacheControl)) {
|
7
|
+
let value = cacheControl[key];
|
8
|
+
if (typeof value === 'boolean' && value === true) {
|
9
|
+
parts.push(key);
|
10
|
+
}
|
11
|
+
else {
|
12
|
+
if (typeof value === 'number') {
|
13
|
+
value = value.toString();
|
14
|
+
}
|
15
|
+
else if (typeof value === 'string') {
|
16
|
+
value = `"${value}"`;
|
17
|
+
}
|
18
|
+
parts.push(`${key}=${value}`);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
return parts.join(', ');
|
22
|
+
}
|
23
|
+
exports.cacheControlToString = cacheControlToString;
|
24
|
+
//# sourceMappingURL=cacheControlToString.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cacheControlToString.js","sourceRoot":"","sources":["../../src/cache/cacheControlToString.ts"],"names":[],"mappings":";;;AAEA,SAAgB,oBAAoB,CAAC,YAA0B;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAC3C,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACjB;aAAM;YACL,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;aAC1B;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBACpC,KAAK,GAAG,IAAI,KAAK,GAAG,CAAC;aACtB;YAED,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;SAC/B;KACF;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAnBD,oDAmBC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const cacheControlToString_1 = require("./cacheControlToString");
|
4
|
+
describe('cacheControlToString', () => {
|
5
|
+
it('should return an empty string if the input Cache-Control object is empty', () => {
|
6
|
+
expect((0, cacheControlToString_1.cacheControlToString)({})).toEqual('');
|
7
|
+
});
|
8
|
+
it('should return a Cache-Control header string with a single boolean directive', () => {
|
9
|
+
expect((0, cacheControlToString_1.cacheControlToString)({ public: true })).toEqual('public');
|
10
|
+
});
|
11
|
+
it('should return a Cache-Control header string with a single numeric directive', () => {
|
12
|
+
expect((0, cacheControlToString_1.cacheControlToString)({ 'max-age': 3600 })).toEqual('max-age=3600');
|
13
|
+
});
|
14
|
+
it('should return a Cache-Control header string with a single string directive', () => {
|
15
|
+
expect((0, cacheControlToString_1.cacheControlToString)({ extension: 'foo' })).toEqual('extension="foo"');
|
16
|
+
});
|
17
|
+
it('should return a Cache-Control header string with multiple directives', () => {
|
18
|
+
expect((0, cacheControlToString_1.cacheControlToString)({
|
19
|
+
public: true,
|
20
|
+
'max-age': 3600,
|
21
|
+
's-maxage': 86400,
|
22
|
+
'min-fresh': 600,
|
23
|
+
'stale-while-revalidate': 60,
|
24
|
+
'stale-if-error': 86400,
|
25
|
+
extension: 'foo',
|
26
|
+
})).toEqual('public, max-age=3600, s-maxage=86400, min-fresh=600, stale-while-revalidate=60, stale-if-error=86400, extension="foo"');
|
27
|
+
});
|
28
|
+
it('should handle commas in string values in the input Cache-Control object', () => {
|
29
|
+
expect((0, cacheControlToString_1.cacheControlToString)({
|
30
|
+
extension: 'foo, bar',
|
31
|
+
})).toEqual('extension="foo, bar"');
|
32
|
+
});
|
33
|
+
});
|
34
|
+
//# sourceMappingURL=cacheControlToString.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cacheControlToString.spec.js","sourceRoot":"","sources":["../../src/cache/cacheControlToString.spec.ts"],"names":[],"mappings":";;AAAA,iEAA8D;AAE9D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,IAAA,2CAAoB,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,CAAC,IAAA,2CAAoB,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,CAAC,IAAA,2CAAoB,EAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,IAAA,2CAAoB,EAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,CACJ,IAAA,2CAAoB,EAAC;YACnB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,GAAG;YAChB,wBAAwB,EAAE,EAAE;YAC5B,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,KAAK;SACjB,CAAC,CACH,CAAC,OAAO,CACP,uHAAuH,CACxH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CACJ,IAAA,2CAAoB,EAAC;YACnB,SAAS,EAAE,UAAU;SACtB,CAAC,CACH,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./parseAndSanitiseCacheControlHeader"), exports);
|
18
|
+
__exportStar(require("./parseCacheControl"), exports);
|
19
|
+
__exportStar(require("./applyDefaultRulesToCacheControlObject"), exports);
|
20
|
+
__exportStar(require("./cacheControlToString"), exports);
|
21
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAqD;AACrD,sDAAoC;AACpC,0EAAwD;AACxD,yDAAuC"}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export declare const MIN_CACHE_SECONDS = 30;
|
2
|
+
export declare const MAX_CACHE_SECONDS: number;
|
3
|
+
export declare const DEFAULT_CACHE_CONTROL_HEADER: string;
|
4
|
+
export declare function parseAndSanitiseCacheControlHeader(cacheControlString: string | undefined): string;
|
5
|
+
export declare function ensureBetween(input: number, min: number, max: number): number;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ensureBetween = exports.parseAndSanitiseCacheControlHeader = exports.DEFAULT_CACHE_CONTROL_HEADER = exports.MAX_CACHE_SECONDS = exports.MIN_CACHE_SECONDS = void 0;
|
4
|
+
const applyDefaultRulesToCacheControlObject_1 = require("./applyDefaultRulesToCacheControlObject");
|
5
|
+
const cacheControlToString_1 = require("./cacheControlToString");
|
6
|
+
const parseCacheControl_1 = require("./parseCacheControl");
|
7
|
+
exports.MIN_CACHE_SECONDS = 30;
|
8
|
+
exports.MAX_CACHE_SECONDS = minutesToSeconds(30);
|
9
|
+
exports.DEFAULT_CACHE_CONTROL_HEADER = (0, cacheControlToString_1.cacheControlToString)({ public: true, 'max-age': minutesToSeconds(30) });
|
10
|
+
function parseAndSanitiseCacheControlHeader(cacheControlString) {
|
11
|
+
if (!cacheControlString) {
|
12
|
+
return exports.DEFAULT_CACHE_CONTROL_HEADER;
|
13
|
+
}
|
14
|
+
let cacheControl = (0, parseCacheControl_1.parseCacheControl)(cacheControlString);
|
15
|
+
cacheControl = (0, applyDefaultRulesToCacheControlObject_1.applyDefaultRulesToCacheControlObject)(cacheControl);
|
16
|
+
return (0, cacheControlToString_1.cacheControlToString)(cacheControl);
|
17
|
+
}
|
18
|
+
exports.parseAndSanitiseCacheControlHeader = parseAndSanitiseCacheControlHeader;
|
19
|
+
function ensureBetween(input, min, max) {
|
20
|
+
return Math.max(min, Math.min(input, max));
|
21
|
+
}
|
22
|
+
exports.ensureBetween = ensureBetween;
|
23
|
+
function minutesToSeconds(minutes) {
|
24
|
+
return minutes * 60;
|
25
|
+
}
|
26
|
+
//# sourceMappingURL=parseAndSanitiseCacheControlHeader.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parseAndSanitiseCacheControlHeader.js","sourceRoot":"","sources":["../../src/cache/parseAndSanitiseCacheControlHeader.ts"],"names":[],"mappings":";;;AAAA,mGAAgG;AAChG,iEAA8D;AAC9D,2DAAwD;AAE3C,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAEzC,QAAA,4BAA4B,GAAG,IAAA,2CAAoB,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpH,SAAgB,kCAAkC,CAAC,kBAAsC;IACvF,IAAI,CAAC,kBAAkB,EAAE;QACvB,OAAO,oCAA4B,CAAC;KACrC;IAED,IAAI,YAAY,GAAG,IAAA,qCAAiB,EAAC,kBAAkB,CAAC,CAAC;IAEzD,YAAY,GAAG,IAAA,6EAAqC,EAAC,YAAY,CAAC,CAAC;IAEnE,OAAO,IAAA,2CAAoB,EAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAVD,gFAUC;AAED,SAAgB,aAAa,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACnE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAFD,sCAEC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,GAAG,EAAE,CAAC;AACtB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const parseAndSanitiseCacheControlHeader_1 = require("./parseAndSanitiseCacheControlHeader");
|
4
|
+
describe('parseAndSanitiseCacheControlHeader', () => {
|
5
|
+
it('should return a default Cache-Control header string if the input is undefined', () => {
|
6
|
+
expect((0, parseAndSanitiseCacheControlHeader_1.parseAndSanitiseCacheControlHeader)(undefined)).toEqual('public, max-age=1800');
|
7
|
+
});
|
8
|
+
it('should return a sanitized Cache-Control header string if the input is a valid Cache-Control header string', () => {
|
9
|
+
expect((0, parseAndSanitiseCacheControlHeader_1.parseAndSanitiseCacheControlHeader)('max-age=3600, s-maxage=86400, min-fresh=600, no-store')).toEqual('max-age=1800, s-maxage=1800, min-fresh=600');
|
10
|
+
});
|
11
|
+
it('should remove the no-store directive from the input Cache-Control header string', () => {
|
12
|
+
expect((0, parseAndSanitiseCacheControlHeader_1.parseAndSanitiseCacheControlHeader)('max-age=3600, no-store')).toEqual('max-age=1800');
|
13
|
+
});
|
14
|
+
it('should remove the no-cache directive from the input Cache-Control header string', () => {
|
15
|
+
expect((0, parseAndSanitiseCacheControlHeader_1.parseAndSanitiseCacheControlHeader)('max-age=3600, no-cache')).toEqual('max-age=1800');
|
16
|
+
});
|
17
|
+
it('should remove both the no-store and no-cache directives from the input Cache-Control header string', () => {
|
18
|
+
expect((0, parseAndSanitiseCacheControlHeader_1.parseAndSanitiseCacheControlHeader)('max-age=3600, no-store, no-cache')).toEqual('max-age=1800');
|
19
|
+
});
|
20
|
+
});
|
21
|
+
//# sourceMappingURL=parseAndSanitiseCacheControlHeader.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parseAndSanitiseCacheControlHeader.spec.js","sourceRoot":"","sources":["../../src/cache/parseAndSanitiseCacheControlHeader.spec.ts"],"names":[],"mappings":";;AAAA,6FAA0F;AAE1F,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,CAAC,IAAA,uEAAkC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2GAA2G,EAAE,GAAG,EAAE;QACnH,MAAM,CAAC,IAAA,uEAAkC,EAAC,uDAAuD,CAAC,CAAC,CAAC,OAAO,CACzG,4CAA4C,CAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,IAAA,uEAAkC,EAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,IAAA,uEAAkC,EAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oGAAoG,EAAE,GAAG,EAAE;QAC5G,MAAM,CAAC,IAAA,uEAAkC,EAAC,kCAAkC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export interface CacheControl {
|
2
|
+
'max-age'?: number;
|
3
|
+
's-maxage'?: number;
|
4
|
+
'min-fresh'?: number;
|
5
|
+
'stale-while-revalidate'?: number;
|
6
|
+
'stale-if-error'?: number;
|
7
|
+
public?: true;
|
8
|
+
private?: true;
|
9
|
+
'no-store'?: true;
|
10
|
+
'no-cache'?: true;
|
11
|
+
'no-transform'?: true;
|
12
|
+
'must-revalidate'?: true;
|
13
|
+
'proxy-revalidate'?: true;
|
14
|
+
'must-understand'?: true;
|
15
|
+
immutable?: true;
|
16
|
+
extension?: string;
|
17
|
+
[key: string]: string | boolean | undefined | number;
|
18
|
+
}
|
19
|
+
export declare function parseCacheControl(header: string): CacheControl;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.parseCacheControl = void 0;
|
4
|
+
function parseCacheControl(header) {
|
5
|
+
const parts = header.split(/,(?=(?:[^"]|"[^"]*")*$)/);
|
6
|
+
const result = {};
|
7
|
+
for (const part of parts) {
|
8
|
+
const [key, value] = part.split('=');
|
9
|
+
const trimmedKey = key.trim();
|
10
|
+
const trimmedValue = value !== undefined ? value.trim() : undefined;
|
11
|
+
const strippedValue = trimQuotes(trimmedValue);
|
12
|
+
const parsedValue = parseIntOrString(strippedValue, trimmedKey);
|
13
|
+
result[trimmedKey] = parsedValue;
|
14
|
+
}
|
15
|
+
return result;
|
16
|
+
}
|
17
|
+
exports.parseCacheControl = parseCacheControl;
|
18
|
+
function trimQuotes(str) {
|
19
|
+
if (str === undefined) {
|
20
|
+
return str;
|
21
|
+
}
|
22
|
+
if (str[0] === '"' && str[str.length - 1] === '"') {
|
23
|
+
return str.substring(1, str.length - 1);
|
24
|
+
}
|
25
|
+
return str;
|
26
|
+
}
|
27
|
+
function parseIntOrString(str, key) {
|
28
|
+
if (key === 'max-age' ||
|
29
|
+
key === 's-maxage' ||
|
30
|
+
key === 'min-fresh' ||
|
31
|
+
key === 'stale-while-revalidate' ||
|
32
|
+
key === 'stale-if-error') {
|
33
|
+
if (str) {
|
34
|
+
const parsedValue = parseInt(str, 10);
|
35
|
+
return isNaN(parsedValue) ? str || true : parsedValue;
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
return 0;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if (str === undefined) {
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
return str;
|
45
|
+
}
|
46
|
+
//# sourceMappingURL=parseCacheControl.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parseCacheControl.js","sourceRoot":"","sources":["../../src/cache/parseCacheControl.ts"],"names":[],"mappings":";;;AAsBA,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACtD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAEhE,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;KAClC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAhBD,8CAgBC;AAED,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,GAAG,KAAK,SAAS,EAAE;QACrB,OAAO,GAAG,CAAC;KACZ;IAED,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACjD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACzC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAuB,EAAE,GAAW;IAC5D,IACE,GAAG,KAAK,SAAS;QACjB,GAAG,KAAK,UAAU;QAClB,GAAG,KAAK,WAAW;QACnB,GAAG,KAAK,wBAAwB;QAChC,GAAG,KAAK,gBAAgB,EACxB;QACA,IAAI,GAAG,EAAE;YACP,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;SACvD;aAAM;YACL,OAAO,CAAC,CAAC;SACV;KACF;IAED,IAAI,GAAG,KAAK,SAAS,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,70 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const parseCacheControl_1 = require("./parseCacheControl");
|
4
|
+
describe('parseCacheControl', () => {
|
5
|
+
test('no-cache', () => {
|
6
|
+
const header = 'no-cache';
|
7
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ 'no-cache': true });
|
8
|
+
});
|
9
|
+
test('public', () => {
|
10
|
+
const header = 'public, max-age=3600';
|
11
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ public: true, 'max-age': 3600 });
|
12
|
+
});
|
13
|
+
test('private', () => {
|
14
|
+
const header = 'private, no-transform, max-age=3600';
|
15
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({
|
16
|
+
private: true,
|
17
|
+
'no-transform': true,
|
18
|
+
'max-age': 3600,
|
19
|
+
});
|
20
|
+
});
|
21
|
+
test('max-age', () => {
|
22
|
+
const header = 'max-age=3600, public';
|
23
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ 'max-age': 3600, public: true });
|
24
|
+
});
|
25
|
+
test('s-maxage', () => {
|
26
|
+
const header = 's-maxage=604800, must-revalidate';
|
27
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({
|
28
|
+
's-maxage': 604800,
|
29
|
+
'must-revalidate': true,
|
30
|
+
});
|
31
|
+
});
|
32
|
+
test('must-revalidate', () => {
|
33
|
+
const header = 'no-store, no-cache, must-revalidate';
|
34
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({
|
35
|
+
'no-store': true,
|
36
|
+
'no-cache': true,
|
37
|
+
'must-revalidate': true,
|
38
|
+
});
|
39
|
+
});
|
40
|
+
test('no-store', () => {
|
41
|
+
const header = 'no-store';
|
42
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ 'no-store': true });
|
43
|
+
});
|
44
|
+
test('no-transform', () => {
|
45
|
+
const header = 'no-transform';
|
46
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ 'no-transform': true });
|
47
|
+
});
|
48
|
+
test('quoted string', () => {
|
49
|
+
const header = 'extension="foo, bar", no-transform';
|
50
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({
|
51
|
+
extension: 'foo, bar',
|
52
|
+
'no-transform': true,
|
53
|
+
});
|
54
|
+
});
|
55
|
+
test('multiple values', () => {
|
56
|
+
const header = 'extension="foo, bar", max-age=3600, s-maxage=604800, no-transform, public';
|
57
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({
|
58
|
+
extension: 'foo, bar',
|
59
|
+
'max-age': 3600,
|
60
|
+
's-maxage': 604800,
|
61
|
+
'no-transform': true,
|
62
|
+
public: true,
|
63
|
+
});
|
64
|
+
});
|
65
|
+
test('empty value', () => {
|
66
|
+
const header = 'extension="", max-age=3600';
|
67
|
+
expect((0, parseCacheControl_1.parseCacheControl)(header)).toEqual({ extension: '', 'max-age': 3600 });
|
68
|
+
});
|
69
|
+
});
|
70
|
+
//# sourceMappingURL=parseCacheControl.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parseCacheControl.spec.js","sourceRoot":"","sources":["../../src/cache/parseCacheControl.spec.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.InvalidTokenError = void 0;
|
4
|
+
const ErrorWithHttpStatusCode_1 = require("./ErrorWithHttpStatusCode");
|
5
|
+
class InvalidTokenError extends ErrorWithHttpStatusCode_1.ErrorWithHttpStatusCode {
|
6
|
+
constructor() {
|
7
|
+
super(401, 'Invalid authorization token');
|
8
|
+
this.name = 'InvalidTokenError';
|
9
|
+
}
|
10
|
+
}
|
11
|
+
exports.InvalidTokenError = InvalidTokenError;
|
12
|
+
//# sourceMappingURL=InvalidTokenError.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"InvalidTokenError.js","sourceRoot":"","sources":["../../src/error/InvalidTokenError.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,MAAa,iBAAkB,SAAQ,iDAAuB;IAE5D;QACE,KAAK,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;QAF5C,SAAI,GAAG,mBAAmB,CAAC;IAG3B,CAAC;CACF;AALD,8CAKC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.UnAuthenticatedRequestError = void 0;
|
4
|
+
const ErrorWithHttpStatusCode_1 = require("./ErrorWithHttpStatusCode");
|
5
|
+
class UnAuthenticatedRequestError extends ErrorWithHttpStatusCode_1.ErrorWithHttpStatusCode {
|
6
|
+
constructor(message) {
|
7
|
+
super(401, message);
|
8
|
+
}
|
9
|
+
}
|
10
|
+
exports.UnAuthenticatedRequestError = UnAuthenticatedRequestError;
|
11
|
+
//# sourceMappingURL=UnAuthenticatedRequestError.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"UnAuthenticatedRequestError.js","sourceRoot":"","sources":["../../src/error/UnAuthenticatedRequestError.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,MAAa,2BAA4B,SAAQ,iDAAuB;IACtE,YAAY,OAAe;QACzB,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtB,CAAC;CACF;AAJD,kEAIC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.UnprivilegedError = void 0;
|
4
|
+
const ErrorWithHttpStatusCode_1 = require("./ErrorWithHttpStatusCode");
|
5
|
+
class UnprivilegedError extends ErrorWithHttpStatusCode_1.ErrorWithHttpStatusCode {
|
6
|
+
constructor() {
|
7
|
+
super(403, 'Permission not satisfied');
|
8
|
+
this.name = 'UnprivilegedError';
|
9
|
+
}
|
10
|
+
}
|
11
|
+
exports.UnprivilegedError = UnprivilegedError;
|
12
|
+
//# sourceMappingURL=UnprivilegedError.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"UnprivilegedError.js","sourceRoot":"","sources":["../../src/error/UnprivilegedError.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,MAAa,iBAAkB,SAAQ,iDAAuB;IAE5D;QACE,KAAK,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAFzC,SAAI,GAAG,mBAAmB,CAAC;IAG3B,CAAC;CACF;AALD,8CAKC"}
|
package/lib/error/index.d.ts
CHANGED
@@ -4,3 +4,6 @@ export * from './InternalServerError';
|
|
4
4
|
export * from './ResourceNotFoundError';
|
5
5
|
export * from './TimeoutError';
|
6
6
|
export * from './MethodNotImplementedError';
|
7
|
+
export * from './InvalidTokenError';
|
8
|
+
export * from './UnprivilegedError';
|
9
|
+
export * from './UnAuthenticatedRequestError';
|
package/lib/error/index.js
CHANGED
@@ -20,4 +20,7 @@ __exportStar(require("./InternalServerError"), exports);
|
|
20
20
|
__exportStar(require("./ResourceNotFoundError"), exports);
|
21
21
|
__exportStar(require("./TimeoutError"), exports);
|
22
22
|
__exportStar(require("./MethodNotImplementedError"), exports);
|
23
|
+
__exportStar(require("./InvalidTokenError"), exports);
|
24
|
+
__exportStar(require("./UnprivilegedError"), exports);
|
25
|
+
__exportStar(require("./UnAuthenticatedRequestError"), exports);
|
23
26
|
//# sourceMappingURL=index.js.map
|
package/lib/error/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,0DAAwC;AACxC,iDAA+B;AAC/B,8DAA4C"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,0DAAwC;AACxC,iDAA+B;AAC/B,8DAA4C;AAE5C,sDAAoC;AACpC,sDAAoC;AACpC,gEAA8C"}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.formattedTextToHtmlSting = void 0;
|
4
|
+
function formattedTextToHtmlSting(formattedNodes) {
|
5
|
+
switch (formattedNodes.type) {
|
6
|
+
case 'text':
|
7
|
+
return formattedNodes.value;
|
8
|
+
case 'tag':
|
9
|
+
return buildTagHTML(formattedNodes);
|
10
|
+
default:
|
11
|
+
return unknownNodeType(formattedNodes);
|
12
|
+
}
|
13
|
+
}
|
14
|
+
exports.formattedTextToHtmlSting = formattedTextToHtmlSting;
|
15
|
+
function buildTagHTML(formattedTextTag) {
|
16
|
+
const classes = getClassString(formattedTextTag);
|
17
|
+
if (!formattedTextTag.attributes) {
|
18
|
+
formattedTextTag.attributes = { class: classes };
|
19
|
+
}
|
20
|
+
else {
|
21
|
+
formattedTextTag.attributes.class = classes;
|
22
|
+
}
|
23
|
+
const attributesStr = buildAttributesString(formattedTextTag.attributes);
|
24
|
+
const childrenHTML = buildChildrenHTML(formattedTextTag.children);
|
25
|
+
return `<${formattedTextTag.tag}${attributesStr}>${childrenHTML}</${formattedTextTag.tag}>`;
|
26
|
+
}
|
27
|
+
function buildChildrenHTML(children) {
|
28
|
+
if (!children) {
|
29
|
+
return '';
|
30
|
+
}
|
31
|
+
return children.map(formattedTextToHtmlSting).join('');
|
32
|
+
}
|
33
|
+
function unknownNodeType(node) {
|
34
|
+
return `<p class="invalid-node-type"> node of type "${node.type}" cannot be converted to html</p>`;
|
35
|
+
}
|
36
|
+
function getClassString(formattedTextTag) {
|
37
|
+
var _a, _b, _c;
|
38
|
+
const fontClasses = buildFontClasses(formattedTextTag.font);
|
39
|
+
let string = (_b = (_a = formattedTextTag === null || formattedTextTag === void 0 ? void 0 : formattedTextTag.attributes) === null || _a === void 0 ? void 0 : _a.class) !== null && _b !== void 0 ? _b : '';
|
40
|
+
if ((_c = formattedTextTag === null || formattedTextTag === void 0 ? void 0 : formattedTextTag.formattingOptions) === null || _c === void 0 ? void 0 : _c.alignment) {
|
41
|
+
fontClasses.push(formattedTextTag.formattingOptions.alignment);
|
42
|
+
}
|
43
|
+
if (fontClasses.length > 0) {
|
44
|
+
string += ' ' + fontClasses.join(' ');
|
45
|
+
}
|
46
|
+
return string.trim();
|
47
|
+
}
|
48
|
+
function buildAttributesString(attributes) {
|
49
|
+
if (!attributes) {
|
50
|
+
return '';
|
51
|
+
}
|
52
|
+
let attributesString = '';
|
53
|
+
for (const attribute in attributes) {
|
54
|
+
if (attributes[attribute] !== '') {
|
55
|
+
attributesString += ` ${attribute}="${attributes[attribute]}"`;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
return attributesString;
|
59
|
+
}
|
60
|
+
function buildFontClasses(font) {
|
61
|
+
if (!font) {
|
62
|
+
return [];
|
63
|
+
}
|
64
|
+
const classes = [];
|
65
|
+
if (font.bold) {
|
66
|
+
classes.push('bold');
|
67
|
+
}
|
68
|
+
if (font.underline) {
|
69
|
+
classes.push('underline');
|
70
|
+
}
|
71
|
+
if (font.italics) {
|
72
|
+
classes.push('italics');
|
73
|
+
}
|
74
|
+
if (font.color) {
|
75
|
+
classes.push(`color-${font.color}`);
|
76
|
+
}
|
77
|
+
if (font.size) {
|
78
|
+
classes.push(`size-${font.size}`);
|
79
|
+
}
|
80
|
+
if (font.fontFamily) {
|
81
|
+
classes.push(`font-${font.fontFamily}`);
|
82
|
+
}
|
83
|
+
return classes;
|
84
|
+
}
|
85
|
+
//# sourceMappingURL=formattedTextToHtmlSting.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"formattedTextToHtmlSting.js","sourceRoot":"","sources":["../../src/formatted-text/formattedTextToHtmlSting.ts"],"names":[],"mappings":"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"}
|