@inzombieland/core 1.18.48 → 1.18.50
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/define-vue-plugins.d.ts +1 -3
- package/define-vue-plugins.mjs +3 -1
- package/package.json +2 -1
- package/plugins/index.d.ts +2 -0
- package/plugins/index.mjs +2 -0
- package/plugins/sanitize-html.d.ts +2 -0
- package/plugins/sanitize-html.mjs +89 -0
- package/plugins/sanitize-url.d.ts +2 -0
- package/plugins/sanitize-url.mjs +8 -0
- package/thirdparty/sanitize-url/index.d.mts +2 -0
- package/thirdparty/sanitize-url/index.d.ts +1 -0
- package/thirdparty/sanitize-url/index.mjs +98 -0
- package/thirdparty/sanitize-url/index.mjs.map +1 -0
package/define-vue-plugins.d.ts
CHANGED
package/define-vue-plugins.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { defineOtpInputPlugin, defineVarletPlugin } from "./plugins/index.mjs";
|
|
1
|
+
import { defineOtpInputPlugin, defineSanitizeHtmlPlugin, defineSanitizeUrlPlugin, defineVarletPlugin } from "./plugins/index.mjs";
|
|
2
2
|
export function defineVuePlugins(app) {
|
|
3
3
|
defineOtpInputPlugin(app);
|
|
4
|
+
defineSanitizeHtmlPlugin(app);
|
|
5
|
+
defineSanitizeUrlPlugin(app);
|
|
4
6
|
defineVarletPlugin(app);
|
|
5
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inzombieland/core",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.50",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "./index.mjs",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"ofetch": "^1.4.1",
|
|
20
20
|
"ohash": "^2.0.11",
|
|
21
21
|
"rxjs": "^7.8.2",
|
|
22
|
+
"ultrahtml": "^1.6.0",
|
|
22
23
|
"vant": "^4.9.19",
|
|
23
24
|
"vue3-otp-input": "^0.5.21",
|
|
24
25
|
"zod": "^3.24.2"
|
package/plugins/index.d.ts
CHANGED
package/plugins/index.mjs
CHANGED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { transform } from "ultrahtml";
|
|
2
|
+
import sanitize from "ultrahtml/transformers/sanitize";
|
|
3
|
+
export function defineSanitizeHtmlPlugin(app) {
|
|
4
|
+
app.directive("sanitize-html", async (el, binding) => {
|
|
5
|
+
if (binding.value !== binding.oldValue) {
|
|
6
|
+
el.innerHTML = await transform(binding.value, [
|
|
7
|
+
sanitize({
|
|
8
|
+
allowElements: [
|
|
9
|
+
"address",
|
|
10
|
+
"article",
|
|
11
|
+
"aside",
|
|
12
|
+
"footer",
|
|
13
|
+
"header",
|
|
14
|
+
"h1",
|
|
15
|
+
"h2",
|
|
16
|
+
"h3",
|
|
17
|
+
"h4",
|
|
18
|
+
"h5",
|
|
19
|
+
"h6",
|
|
20
|
+
"hgroup",
|
|
21
|
+
"main",
|
|
22
|
+
"nav",
|
|
23
|
+
"section",
|
|
24
|
+
"blockquote",
|
|
25
|
+
"dd",
|
|
26
|
+
"div",
|
|
27
|
+
"dl",
|
|
28
|
+
"dt",
|
|
29
|
+
"figcaption",
|
|
30
|
+
"figure",
|
|
31
|
+
"hr",
|
|
32
|
+
"li",
|
|
33
|
+
"main",
|
|
34
|
+
"ol",
|
|
35
|
+
"p",
|
|
36
|
+
"pre",
|
|
37
|
+
"ul",
|
|
38
|
+
"a",
|
|
39
|
+
"abbr",
|
|
40
|
+
"b",
|
|
41
|
+
"bdi",
|
|
42
|
+
"bdo",
|
|
43
|
+
"br",
|
|
44
|
+
"cite",
|
|
45
|
+
"code",
|
|
46
|
+
"data",
|
|
47
|
+
"dfn",
|
|
48
|
+
"em",
|
|
49
|
+
"i",
|
|
50
|
+
"kbd",
|
|
51
|
+
"mark",
|
|
52
|
+
"q",
|
|
53
|
+
"rb",
|
|
54
|
+
"rp",
|
|
55
|
+
"rt",
|
|
56
|
+
"rtc",
|
|
57
|
+
"ruby",
|
|
58
|
+
"s",
|
|
59
|
+
"samp",
|
|
60
|
+
"small",
|
|
61
|
+
"span",
|
|
62
|
+
"strong",
|
|
63
|
+
"sub",
|
|
64
|
+
"sup",
|
|
65
|
+
"time",
|
|
66
|
+
"u",
|
|
67
|
+
"var",
|
|
68
|
+
"wbr",
|
|
69
|
+
"caption",
|
|
70
|
+
"col",
|
|
71
|
+
"colgroup",
|
|
72
|
+
"table",
|
|
73
|
+
"tbody",
|
|
74
|
+
"td",
|
|
75
|
+
"tfoot",
|
|
76
|
+
"th",
|
|
77
|
+
"thead",
|
|
78
|
+
"tr",
|
|
79
|
+
"img"
|
|
80
|
+
],
|
|
81
|
+
allowAttributes: {
|
|
82
|
+
a: ["href", "name", "target"],
|
|
83
|
+
img: ["src", "srcset", "alt", "title", "width", "height", "loading"]
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
]);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sanitizeUrl } from '@braintree/sanitize-url';
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
var dist = {};
|
|
2
|
+
|
|
3
|
+
var constants = {};
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(constants, "__esModule", { value: true });
|
|
6
|
+
constants.BLANK_URL = constants.relativeFirstCharacters = constants.whitespaceEscapeCharsRegex = constants.urlSchemeRegex = constants.ctrlCharactersRegex = constants.htmlCtrlEntityRegex = constants.htmlEntitiesRegex = constants.invalidProtocolRegex = void 0;
|
|
7
|
+
constants.invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im;
|
|
8
|
+
constants.htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g;
|
|
9
|
+
constants.htmlCtrlEntityRegex = /&(newline|tab);/gi;
|
|
10
|
+
constants.ctrlCharactersRegex = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
|
|
11
|
+
constants.urlSchemeRegex = /^.+(:|:)/gim;
|
|
12
|
+
constants.whitespaceEscapeCharsRegex = /(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;
|
|
13
|
+
constants.relativeFirstCharacters = [".", "/"];
|
|
14
|
+
constants.BLANK_URL = "about:blank";
|
|
15
|
+
|
|
16
|
+
Object.defineProperty(dist, "__esModule", { value: true });
|
|
17
|
+
var sanitizeUrl_1 = dist.sanitizeUrl = void 0;
|
|
18
|
+
var constants_1 = constants;
|
|
19
|
+
function isRelativeUrlWithoutProtocol(url) {
|
|
20
|
+
return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;
|
|
21
|
+
}
|
|
22
|
+
function decodeHtmlCharacters(str) {
|
|
23
|
+
var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, "");
|
|
24
|
+
return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {
|
|
25
|
+
return String.fromCharCode(dec);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function isValidUrl(url) {
|
|
29
|
+
return URL.canParse(url);
|
|
30
|
+
}
|
|
31
|
+
function decodeURI(uri) {
|
|
32
|
+
try {
|
|
33
|
+
return decodeURIComponent(uri);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
// Ignoring error
|
|
37
|
+
// It is possible that the URI contains a `%` not associated
|
|
38
|
+
// with URI/URL-encoding.
|
|
39
|
+
return uri;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function sanitizeUrl(url) {
|
|
43
|
+
if (!url) {
|
|
44
|
+
return constants_1.BLANK_URL;
|
|
45
|
+
}
|
|
46
|
+
var charsToDecode;
|
|
47
|
+
var decodedUrl = decodeURI(url.trim());
|
|
48
|
+
do {
|
|
49
|
+
decodedUrl = decodeHtmlCharacters(decodedUrl)
|
|
50
|
+
.replace(constants_1.htmlCtrlEntityRegex, "")
|
|
51
|
+
.replace(constants_1.ctrlCharactersRegex, "")
|
|
52
|
+
.replace(constants_1.whitespaceEscapeCharsRegex, "")
|
|
53
|
+
.trim();
|
|
54
|
+
decodedUrl = decodeURI(decodedUrl);
|
|
55
|
+
charsToDecode =
|
|
56
|
+
decodedUrl.match(constants_1.ctrlCharactersRegex) ||
|
|
57
|
+
decodedUrl.match(constants_1.htmlEntitiesRegex) ||
|
|
58
|
+
decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||
|
|
59
|
+
decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);
|
|
60
|
+
} while (charsToDecode && charsToDecode.length > 0);
|
|
61
|
+
var sanitizedUrl = decodedUrl;
|
|
62
|
+
if (!sanitizedUrl) {
|
|
63
|
+
return constants_1.BLANK_URL;
|
|
64
|
+
}
|
|
65
|
+
if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {
|
|
66
|
+
return sanitizedUrl;
|
|
67
|
+
}
|
|
68
|
+
// Remove any leading whitespace before checking the URL scheme
|
|
69
|
+
var trimmedUrl = sanitizedUrl.trimStart();
|
|
70
|
+
var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);
|
|
71
|
+
if (!urlSchemeParseResults) {
|
|
72
|
+
return sanitizedUrl;
|
|
73
|
+
}
|
|
74
|
+
var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();
|
|
75
|
+
if (constants_1.invalidProtocolRegex.test(urlScheme)) {
|
|
76
|
+
return constants_1.BLANK_URL;
|
|
77
|
+
}
|
|
78
|
+
var backSanitized = trimmedUrl.replace(/\\/g, "/");
|
|
79
|
+
// Handle special cases for mailto: and custom deep-link protocols
|
|
80
|
+
if (urlScheme === "mailto:" || urlScheme.includes("://")) {
|
|
81
|
+
return backSanitized;
|
|
82
|
+
}
|
|
83
|
+
// For http and https URLs, perform additional validation
|
|
84
|
+
if (urlScheme === "http:" || urlScheme === "https:") {
|
|
85
|
+
if (!isValidUrl(backSanitized)) {
|
|
86
|
+
return constants_1.BLANK_URL;
|
|
87
|
+
}
|
|
88
|
+
var url_1 = new URL(backSanitized);
|
|
89
|
+
url_1.protocol = url_1.protocol.toLowerCase();
|
|
90
|
+
url_1.hostname = url_1.hostname.toLowerCase();
|
|
91
|
+
return url_1.toString();
|
|
92
|
+
}
|
|
93
|
+
return backSanitized;
|
|
94
|
+
}
|
|
95
|
+
sanitizeUrl_1 = dist.sanitizeUrl = sanitizeUrl;
|
|
96
|
+
|
|
97
|
+
export { sanitizeUrl_1 as sanitizeUrl };
|
|
98
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../node_modules/@braintree/sanitize-url/dist/constants.js","../../../../node_modules/@braintree/sanitize-url/dist/index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLANK_URL = exports.relativeFirstCharacters = exports.whitespaceEscapeCharsRegex = exports.urlSchemeRegex = exports.ctrlCharactersRegex = exports.htmlCtrlEntityRegex = exports.htmlEntitiesRegex = exports.invalidProtocolRegex = void 0;\nexports.invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nexports.htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nexports.htmlCtrlEntityRegex = /&(newline|tab);/gi;\nexports.ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nexports.urlSchemeRegex = /^.+(:|:)/gim;\nexports.whitespaceEscapeCharsRegex = /(\\\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;\nexports.relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = void 0;\nvar constants_1 = require(\"./constants\");\nfunction isRelativeUrlWithoutProtocol(url) {\n return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;\n}\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, \"\");\n return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction isValidUrl(url) {\n return URL.canParse(url);\n}\nfunction decodeURI(uri) {\n try {\n return decodeURIComponent(uri);\n }\n catch (e) {\n // Ignoring error\n // It is possible that the URI contains a `%` not associated\n // with URI/URL-encoding.\n return uri;\n }\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return constants_1.BLANK_URL;\n }\n var charsToDecode;\n var decodedUrl = decodeURI(url.trim());\n do {\n decodedUrl = decodeHtmlCharacters(decodedUrl)\n .replace(constants_1.htmlCtrlEntityRegex, \"\")\n .replace(constants_1.ctrlCharactersRegex, \"\")\n .replace(constants_1.whitespaceEscapeCharsRegex, \"\")\n .trim();\n decodedUrl = decodeURI(decodedUrl);\n charsToDecode =\n decodedUrl.match(constants_1.ctrlCharactersRegex) ||\n decodedUrl.match(constants_1.htmlEntitiesRegex) ||\n decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||\n decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);\n } while (charsToDecode && charsToDecode.length > 0);\n var sanitizedUrl = decodedUrl;\n if (!sanitizedUrl) {\n return constants_1.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n // Remove any leading whitespace before checking the URL scheme\n var trimmedUrl = sanitizedUrl.trimStart();\n var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();\n if (constants_1.invalidProtocolRegex.test(urlScheme)) {\n return constants_1.BLANK_URL;\n }\n var backSanitized = trimmedUrl.replace(/\\\\/g, \"/\");\n // Handle special cases for mailto: and custom deep-link protocols\n if (urlScheme === \"mailto:\" || urlScheme.includes(\"://\")) {\n return backSanitized;\n }\n // For http and https URLs, perform additional validation\n if (urlScheme === \"http:\" || urlScheme === \"https:\") {\n if (!isValidUrl(backSanitized)) {\n return constants_1.BLANK_URL;\n }\n var url_1 = new URL(backSanitized);\n url_1.protocol = url_1.protocol.toLowerCase();\n url_1.hostname = url_1.hostname.toLowerCase();\n return url_1.toString();\n }\n return backSanitized;\n}\nexports.sanitizeUrl = sanitizeUrl;\n"],"names":["require$$0"],"mappings":"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","x_google_ignoreList":[0,1]}
|