diff --git a/packages/api-extractor-model/src/model/ApiPackage.ts b/packages/api-extractor-model/src/model/ApiPackage.ts index 6b684de7fc8c..a648581f321f 100644 --- a/packages/api-extractor-model/src/model/ApiPackage.ts +++ b/packages/api-extractor-model/src/model/ApiPackage.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import { Buffer } from 'node:buffer'; import { TSDocConfiguration } from '@microsoft/tsdoc'; import { DeclarationReference } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference.js'; import { TSDocConfigFile } from '@microsoft/tsdoc-config'; @@ -10,6 +11,7 @@ import { PackageJsonLookup, type IPackageJson, type JsonObject, + FileSystem, } from '@rushstack/node-core-library'; import { ApiDocumentedItem, type IApiDocumentedItemOptions } from '../items/ApiDocumentedItem.js'; import { ApiItem, ApiItemKind, type IApiItemJson } from '../items/ApiItem.js'; @@ -98,6 +100,11 @@ export interface IApiPackageJson extends IApiItemJson { * @public */ export interface IApiPackageSaveOptions extends IJsonFileSaveOptions { + /** + * Set to true to not have indentation or newlines in resulting JSON. + */ + minify?: boolean; + /** * Set to true only when invoking API Extractor's test harness. * @@ -300,7 +307,13 @@ export class ApiPackage extends ApiItemContainerMixin(ApiNameMixin(ApiDocumented } this.serializeInto(jsonObject); - JsonFile.save(jsonObject, apiJsonFilename, ioptions); + if (ioptions.minify) { + FileSystem.writeFile(apiJsonFilename, Buffer.from(JSON.stringify(jsonObject), 'utf8'), { + ensureFolderExists: ioptions.ensureFolderExists ?? true, + }); + } else { + JsonFile.save(jsonObject, apiJsonFilename, ioptions); + } } /** diff --git a/packages/api-extractor/src/api/Extractor.ts b/packages/api-extractor/src/api/Extractor.ts index c4258abea5c1..3abe2e8f9814 100644 --- a/packages/api-extractor/src/api/Extractor.ts +++ b/packages/api-extractor/src/api/Extractor.ts @@ -41,6 +41,11 @@ export interface IExtractorInvokeOptions { */ compilerState?: CompilerState; + /** + * Whether to minify the resulting doc model JSON, i.e. without any indentation or newlines. + */ + docModelMinify?: boolean; + /** * Indicates that API Extractor is running as part of a local build, e.g. on developer's * machine. @@ -270,7 +275,7 @@ export class Extractor { apiPackage.saveToJsonFile(extractorConfig.apiJsonFilePath, { toolPackage: Extractor.packageName, toolVersion: Extractor.version, - + minify: options?.docModelMinify ?? false, newlineConversion: extractorConfig.newlineKind, ensureFolderExists: true, testMode: extractorConfig.testMode, diff --git a/packages/api-extractor/src/cli/RunAction.ts b/packages/api-extractor/src/cli/RunAction.ts index 0736df743902..0e6a74f87287 100644 --- a/packages/api-extractor/src/cli/RunAction.ts +++ b/packages/api-extractor/src/cli/RunAction.ts @@ -27,6 +27,8 @@ export class RunAction extends CommandLineAction { private readonly _typescriptCompilerFolder: CommandLineStringParameter; + private readonly _minify: CommandLineFlagParameter; + public constructor(_parser: ApiExtractorCommandLine) { super({ actionName: 'run', @@ -57,6 +59,12 @@ export class RunAction extends CommandLineAction { description: 'Show additional informational messages in the output.', }); + this._minify = this.defineFlagParameter({ + parameterLongName: '--minify', + parameterShortName: '-m', + description: 'Minify the resulting doc model JSON, i.e. without any indentation or newlines.', + }); + this._diagnosticsParameter = this.defineFlagParameter({ parameterLongName: '--diagnostics', description: @@ -136,6 +144,7 @@ export class RunAction extends CommandLineAction { const extractorResult: ExtractorResult = Extractor.invoke(extractorConfig, { localBuild: this._localParameter.value, + docModelMinify: this._minify.value, showVerboseMessages: this._verboseParameter.value, showDiagnostics: this._diagnosticsParameter.value, typescriptCompilerFolder, diff --git a/packages/brokers/package.json b/packages/brokers/package.json index bd2f1ea10bea..f8e77975f03d 100644 --- a/packages/brokers/package.json +++ b/packages/brokers/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/brokers/*'", "release": "cliff-jumper" diff --git a/packages/builders/package.json b/packages/builders/package.json index 8d348811769a..450f5d175cf9 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'", "release": "cliff-jumper" diff --git a/packages/collection/package.json b/packages/collection/package.json index 323b24e2c659..4ddbc01c6577 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'", "release": "cliff-jumper" diff --git a/packages/core/package.json b/packages/core/package.json index 831d96aad0e8..73772cb930a8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -9,7 +9,7 @@ "build:docs": "tsc -p tsconfig.docs.json", "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/core/*'", "release": "cliff-jumper" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 3002ee95aca2..8dba6ab37e55 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -11,7 +11,7 @@ "fmt": "pnpm run format", "docs": "docgen -i './src/*.js' './src/**/*.js' -c ./docs/index.json -r ../../ -o ./docs/docs.json && pnpm run docs:new", "docs:test": "docgen -i './src/*.js' './src/**/*.js' -c ./docs/index.json -r ../../", - "docs:new": "api-extractor -d run --local", + "docs:new": "api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/discord.js/*'", "release": "cliff-jumper" diff --git a/packages/formatters/package.json b/packages/formatters/package.json index 8065e4ab7761..af09e627b2f2 100644 --- a/packages/formatters/package.json +++ b/packages/formatters/package.json @@ -9,7 +9,7 @@ "build:docs": "tsc -p tsconfig.docs.json", "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/formatters/*'", "release": "cliff-jumper" diff --git a/packages/next/package.json b/packages/next/package.json index 197d9068dc77..134b30bec113 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -9,7 +9,7 @@ "build:docs": "tsc -p tsconfig.docs.json", "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/next/*'", "release": "cliff-jumper" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index e470232b603c..7b97d59eff88 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy/*'", "release": "cliff-jumper" diff --git a/packages/rest/package.json b/packages/rest/package.json index 4317fedb7e1b..9e31be16c0e3 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'", "release": "cliff-jumper" diff --git a/packages/util/package.json b/packages/util/package.json index c2fccc73d43e..e04f931e4024 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/util/*'", "release": "cliff-jumper" diff --git a/packages/voice/package.json b/packages/voice/package.json index fcefd392ba16..4cad3058efbd 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -10,7 +10,7 @@ "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", "fmt": "pnpm run format", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run lint && pnpm run test && pnpm run build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/voice/*'", "release": "cliff-jumper" diff --git a/packages/ws/package.json b/packages/ws/package.json index 7334acff61a8..df1235209c1e 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -9,7 +9,7 @@ "build:docs": "tsc -p tsconfig.docs.json", "lint": "prettier --check . && cross-env TIMING=1 eslint --format=pretty src __tests__", "format": "prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src __tests__", - "docs": "pnpm run build:docs && api-extractor run --local", + "docs": "pnpm run build:docs && api-extractor run --local --minify", "prepack": "pnpm run build && pnpm run lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/ws/*'", "release": "cliff-jumper"