Skip to content

Commit 1ca876d

Browse files
committed
Allow new file extensions in pacakges mode
Also refactor more tests to use fixture builder Resolves #1952.
1 parent 6039f22 commit 1ca876d

21 files changed

+150
-107
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
- JS exports defined as `exports.foo = ...` will now be converted as variables rather than properties.
7474
- The `excludeNotDocumented` option will no longer hide a module if it has a documentation comment, #1948.
7575
- Prevent `--excludeNotDocumented` from hiding properties of type literals (`a` in `function fn(p: { a: string })`), #1752.
76+
- Allow `cts` and `mts` extensions in packages resolution mode, #1952.
7677
- Corrected schema generation for https://typedoc.org/schema.json
7778

7879
### Thanks!

src/lib/utils/package-manifest.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,10 @@ export function getTsEntryPointForPackage(
225225
// Pass an empty `paths` as node_modules locations do not need to be examined
226226
try {
227227
entryPointPath = require.resolve(entryPointPath, { paths: [] });
228-
if (/\.tsx?$/.test(entryPointPath) && existsSync(entryPointPath)) {
228+
if (
229+
/\.([cm]ts|tsx?)$/.test(entryPointPath) &&
230+
existsSync(entryPointPath)
231+
) {
229232
return entryPointPath;
230233
}
231234
} catch (e: any) {
@@ -237,7 +240,10 @@ export function getTsEntryPointForPackage(
237240
"..",
238241
packageTypes ?? packageMain
239242
);
240-
if (/\.tsx?$/.test(entryPointPath) && existsSync(entryPointPath)) {
243+
if (
244+
/\.([cm][tj]s|tsx?)$/.test(entryPointPath) &&
245+
existsSync(entryPointPath)
246+
) {
241247
return entryPointPath;
242248
} else {
243249
logger.warn(

src/test/packages.test.ts

Lines changed: 141 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,82 @@ import {
77
getTsEntryPointForPackage,
88
} from "../lib/utils/package-manifest";
99

10+
import { tempdirProject } from "@typestrong/fs-fixture-builder";
11+
import { TestLogger } from "./TestLogger";
12+
1013
describe("Packages support", () => {
14+
let project: ReturnType<typeof tempdirProject>;
15+
16+
beforeEach(() => {
17+
project = tempdirProject();
18+
});
19+
20+
afterEach(() => {
21+
project.rm();
22+
});
23+
1124
it("handles monorepos", () => {
12-
const base = join(__dirname, "packages", "multi-package");
13-
const logger = new Logger();
14-
const packages = expandPackages(logger, ".", [base]);
25+
project.addJsonFile("tsconfig.json", {
26+
compilerOptions: {
27+
strict: true,
28+
sourceMap: true,
29+
},
30+
exclude: ["node_modules", "dist"],
31+
});
32+
const childTsconfig = {
33+
extends: "../../tsconfig.json",
34+
compilerOptions: {
35+
outDir: "dist",
36+
},
37+
};
38+
project.addJsonFile("package.json", {
39+
name: "typedoc-multi-package-example",
40+
main: "dist/index.js",
41+
workspaces: ["packages/*"],
42+
});
43+
44+
// Bar, types entry point
45+
project.addFile(
46+
"packages/bar/index.d.ts",
47+
"export function bar(): void;"
48+
);
49+
project.addJsonFile("packages/bar/package.json", {
50+
name: "typedoc-multi-package-bar",
51+
version: "1.0.0",
52+
types: "index.d.ts",
53+
});
54+
project.addJsonFile("packages/bar/tsconfig.json", childTsconfig);
55+
56+
// Baz, TypeScript "main" entry point
57+
project.addFile("packages/baz/index.ts", "export function baz(): {}");
58+
project.addJsonFile("packages/baz/package.json", {
59+
name: "typedoc-multi-package-baz",
60+
version: "1.0.0",
61+
main: "index.ts",
62+
});
63+
project.addJsonFile("packages/baz/tsconfig.json", childTsconfig);
64+
65+
// Foo, entry point with "typedocMain"
66+
project.addFile("packages/foo/dist/index.js", "module.exports = 123");
67+
project.addFile("packages/foo/index.ts", "export function foo() {}");
68+
project.addJsonFile("packages/foo/package.json", {
69+
name: "typedoc-multi-package-foo",
70+
version: "1.0.0",
71+
main: "dist/index",
72+
typedocMain: "index.ts",
73+
});
74+
project.addJsonFile("packages/foo/tsconfig.json", childTsconfig);
75+
76+
project.write();
77+
const logger = new TestLogger();
78+
const packages = expandPackages(logger, project.cwd, [project.cwd]);
1579

1680
equal(
1781
packages,
1882
[
19-
join(base, "packages/bar"),
20-
join(base, "packages/baz"),
21-
join(base, "packages/foo"),
83+
join(project.cwd, "packages/bar"),
84+
join(project.cwd, "packages/baz"),
85+
join(project.cwd, "packages/foo"),
2286
].map(normalizePath)
2387
);
2488

@@ -32,19 +96,82 @@ describe("Packages support", () => {
3296
});
3397

3498
equal(entries, [
35-
join(base, "packages/bar/index.d.ts"),
36-
join(base, "packages/baz/index.ts"),
37-
join(base, "packages/foo/index.ts"),
99+
join(project.cwd, "packages/bar/index.d.ts"),
100+
join(project.cwd, "packages/baz/index.ts"),
101+
join(project.cwd, "packages/foo/index.ts"),
38102
]);
39103

40-
ok(!logger.hasErrors() && !logger.hasWarnings());
104+
logger.discardDebugMessages();
105+
logger.expectNoOtherMessages();
41106
});
42107

43108
it("handles single packages", () => {
44-
const base = join(__dirname, "packages", "single-package");
45-
const logger = new Logger();
46-
const packages = expandPackages(logger, ".", [base]);
109+
project.addJsonFile("tsconfig.json", {
110+
compilerOptions: {
111+
outDir: "dist",
112+
sourceMap: true,
113+
strict: true,
114+
},
115+
include: ["src"],
116+
});
117+
project.addJsonFile("package.json", {
118+
name: "typedoc-single-package",
119+
main: "dist/index.js",
120+
});
121+
project.addFile("dist/index.js", `//# sourceMappingURL=index.js.map`);
122+
project.addJsonFile("dist/index.js.map", {
123+
version: 3,
124+
file: "index.js",
125+
sourceRoot: "",
126+
sources: ["../src/index.ts"],
127+
names: [],
128+
mappings: "",
129+
});
130+
project.addFile(
131+
"src/index.ts",
132+
`export function helloWorld() { return "Hello World!"; }`
133+
);
134+
project.write();
135+
136+
const logger = new TestLogger();
137+
const packages = expandPackages(logger, project.cwd, [project.cwd]);
138+
139+
logger.expectNoOtherMessages();
140+
equal(packages, [normalizePath(project.cwd)]);
141+
});
142+
143+
it("Handles TS 4.7 extensions", () => {
144+
project.addJsonFile("tsconfig.json", {
145+
compilerOptions: {
146+
outDir: "dist",
147+
sourceMap: true,
148+
strict: true,
149+
},
150+
include: ["src"],
151+
});
152+
project.addJsonFile("package.json", {
153+
name: "typedoc-single-package",
154+
main: "dist/index.cjs",
155+
});
156+
project.addFile("dist/index.cjs", `//# sourceMappingURL=index.cjs.map`);
157+
project.addJsonFile("dist/index.cjs.map", {
158+
version: 3,
159+
file: "index.cjs",
160+
sourceRoot: "",
161+
sources: ["../src/index.cts"],
162+
names: [],
163+
mappings: "",
164+
});
165+
project.addFile(
166+
"src/index.cts",
167+
`export function helloWorld() { return "Hello World!"; }`
168+
);
169+
project.write();
170+
171+
const logger = new TestLogger();
172+
const packages = expandPackages(logger, project.cwd, [project.cwd]);
47173

48-
equal(packages, [normalizePath(base)]);
174+
logger.expectNoOtherMessages();
175+
equal(packages, [normalizePath(project.cwd)]);
49176
});
50177
});

src/test/packages/README.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/test/packages/multi-package/package.json

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/test/packages/multi-package/packages/bar/index.d.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/test/packages/multi-package/packages/bar/package.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/test/packages/multi-package/packages/bar/tsconfig.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/test/packages/multi-package/packages/baz/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/test/packages/multi-package/packages/baz/package.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/test/packages/multi-package/packages/baz/tsconfig.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/test/packages/multi-package/packages/foo/dist/index.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/test/packages/multi-package/packages/foo/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/test/packages/multi-package/packages/foo/package.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/test/packages/multi-package/packages/foo/tsconfig.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/test/packages/multi-package/tsconfig.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/test/packages/single-package/dist/index.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/test/packages/single-package/dist/index.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/test/packages/single-package/package.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/test/packages/single-package/src/index.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/test/packages/single-package/tsconfig.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)