@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 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
+ [![Issues](https://img.shields.io/github/issues/kitajs/ts-html-plugin?logo=github&label=Issues)](https://github.com/kitajs/ts-html-plugin/issues)
4
+ [![Stars](https://img.shields.io/github/stars/kitajs/ts-html-plugin?logo=github&label=Stars)](https://github.com/kitajs/ts-html-plugin/stargazers)
5
+ [![License](https://img.shields.io/github/license/kitajs/ts-html-plugin?logo=githu&label=License)](https://github.com/kitajs/ts-html-plugin/blob/master/LICENSE)
6
+ [![Speed Blazing](https://img.shields.io/badge/speed-blazing%20%F0%9F%94%A5-brightgreen.svg)](https://twitter.com/acdlite/status/974390255393505280)
7
+
8
+ [![Latest Version](https://img.shields.io/npm/v/@kitajs/ts-html-plugin)](https://www.npmjs.com/package/@kitajs/ts-html-plugin)
9
+ [![Downloads](https://img.shields.io/npm/dw/@kitajs/ts-html-plugin)](https://www.npmjs.com/package/@kitajs/ts-html-plugin)
10
+ [![JsDelivr](https://data.jsdelivr.com/v1/package/npm/@kitajs/ts-html-plugin/badge?style=rounded)](https://www.jsdelivr.com/package/npm/@kitajs/ts-html-plugin)
11
+ [![Bundlephobia](https://img.shields.io/bundlephobia/minzip/@kitajs/ts-html-plugin/latest?style=flat)](https://bundlephobia.com/package/@kitajs/ts-html-plugin@latest)
12
+ [![Packagephobia](https://packagephobia.com/badge?p=@kitajs/ts-html-plugin@latest)](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.
@@ -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"}
@@ -0,0 +1,8 @@
1
+ import tss from 'typescript/lib/tsserverlibrary';
2
+ declare const _default: ({ typescript: ts }: {
3
+ typescript: typeof tss;
4
+ }) => {
5
+ create(info: tss.server.PluginCreateInfo): tss.LanguageService;
6
+ };
7
+ export = _default;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -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
+ }