Skip to content

Commit 59e16a7

Browse files
committed
fix: Restore webpack 4 cache
1 parent 0d2d6e4 commit 59e16a7

3 files changed

Lines changed: 62 additions & 3 deletions

File tree

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
"dependencies": {
3636
"debug": "^4.1.1",
3737
"endent": "^2.0.1",
38+
"find-cache-dir": "^3.3.1",
39+
"flat-cache": "^3.0.4",
3840
"micromatch": "^4.0.2",
3941
"react-docgen-typescript": "^1.22.0",
4042
"tslib": "^2.0.0",

src/plugin.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import ts from "typescript";
44
import * as docGen from "react-docgen-typescript";
55
import { matcher } from "micromatch";
66
import * as webpack from "webpack";
7+
import findCacheDir from "find-cache-dir";
8+
import flatCache from "flat-cache";
9+
import crypto from "crypto";
710

811
import { LoaderOptions } from "./types";
912
import {
@@ -12,6 +15,7 @@ import {
1215
} from "./generateDocgenCodeBlock";
1316

1417
const debugExclude = createDebug("docgen:exclude");
18+
const debugInclude = createDebug("docgen:include");
1519

1620
interface TypescriptOptions {
1721
/**
@@ -58,6 +62,11 @@ const matchGlob = (globs?: string[]) => {
5862
Boolean(filename && matchers.find((match) => match(filename)));
5963
};
6064

65+
// The cache is used only with webpack 4 for now as webpack 5 comes with caching of its own
66+
const cacheId = "ts-docgen";
67+
const cacheDir = findCacheDir({ name: cacheId });
68+
const cache = flatCache.load(cacheId, cacheDir);
69+
6170
/** Run the docgen parser and inject the result into the output */
6271
/** This is used for webpack 4 or earlier */
6372
function processModule(
@@ -70,6 +79,27 @@ function processModule(
7079
return;
7180
}
7281

82+
const hash = crypto
83+
.createHash("sha1")
84+
// eslint-disable-next-line
85+
// @ts-ignore
86+
// eslint-disable-next-line
87+
.update(webpackModule._source._value)
88+
.digest("hex");
89+
const cached = cache.getKey(hash);
90+
91+
if (cached) {
92+
// eslint-disable-next-line
93+
// @ts-ignore
94+
// eslint-disable-next-line
95+
debugInclude(`Got cached docgen for "${webpackModule.request}"`);
96+
// eslint-disable-next-line
97+
// @ts-ignore
98+
// eslint-disable-next-line
99+
webpackModule._source._value = cached;
100+
return;
101+
}
102+
73103
// eslint-disable-next-line
74104
// @ts-ignore: Webpack 4 type
75105
const { userRequest } = webpackModule;

yarn.lock

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,11 @@ comment-parser@^0.7.4:
19681968
resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.5.tgz#06db157a3b34addf8502393743e41897e2c73059"
19691969
integrity sha512-iH9YA35ccw94nx5244GVkpyC9eVTsL71jZz6iz5w6RIf79JLF2AsXHXq9p6Oaohyl3sx5qSMnGsWUDFIAfWL4w==
19701970

1971+
commondir@^1.0.1:
1972+
version "1.0.1"
1973+
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
1974+
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
1975+
19711976
component-emitter@^1.2.1:
19721977
version "1.3.0"
19731978
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
@@ -2894,6 +2899,15 @@ fill-range@^7.0.1:
28942899
dependencies:
28952900
to-regex-range "^5.0.1"
28962901

2902+
find-cache-dir@^3.3.1:
2903+
version "3.3.1"
2904+
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
2905+
integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
2906+
dependencies:
2907+
commondir "^1.0.1"
2908+
make-dir "^3.0.2"
2909+
pkg-dir "^4.1.0"
2910+
28972911
find-replace@^3.0.0:
28982912
version "3.0.0"
28992913
resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38"
@@ -2925,11 +2939,24 @@ flat-cache@^2.0.1:
29252939
rimraf "2.6.3"
29262940
write "1.0.3"
29272941

2942+
flat-cache@^3.0.4:
2943+
version "3.0.4"
2944+
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
2945+
integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
2946+
dependencies:
2947+
flatted "^3.1.0"
2948+
rimraf "^3.0.2"
2949+
29282950
flatted@^2.0.0:
29292951
version "2.0.2"
29302952
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
29312953
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
29322954

2955+
flatted@^3.1.0:
2956+
version "3.1.1"
2957+
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
2958+
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
2959+
29332960
for-in@^1.0.2:
29342961
version "1.0.2"
29352962
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -4329,7 +4356,7 @@ macos-release@^2.2.0:
43294356
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
43304357
integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
43314358

4332-
make-dir@^3.0.0:
4359+
make-dir@^3.0.0, make-dir@^3.0.2:
43334360
version "3.1.0"
43344361
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
43354362
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -4992,7 +5019,7 @@ pkg-dir@^2.0.0:
49925019
dependencies:
49935020
find-up "^2.1.0"
49945021

4995-
pkg-dir@^4.2.0:
5022+
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
49965023
version "4.2.0"
49975024
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
49985025
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
@@ -5357,7 +5384,7 @@ rimraf@2.6.3:
53575384
dependencies:
53585385
glob "^7.1.3"
53595386

5360-
rimraf@^3.0.0:
5387+
rimraf@^3.0.0, rimraf@^3.0.2:
53615388
version "3.0.2"
53625389
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
53635390
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==

0 commit comments

Comments
 (0)