@kitajs/ts-html-plugin 1.0.0
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/LICENSE +21 -0
- package/README.md +73 -0
- package/SECURITY.md +9 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/util.d.ts +7 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +152 -0
- package/dist/util.js.map +1 -0
- package/package.json +26 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Kita
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<br />
|
|
2
|
+
|
|
3
|
+
[](https://github.com/kitajs/ts-html-plugin/issues)
|
|
4
|
+
[](https://github.com/kitajs/ts-html-plugin/stargazers)
|
|
5
|
+
[](https://github.com/kitajs/ts-html-plugin/blob/master/LICENSE)
|
|
6
|
+
[](https://twitter.com/acdlite/status/974390255393505280)
|
|
7
|
+
|
|
8
|
+
[](https://www.npmjs.com/package/@kitajs/ts-html-plugin)
|
|
9
|
+
[](https://www.npmjs.com/package/@kitajs/ts-html-plugin)
|
|
10
|
+
[](https://www.jsdelivr.com/package/npm/@kitajs/ts-html-plugin)
|
|
11
|
+
[](https://bundlephobia.com/package/@kitajs/ts-html-plugin@latest)
|
|
12
|
+
[](https://packagephobia.com/result?p=@kitajs/ts-html-plugin@latest)
|
|
13
|
+
|
|
14
|
+
<br />
|
|
15
|
+
|
|
16
|
+
<div align="center">
|
|
17
|
+
<pre>
|
|
18
|
+
<h1>🏛️<br />KitaJS Html TS Plugin</h1>
|
|
19
|
+
</pre>
|
|
20
|
+
<br />
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<h3 align="center">
|
|
24
|
+
<code>@kitajs/ts-html-plugin</code> provides a Typescript LSP plugin to catch XSS vulnerabilities.
|
|
25
|
+
<br />
|
|
26
|
+
<br />
|
|
27
|
+
</h3>
|
|
28
|
+
|
|
29
|
+
<br />
|
|
30
|
+
|
|
31
|
+
## Table of Contents
|
|
32
|
+
|
|
33
|
+
- [Table of Contents](#table-of-contents)
|
|
34
|
+
- [Installing](#installing)
|
|
35
|
+
- [Getting Started](#getting-started)
|
|
36
|
+
- [JSX](#jsx)
|
|
37
|
+
|
|
38
|
+
<br />
|
|
39
|
+
|
|
40
|
+
## Installing
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
npm install @kitajs/html @kitajs/ts-html-plugin # or yarn add @kitajs/html @kitajs/ts-html-plugin
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
<br />
|
|
47
|
+
|
|
48
|
+
## Getting Started
|
|
49
|
+
|
|
50
|
+
Install `@kitajs/ts-html-plugin` alongside with `@kitajs/html` with your favorite package
|
|
51
|
+
manager, and put this inside your `tsconfig.json`.
|
|
52
|
+
|
|
53
|
+
```jsonc
|
|
54
|
+
// tsconfig.json
|
|
55
|
+
|
|
56
|
+
{
|
|
57
|
+
"compilerOptions": {
|
|
58
|
+
"jsx": "react",
|
|
59
|
+
"jsxFactory": "Html.createElement",
|
|
60
|
+
"jsxFragmentFactory": "Html.Fragment",
|
|
61
|
+
"plugins": [{ "name": "@kitajs/ts-html-plugin" }]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
<br />
|
|
67
|
+
|
|
68
|
+
## JSX
|
|
69
|
+
|
|
70
|
+
For JSX support, please go to [kitajs/html](https://github.com/kitajs/html) for more
|
|
71
|
+
information.
|
|
72
|
+
|
|
73
|
+
<br />
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## Security
|
|
2
|
+
|
|
3
|
+
Due to the nature of this project, security is a top priority. If you believe you have
|
|
4
|
+
found security issues like XSS attacks or similar, please report them to me ([`security@arthur.place`](mailto:security@arthur.place)) in a
|
|
5
|
+
responsible manner. You will receive a response from
|
|
6
|
+
me as soon as possible.
|
|
7
|
+
|
|
8
|
+
If the issue is confirmed, I will release a patch as soon as possible depending on
|
|
9
|
+
complexity but historically within a few days.
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const Xss: {
|
|
2
|
+
code: number;
|
|
3
|
+
message: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const DoubleEscape: {
|
|
6
|
+
code: number;
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const UnusedSafe: {
|
|
10
|
+
code: number;
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG;;;CAIf,CAAC;AAEF,eAAO,MAAM,YAAY;;;CAIxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;CAItB,CAAC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnusedSafe = exports.DoubleEscape = exports.Xss = void 0;
|
|
4
|
+
exports.Xss = {
|
|
5
|
+
code: 27022005,
|
|
6
|
+
message: 'Usage of JSX expression without safe attribute. This could lead to XSS vulnerabilities. Please use the safe attribute on the JSX element or prepend your variable with `safe`.'
|
|
7
|
+
};
|
|
8
|
+
exports.DoubleEscape = {
|
|
9
|
+
code: 16061999,
|
|
10
|
+
message: 'You are using the safe attribute on a JSX element whose children contains other JSX elements. It will lead to double escaping. If this is intended behavior, please extract the children into a separate variable and use that instead.'
|
|
11
|
+
};
|
|
12
|
+
exports.UnusedSafe = {
|
|
13
|
+
code: 17091977,
|
|
14
|
+
message: 'You are using the safe attribute on expressions that does not contain any XSS vulnerabilities. Please remove the safe attribute or prepend your variable with `unsafe`.'
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAa,QAAA,GAAG,GAAG;IACjB,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,gLAAgL;CACnL,CAAC;AAEW,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,yOAAyO;CAC5O,CAAC;AAEW,QAAA,UAAU,GAAG;IACxB,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,yKAAyK;CAC5K,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gCAAgC,CAAC;6CAGI;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE;iBAE9D,IAAI,MAAM,CAAC,gBAAgB;;AAF5C,kBAgCE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const util_1 = require("./util");
|
|
3
|
+
module.exports = function initHtmlPlugin({ typescript: ts }) {
|
|
4
|
+
return {
|
|
5
|
+
create(info) {
|
|
6
|
+
const proxy = (0, util_1.proxyObject)(info.languageService);
|
|
7
|
+
proxy.getSemanticDiagnostics = function clonedSemanticDiagnostics(filename) {
|
|
8
|
+
const diagnostics = info.languageService.getSemanticDiagnostics(filename);
|
|
9
|
+
// Not a tsx file, so don't do anything
|
|
10
|
+
if (!filename.match(/(t|j)sx$/)) {
|
|
11
|
+
return diagnostics;
|
|
12
|
+
}
|
|
13
|
+
const program = info.languageService.getProgram();
|
|
14
|
+
const source = program?.getSourceFile(filename);
|
|
15
|
+
if (!program || !source) {
|
|
16
|
+
return diagnostics;
|
|
17
|
+
}
|
|
18
|
+
const typeChecker = program.getTypeChecker();
|
|
19
|
+
ts.forEachChild(source, function loopSourceNodes(node) {
|
|
20
|
+
(0, util_1.recursiveDiagnoseJsxElements)(node, typeChecker, diagnostics);
|
|
21
|
+
});
|
|
22
|
+
return diagnostics;
|
|
23
|
+
};
|
|
24
|
+
return proxy;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,iCAAmE;AAEnE,iBAAS,SAAS,cAAc,CAAC,EAAE,UAAU,EAAE,EAAE,EAA8B;IAC7E,OAAO;QACL,MAAM,CAAC,IAAiC;YACtC,MAAM,KAAK,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAEhD,KAAK,CAAC,sBAAsB,GAAG,SAAS,yBAAyB,CAAC,QAAQ;gBACxE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;gBAE1E,uCAAuC;gBACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;oBAC/B,OAAO,WAAW,CAAC;iBACpB;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAG,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAEhD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE;oBACvB,OAAO,WAAW,CAAC;iBACpB;gBAED,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE7C,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,eAAe,CAAC,IAAI;oBACnD,IAAA,mCAA4B,EAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBAEH,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC;YAEF,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"program":{"fileNames":["../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.full.d.ts","../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.d.ts","../src/errors.ts","../node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/tsserverlibrary.d.ts","../src/util.ts","../src/index.ts","../node_modules/.pnpm/prettier@3.0.3/node_modules/prettier/doc.d.ts","../node_modules/.pnpm/prettier@3.0.3/node_modules/prettier/index.d.ts"],"fileInfos":[{"version":"2ac9cdcfb8f8875c18d14ec5796a8b029c426f73ad6dc3ffb580c228b58d1c44","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","bed7b7ba0eb5a160b69af72814b4dde371968e40b6c5e73d3a9f7bee407d158c",{"version":"0075fa5ceda385bcdf3488e37786b5a33be730e8bc4aa3cf1e78c63891752ce8","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"c5c5565225fce2ede835725a92a28ece149f83542aa4866cfb10290bff7b8996","affectsGlobalScope":true},{"version":"7d2dbc2a0250400af0809b0ad5f84686e84c73526de931f84560e483eb16b03c","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"09226e53d1cfda217317074a97724da3e71e2c545e18774484b61562afc53cd2","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"8b41361862022eb72fcc8a7f34680ac842aca802cf4bc1f915e8c620c9ce4331","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"709efdae0cb5df5f49376cde61daacc95cdd44ae4671da13a540da5088bf3f30","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"bc496ef4377553e461efcf7cc5a5a57cf59f9962aea06b5e722d54a36bf66ea1","affectsGlobalScope":true},{"version":"038a2f66a34ee7a9c2fbc3584c8ab43dff2995f8c68e3f566f4c300d2175e31e","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"f5c92f2c27b06c1a41b88f6db8299205aee52c2a2943f7ed29bd585977f254e8","affectsGlobalScope":true},{"version":"930b0e15811f84e203d3c23508674d5ded88266df4b10abee7b31b2ac77632d2","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"b9ea5778ff8b50d7c04c9890170db34c26a5358cccba36844fe319f50a43a61a","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"65be38e881453e16f128a12a8d36f8b012aa279381bf3d4dc4332a4905ceec83","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"e1913f656c156a9e4245aa111fbb436d357d9e1fe0379b9a802da7fe3f03d736","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"f35a831e4f0fe3b3697f4a0fe0e3caa7624c92b78afbecaf142c0f93abfaf379","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"7823c8aa42d88e6cb454fe7dc56996c6fd174b28a9f050e9bdea1c25b7d114ea","7a1971efcba559ea9002ada4c4e3c925004fb67a755300d53b5edf9399354900",{"version":"2a14da481c0c2dbca3210f74923b523ac791c547de69af0ccaf4fe2aeda586bc","signature":"46292ed3f014f70c5de62662cb24f76e2a5122089698ba9818195e7666bc3f0d"},"f9c2563439fc156b5d08d92ba998db0cd1302e65f8bb29a21eae42f97ff4ee6c",{"version":"4ff057d30aa99d08219a09a52a74a627c9ede4340031d06616e3f4a6ad671237","signature":"b39a6d6cc73f82ad1d357055a89033b3850912b496d84adda0f6ca209f441daa"},{"version":"cfc364ad6e0854649e0ca3565c89c1da1ea1f6f3f08a97004fb23e87b83f93fd","signature":"8e829b28dbf13a36cefbd3d0e0c4899741c40cb133c60b82ec0a7709a5f3a0ae"},"2f848b4e660b568651a6350565afc8ac5b0644853a2a863862807602cf244a05","87c316128d18c34881619a529fe0446125405fa073f1a9e533a8f66f66b6b340"],"root":[70,72,73],"options":{"alwaysStrict":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"importHelpers":true,"jsx":2,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipDefaultLibCheck":true,"sourceMap":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":99,"useUnknownInCatchVariables":true},"fileIdsList":[[74],[69],[69,71,72],[69,70,71],[71]],"referencedMap":[[75,1],[70,2],[73,3],[72,4]],"exportedModulesMap":[[75,1],[73,5],[72,5]],"semanticDiagnosticsPerFile":[74,75,69,66,67,12,13,17,16,2,18,19,20,21,22,23,24,25,3,4,26,30,27,28,29,31,32,33,5,34,35,36,37,6,41,38,39,40,42,7,43,48,49,44,45,46,47,8,53,50,51,52,54,9,55,56,57,60,58,59,61,62,10,1,11,65,64,68,63,15,14,71,70,73,72]},"version":"5.2.2"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ts from 'typescript/lib/tsserverlibrary';
|
|
2
|
+
export declare function recursiveDiagnoseJsxElements(node: ts.Node, typeChecker: ts.TypeChecker, original: ts.Diagnostic[]): void;
|
|
3
|
+
export declare function diagnoseJsxElement(node: ts.JsxElement, typeChecker: ts.TypeChecker, diagnostics: ts.Diagnostic[]): ts.Diagnostic[];
|
|
4
|
+
export declare function isSafeAttribute(type: ts.Type, expression: ts.Node): boolean;
|
|
5
|
+
export declare function getSafeAttribute(element: ts.JsxOpeningElement): ts.JsxAttributeLike | undefined;
|
|
6
|
+
export declare function proxyObject<T extends object>(obj: T): T;
|
|
7
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAGhD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,QAY1B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,EAAE,CAAC,UAAU,EACnB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,GAC3B,EAAE,CAAC,UAAU,EAAE,CAqHjB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,WAkBjE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,mCAQ7D;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAUvD"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.proxyObject = exports.getSafeAttribute = exports.isSafeAttribute = exports.diagnoseJsxElement = exports.recursiveDiagnoseJsxElements = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const tsserverlibrary_1 = tslib_1.__importDefault(require("typescript/lib/tsserverlibrary"));
|
|
6
|
+
const Errors = tslib_1.__importStar(require("./errors"));
|
|
7
|
+
function recursiveDiagnoseJsxElements(node, typeChecker, original) {
|
|
8
|
+
tsserverlibrary_1.default.forEachChild(node, function loopSourceNodes(node) {
|
|
9
|
+
// Recurse through children first
|
|
10
|
+
tsserverlibrary_1.default.forEachChild(node, loopSourceNodes);
|
|
11
|
+
// Adds children to the array
|
|
12
|
+
if (tsserverlibrary_1.default.isJsxElement(node)) {
|
|
13
|
+
// Diagnose the node
|
|
14
|
+
diagnoseJsxElement(node, typeChecker, original);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.recursiveDiagnoseJsxElements = recursiveDiagnoseJsxElements;
|
|
19
|
+
function diagnoseJsxElement(node, typeChecker, diagnostics) {
|
|
20
|
+
const file = node.getSourceFile();
|
|
21
|
+
const safeAttribute = getSafeAttribute(node.openingElement);
|
|
22
|
+
// Safe mode warnings
|
|
23
|
+
if (safeAttribute) {
|
|
24
|
+
if (
|
|
25
|
+
// Empty element
|
|
26
|
+
node.children.length === 0 ||
|
|
27
|
+
// Only text elements
|
|
28
|
+
(node.children.length === 1 && node.children[0].kind === tsserverlibrary_1.default.SyntaxKind.JsxText)) {
|
|
29
|
+
diagnostics.push({
|
|
30
|
+
category: tsserverlibrary_1.default.DiagnosticCategory.Warning,
|
|
31
|
+
code: Errors.UnusedSafe.code,
|
|
32
|
+
file,
|
|
33
|
+
length: safeAttribute.end - safeAttribute.pos - 1,
|
|
34
|
+
messageText: Errors.UnusedSafe.message,
|
|
35
|
+
start: safeAttribute.pos + 1
|
|
36
|
+
});
|
|
37
|
+
return diagnostics;
|
|
38
|
+
}
|
|
39
|
+
for (const exp of node.children) {
|
|
40
|
+
// JSX Element inside safe
|
|
41
|
+
if (tsserverlibrary_1.default.isJsxElement(exp)) {
|
|
42
|
+
diagnostics.push({
|
|
43
|
+
category: tsserverlibrary_1.default.DiagnosticCategory.Error,
|
|
44
|
+
code: Errors.DoubleEscape.code,
|
|
45
|
+
file,
|
|
46
|
+
length: exp.end - exp.pos,
|
|
47
|
+
messageText: Errors.DoubleEscape.message,
|
|
48
|
+
start: exp.pos
|
|
49
|
+
});
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Warn on unnecessary safe attributes
|
|
53
|
+
if (tsserverlibrary_1.default.isJsxExpression(exp) &&
|
|
54
|
+
// has inner expression
|
|
55
|
+
exp.expression &&
|
|
56
|
+
// is expression safe
|
|
57
|
+
isSafeAttribute(typeChecker.getTypeAtLocation(exp.expression), exp.expression) &&
|
|
58
|
+
// does not starts with unsafe
|
|
59
|
+
!exp.expression.getText().startsWith('unsafe') &&
|
|
60
|
+
// Avoids double warnings
|
|
61
|
+
!diagnostics.some((d) => d.start === safeAttribute.pos + 1 && d.file === file)) {
|
|
62
|
+
diagnostics.push({
|
|
63
|
+
category: tsserverlibrary_1.default.DiagnosticCategory.Warning,
|
|
64
|
+
code: Errors.UnusedSafe.code,
|
|
65
|
+
file,
|
|
66
|
+
length: safeAttribute.end - safeAttribute.pos - 1,
|
|
67
|
+
messageText: Errors.UnusedSafe.message,
|
|
68
|
+
start: safeAttribute.pos + 1
|
|
69
|
+
});
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Look for expressions
|
|
75
|
+
for (const exp of node.children) {
|
|
76
|
+
if (!tsserverlibrary_1.default.isJsxExpression(exp)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Should always have an expression
|
|
80
|
+
if (!exp.expression) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const type = typeChecker.getTypeAtLocation(exp.expression);
|
|
84
|
+
// Safe can be ignored
|
|
85
|
+
if (isSafeAttribute(type, exp.expression)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Arrays should be handled by the recursive function
|
|
89
|
+
if (typeChecker.isArrayLikeType(type)) {
|
|
90
|
+
let hasInnerJsx = false;
|
|
91
|
+
tsserverlibrary_1.default.forEachChild(exp.expression, function loopSourceNodes(node) {
|
|
92
|
+
// Check first to early exit
|
|
93
|
+
if (tsserverlibrary_1.default.isJsxElement(node)) {
|
|
94
|
+
hasInnerJsx = true;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
tsserverlibrary_1.default.forEachChild(node, loopSourceNodes);
|
|
98
|
+
});
|
|
99
|
+
// Skips diagnostics if there is an inner JSX element
|
|
100
|
+
if (hasInnerJsx) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
diagnostics.push({
|
|
105
|
+
category: tsserverlibrary_1.default.DiagnosticCategory.Error,
|
|
106
|
+
code: Errors.Xss.code,
|
|
107
|
+
file,
|
|
108
|
+
length: exp.end - exp.pos,
|
|
109
|
+
messageText: Errors.Xss.message,
|
|
110
|
+
start: exp.pos
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return diagnostics;
|
|
114
|
+
}
|
|
115
|
+
exports.diagnoseJsxElement = diagnoseJsxElement;
|
|
116
|
+
function isSafeAttribute(type, expression) {
|
|
117
|
+
// We allow literal string types here, as if they have XSS content,
|
|
118
|
+
// the user has explicitly written it
|
|
119
|
+
if (
|
|
120
|
+
// Non string types cannot have XSS values
|
|
121
|
+
!(type.flags & tsserverlibrary_1.default.TypeFlags.String) &&
|
|
122
|
+
// Objects may have toString() overridden
|
|
123
|
+
!(type.flags & tsserverlibrary_1.default.TypeFlags.Object)) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// Variables starting with safe are suppressed
|
|
127
|
+
if (expression.getText().startsWith('safe')) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
exports.isSafeAttribute = isSafeAttribute;
|
|
133
|
+
function getSafeAttribute(element) {
|
|
134
|
+
for (const attribute of element.attributes.properties) {
|
|
135
|
+
if (attribute.getText() === 'safe') {
|
|
136
|
+
return attribute;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
exports.getSafeAttribute = getSafeAttribute;
|
|
142
|
+
function proxyObject(obj) {
|
|
143
|
+
const proxy = Object.create(null);
|
|
144
|
+
for (let k of Object.keys(obj)) {
|
|
145
|
+
const x = obj[k];
|
|
146
|
+
// @ts-expect-error - JS runtime trickery which is tricky to type tersely
|
|
147
|
+
proxy[k] = (...args) => x.apply(obj, args);
|
|
148
|
+
}
|
|
149
|
+
return proxy;
|
|
150
|
+
}
|
|
151
|
+
exports.proxyObject = proxyObject;
|
|
152
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kitajs/ts-html-plugin",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Typescript LSP extension to catch XSS vulnerabilities.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"tslib": "^2.6.2"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@arthurfiorette/prettier-config": "^1.0.9",
|
|
12
|
+
"prettier": "^3.0.3",
|
|
13
|
+
"self": "file:."
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@kitajs/html": ">=2",
|
|
17
|
+
"typescript": ">=5"
|
|
18
|
+
},
|
|
19
|
+
"packageManager": "pnpm@8.7.5",
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.build.json",
|
|
22
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
23
|
+
"format": "prettier --write .",
|
|
24
|
+
"test": "tsc --noEmit"
|
|
25
|
+
}
|
|
26
|
+
}
|