build: package api-extractor and -model (#9920)

* fix(ExceptText): don't display import("d..-types/v10"). in return type

* Squashed 'packages/api-extractor-model/' content from commit 39ecb196c

git-subtree-dir: packages/api-extractor-model
git-subtree-split: 39ecb196ca210bdf84ba6c9cadb1bb93571849d7

* Squashed 'packages/api-extractor/' content from commit 341ad6c51

git-subtree-dir: packages/api-extractor
git-subtree-split: 341ad6c51b01656d4f73b74ad4bdb3095f9262c4

* feat(api-extractor): add api-extractor and -model

* fix: package.json docs script

* fix(SourcLink): use <> instead of function syntax

* fix: make packages private

* fix: rest params showing in docs, added labels

* fix: missed two files

* fix: cpy-cli & pnpm-lock

* fix: increase icon size

* fix: icon size again
This commit is contained in:
Qjuh
2023-11-07 21:53:36 +01:00
committed by GitHub
parent 95c0b1a59f
commit 5c0fad3b2d
251 changed files with 36017 additions and 296 deletions

View File

@@ -0,0 +1,125 @@
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
import * as path from 'node:path';
import { FileSystem, PackageJsonLookup, type INodePackageJson, NewlineKind } from '@rushstack/node-core-library';
import { PackageMetadataManager } from '../PackageMetadataManager.js';
const packageJsonLookup: PackageJsonLookup = new PackageJsonLookup();
function resolveInTestPackage(testPackageName: string, ...args: string[]): string {
return path.resolve(__dirname, 'test-data/tsdoc-metadata-path-inference', testPackageName, ...args);
}
function getPackageMetadata(testPackageName: string): {
packageFolder: string;
packageJson: INodePackageJson;
} {
const packageFolder: string = resolveInTestPackage(testPackageName);
const packageJson: INodePackageJson | undefined = packageJsonLookup.tryLoadPackageJsonFor(packageFolder);
if (!packageJson) {
throw new Error('There should be a package.json file in the test package');
}
return { packageFolder, packageJson };
}
function firstArgument(mockFn: jest.Mock): any {
return mockFn.mock.calls[0][0];
}
describe(PackageMetadataManager.name, () => {
describe(PackageMetadataManager.writeTsdocMetadataFile.name, () => {
const originalWriteFile = FileSystem.writeFile;
const mockWriteFile: jest.Mock = jest.fn();
beforeAll(() => {
FileSystem.writeFile = mockWriteFile;
});
afterEach(() => {
mockWriteFile.mockClear();
});
afterAll(() => {
FileSystem.writeFile = originalWriteFile;
});
it('writes the tsdoc metadata file at the provided path', () => {
PackageMetadataManager.writeTsdocMetadataFile('/foo/bar', NewlineKind.CrLf);
expect(firstArgument(mockWriteFile)).toBe('/foo/bar');
});
});
describe(PackageMetadataManager.resolveTsdocMetadataPath.name, () => {
describe('when an empty tsdocMetadataPath is provided', () => {
const tsdocMetadataPath = '';
describe('given a package.json where the field "tsdocMetadata" is defined', () => {
it('outputs the tsdoc metadata path as given by "tsdocMetadata" relative to the folder of package.json', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-tsdoc-metadata');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, packageJson.tsdocMetadata as string),
);
});
});
describe('given a package.json where the field "typings" is defined and "tsdocMetadata" is not defined', () => {
it('outputs the tsdoc metadata file "tsdoc-metadata.json" in the same folder as the path of "typings"', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-typings');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, path.dirname(packageJson.typings!), 'tsdoc-metadata.json'),
);
});
});
describe('given a package.json where the field "main" is defined but not "typings" nor "tsdocMetadata"', () => {
it('outputs the tsdoc metadata file "tsdoc-metadata.json" in the same folder as the path of "main"', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-main');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, path.dirname(packageJson.main!), 'tsdoc-metadata.json'),
);
});
});
describe('given a package.json where the fields "main", "typings" and "tsdocMetadata" are not defined', () => {
it('outputs the tsdoc metadata file "tsdoc-metadata.json" in the folder where package.json is located', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-default');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, 'tsdoc-metadata.json'),
);
});
});
});
describe('when a non-empty tsdocMetadataPath is provided', () => {
const tsdocMetadataPath = 'path/to/custom-tsdoc-metadata.json';
describe('given a package.json where the field "tsdocMetadata" is defined', () => {
it('outputs the tsdoc metadata file at the provided path in the folder where package.json is located', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-tsdocMetadata');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, tsdocMetadataPath),
);
});
});
describe('given a package.json where the field "typings" is defined and "tsdocMetadata" is not defined', () => {
it('outputs the tsdoc metadata file at the provided path in the folder where package.json is located', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-typings');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, tsdocMetadataPath),
);
});
});
describe('given a package.json where the field "main" is defined but not "typings" nor "tsdocMetadata"', () => {
it('outputs the tsdoc metadata file at the provided path in the folder where package.json is located', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-inferred-from-main');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, tsdocMetadataPath),
);
});
});
describe('given a package.json where the fields "main", "typings" and "tsdocMetadata" are not defined', () => {
it('outputs the tsdoc metadata file at the provided path in the folder where package.json is located', () => {
const { packageFolder, packageJson } = getPackageMetadata('package-default');
expect(PackageMetadataManager.resolveTsdocMetadataPath(packageFolder, packageJson, tsdocMetadataPath)).toBe(
path.resolve(packageFolder, tsdocMetadataPath),
);
});
});
});
});
});
/* eslint-enable @typescript-eslint/typedef */

View File

@@ -0,0 +1,61 @@
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
import { SyntaxHelpers } from '../SyntaxHelpers.js';
describe(SyntaxHelpers.name, () => {
it(SyntaxHelpers.makeCamelCaseIdentifier.name, () => {
// prettier-ignore
const inputs:string[] = [
'',
'@#(&*^',
'api-extractor-lib1-test',
'one',
'one-two',
'ONE-TWO',
'ONE/two/ /three/FOUR',
'01234'
];
expect(
inputs.map((x) => {
return { input: x, output: SyntaxHelpers.makeCamelCaseIdentifier(x) };
}),
).toMatchInlineSnapshot(`
Array [
Object {
"input": "",
"output": "_",
},
Object {
"input": "@#(&*^",
"output": "_",
},
Object {
"input": "api-extractor-lib1-test",
"output": "apiExtractorLib1Test",
},
Object {
"input": "one",
"output": "one",
},
Object {
"input": "one-two",
"output": "oneTwo",
},
Object {
"input": "ONE-TWO",
"output": "oneTwo",
},
Object {
"input": "ONE/two/ /three/FOUR",
"output": "oneTwoThreeFour",
},
Object {
"input": "01234",
"output": "_01234",
},
]
`);
});
});

View File

@@ -0,0 +1,4 @@
{
"name": "package-default",
"version": "1.0.0"
}

View File

@@ -0,0 +1,5 @@
{
"name": "package-inferred-from-main",
"version": "1.0.0",
"main": "path/to/main.js"
}

View File

@@ -0,0 +1,7 @@
{
"name": "package-inferred-from-tsdoc-metadata",
"version": "1.0.0",
"main": "path/to/main.js",
"typings": "path/to/typings.d.ts",
"tsdocMetadata": "path/to/tsdoc-metadata.json"
}

View File

@@ -0,0 +1,6 @@
{
"name": "package-inferred-from-typings",
"version": "1.0.0",
"main": "path/to/main.js",
"typings": "path/to/typings.d.ts"
}