Skip to content

Commit 0009ad7

Browse files
committed
Replace some dependencies
1 parent 86e06f2 commit 0009ad7

File tree

8 files changed

+39
-53
lines changed

8 files changed

+39
-53
lines changed

package-lock.json

Lines changed: 0 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
"@types/glob": "^7.1.1",
3838
"@types/jest": "^24.0.21",
3939
"@types/json5": "0.0.30",
40-
"@types/lodash.escape": "^4.0.6",
41-
"@types/lodash.uniq": "^4.5.6",
4240
"@types/node": "^12.12.5",
4341
"@types/plist": "^3.0.2",
4442
"glob": "^7.1.5",
@@ -51,24 +49,23 @@
5149
"rehype-stringify": "^6.0.0",
5250
"remark-parse": "^7.0.1",
5351
"remark-rehype": "^5.0.0",
54-
"rimraf": "^3.0.0",
5552
"synthwave-vscode": "github:robb0wen/synthwave-vscode",
5653
"typescript": "^3.6.4",
5754
"unified": "^8.4.1"
5855
},
5956
"dependencies": {
6057
"decompress": "^4.2.0",
6158
"json5": "^2.1.1",
62-
"lodash.escape": "^4.0.1",
63-
"lodash.uniq": "^4.5.0",
6459
"loglevel": "^1.6.4",
6560
"oniguruma": "^7.2.0",
6661
"plist": "^3.0.1",
6762
"unist-util-visit": "^1.4.1",
6863
"vscode-textmate": "4.2.2"
6964
},
7065
"jest": {
71-
"testMatch": ["<rootDir>/test/index.js"],
66+
"testMatch": [
67+
"<rootDir>/test/index.js"
68+
],
7269
"globalSetup": "<rootDir>/test/setup.js",
7370
"coveragePathIgnorePatterns": [
7471
"lib"

src/factory/html.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
const escapeHTML = require('lodash.escape');
2-
const { last, flatMap } = require('../utils');
1+
const { last, flatMap, escapeHTML } = require('../utils');
32
const { createThemeCSSRules } = require('./css');
43
const { joinClassNames } = require('../renderers/css');
54
const { pre, code, span, style, TriviaRenderFlags, mergeAttributes } = require('../renderers/html');

src/graphql/getCodeBlockDataFromRegistry.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
const escapeHTML = require('lodash.escape');
21
const { renderHTML } = require('../renderers/html');
32
const { joinClassNames } = require('../renderers/css');
4-
const { flatMap, partitionOne } = require('../utils');
53
const { getThemeClassNames } = require('../themeUtils');
4+
const { flatMap, partitionOne, escapeHTML } = require('../utils');
65
const { createTokenElement, createLineElement, createCodeBlockElement } = require('../factory/html');
76

87
/**

src/renderers/html.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// @ts-check
2-
const escape = require('lodash.escape');
32
const createWriter = require('./createWriter');
3+
const { escapeHTML } = require('../utils');
44
const { joinClassNames, renderCSS } = require('./css');
55

66
/**
@@ -64,7 +64,7 @@ function renderHTML(element) {
6464

6565
const { tagName, attributes, children } = element;
6666
const attrs = Object.keys(attributes)
67-
.map(attr => ` ${attr}="${escape(attributes[attr])}"`)
67+
.map(attr => ` ${attr}="${escapeHTML(attributes[attr])}"`)
6868
.join('');
6969

7070
writer.write(`<${tagName}${attrs}>`);

src/utils.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ const zlib = require('zlib');
55
const path = require('path');
66
const JSON5 = require('json5');
77
const plist = require('plist');
8-
const uniq = require('lodash.uniq');
98
const logger = require('loglevel');
109

1110
const readdir = util.promisify(fs.readdir);
@@ -102,6 +101,15 @@ async function mergeCache(cache, key, value) {
102101
await cache.set(key, { ...(await cache.get(key)), ...value });
103102
}
104103

104+
/**
105+
* @template T
106+
* @param {T[]} arr
107+
* @returns {T[]}
108+
*/
109+
function uniq(arr) {
110+
return Array.from(new Set(arr));
111+
}
112+
105113
/**
106114
* @template T
107115
* @template U
@@ -183,6 +191,21 @@ function createRequire(path) {
183191
return /** @type {NodeRequire} */ ((module.createRequire || module.createRequireFromPath)(path));
184192
}
185193

194+
const htmlCharRegExp = /[<>&'"]/g;
195+
/** @param {string} html */
196+
function escapeHTML(html) {
197+
return String(html).replace(
198+
htmlCharRegExp,
199+
char =>
200+
({
201+
'<': '&lt;',
202+
'>': '&gt;',
203+
'"': '&quot;',
204+
"'": '&#39;'
205+
}[char] || char)
206+
);
207+
}
208+
186209
const requireJson = /** @param {string} pathName */ pathName => JSON5.parse(fs.readFileSync(pathName, 'utf8'));
187210
const requirePlistOrJson = /** @param {string} pathName */ async pathName =>
188211
path.extname(pathName) === '.json' ? requireJson(pathName) : plist.parse(await readFile(pathName, 'utf8'));
@@ -203,10 +226,12 @@ module.exports = {
203226
getMetadataForToken,
204227
mergeCache,
205228
flatMap,
229+
uniq,
206230
deprecationNotice,
207231
isRelativePath,
208232
createOnce,
209233
partitionOne,
210234
last,
211-
createRequire
235+
createRequire,
236+
escapeHTML
212237
};

test/integration/integration.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
const fs = require('fs');
22
const path = require('path');
3+
const open = require('open');
34
const glob = require('glob');
45
const unified = require('unified');
56
const reparseHast = require('hast-util-raw');
67
const mdastToHast = require('mdast-util-to-hast');
78
const remark = require('remark-parse');
89
const stringify = require('rehype-stringify');
9-
const { execSync } = require('child_process');
1010
const { promisify } = require('util');
1111
const { renderDocument, renderNewCase, renderTestDiff } = require('./viewer/render');
1212
const { markdownNode, createCache, createNodeId, actions } = require('../utils');
@@ -73,7 +73,7 @@ describe('integration tests', () => {
7373
if (failedCaseHTML.length || newCaseHTML.length) {
7474
const fileName = path.resolve(__dirname, 'viewer/report.html');
7575
await writeFile(fileName, renderDocument([...newCaseHTML, ...failedCaseHTML].join('\n')));
76-
execSync(`open ${fileName}`);
76+
return open(fileName);
7777
}
7878
});
7979
});

test/integration/viewer/render.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// @ts-check
2-
const escape = require('lodash.escape');
2+
const { escapeHTML } = require('../../../src/utils');
33

44
/**
55
* @param {string} title
@@ -34,7 +34,7 @@ function renderNewCase(title, content) {
3434
<h2>${title} (new)</h2>
3535
<div class="row">
3636
<div class="output">${renderInIframe(content)}</div>
37-
<pre class="html"><code>${escape(content)}</code></div>
37+
<pre class="html"><code>${escapeHTML(content)}</code></div>
3838
</div>
3939
</div>
4040
`;
@@ -43,7 +43,7 @@ function renderNewCase(title, content) {
4343
/** @param {string} html */
4444
function renderInIframe(html) {
4545
return `
46-
<iframe srcdoc="${escape(`
46+
<iframe srcdoc="${escapeHTML(`
4747
<html>
4848
<head>
4949
<style>

0 commit comments

Comments
 (0)