Skip to content

Commit

Permalink
Allow new file extensions in pacakges mode
Browse files Browse the repository at this point in the history
Also refactor more tests to use fixture builder

Resolves #1952.
  • Loading branch information
Gerrit0 committed Jun 20, 2022
1 parent 6039f22 commit 1ca876d
Show file tree
Hide file tree
Showing 21 changed files with 150 additions and 107 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -73,6 +73,7 @@
- JS exports defined as `exports.foo = ...` will now be converted as variables rather than properties.
- The `excludeNotDocumented` option will no longer hide a module if it has a documentation comment, #1948.
- Prevent `--excludeNotDocumented` from hiding properties of type literals (`a` in `function fn(p: { a: string })`), #1752.
- Allow `cts` and `mts` extensions in packages resolution mode, #1952.
- Corrected schema generation for https://typedoc.org/schema.json

### Thanks!
Expand Down
10 changes: 8 additions & 2 deletions src/lib/utils/package-manifest.ts
Expand Up @@ -225,7 +225,10 @@ export function getTsEntryPointForPackage(
// Pass an empty `paths` as node_modules locations do not need to be examined
try {
entryPointPath = require.resolve(entryPointPath, { paths: [] });
if (/\.tsx?$/.test(entryPointPath) && existsSync(entryPointPath)) {
if (
/\.([cm]ts|tsx?)$/.test(entryPointPath) &&
existsSync(entryPointPath)
) {
return entryPointPath;
}
} catch (e: any) {
Expand All @@ -237,7 +240,10 @@ export function getTsEntryPointForPackage(
"..",
packageTypes ?? packageMain
);
if (/\.tsx?$/.test(entryPointPath) && existsSync(entryPointPath)) {
if (
/\.([cm][tj]s|tsx?)$/.test(entryPointPath) &&
existsSync(entryPointPath)
) {
return entryPointPath;
} else {
logger.warn(
Expand Down
155 changes: 141 additions & 14 deletions src/test/packages.test.ts
Expand Up @@ -7,18 +7,82 @@ import {
getTsEntryPointForPackage,
} from "../lib/utils/package-manifest";

import { tempdirProject } from "@typestrong/fs-fixture-builder";
import { TestLogger } from "./TestLogger";

describe("Packages support", () => {
let project: ReturnType<typeof tempdirProject>;

beforeEach(() => {
project = tempdirProject();
});

afterEach(() => {
project.rm();
});

it("handles monorepos", () => {
const base = join(__dirname, "packages", "multi-package");
const logger = new Logger();
const packages = expandPackages(logger, ".", [base]);
project.addJsonFile("tsconfig.json", {
compilerOptions: {
strict: true,
sourceMap: true,
},
exclude: ["node_modules", "dist"],
});
const childTsconfig = {
extends: "../../tsconfig.json",
compilerOptions: {
outDir: "dist",
},
};
project.addJsonFile("package.json", {
name: "typedoc-multi-package-example",
main: "dist/index.js",
workspaces: ["packages/*"],
});

// Bar, types entry point
project.addFile(
"packages/bar/index.d.ts",
"export function bar(): void;"
);
project.addJsonFile("packages/bar/package.json", {
name: "typedoc-multi-package-bar",
version: "1.0.0",
types: "index.d.ts",
});
project.addJsonFile("packages/bar/tsconfig.json", childTsconfig);

// Baz, TypeScript "main" entry point
project.addFile("packages/baz/index.ts", "export function baz(): {}");
project.addJsonFile("packages/baz/package.json", {
name: "typedoc-multi-package-baz",
version: "1.0.0",
main: "index.ts",
});
project.addJsonFile("packages/baz/tsconfig.json", childTsconfig);

// Foo, entry point with "typedocMain"
project.addFile("packages/foo/dist/index.js", "module.exports = 123");
project.addFile("packages/foo/index.ts", "export function foo() {}");
project.addJsonFile("packages/foo/package.json", {
name: "typedoc-multi-package-foo",
version: "1.0.0",
main: "dist/index",
typedocMain: "index.ts",
});
project.addJsonFile("packages/foo/tsconfig.json", childTsconfig);

project.write();
const logger = new TestLogger();
const packages = expandPackages(logger, project.cwd, [project.cwd]);

equal(
packages,
[
join(base, "packages/bar"),
join(base, "packages/baz"),
join(base, "packages/foo"),
join(project.cwd, "packages/bar"),
join(project.cwd, "packages/baz"),
join(project.cwd, "packages/foo"),
].map(normalizePath)
);

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

equal(entries, [
join(base, "packages/bar/index.d.ts"),
join(base, "packages/baz/index.ts"),
join(base, "packages/foo/index.ts"),
join(project.cwd, "packages/bar/index.d.ts"),
join(project.cwd, "packages/baz/index.ts"),
join(project.cwd, "packages/foo/index.ts"),
]);

ok(!logger.hasErrors() && !logger.hasWarnings());
logger.discardDebugMessages();
logger.expectNoOtherMessages();
});

it("handles single packages", () => {
const base = join(__dirname, "packages", "single-package");
const logger = new Logger();
const packages = expandPackages(logger, ".", [base]);
project.addJsonFile("tsconfig.json", {
compilerOptions: {
outDir: "dist",
sourceMap: true,
strict: true,
},
include: ["src"],
});
project.addJsonFile("package.json", {
name: "typedoc-single-package",
main: "dist/index.js",
});
project.addFile("dist/index.js", `//# sourceMappingURL=index.js.map`);
project.addJsonFile("dist/index.js.map", {
version: 3,
file: "index.js",
sourceRoot: "",
sources: ["../src/index.ts"],
names: [],
mappings: "",
});
project.addFile(
"src/index.ts",
`export function helloWorld() { return "Hello World!"; }`
);
project.write();

const logger = new TestLogger();
const packages = expandPackages(logger, project.cwd, [project.cwd]);

logger.expectNoOtherMessages();
equal(packages, [normalizePath(project.cwd)]);
});

it("Handles TS 4.7 extensions", () => {
project.addJsonFile("tsconfig.json", {
compilerOptions: {
outDir: "dist",
sourceMap: true,
strict: true,
},
include: ["src"],
});
project.addJsonFile("package.json", {
name: "typedoc-single-package",
main: "dist/index.cjs",
});
project.addFile("dist/index.cjs", `//# sourceMappingURL=index.cjs.map`);
project.addJsonFile("dist/index.cjs.map", {
version: 3,
file: "index.cjs",
sourceRoot: "",
sources: ["../src/index.cts"],
names: [],
mappings: "",
});
project.addFile(
"src/index.cts",
`export function helloWorld() { return "Hello World!"; }`
);
project.write();

const logger = new TestLogger();
const packages = expandPackages(logger, project.cwd, [project.cwd]);

equal(packages, [normalizePath(base)]);
logger.expectNoOtherMessages();
equal(packages, [normalizePath(project.cwd)]);
});
});
4 changes: 0 additions & 4 deletions src/test/packages/README.md

This file was deleted.

10 changes: 0 additions & 10 deletions src/test/packages/multi-package/package.json

This file was deleted.

1 change: 0 additions & 1 deletion src/test/packages/multi-package/packages/bar/index.d.ts

This file was deleted.

5 changes: 0 additions & 5 deletions src/test/packages/multi-package/packages/bar/package.json

This file was deleted.

6 changes: 0 additions & 6 deletions src/test/packages/multi-package/packages/bar/tsconfig.json

This file was deleted.

1 change: 0 additions & 1 deletion src/test/packages/multi-package/packages/baz/index.ts

This file was deleted.

5 changes: 0 additions & 5 deletions src/test/packages/multi-package/packages/baz/package.json

This file was deleted.

8 changes: 0 additions & 8 deletions src/test/packages/multi-package/packages/baz/tsconfig.json

This file was deleted.

2 changes: 0 additions & 2 deletions src/test/packages/multi-package/packages/foo/dist/index.js

This file was deleted.

1 change: 0 additions & 1 deletion src/test/packages/multi-package/packages/foo/index.ts

This file was deleted.

6 changes: 0 additions & 6 deletions src/test/packages/multi-package/packages/foo/package.json

This file was deleted.

8 changes: 0 additions & 8 deletions src/test/packages/multi-package/packages/foo/tsconfig.json

This file was deleted.

7 changes: 0 additions & 7 deletions src/test/packages/multi-package/tsconfig.json

This file was deleted.

8 changes: 0 additions & 8 deletions src/test/packages/single-package/dist/index.js

This file was deleted.

1 change: 0 additions & 1 deletion src/test/packages/single-package/dist/index.js.map

This file was deleted.

7 changes: 0 additions & 7 deletions src/test/packages/single-package/package.json

This file was deleted.

3 changes: 0 additions & 3 deletions src/test/packages/single-package/src/index.ts

This file was deleted.

8 changes: 0 additions & 8 deletions src/test/packages/single-package/tsconfig.json

This file was deleted.

0 comments on commit 1ca876d

Please sign in to comment.