diff --git a/.gitignore b/.gitignore
index 672f8c23a9..8490a7d18b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,4 @@ test/resources/apikey.txt
# Release tarballs should not be checked in
firebase-admin-*.tgz
-docgen/html/
+docgen/markdown/
diff --git a/docgen/content-sources/node/HOME.md b/docgen/content-sources/node/HOME.md
deleted file mode 100644
index 4e253f7733..0000000000
--- a/docgen/content-sources/node/HOME.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Firebase Admin Node.js SDK Reference
-
-The Admin SDK is a set of server libraries that lets you interact with Firebase from privileged environments.
-You can install it via our [npm package](https://www.npmjs.com/package/firebase-admin).
-
-To get started using the Firebase Admin Node.js SDK, see
-[Add the Firebase Admin SDK to your server](https://firebase.google.com/docs/admin/setup).
-
-For source code, see the [Firebase Admin Node.js SDK GitHub repo](https://github.com/firebase/firebase-admin-node).
diff --git a/docgen/content-sources/node/toc.yaml b/docgen/content-sources/node/toc.yaml
deleted file mode 100644
index 487d3fcc39..0000000000
--- a/docgen/content-sources/node/toc.yaml
+++ /dev/null
@@ -1,293 +0,0 @@
-toc:
-- title: "admin"
- path: /docs/reference/admin/node/admin
- section:
- - title: "AppOptions"
- path: /docs/reference/admin/node/admin.AppOptions
- - title: "FirebaseArrayIndexError"
- path: /docs/reference/admin/node/admin.FirebaseArrayIndexError
- - title: "FirebaseError"
- path: /docs/reference/admin/node/admin.FirebaseError
- - title: "GoogleOAuthAccessToken"
- path: /docs/reference/admin/node/admin.GoogleOAuthAccessToken
- - title: "ServiceAccount"
- path: /docs/reference/admin/node/admin.ServiceAccount
-
-- title: "admin.app"
- path: /docs/reference/admin/node/admin.app
- section:
- - title: "App"
- path: /docs/reference/admin/node/admin.app.App-1
-
-- title: "admin.auth"
- path: /docs/reference/admin/node/admin.auth
- section:
- - title: "Auth"
- path: /docs/reference/admin/node/admin.auth.Auth-1
- - title: "ActionCodeSettings"
- path: /docs/reference/admin/node/admin.auth.ActionCodeSettings
- - title: "AuthProviderConfig"
- path: /docs/reference/admin/node/admin.auth.AuthProviderConfig
- - title: "AuthProviderConfigFilter"
- path: /docs/reference/admin/node/admin.auth.AuthProviderConfigFilter
- - title: "CreateMultiFactorInfoRequest"
- path: /docs/reference/admin/node/admin.auth.CreateMultiFactorInfoRequest
- - title: "CreatePhoneMultiFactorInfoRequest"
- path: /docs/reference/admin/node/admin.auth.CreatePhoneMultiFactorInfoRequest
- - title: "CreateRequest"
- path: /docs/reference/admin/node/admin.auth.CreateRequest
- - title: "EmailSignInProviderConfig"
- path: /docs/reference/admin/node/admin.auth.EmailSignInProviderConfig
- - title: "ListProviderConfigResults"
- path: /docs/reference/admin/node/admin.auth.ListProviderConfigResults
- - title: "ListTenantsResult"
- path: /docs/reference/admin/node/admin.auth.ListTenantsResult
- - title: "MultiFactorConfig"
- path: /docs/reference/admin/node/admin.auth.MultiFactorConfig
- - title: "MultiFactorCreateSettings"
- path: /docs/reference/admin/node/admin.auth.MultiFactorCreateSettings
- - title: "MultiFactorInfo"
- path: /docs/reference/admin/node/admin.auth.MultiFactorInfo
- - title: "MultiFactorSettings"
- path: /docs/reference/admin/node/admin.auth.MultiFactorSettings
- - title: "MultiFactorUpdateSettings"
- path: /docs/reference/admin/node/admin.auth.MultiFactorUpdateSettings
- - title: "OIDCAuthProviderConfig"
- path: /docs/reference/admin/node/admin.auth.OIDCAuthProviderConfig
- - title: "OIDCUpdateAuthProviderRequest"
- path: /docs/reference/admin/node/admin.auth.OIDCUpdateAuthProviderRequest
- - title: "PhoneMultiFactorInfo"
- path: /docs/reference/admin/node/admin.auth.PhoneMultiFactorInfo
- - title: "SAMLAuthProviderConfig"
- path: /docs/reference/admin/node/admin.auth.SAMLAuthProviderConfig
- - title: "SAMLUpdateAuthProviderRequest"
- path: /docs/reference/admin/node/admin.auth.SAMLUpdateAuthProviderRequest
- - title: "Tenant"
- path: /docs/reference/admin/node/admin.auth.Tenant
- - title: "TenantAwareAuth"
- path: /docs/reference/admin/node/admin.auth.TenantAwareAuth
- - title: "TenantManager"
- path: /docs/reference/admin/node/admin.auth.TenantManager
- - title: "UpdateMultiFactorInfoRequest"
- path: /docs/reference/admin/node/admin.auth.UpdateMultiFactorInfoRequest
- - title: "UpdatePhoneMultiFactorInfoRequest"
- path: /docs/reference/admin/node/admin.auth.UpdatePhoneMultiFactorInfoRequest
- - title: "UpdateRequest"
- path: /docs/reference/admin/node/admin.auth.UpdateRequest
- - title: "UpdateTenantRequest"
- path: /docs/reference/admin/node/admin.auth.UpdateTenantRequest
- - title: "UserImportOptions"
- path: /docs/reference/admin/node/admin.auth.UserImportOptions
- - title: "UserImportRecord"
- path: /docs/reference/admin/node/admin.auth.UserImportRecord
- - title: "UserImportResult"
- path: /docs/reference/admin/node/admin.auth.UserImportResult
- - title: "DecodedIdToken"
- path: /docs/reference/admin/node/admin.auth.DecodedIdToken
- - title: "UserInfo"
- path: /docs/reference/admin/node/admin.auth.UserInfo
- - title: "UserMetadata"
- path: /docs/reference/admin/node/admin.auth.UserMetadata
- - title: "UserMetadataRequest"
- path: /docs/reference/admin/node/admin.auth.UserMetadataRequest
- - title: "UserProviderRequest"
- path: /docs/reference/admin/node/admin.auth.UserProviderRequest
- - title: "UserRecord"
- path: /docs/reference/admin/node/admin.auth.UserRecord
- - title: "UserProvider"
- path: /docs/reference/admin/node/admin.auth.UserProvider
- - title: "SessionCookieOptions"
- path: /docs/reference/admin/node/admin.auth.SessionCookieOptions
- - title: "BaseAuth"
- path: /docs/reference/admin/node/admin.auth.BaseAuth
- - title: "ListUsersResult"
- path: /docs/reference/admin/node/admin.auth.ListUsersResult
- - title: "GetUsersResult"
- path: /docs/reference/admin/node/admin.auth.GetUsersResult
- - title: "DeleteUsersResult"
- path: /docs/reference/admin/node/admin.auth.DeleteUsersResult
- - title: "UidIdentifier"
- path: /docs/reference/admin/node/admin.auth.UidIdentifier
- - title: "EmailIdentifier"
- path: /docs/reference/admin/node/admin.auth.EmailIdentifier
- - title: "PhoneIdentifier"
- path: /docs/reference/admin/node/admin.auth.PhoneIdentifier
- - title: "ProviderIdentifier"
- path: /docs/reference/admin/node/admin.auth.ProviderIdentifier
-
-- title: "admin.credential"
- path: /docs/reference/admin/node/admin.credential
- section:
- - title: "Credential"
- path: /docs/reference/admin/node/admin.credential.Credential-1
-
-- title: "admin.database"
- path: /docs/reference/admin/node/admin.database
- section:
- - title: "Database"
- path: /docs/reference/admin/node/admin.database.Database-1
-
-- title: "admin.firestore"
- path: /docs/reference/admin/node/admin.firestore
-
-- title: "admin.instanceId"
- path: /docs/reference/admin/node/admin.instanceId
- section:
- - title: "InstanceId"
- path: /docs/reference/admin/node/admin.instanceId.InstanceId-1
-
-- title: "admin.machineLearning"
- path: /docs/reference/admin/node/admin.machineLearning
- section:
- - title: "ListModelsOptions"
- path: /docs/reference/admin/node/admin.machineLearning.ListModelsOptions
- - title: "ListModelsResult"
- path: /docs/reference/admin/node/admin.machineLearning.ListModelsResult
- - title: "MachineLearning"
- path: /docs/reference/admin/node/admin.machineLearning.MachineLearning-1
- - title: "Model"
- path: /docs/reference/admin/node/admin.machineLearning.Model
- - title: "ModelOptionsBase"
- path: /docs/reference/admin/node/admin.machineLearning.ModelOptionsBase
- - title: "GcsTfliteModelOptions"
- path: /docs/reference/admin/node/admin.machineLearning.GcsTfliteModelOptions
- - title: "AutoMLTfliteModelOptions"
- path: /docs/reference/admin/node/admin.machineLearning.AutoMLTfliteModelOptions
- - title: "TFLiteModel"
- path: /docs/reference/admin/node/admin.machineLearning.TFLiteModel
-
-- title: "admin.messaging"
- path: /docs/reference/admin/node/admin.messaging
- section:
- - title: "BaseMessage"
- path: /docs/reference/admin/node/admin.messaging.BaseMessage
- - title: "TopicMessage"
- path: /docs/reference/admin/node/admin.messaging.TopicMessage
- - title: "TokenMessage"
- path: /docs/reference/admin/node/admin.messaging.TokenMessage
- - title: "ConditionMessage"
- path: /docs/reference/admin/node/admin.messaging.ConditionMessage
- - title: "AndroidConfig"
- path: /docs/reference/admin/node/admin.messaging.AndroidConfig
- - title: "AndroidFcmOptions"
- path: /docs/reference/admin/node/admin.messaging.AndroidFcmOptions
- - title: "AndroidNotification"
- path: /docs/reference/admin/node/admin.messaging.AndroidNotification
- - title: "FcmOptions"
- path: /docs/reference/admin/node/admin.messaging.FcmOptions
- - title: "LightSettings"
- path: /docs/reference/admin/node/admin.messaging.LightSettings
- - title: "Messaging"
- path: /docs/reference/admin/node/admin.messaging.Messaging-1
- - title: "MessagingConditionResponse"
- path: /docs/reference/admin/node/admin.messaging.MessagingConditionResponse
- - title: "MessagingDeviceGroupResponse"
- path: /docs/reference/admin/node/admin.messaging.MessagingDeviceGroupResponse
- - title: "MessagingDeviceResult"
- path: /docs/reference/admin/node/admin.messaging.MessagingDeviceResult
- - title: "MessagingDevicesResponse"
- path: /docs/reference/admin/node/admin.messaging.MessagingDevicesResponse
- - title: "MessagingOptions"
- path: /docs/reference/admin/node/admin.messaging.MessagingOptions
- - title: "MessagingPayload"
- path: /docs/reference/admin/node/admin.messaging.MessagingPayload
- - title: "MessagingTopicResponse"
- path: /docs/reference/admin/node/admin.messaging.MessagingTopicResponse
- - title: "MessagingTopicManagementResponse"
- path: /docs/reference/admin/node/admin.messaging.MessagingTopicManagementResponse
- - title: "NotificationMessagePayload"
- path: /docs/reference/admin/node/admin.messaging.NotificationMessagePayload
- - title: "MulticastMessage"
- path: /docs/reference/admin/node/admin.messaging.MulticastMessage
- - title: "WebpushNotification"
- path: /docs/reference/admin/node/admin.messaging.WebpushNotification
- - title: "WebpushFcmOptions"
- path: /docs/reference/admin/node/admin.messaging.WebpushFcmOptions
- - title: "DataMessagePayload"
- path: /docs/reference/admin/node/admin.messaging.DataMessagePayload
- - title: "BatchResponse"
- path: /docs/reference/admin/node/admin.messaging.BatchResponse
- - title: "SendResponse"
- path: /docs/reference/admin/node/admin.messaging.SendResponse
- - title: "ApnsConfig"
- path: /docs/reference/admin/node/admin.messaging.ApnsConfig
- - title: "ApnsFcmOptions"
- path: /docs/reference/admin/node/admin.messaging.ApnsFcmOptions
- - title: "ApnsPayload"
- path: /docs/reference/admin/node/admin.messaging.ApnsPayload
- - title: "Aps"
- path: /docs/reference/admin/node/admin.messaging.Aps
- - title: "ApsAlert"
- path: /docs/reference/admin/node/admin.messaging.ApsAlert
- - title: "CriticalSound"
- path: /docs/reference/admin/node/admin.messaging.CriticalSound
- - title: "Notification"
- path: /docs/reference/admin/node/admin.messaging.Notification
- - title: "WebpushConfig"
- path: /docs/reference/admin/node/admin.messaging.WebpushConfig
-
-- title: "admin.projectManagement"
- path: /docs/reference/admin/node/admin.projectManagement
- section:
- - title: "AndroidApp"
- path: /docs/reference/admin/node/admin.projectManagement.AndroidApp
- - title: "AndroidAppMetadata"
- path: /docs/reference/admin/node/admin.projectManagement.AndroidAppMetadata
- - title: "AppMetadata"
- path: /docs/reference/admin/node/admin.projectManagement.AppMetadata
- - title: "AppPlatform"
- path: /docs/reference/admin/node/admin.projectManagement.AppPlatform
- - title: "IosApp"
- path: /docs/reference/admin/node/admin.projectManagement.IosApp
- - title: "IosAppMetadata"
- path: /docs/reference/admin/node/admin.projectManagement.IosAppMetadata
- - title: "ProjectManagement"
- path: /docs/reference/admin/node/admin.projectManagement.ProjectManagement-1
- - title: "ShaCertificate"
- path: /docs/reference/admin/node/admin.projectManagement.ShaCertificate
-
-- title: "admin.securityRules"
- path: /docs/reference/admin/node/admin.securityRules
- section:
- - title: "RulesFile"
- path: /docs/reference/admin/node/admin.securityRules.RulesFile
- - title: "Ruleset"
- path: /docs/reference/admin/node/admin.securityRules.Ruleset
- - title: "RulesetMetadata"
- path: /docs/reference/admin/node/admin.securityRules.RulesetMetadata
- - title: "RulesetMetadataList"
- path: /docs/reference/admin/node/admin.securityRules.RulesetMetadataList
- - title: "SecurityRules"
- path: /docs/reference/admin/node/admin.securityRules.SecurityRules-1
-
-- title: "admin.storage"
- path: /docs/reference/admin/node/admin.storage
- section:
- - title: "Storage"
- path: /docs/reference/admin/node/admin.storage.Storage-1
-
-- title: "admin.remoteConfig"
- path: /docs/reference/admin/node/admin.remoteConfig
- section:
- - title: "RemoteConfig"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfig-1
- - title: "RemoteConfigTemplate"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfigTemplate
- - title: "RemoteConfigParameter"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfigParameter
- - title: "RemoteConfigParameterGroup"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfigParameterGroup
- - title: "RemoteConfigCondition"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfigCondition
- - title: "ExplicitParameterValue"
- path: /docs/reference/admin/node/admin.remoteConfig.ExplicitParameterValue
- - title: "InAppDefaultValue"
- path: /docs/reference/admin/node/admin.remoteConfig.InAppDefaultValue
- - title: "Version"
- path: /docs/reference/admin/node/admin.remoteConfig.Version
- - title: "ListVersionsResult"
- path: /docs/reference/admin/node/admin.remoteConfig.ListVersionsResult
- - title: "ListVersionsOptions"
- path: /docs/reference/admin/node/admin.remoteConfig.ListVersionsOptions
- - title: "RemoteConfigUser"
- path: /docs/reference/admin/node/admin.remoteConfig.RemoteConfigUser
diff --git a/docgen/extras/firebase-admin.database.md b/docgen/extras/firebase-admin.database.md
new file mode 100644
index 0000000000..0f33392cf0
--- /dev/null
+++ b/docgen/extras/firebase-admin.database.md
@@ -0,0 +1,12 @@
+## External API Re-exports
+
+The following externally defined APIs are re-exported from this module entry point for convenience.
+
+| Symbol | Description |
+| --- | --- |
+| [DataSnapshot](https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot) | `DataSnapshot` type from the `@firebase/database` package. |
+| [EventType](https://firebase.google.com/docs/reference/js/firebase.database#eventtype) | `EventType` type from the `@firebase/database` package. |
+| [OnDisconnect](https://firebase.google.com/docs/reference/js/firebase.database.OnDisconnect) | `OnDisconnect` type from the `@firebase/database` package. |
+| [Query](https://firebase.google.com/docs/reference/js/firebase.database.Query) | `Query` type from the `@firebase/database` package. |
+| [Reference](https://firebase.google.com/docs/reference/js/firebase.database.Reference) | `Reference` type from the `@firebase/database` package. |
+| [ThenableReference](https://firebase.google.com/docs/reference/js/firebase.database.ThenableReference) | `ThenableReference` type from the `@firebase/database` package. |
diff --git a/docgen/extras/firebase-admin.firestore.md b/docgen/extras/firebase-admin.firestore.md
new file mode 100644
index 0000000000..9281e20c2b
--- /dev/null
+++ b/docgen/extras/firebase-admin.firestore.md
@@ -0,0 +1,27 @@
+## External API Re-exports
+
+The following externally defined APIs are re-exported from this module entry point for convenience.
+
+| Symbol | Description |
+| --- | --- |
+| [BulkWriter](https://googleapis.dev/nodejs/firestore/latest/BulkWriter.html) | `BulkWriter` type from the `@google-cloud/firestore` package. |
+| [BulkWriterOptions](https://googleapis.dev/nodejs/firestore/latest/global.html#BulkWriterOptions) | `BulkWriterOptions` type from the `@google-cloud/firestore` package. |
+| [CollectionGroup](https://googleapis.dev/nodejs/firestore/latest/CollectionGroup.html) | `CollectionGroup` type from the `@google-cloud/firestore` package. |
+| [CollectionReference](https://googleapis.dev/nodejs/firestore/latest/CollectionReference.html) | `CollectionReference` type from the `@google-cloud/firestore` package. |
+| [DocumentData](https://googleapis.dev/nodejs/firestore/latest/global.html#DocumentData) | `DocumentData` type from the `@google-cloud/firestore` package. |
+| [DocumentReference](https://googleapis.dev/nodejs/firestore/latest/DocumentReference.html) | `DocumentReference` type from the `@google-cloud/firestore` package. |
+| [DocumentSnapshot](https://googleapis.dev/nodejs/firestore/latest/DocumentSnapshot.html) | `DocumentSnapshot` type from the `@google-cloud/firestore` package. |
+| [FieldPath](https://googleapis.dev/nodejs/firestore/latest/FieldPath.html) | `FieldPath` type from the `@google-cloud/firestore` package. |
+| [FieldValue](https://googleapis.dev/nodejs/firestore/latest/FieldValue.html) | `FieldValue` type from the `@google-cloud/firestore` package. |
+| [Firestore](https://googleapis.dev/nodejs/firestore/latest/Firestore.html) | `Firestore` type from the `@google-cloud/firestore` package. |
+| [FirestoreDataConverter](https://googleapis.dev/nodejs/firestore/latest/global.html#FirestoreDataConverter) | `FirestoreDataConverter` type from the `@google-cloud/firestore` package. |
+| [GeoPoint](https://googleapis.dev/nodejs/firestore/latest/GeoPoint.html) | `GeoPoint` type from the `@google-cloud/firestore` package. |
+| [Query](https://googleapis.dev/nodejs/firestore/latest/Query.html) | `Query` type from the `@google-cloud/firestore` package. |
+| [QueryDocumentSnapshot](https://googleapis.dev/nodejs/firestore/latest/QueryDocumentSnapshot.html) | `QueryDocumentSnapshot` type from the `@google-cloud/firestore` package. |
+| [QueryPartition](https://googleapis.dev/nodejs/firestore/latest/QueryPartition.html) | `QueryPartition` type from the `@google-cloud/firestore` package. |
+| [QuerySnapshot](https://googleapis.dev/nodejs/firestore/latest/QuerySnapshot.html) | `QuerySnapshot` type from the `@google-cloud/firestore` package. |
+| [Timestamp](https://googleapis.dev/nodejs/firestore/latest/Timestamp.html) | `Timestamp` type from the `@google-cloud/firestore` package. |
+| [Transaction](https://googleapis.dev/nodejs/firestore/latest/Transaction.html) | `Transaction` type from the `@google-cloud/firestore` package. |
+| [WriteBatch](https://googleapis.dev/nodejs/firestore/latest/WriteBatch.html) | `WriteBatch` type from the `@google-cloud/firestore` package. |
+| [WriteResult](https://googleapis.dev/nodejs/firestore/latest/WriteResult.html) | `WriteResult` type from the `@google-cloud/firestore` package. |
+| [setLogFunction](https://googleapis.dev/nodejs/firestore/latest/global.html#setLogFunction) | `setLogFunction` function from the `@google-cloud/firestore` package. |
diff --git a/docgen/generate-docs.js b/docgen/generate-docs.js
deleted file mode 100644
index af35956e57..0000000000
--- a/docgen/generate-docs.js
+++ /dev/null
@@ -1,466 +0,0 @@
-/**
- * @license
- * Copyright 2019 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const { exec } = require('child-process-promise');
-const fs = require('mz/fs');
-const jsdom = require('jsdom');
-const path = require('path');
-const readline = require('readline');
-const yargs = require('yargs');
-const yaml = require('js-yaml');
-
-const repoPath = path.resolve(`${__dirname}/..`);
-
-const defaultSources = [
- `${repoPath}/lib/firebase-namespace.d.ts`,
- `${repoPath}/lib/firebase-namespace-api.d.ts`,
- `${repoPath}/lib/core.d.ts`,
- `${repoPath}/lib/**/*.d.ts`,
-];
-
-// Command-line options.
-const { source: sourceFile } = yargs
- .option('source', {
- default: defaultSources.join(' '),
- describe: 'Typescript source file(s)',
- type: 'string'
- })
- .version(false)
- .help().argv;
-
-const docPath = path.resolve(`${__dirname}/html/node`);
-const contentPath = path.resolve(`${__dirname}/content-sources/node`);
-const tempHomePath = path.resolve(`${contentPath}/HOME_TEMP.md`);
-const devsitePath = `/docs/reference/admin/node/`;
-
-const firestoreExcludes = [
- 'v1', 'v1beta1', 'setLogFunction','DocumentData',
- 'BulkWriterOptions', 'DocumentChangeType', 'FirestoreDataConverter',
- 'GrpcStatus', 'Precondition', 'ReadOptions', 'UpdateData', 'Settings',
-];
-const firestoreHtmlPath = `${docPath}/admin.firestore.html`;
-const firestoreHeader = `
- Type aliases
-
-
Following types are defined in the @google-cloud/firestore package
- and re-exported from this namespace for convenience.
-
- `;
-const firestoreFooter = '\n
\n\n';
-
-const databaseExcludes = ['enableLogging'];
-const databaseHtmlPath = `${docPath}/admin.database.html`;
-const databaseHeader = `
- Type aliases
-
-
Following types are defined in the @firebase/database package
- and re-exported from this namespace for convenience.
-
- `;
-const databaseFooter = '\n
\n\n';
-
-/**
- * Strips path prefix and returns only filename.
- * @param {string} path
- */
-function stripPath(path) {
- const parts = path.split('/');
- return parts[parts.length - 1];
-}
-
-/**
- * Runs Typedoc command.
- *
- * Additional config options come from ./typedoc.js
- */
-function runTypedoc() {
- const command = `${repoPath}/node_modules/.bin/typedoc ${sourceFile} \
- --out ${docPath} \
- --readme ${tempHomePath} \
- --options ${__dirname}/typedoc.js \
- --theme ${__dirname}/theme`;
-
- console.log('Running command:\n', command);
- return exec(command);
-}
-
-/**
- * Moves files from subdir to root.
- * @param {string} subdir Subdir to move files out of.
- */
-function moveFilesToRoot(subdir) {
- return exec(`mv ${docPath}/${subdir}/* ${docPath}`)
- .then(() => {
- exec(`rmdir ${docPath}/${subdir}`);
- })
- .catch(e => console.error(e));
-}
-
-/**
- * Reformat links to match flat structure.
- * @param {string} file File to fix links in.
- */
-function fixLinks(file) {
- return fs.readFile(file, 'utf8').then(data => {
- const flattenedLinks = data
- .replace(/\.\.\//g, '')
- .replace(/(modules|interfaces|classes|enums)\//g, '');
- let caseFixedLinks = flattenedLinks;
- for (const lower in lowerToUpperLookup) {
- const re = new RegExp('\\b' + lower, 'g');
- caseFixedLinks = caseFixedLinks.replace(re, lowerToUpperLookup[lower]);
- }
- return fs.writeFile(file, caseFixedLinks);
- });
-}
-
-let tocText = '';
-
-/**
- * Generates temporary markdown file that will be sourced by Typedoc to
- * create index.html.
- *
- * @param {string} tocRaw
- * @param {string} homeRaw
- */
-function generateTempHomeMdFile(tocRaw, homeRaw) {
- const { toc } = yaml.safeLoad(tocRaw);
- let tocPageLines = [homeRaw, '# API Reference'];
- toc.forEach(group => {
- tocPageLines.push(`\n## [${group.title}](${stripPath(group.path)}.html)`);
- const section = group.section || [];
- section.forEach(item => {
- tocPageLines.push(`- [${item.title}](${stripPath(item.path)}.html)`);
- });
- });
- return fs.writeFile(tempHomePath, tocPageLines.join('\n'));
-}
-
-/**
- * Mapping between lowercase file name and correctly cased name.
- * Used to update links when filenames are capitalized.
- */
-const lowerToUpperLookup = {};
-
-/**
- * Checks to see if any files listed in toc.yaml were not generated.
- * If files exist, fixes filename case to match toc.yaml version.
- */
-function checkForMissingFilesAndFixFilenameCase() {
- // Get filenames from toc.yaml.
- const filenames = tocText
- .split('\n')
- .filter(line => line.includes('path:'))
- .map(line => line.split(devsitePath)[1]);
- // Logs warning to console if a file from TOC is not found.
- const fileCheckPromises = filenames.map(filename => {
- // Warns if file does not exist, fixes filename case if it does.
- // Preferred filename for devsite should be capitalized and taken from
- // toc.yaml.
- const tocFilePath = `${docPath}/${filename}.html`;
- // Generated filename from Typedoc will be lowercase and won't have the admin prefix.
- const generatedFilePath = `${docPath}/${filename.toLowerCase().replace('admin.', '')}.html`;
- return fs.exists(generatedFilePath).then(exists => {
- if (exists) {
- // Store in a lookup table for link fixing.
- lowerToUpperLookup[
- `${filename.toLowerCase().replace('admin.', '')}.html`
- ] = `${filename}.html`;
- return fs.rename(generatedFilePath, tocFilePath);
- } else {
- console.warn(
- `Missing file: ${filename}.html requested ` +
- `in toc.yaml but not found in ${docPath}`
- );
- }
- });
- });
-
- return Promise.all(fileCheckPromises).then(() => filenames);
-}
-
-/**
- * Gets a list of html files in generated dir and checks if any are not
- * found in toc.yaml.
- * Option to remove the file if not found (used for node docs).
- *
- * @param {Array} filenamesFromToc Filenames pulled from toc.yaml
- * @param {boolean} shouldRemove Should just remove the file
- */
-function checkForUnlistedFiles(filenamesFromToc, shouldRemove) {
- return fs.readdir(docPath).then(files => {
- const htmlFiles = files
- .filter(filename => filename.slice(-4) === 'html')
- .map(filename => filename.slice(0, -5));
- const removePromises = [];
- htmlFiles.forEach(filename => {
- if (
- !filenamesFromToc.includes(filename) &&
- filename !== 'index' &&
- filename !== 'globals'
- ) {
- if (shouldRemove) {
- console.log(
- `REMOVING ${docPath}/${filename}.html - not listed in toc.yaml.`
- );
- removePromises.push(fs.unlink(`${docPath}/${filename}.html`));
- } else {
- // This is just a warning, it doesn't need to finish before
- // the process continues.
- console.warn(
- `Unlisted file: ${filename} generated ` +
- `but not listed in toc.yaml.`
- );
- }
- }
- });
- if (shouldRemove) {
- return Promise.all(removePromises).then(() =>
- htmlFiles.filter(filename => filenamesFromToc.includes(filename))
- );
- } else {
- return htmlFiles;
- }
- });
-}
-
-/**
- * Writes a _toc_autogenerated.yaml as a record of all files that were
- * autogenerated. Helpful to tech writers.
- *
- * @param {Array} htmlFiles List of html files found in generated dir.
- */
-function writeGeneratedFileList(htmlFiles) {
- const fileList = htmlFiles.map(filename => {
- return {
- title: filename,
- path: `${devsitePath}${filename}`
- };
- });
- const generatedTocYAML = yaml.safeDump({ toc: fileList });
- return fs
- .writeFile(`${docPath}/_toc_autogenerated.yaml`, generatedTocYAML)
- .then(() => htmlFiles);
-}
-
-/**
- * Fix all links in generated files to other generated files to point to top
- * level of generated docs dir.
- *
- * @param {Array} htmlFiles List of html files found in generated dir.
- */
-function fixAllLinks(htmlFiles) {
- const writePromises = [];
- htmlFiles.forEach(file => {
- // Update links in each html file to match flattened file structure.
- writePromises.push(fixLinks(`${docPath}/${file}.html`));
- });
- return Promise.all(writePromises);
-}
-
-/**
- * Updates the auto-generated Firestore API references page, by appending
- * the specified HTML content block.
- *
- * @param {string} htmlPath Path of the HTML file to update.
- * @param {string} contentBlock The HTML content block to be added to the Firestore docs.
- */
-function updateHtml(htmlPath, contentBlock) {
- const dom = new jsdom.JSDOM(fs.readFileSync(htmlPath));
- const contentNode = dom.window.document.body.querySelector('.col-12');
-
- // Recent versions of Typedoc generates an additional index section and a variables
- // section for namespaces with re-exports. We iterate through these nodes and remove
- // them from the output.
- const sections = [];
- contentNode.childNodes.forEach((child) => {
- if (child.nodeName === 'SECTION') {
- sections.push(child);
- }
- });
- contentNode.removeChild(sections[1]);
- contentNode.removeChild(sections[2]);
-
- const newSection = new jsdom.JSDOM(contentBlock);
- contentNode.appendChild(newSection.window.document.body.firstChild);
- fs.writeFileSync(htmlPath, dom.window.document.documentElement.outerHTML);
-}
-
-/**
- * Adds Firestore type aliases to the auto-generated API docs. These are the
- * types that are imported from the @google-cloud/firestore package, and
- * then re-exported from the admin.firestore namespace. Typedoc currently
- * does not handle these correctly, so we need this solution instead.
- */
-function addFirestoreTypeAliases() {
- return new Promise((resolve, reject) => {
- const fileStream = fs.createReadStream(`${repoPath}/lib/firestore/index.d.ts`);
- fileStream.on('error', (err) => {
- reject(err);
- });
- const lineReader = readline.createInterface({
- input: fileStream,
- });
-
- let contentBlock = firestoreHeader;
- lineReader.on('line', (line) => {
- line = line.trim();
- if (line.startsWith('export import') && line.indexOf('_firestore.') >= 0) {
- const typeName = line.split(' ')[2];
- if (firestoreExcludes.indexOf(typeName) === -1) {
- contentBlock += `
-
- ${typeName}
- `;
- }
- }
- });
-
- lineReader.on('close', () => {
- try {
- contentBlock += firestoreFooter;
- updateHtml(firestoreHtmlPath, contentBlock);
- resolve();
- } catch (err) {
- reject(err);
- }
- });
- });
-}
-
-/**
- * Adds RTDB type aliases to the auto-generated API docs. These are the
- * types that are imported from the @firebase/database package, and
- * then re-exported from the admin.database namespace. Typedoc currently
- * does not handle these correctly, so we need this solution instead.
- */
-function addDatabaseTypeAliases() {
- return new Promise((resolve, reject) => {
- const fileStream = fs.createReadStream(`${repoPath}/lib/database/index.d.ts`);
- fileStream.on('error', (err) => {
- reject(err);
- });
- const lineReader = readline.createInterface({
- input: fileStream,
- });
-
- let contentBlock = databaseHeader;
- lineReader.on('line', (line) => {
- line = line.trim();
- if (line.startsWith('export import') && line.indexOf('rtdb.') >= 0) {
- const typeName = line.split(' ')[2];
- if (databaseExcludes.indexOf(typeName) === -1) {
- contentBlock += `
-
- ${typeName}
- `;
- }
- }
- });
-
- lineReader.on('close', () => {
- try {
- contentBlock += databaseFooter;
- updateHtml(databaseHtmlPath, contentBlock);
- resolve();
- } catch (err) {
- reject(err);
- }
- });
- });
-}
-
-/**
- * Main document generation process.
- *
- * Steps for generating documentation:
- * 1) Create temporary md file as source of homepage.
- * 2) Run Typedoc, sourcing index.d.ts for API content and temporary md file
- * for index.html content.
- * 3) Write table of contents file.
- * 4) Flatten file structure by moving all items up to root dir and fixing
- * links as needed.
- * 5) Check for mismatches between TOC list and generated file list.
- */
-Promise.all([
- fs.readFile(`${contentPath}/toc.yaml`, 'utf8'),
- fs.readFile(`${contentPath}/HOME.md`, 'utf8')
-])
- // Read TOC and homepage text and assemble a homepage markdown file.
- // This file will be sourced by Typedoc to generate index.html.
- .then(([tocRaw, homeRaw]) => {
- tocText = tocRaw;
- return generateTempHomeMdFile(tocRaw, homeRaw);
- })
- // Run main Typedoc process (uses index.d.ts and generated temp file above).
- .then(runTypedoc)
- .then(output => {
- // Typedoc output.
- console.log(output.stdout);
- // Clean up temp home markdown file. (Nothing needs to wait for this.)
- return fs.unlink(tempHomePath);
- })
- // Write out TOC file. Do this after Typedoc step to prevent Typedoc
- // erroring when it finds an unexpected file in the target dir.
- .then(() => fs.writeFile(`${docPath}/_toc.yaml`, tocText))
- // Flatten file structure. These categories don't matter to us and it makes
- // it easier to manage the docs directory.
- .then(() => {
- return Promise.all([
- // moveFilesToRoot('classes'),
- moveFilesToRoot('modules'),
- moveFilesToRoot('interfaces'),
- moveFilesToRoot('enums'),
- ]);
- })
- // Rename the globals file to be the top-level admin doc.
- .then(() => fs.rename(`${docPath}/globals.html`, `${docPath}/admin.html`))
- // Check for files listed in TOC that are missing and warn if so.
- // Not blocking.
- .then(checkForMissingFilesAndFixFilenameCase)
- // Check for files that exist but aren't listed in the TOC and warn.
- // (If API is node, actually remove the file.)
- // Removal is blocking, warnings aren't.
- .then(filenamesFromToc =>
- checkForUnlistedFiles(filenamesFromToc, true)
- )
- // Write a _toc_autogenerated.yaml to record what files were created.
- .then(htmlFiles => writeGeneratedFileList(htmlFiles))
- // Correct the links in all the generated html files now that files have
- // all been moved to top level.
- .then(fixAllLinks)
- // Add local variable include line to index.html (to access current SDK
- // version number).
- .then(addFirestoreTypeAliases)
- .then(addDatabaseTypeAliases)
- .then(() => {
- fs.readFile(`${docPath}/index.html`, 'utf8').then(data => {
- // String to include devsite local variables.
- const localVariablesIncludeString = `{% include "docs/web/_local_variables.html" %}\n`;
- return fs.writeFile(
- `${docPath}/index.html`,
- localVariablesIncludeString + data
- );
- });
- })
- .catch(e => {
- if (e.stdout) {
- console.error(e.stdout);
- } else {
- console.error(e);
- }
- });
diff --git a/docgen/post-process.js b/docgen/post-process.js
new file mode 100644
index 0000000000..8c66cf5772
--- /dev/null
+++ b/docgen/post-process.js
@@ -0,0 +1,84 @@
+/**
+ * @license
+ * Copyright 2021 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const fs = require('mz/fs');
+const path = require('path');
+const readline = require('readline');
+
+async function main() {
+ const extras = await getExtraFiles();
+ for (const source of extras) {
+ await applyExtraContentFrom(source);
+ }
+}
+
+async function getExtraFiles() {
+ const extrasPath = path.join(__dirname, 'extras');
+ const files = await fs.readdir(extrasPath);
+ return files
+ .filter((name) => name.endsWith('.md'))
+ .map((name) => path.join(__dirname, 'extras', name));
+}
+
+async function applyExtraContentFrom(source) {
+ const target = path.join(__dirname, 'markdown', path.basename(source));
+ if (!await fs.exists(target)) {
+ console.log(`Target path not found: ${target}`);
+ return;
+ }
+
+ const extra = await readExtraContentFrom(source);
+ await writeExtraContentTo(target, extra);
+}
+
+async function writeExtraContentTo(target, extra) {
+ const output = [];
+ const reader = readline.createInterface({
+ input: fs.createReadStream(target),
+ });
+ for await (const line of reader) {
+ output.push(line);
+ if (line.startsWith('{% block body %}')) {
+ output.push(...extra);
+ }
+ }
+
+ const outputBuffer = Buffer.from(output.join('\r\n'));
+ console.log(`Writing extra content to ${target}`);
+ await fs.writeFile(target, outputBuffer);
+}
+
+async function readExtraContentFrom(source) {
+ const reader = readline.createInterface({
+ input: fs.createReadStream(source),
+ });
+ const content = [''];
+ for await (const line of reader) {
+ content.push(line);
+ }
+
+ return content;
+}
+
+(async () => {
+ try {
+ await main();
+ } catch (err) {
+ console.log(err);
+ process.exit(1);
+ }
+})();
diff --git a/docgen/theme/assets/css/firebase.css b/docgen/theme/assets/css/firebase.css
deleted file mode 100644
index 86c5928201..0000000000
--- a/docgen/theme/assets/css/firebase.css
+++ /dev/null
@@ -1,40 +0,0 @@
-.firebase-docs .project-name {
- color: #333;
- display: inline-block;
- font-size: 20px;
- font-weight: normal;
- margin-left: 130px;
-}
-
-.firebase-docs aside.tsd-sources {
- padding: 8px;
-}
-
-.firebase-docs .tsd-panel li {
- margin: 0;
-}
-
-.firebase-docs aside.tsd-sources:before {
- content: unset;
-}
-
-.firebase-docs dl.tsd-comment-tags dt.tag-example {
- float: none;
- text-transform: capitalize;
- color: #000;
- font-size: 1.1em;
- padding: 5px;
- border: none;
-}
-
-.firebase-docs dl.tsd-comment-tags dd.tag-body-example {
- padding-left: 0;
-}
-
-.firebase-docs .tsd-breadcrumb .breadcrumb-name a {
- color: #039be5;
-}
-
-.firebase-docs .tsd-breadcrumb .model-name {
- color: #333;
-}
\ No newline at end of file
diff --git a/docgen/theme/assets/css/main.css b/docgen/theme/assets/css/main.css
deleted file mode 100644
index 12f3d05d96..0000000000
--- a/docgen/theme/assets/css/main.css
+++ /dev/null
@@ -1,552 +0,0 @@
-/*! normalize.css v1.1.3 | MIT License | git.io/normalize */
-/* ========================================================================== HTML5 display definitions ========================================================================== */
-/** Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */
-article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
-
-/** Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */
-audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
-
-/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
-audio:not([controls]) { display: none; height: 0; }
-
-/** Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. Known issue: no IE 6 support. */
-[hidden] { display: none; }
-
-/* ========================================================================== Base ========================================================================== */
-/** 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using `em` units. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
-html { font-size: 100%; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ font-family: sans-serif; }
-
-/** Address `font-family` inconsistency between `textarea` and other form elements. */
-button, input, select, textarea { font-family: sans-serif; }
-
-/** Address margins handled incorrectly in IE 6/7. */
-body { margin: 0; }
-
-/* ========================================================================== Links ========================================================================== */
-/** Address `outline` inconsistency between Chrome and other browsers. */
-a:focus { outline: thin dotted; }
-a:active, a:hover { outline: 0; }
-
-/** Improve readability when focused and also mouse hovered in all browsers. */
-/* ========================================================================== Typography ========================================================================== */
-/** Address font sizes and margins set differently in IE 6/7. Address font sizes within `section` and `article` in Firefox 4+, Safari 5, and Chrome. */
-h1 { font-size: 2em; margin: 0.67em 0; }
-
-h2 { font-size: 1.5em; margin: 0.83em 0; }
-
-h3 { font-size: 1.17em; margin: 1em 0; }
-
-h4, .tsd-index-panel h3 { font-size: 1em; margin: 1.33em 0; }
-
-h5 { font-size: 0.83em; margin: 1.67em 0; }
-
-h6 { font-size: 0.67em; margin: 2.33em 0; }
-
-/** Address styling not present in IE 7/8/9, Safari 5, and Chrome. */
-abbr[title] { border-bottom: 1px dotted; }
-
-/** Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */
-b, strong { font-weight: bold; }
-
-blockquote { margin: 1em 40px; }
-
-/** Address styling not present in Safari 5 and Chrome. */
-dfn { font-style: italic; }
-
-/** Address differences between Firefox and other browsers. Known issue: no IE 6/7 normalization. */
-hr { box-sizing: content-box; height: 0; }
-
-/** Address styling not present in IE 6/7/8/9. */
-mark { background: #ff0; color: #000; }
-
-/** Address margins set differently in IE 6/7. */
-p, pre { margin: 1em 0; }
-
-/** Improve readability of pre-formatted text in all browsers. */
-pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
-
-/** Address CSS quotes not supported in IE 6/7. */
-q { quotes: none; }
-q:before, q:after { content: ""; content: none; }
-
-/** Address `quotes` property not supported in Safari 4. */
-/** Address inconsistent and variable font size in all browsers. */
-small { font-size: 80%; }
-
-/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
-sub { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
-
-sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; top: -0.5em; }
-
-sub { bottom: -0.25em; }
-
-/* ========================================================================== Lists ========================================================================== */
-dd { margin: 0 0 0 40px; }
-
-/** Address paddings set differently in IE 6/7. */
-menu, ol, ul { padding: 0 0 0 40px; }
-
-/** Correct list images handled incorrectly in IE 7. */
-nav ul, nav ol { list-style: none; list-style-image: none; }
-
-/* ========================================================================== Embedded content ========================================================================== */
-/** 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. 2. Improve image quality when scaled in IE 7. */
-img { border: 0; /* 1 */ -ms-interpolation-mode: bicubic; }
-
-/* 2 */
-/** Correct overflow displayed oddly in IE 9. */
-svg:not(:root) { overflow: hidden; }
-
-/* ========================================================================== Figures ========================================================================== */
-/** Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */
-figure, form { margin: 0; }
-
-/* ========================================================================== Forms ========================================================================== */
-/** Correct margin displayed oddly in IE 6/7. */
-/** Define consistent border, margin, and padding. */
-fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
-
-/** 1. Correct color not being inherited in IE 6/7/8/9. 2. Correct text not wrapping in Firefox 3. 3. Correct alignment displayed oddly in IE 6/7. */
-legend { border: 0; /* 1 */ padding: 0; white-space: normal; /* 2 */ *margin-left: -7px; }
-
-/* 3 */
-/** 1. Correct font size not being inherited in all browsers. 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, and Chrome. 3. Improve appearance and consistency in all browsers. */
-button, input, select, textarea { font-size: 100%; /* 1 */ margin: 0; /* 2 */ vertical-align: baseline; /* 3 */ *vertical-align: middle; }
-
-/* 3 */
-/** Address Firefox 3+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
-button, input { line-height: normal; }
-
-/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. Correct `select` style inheritance in Firefox 4+ and Opera. */
-button, select { text-transform: none; }
-
-/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. 4. Remove inner spacing in IE 7 without affecting normal text inputs. Known issue: inner spacing remains in IE 6. */
-button, html input[type="button"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; }
-
-/* 4 */
-input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; }
-
-/* 4 */
-/** Re-set default cursor for disabled elements. */
-button[disabled], html input[disabled] { cursor: default; }
-
-/** 1. Address box sizing set to content-box in IE 8/9. 2. Remove excess padding in IE 8/9. 3. Remove excess padding in IE 7. Known issue: excess padding remains in IE 6. */
-input { /* 3 */ }
-input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ *height: 13px; /* 3 */ *width: 13px; }
-input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; }
-input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
-
-/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
-/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
-/** Remove inner padding and border in Firefox 3+. */
-button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
-
-/** 1. Remove default vertical scrollbar in IE 6/7/8/9. 2. Improve readability and alignment in all browsers. */
-textarea { overflow: auto; /* 1 */ vertical-align: top; }
-
-/* 2 */
-/* ========================================================================== Tables ========================================================================== */
-/** Remove most spacing between table cells. */
-table { border-collapse: collapse; border-spacing: 0; }
-
-.hljs { display: inline-block; padding: 0.5em; background: white; color: #37474f; }
-
-.hljs-comment,
-.hljs-annotation,
-.hljs-template_comment,
-.diff .hljs-header,
-.hljs-chunk,
-.apache .hljs-cbracket { color: #d81b60; }
-
-.hljs-keyword,
-.hljs-id,
-.hljs-built_in,
-.css .smalltalk .hljs-class,
-.hljs-winutils,
-.bash .hljs-variable,
-.tex .hljs-command,
-.hljs-request,
-.hljs-status,
-.hljs-meta,
-.nginx .hljs-title { color: #3b78e7; }
-
-.xml .hljs-tag { color: #3b78e7; }
-.xml .hljs-tag .hljs-value { color: #3b78e7; }
-
-.hljs-string,
-.hljs-title,
-.hljs-parent,
-.hljs-tag .hljs-value,
-.hljs-rules .hljs-value { color: #0d904f; }
-
-.devsite-dark-code .hljs { display: inline-block; padding: 0.5em; background: white; color: #eceff1; }
-
-.devsite-dark-code .hljs-comment,
-.devsite-dark-code .hljs-annotation,
-.devsite-dark-code .hljs-template_comment,
-.devsite-dark-code .diff .hljs-header,
-.devsite-dark-code .hljs-chunk { color: #f06292; }
-
-.devsite-dark-code .hljs-keyword,
-.devsite-dark-code .hljs-id,
-.devsite-dark-code .hljs-built_in,
-.devsite-dark-code .hljs-winutils,
-.devsite-dark-code .hljs-request,
-.devsite-dark-code .hljs-status,
-.devsite-dark-code .hljs-meta { color: #4dd0e1; }
-
-.devsite-dark-code .hljs-string,
-.devsite-dark-code .hljs-title,
-.devsite-dark-code .hljs-parent,
-.devsite-dark-code .hljs-tag .hljs-value,
-.devsite-dark-code .hljs-rules .hljs-value { color: #9ccc65; }
-
-.col > :first-child, .col-1 > :first-child, .col-2 > :first-child, .col-3 > :first-child, .col-4 > :first-child, .col-5 > :first-child, .col-6 > :first-child, .col-7 > :first-child, .col-8 > :first-child, .col-9 > :first-child, .col-10 > :first-child, .col-11 > :first-child, .tsd-panel > :first-child, ul.tsd-descriptions > li > :first-child, .col > :first-child > :first-child, .col-1 > :first-child > :first-child, .col-2 > :first-child > :first-child, .col-3 > :first-child > :first-child, .col-4 > :first-child > :first-child, .col-5 > :first-child > :first-child, .col-6 > :first-child > :first-child, .col-7 > :first-child > :first-child, .col-8 > :first-child > :first-child, .col-9 > :first-child > :first-child, .col-10 > :first-child > :first-child, .col-11 > :first-child > :first-child, .tsd-panel > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child, .col > :first-child > :first-child > :first-child, .col-1 > :first-child > :first-child > :first-child, .col-2 > :first-child > :first-child > :first-child, .col-3 > :first-child > :first-child > :first-child, .col-4 > :first-child > :first-child > :first-child, .col-5 > :first-child > :first-child > :first-child, .col-6 > :first-child > :first-child > :first-child, .col-7 > :first-child > :first-child > :first-child, .col-8 > :first-child > :first-child > :first-child, .col-9 > :first-child > :first-child > :first-child, .col-10 > :first-child > :first-child > :first-child, .col-11 > :first-child > :first-child > :first-child, .tsd-panel > :first-child > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child > :first-child { margin-top: 0; }
-.col > :last-child, .col-1 > :last-child, .col-2 > :last-child, .col-3 > :last-child, .col-4 > :last-child, .col-5 > :last-child, .col-6 > :last-child, .col-7 > :last-child, .col-8 > :last-child, .col-9 > :last-child, .col-10 > :last-child, .col-11 > :last-child, .tsd-panel > :last-child, ul.tsd-descriptions > li > :last-child, .col > :last-child > :last-child, .col-1 > :last-child > :last-child, .col-2 > :last-child > :last-child, .col-3 > :last-child > :last-child, .col-4 > :last-child > :last-child, .col-5 > :last-child > :last-child, .col-6 > :last-child > :last-child, .col-7 > :last-child > :last-child, .col-8 > :last-child > :last-child, .col-9 > :last-child > :last-child, .col-10 > :last-child > :last-child, .col-11 > :last-child > :last-child, .tsd-panel > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child, .col > :last-child > :last-child > :last-child, .col-1 > :last-child > :last-child > :last-child, .col-2 > :last-child > :last-child > :last-child, .col-3 > :last-child > :last-child > :last-child, .col-4 > :last-child > :last-child > :last-child, .col-5 > :last-child > :last-child > :last-child, .col-6 > :last-child > :last-child > :last-child, .col-7 > :last-child > :last-child > :last-child, .col-8 > :last-child > :last-child > :last-child, .col-9 > :last-child > :last-child > :last-child, .col-10 > :last-child > :last-child > :last-child, .col-11 > :last-child > :last-child > :last-child, .tsd-panel > :last-child > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child > :last-child { margin-bottom: 0; }
-
-.container { max-width: 1200px; margin: 0 auto; padding: 0 40px; }
-@media (max-width: 640px) { .container { padding: 0 20px; } }
-
-.container-main { padding-bottom: 200px; }
-
-.row { position: relative; margin: 0 -10px; }
-.row:after { visibility: hidden; display: block; content: ""; clear: both; height: 0; }
-
-.col, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11 { box-sizing: border-box; float: left; padding: 0 10px; }
-
-.col-1 { width: 8.33333%; }
-
-.offset-1 { margin-left: 8.33333%; }
-
-.col-2 { width: 16.66667%; }
-
-.offset-2 { margin-left: 16.66667%; }
-
-.col-3 { width: 25%; }
-
-.offset-3 { margin-left: 25%; }
-
-.col-4 { width: 33.33333%; }
-
-.offset-4 { margin-left: 33.33333%; }
-
-.col-5 { width: 41.66667%; }
-
-.offset-5 { margin-left: 41.66667%; }
-
-.col-6 { width: 50%; }
-
-.offset-6 { margin-left: 50%; }
-
-.col-7 { width: 58.33333%; }
-
-.offset-7 { margin-left: 58.33333%; }
-
-.col-8 { width: 66.66667%; }
-
-.offset-8 { margin-left: 66.66667%; }
-
-.col-9 { width: 75%; }
-
-.offset-9 { margin-left: 75%; }
-
-.col-10 { width: 83.33333%; }
-
-.offset-10 { margin-left: 83.33333%; }
-
-.col-11 { width: 91.66667%; }
-
-.offset-11 { margin-left: 91.66667%; }
-
-.tsd-kind-icon { display: block; position: relative; padding-left: 20px; text-indent: -20px; }
-
-.no-transition { transition: none !important; }
-
-@-webkit-keyframes fade-in { from { opacity: 0; }
- to { opacity: 1; } }
-
-@keyframes fade-in { from { opacity: 0; }
- to { opacity: 1; } }
-@-webkit-keyframes fade-out { from { opacity: 1; visibility: visible; }
- to { opacity: 0; } }
-@keyframes fade-out { from { opacity: 1; visibility: visible; }
- to { opacity: 0; } }
-@-webkit-keyframes fade-in-delayed { 0% { opacity: 0; }
- 33% { opacity: 0; }
- 100% { opacity: 1; } }
-@keyframes fade-in-delayed { 0% { opacity: 0; }
- 33% { opacity: 0; }
- 100% { opacity: 1; } }
-@-webkit-keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; }
- 66% { opacity: 0; }
- 100% { opacity: 0; } }
-@keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; }
- 66% { opacity: 0; }
- 100% { opacity: 0; } }
-@-webkit-keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); }
- to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } }
-@keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); }
- to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } }
-@-webkit-keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); }
- to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } }
-@keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); }
- to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } }
-@-webkit-keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); }
- to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } }
-@keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); }
- to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } }
-@-webkit-keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; }
- to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } }
-@keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; }
- to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } }
-
-a { color: #4da6ff; text-decoration: none; }
-a:hover { text-decoration: underline; }
-
-pre { padding: 10px; }
-pre code { padding: 0; font-size: 100%; background-color: transparent; }
-
-.tsd-typography ul { list-style: square; padding: 0 0 0 20px; margin: 0; }
-.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 { font-size: 1em; margin: 0; }
-.tsd-typography h5, .tsd-typography h6 { font-weight: normal; }
-.tsd-typography p, .tsd-typography ul, .tsd-typography ol { margin: 1em 0; }
-
-@media (min-width: 901px) and (max-width: 1024px) { html.default .col-content { width: 72%; }
- html.default .col-menu { width: 28%; }
- html.default .tsd-navigation { padding-left: 10px; } }
-@media (max-width: 900px) { html.default .col-content { float: none; width: 100%; }
- html.default .col-menu { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; z-index: 1024; top: 0 !important; bottom: 0 !important; left: auto !important; right: 0 !important; width: 100%; padding: 20px 20px 0 0; max-width: 450px; visibility: hidden; background-color: #fff; -webkit-transform: translate(100%, 0); transform: translate(100%, 0); }
- html.default .col-menu > *:last-child { padding-bottom: 20px; }
- html.default .overlay { content: ""; display: block; position: fixed; z-index: 1023; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.75); visibility: hidden; }
- html.default.to-has-menu .overlay { -webkit-animation: fade-in 0.4s; animation: fade-in 0.4s; }
- html.default.to-has-menu header, html.default.to-has-menu footer, html.default.to-has-menu .col-content { -webkit-animation: shift-to-left 0.4s; animation: shift-to-left 0.4s; }
- html.default.to-has-menu .col-menu { -webkit-animation: pop-in-from-right 0.4s; animation: pop-in-from-right 0.4s; }
- html.default.from-has-menu .overlay { -webkit-animation: fade-out 0.4s; animation: fade-out 0.4s; }
- html.default.from-has-menu header, html.default.from-has-menu footer, html.default.from-has-menu .col-content { -webkit-animation: unshift-to-left 0.4s; animation: unshift-to-left 0.4s; }
- html.default.from-has-menu .col-menu { -webkit-animation: pop-out-to-right 0.4s; animation: pop-out-to-right 0.4s; }
- html.default.has-menu body { overflow: hidden; }
- html.default.has-menu .overlay { visibility: visible; }
- html.default.has-menu header, html.default.has-menu footer, html.default.has-menu .col-content { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); }
- html.default.has-menu .col-menu { visibility: visible; -webkit-transform: translate(0, 0); transform: translate(0, 0); } }
-
-.tsd-page-title { padding: 0; margin: 0; background: #fff; }
-.tsd-page-title h1 { font-weight: normal; margin: 0; }
-
-.tsd-breadcrumb { margin: 0; padding: 0; color: #808080; }
-.tsd-breadcrumb a { color: #808080; text-decoration: none; }
-.tsd-breadcrumb a:hover { text-decoration: underline; }
-.tsd-breadcrumb li { display: inline; margin-right: -0.25em; }
-
-html.minimal .container { margin: 0; }
-html.minimal .container-main { padding-top: 50px; padding-bottom: 0; }
-html.minimal .content-wrap { padding-left: 300px; }
-html.minimal .tsd-navigation { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; box-sizing: border-box; z-index: 1; left: 0; top: 40px; bottom: 0; width: 300px; padding: 20px; margin: 0; }
-html.minimal .tsd-member .tsd-member { margin-left: 0; }
-html.minimal .tsd-page-toolbar { position: fixed; z-index: 2; }
-html.minimal #tsd-filter .tsd-filter-group { right: 0; -webkit-transform: none; transform: none; }
-html.minimal footer { background-color: transparent; }
-html.minimal footer .container { padding: 0; }
-html.minimal .tsd-generator { padding: 0; }
-@media (max-width: 900px) { html.minimal .tsd-navigation { display: none; }
- html.minimal .content-wrap { padding-left: 0; } }
-
-dl.tsd-comment-tags { overflow: hidden; }
-dl.tsd-comment-tags dt { clear: both; float: left; padding: 1px 5px; margin: 0 10px 0 0; border-radius: 4px; border: 1px solid #808080; color: #808080; font-size: 0.8em; font-weight: normal; }
-dl.tsd-comment-tags dd { margin: 0 0 10px 0; }
-dl.tsd-comment-tags p { margin: 0; }
-
-.tsd-panel.tsd-comment .lead { font-size: 1.1em; line-height: 1.333em; margin-bottom: 2em; }
-.tsd-panel.tsd-comment .lead:last-child { margin-bottom: 0; }
-
-.toggle-protected .tsd-is-private { display: none; }
-
-.toggle-public .tsd-is-private, .toggle-public .tsd-is-protected, .toggle-public .tsd-is-private-protected { display: none; }
-
-.toggle-inherited .tsd-is-inherited { display: none; }
-
-.toggle-only-exported .tsd-is-not-exported { display: none; }
-
-.toggle-externals .tsd-is-external { display: none; }
-
-#tsd-filter { position: relative; display: inline-block; height: 40px; vertical-align: bottom; }
-.no-filter #tsd-filter { display: none; }
-#tsd-filter .tsd-filter-group { display: inline-block; height: 40px; vertical-align: bottom; white-space: nowrap; }
-#tsd-filter input { display: none; }
-@media (max-width: 900px) { #tsd-filter .tsd-filter-group { display: block; position: absolute; top: 40px; right: 20px; height: auto; background-color: #fff; visibility: hidden; -webkit-transform: translate(50%, 0); transform: translate(50%, 0); box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); }
- .has-options #tsd-filter .tsd-filter-group { visibility: visible; }
- .to-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-in 0.2s; animation: fade-in 0.2s; }
- .from-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-out 0.2s; animation: fade-out 0.2s; }
- #tsd-filter label, #tsd-filter .tsd-select { display: block; padding-right: 20px; } }
-
-footer { border-top: 1px solid #eee; background-color: #fff; }
-footer.with-border-bottom { border-bottom: 1px solid #eee; }
-footer .tsd-legend-group { font-size: 0; }
-footer .tsd-legend { display: inline-block; width: 25%; padding: 0; font-size: 16px; list-style: none; line-height: 1.333em; vertical-align: top; }
-@media (max-width: 900px) { footer .tsd-legend { width: 50%; } }
-
-.tsd-hierarchy { list-style: square; padding: 0 0 0 20px; margin: 0; }
-.tsd-hierarchy .target { font-weight: bold; }
-
-.tsd-index-panel .tsd-index-content { margin-bottom: -30px !important; }
-.tsd-index-panel .tsd-index-section { margin-bottom: 30px !important; }
-.tsd-index-panel h3 { margin: 0 -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #eee; }
-.tsd-index-panel ul.tsd-index-list { -webkit-column-count: 3; -moz-column-count: 3; -ms-column-count: 3; -o-column-count: 3; column-count: 3; -webkit-column-gap: 20px; -moz-column-gap: 20px; -ms-column-gap: 20px; -o-column-gap: 20px; column-gap: 20px; padding: 0; list-style: none; line-height: 1.333em; }
-@media (max-width: 900px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 1; -moz-column-count: 1; -ms-column-count: 1; -o-column-count: 1; column-count: 1; } }
-@media (min-width: 901px) and (max-width: 1024px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 2; -moz-column-count: 2; -ms-column-count: 2; -o-column-count: 2; column-count: 2; } }
-.tsd-index-panel ul.tsd-index-list li { -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; -ms-column-break-inside: avoid; -o-column-break-inside: avoid; column-break-inside: avoid; -webkit-page-break-inside: avoid; -moz-page-break-inside: avoid; -ms-page-break-inside: avoid; -o-page-break-inside: avoid; page-break-inside: avoid; }
-
-.tsd-flag { display: inline-block; padding: 1px 5px; border-radius: 4px; color: #fff; background-color: #808080; text-indent: 0; font-size: 14px; font-weight: normal; line-height: 1.5em; }
-
-.tsd-anchor { position: absolute; top: -100px; }
-
-.tsd-member { position: relative; }
-.tsd-member .tsd-anchor + h3 { margin-top: 0; margin-bottom: 0; border-bottom: none; }
-
-.tsd-navigation { padding: 0 0 0 40px; }
-.tsd-navigation a { display: block; padding-top: 2px; padding-bottom: 2px; border-left: 2px solid transparent; color: #222; text-decoration: none; transition: border-left-color 0.1s; }
-.tsd-navigation a:hover { text-decoration: underline; }
-.tsd-navigation ul { margin: 0; padding: 0; list-style: none; }
-.tsd-navigation li { padding: 0; }
-
-.tsd-navigation.primary { padding-bottom: 40px; }
-.tsd-navigation.primary a { display: block; padding-top: 6px; padding-bottom: 6px; }
-.tsd-navigation.primary ul li a { padding-left: 5px; }
-.tsd-navigation.primary ul li li a { padding-left: 25px; }
-.tsd-navigation.primary ul li li li a { padding-left: 45px; }
-.tsd-navigation.primary ul li li li li a { padding-left: 65px; }
-.tsd-navigation.primary ul li li li li li a { padding-left: 85px; }
-.tsd-navigation.primary ul li li li li li li a { padding-left: 105px; }
-.tsd-navigation.primary > ul { border-bottom: 1px solid #eee; }
-.tsd-navigation.primary li { border-top: 1px solid #eee; }
-.tsd-navigation.primary li.current > a { font-weight: bold; }
-.tsd-navigation.primary li.label span { display: block; padding: 20px 0 6px 5px; color: #808080; }
-.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a { padding-top: 20px; }
-
-.tsd-navigation.secondary ul { transition: opacity 0.2s; }
-.tsd-navigation.secondary ul li a { padding-left: 25px; }
-.tsd-navigation.secondary ul li li a { padding-left: 45px; }
-.tsd-navigation.secondary ul li li li a { padding-left: 65px; }
-.tsd-navigation.secondary ul li li li li a { padding-left: 85px; }
-.tsd-navigation.secondary ul li li li li li a { padding-left: 105px; }
-.tsd-navigation.secondary ul li li li li li li a { padding-left: 125px; }
-.tsd-navigation.secondary ul.current a { border-left-color: #eee; }
-.tsd-navigation.secondary li.focus > a, .tsd-navigation.secondary ul.current li.focus > a { border-left-color: #000; }
-.tsd-navigation.secondary li.current { margin-top: 20px; margin-bottom: 20px; border-left-color: #eee; }
-.tsd-navigation.secondary li.current > a { font-weight: bold; }
-
-@media (min-width: 901px) { .menu-sticky-wrap { position: static; }
- .no-csspositionsticky .menu-sticky-wrap.sticky { position: fixed; }
- .no-csspositionsticky .menu-sticky-wrap.sticky-current { position: fixed; }
- .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.before-current, .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.after-current { opacity: 0; }
- .no-csspositionsticky .menu-sticky-wrap.sticky-bottom { position: absolute; top: auto !important; left: auto !important; bottom: 0; right: 0; }
- .csspositionsticky .menu-sticky-wrap.sticky { position: -webkit-sticky; position: sticky; }
- .csspositionsticky .menu-sticky-wrap.sticky-current { position: -webkit-sticky; position: sticky; } }
-
-.tsd-panel { margin: 20px 0; padding: 20px; background-color: #fff; }
-.tsd-panel:empty { display: none; }
-.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 { margin: 1.5em -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #ebebeb; }
-.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature { margin-bottom: 0; border-bottom: 0; }
-.tsd-panel table { display: block; width: 100%; overflow: auto; margin-top: 10px; word-break: normal; word-break: keep-all; }
-.tsd-panel table th { font-weight: bold; }
-.tsd-panel table th, .tsd-panel table td { padding: 6px 13px; border: 1px solid #ddd; }
-.tsd-panel table tr { background-color: #fff; border-top: 1px solid #ccc; }
-.tsd-panel table tr:nth-child(2n) { background-color: #f8f8f8; }
-
-.tsd-panel-group { margin: 60px 0; }
-.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 { padding-left: 20px; padding-right: 20px; }
-
-#tsd-search { transition: background-color 0.2s; }
-#tsd-search .title { position: relative; z-index: 2; }
-#tsd-search .field { position: absolute; left: 0; top: 0; right: 40px; height: 40px; }
-#tsd-search .field input { box-sizing: border-box; position: relative; top: -50px; z-index: 1; width: 100%; padding: 0 10px; opacity: 0; outline: 0; border: 0; background: transparent; color: #222; }
-#tsd-search .field label { position: absolute; overflow: hidden; right: -40px; }
-#tsd-search .field input, #tsd-search .title { transition: opacity 0.2s; }
-#tsd-search .results { position: absolute; visibility: hidden; top: 40px; width: 100%; margin: 0; padding: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); }
-#tsd-search .results li { padding: 0 10px; background-color: #fdfdfd; }
-#tsd-search .results li:nth-child(even) { background-color: #fff; }
-#tsd-search .results li.state { display: none; }
-#tsd-search .results li.current, #tsd-search .results li:hover { background-color: #eee; }
-#tsd-search .results a { display: block; }
-#tsd-search .results a:before { top: 10px; }
-#tsd-search .results span.parent { color: #808080; font-weight: normal; }
-#tsd-search.has-focus { background-color: #eee; }
-#tsd-search.has-focus .field input { top: 0; opacity: 1; }
-#tsd-search.has-focus .title { z-index: 0; opacity: 0; }
-#tsd-search.has-focus .results { visibility: visible; }
-#tsd-search.loading .results li.state.loading { display: block; }
-#tsd-search.failure .results li.state.failure { display: block; }
-
-.tsd-signature { margin: 0 0 1em 0; padding: 10px; border: 1px solid #eee; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; }
-.tsd-signature.tsd-kind-icon { padding-left: 30px; }
-.tsd-panel > .tsd-signature { margin-left: -20px; margin-right: -20px; border-width: 1px 0; }
-.tsd-panel > .tsd-signature.tsd-kind-icon { padding-left: 40px; }
-
-.tsd-signature-symbol { color: #808080; font-weight: normal; }
-
-.tsd-signature-type { font-style: italic; font-weight: normal; }
-
-.tsd-signatures { padding: 0; margin: 0 0 1em 0; border: 1px solid #eee; }
-.tsd-signatures .tsd-signature { margin: 0; border-width: 1px 0 0 0; transition: background-color 0.1s; }
-.tsd-signatures .tsd-signature:first-child { border-top-width: 0; }
-.tsd-signatures .tsd-signature.current { background-color: #eee; }
-.tsd-signatures.active > .tsd-signature { cursor: pointer; }
-.tsd-panel > .tsd-signatures { margin-left: -20px; margin-right: -20px; border-width: 1px 0; }
-.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { padding-left: 40px; }
-.tsd-panel > a.anchor + .tsd-signatures { border-top-width: 0; margin-top: -20px; }
-
-ul.tsd-descriptions { position: relative; overflow: hidden; transition: height 0.3s; padding: 0; list-style: none; }
-ul.tsd-descriptions.active > .tsd-description { display: none; }
-ul.tsd-descriptions.active > .tsd-description.current { display: block; }
-ul.tsd-descriptions.active > .tsd-description.fade-in { -webkit-animation: fade-in-delayed 0.3s; animation: fade-in-delayed 0.3s; }
-ul.tsd-descriptions.active > .tsd-description.fade-out { -webkit-animation: fade-out-delayed 0.3s; animation: fade-out-delayed 0.3s; position: absolute; display: block; top: 0; left: 0; right: 0; opacity: 0; visibility: hidden; }
-ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { font-size: 16px; margin: 1em 0 0.5em 0; }
-
-ul.tsd-parameters, ul.tsd-type-parameters { list-style: square; margin: 0; padding-left: 20px; }
-ul.tsd-parameters > li.tsd-parameter-siganture, ul.tsd-type-parameters > li.tsd-parameter-siganture { list-style: none; margin-left: -20px; }
-ul.tsd-parameters h5, ul.tsd-type-parameters h5 { font-size: 16px; margin: 1em 0 0.5em 0; }
-ul.tsd-parameters .tsd-comment, ul.tsd-type-parameters .tsd-comment { margin-top: -0.5em; }
-
-.tsd-sources { font-size: 14px; color: #808080; }
-.tsd-sources a { color: #808080; text-decoration: underline; }
-.tsd-sources ul, .tsd-sources p { margin: 0 !important; }
-.tsd-sources ul { list-style: none; padding: 0; }
-
-.tsd-page-toolbar { position: absolute; z-index: 1; top: 0; left: 0; width: 100%; height: 40px; color: #333; background: #fff; border-bottom: 1px solid #eee; }
-.tsd-page-toolbar a { color: #333; text-decoration: none; }
-.tsd-page-toolbar a.title { font-weight: bold; }
-.tsd-page-toolbar a.title:hover { text-decoration: underline; }
-.tsd-page-toolbar .table-wrap { display: table; width: 100%; height: 40px; }
-.tsd-page-toolbar .table-cell { display: table-cell; position: relative; white-space: nowrap; line-height: 40px; }
-.tsd-page-toolbar .table-cell:first-child { width: 100%; }
-
-.tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { content: ""; display: inline-block; width: 40px; height: 40px; margin: 0 -8px 0 0; background-image: url(../images/widgets.png); background-repeat: no-repeat; text-indent: -1024px; vertical-align: bottom; }
-@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { background-image: url(../images/widgets@2x.png); background-size: 320px 40px; } }
-
-.tsd-widget { display: inline-block; overflow: hidden; opacity: 0.6; height: 40px; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; }
-.tsd-widget:hover { opacity: 0.8; }
-.tsd-widget.active { opacity: 1; background-color: #eee; }
-.tsd-widget.no-caption { width: 40px; }
-.tsd-widget.no-caption:before { margin: 0; }
-.tsd-widget.search:before { background-position: 0 0; }
-.tsd-widget.menu:before { background-position: -40px 0; }
-.tsd-widget.options:before { background-position: -80px 0; }
-.tsd-widget.options, .tsd-widget.menu { display: none; }
-@media (max-width: 900px) { .tsd-widget.options, .tsd-widget.menu { display: inline-block; } }
-input[type=checkbox] + .tsd-widget:before { background-position: -120px 0; }
-input[type=checkbox]:checked + .tsd-widget:before { background-position: -160px 0; }
-
-.tsd-select { position: relative; display: inline-block; height: 40px; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; }
-.tsd-select .tsd-select-label { opacity: 0.6; transition: opacity 0.2s; }
-.tsd-select .tsd-select-label:before { background-position: -240px 0; }
-.tsd-select.active .tsd-select-label { opacity: 0.8; }
-.tsd-select.active .tsd-select-list { visibility: visible; opacity: 1; transition-delay: 0s; }
-.tsd-select .tsd-select-list { position: absolute; visibility: hidden; top: 40px; left: 0; margin: 0; padding: 0; opacity: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); transition: visibility 0s 0.2s, opacity 0.2s; }
-.tsd-select .tsd-select-list li { padding: 0 20px 0 0; background-color: #fdfdfd; }
-.tsd-select .tsd-select-list li:before { background-position: 40px 0; }
-.tsd-select .tsd-select-list li:nth-child(even) { background-color: #fff; }
-.tsd-select .tsd-select-list li:hover { background-color: #eee; }
-.tsd-select .tsd-select-list li.selected:before { background-position: -200px 0; }
-@media (max-width: 900px) { .tsd-select .tsd-select-list { top: 0; left: auto; right: 100%; margin-right: -5px; }
- .tsd-select .tsd-select-label:before { background-position: -280px 0; } }
-
-img { max-width: 100%; }
diff --git a/docgen/theme/assets/images/lockup.png b/docgen/theme/assets/images/lockup.png
deleted file mode 100644
index f4cdcf24a4..0000000000
Binary files a/docgen/theme/assets/images/lockup.png and /dev/null differ
diff --git a/docgen/theme/layouts/default.hbs b/docgen/theme/layouts/default.hbs
deleted file mode 100644
index 485d831d71..0000000000
--- a/docgen/theme/layouts/default.hbs
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}}
-
-
-
-
-
-
-
-{{> header}}
-
-
-
-
-
-{{> analytics}}
-
-
-
diff --git a/docgen/theme/partials/breadcrumb.hbs b/docgen/theme/partials/breadcrumb.hbs
deleted file mode 100644
index db115163f7..0000000000
--- a/docgen/theme/partials/breadcrumb.hbs
+++ /dev/null
@@ -1,11 +0,0 @@
-
-{{#if parent}}
- {{#with parent}}{{> breadcrumb}}{{/with}}
-
- {{#if url}}
- {{name}}.
- {{else}}
- {{name}}
- {{/if}}
-
-{{/if}}
\ No newline at end of file
diff --git a/docgen/theme/partials/comment.hbs b/docgen/theme/partials/comment.hbs
deleted file mode 100644
index f92e54301a..0000000000
--- a/docgen/theme/partials/comment.hbs
+++ /dev/null
@@ -1,22 +0,0 @@
-{{#with comment}}
- {{#if hasVisibleComponent}}
-
- {{/if}}
-{{/with}}
\ No newline at end of file
diff --git a/docgen/theme/partials/header.hbs b/docgen/theme/partials/header.hbs
deleted file mode 100644
index 4aee65a6b3..0000000000
--- a/docgen/theme/partials/header.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- {{#ifCond model.name '==' project.name}}
- {{else}}
-
- {{#with model.parent}}{{> breadcrumb}}{{/with}}
- - {{model.name}}
- {{#if model.typeParameters}}
- <
- {{#each model.typeParameters}}
- {{#if @index}}, {{/if}}
- {{name}}
- {{/each}}
- >
- {{/if}}
-
- {{/ifCond}}
-
-
-
-
\ No newline at end of file
diff --git a/docgen/theme/partials/member.sources.hbs b/docgen/theme/partials/member.sources.hbs
deleted file mode 100644
index 5a0e186f01..0000000000
--- a/docgen/theme/partials/member.sources.hbs
+++ /dev/null
@@ -1,15 +0,0 @@
-{{#if implementationOf}}
-
-{{/if}}
-{{#if inheritedFrom}}
-
-{{/if}}
-{{#if overwrites}}
-
-{{/if}}
\ No newline at end of file
diff --git a/docgen/theme/partials/navigation.hbs b/docgen/theme/partials/navigation.hbs
deleted file mode 100644
index 54704739a8..0000000000
--- a/docgen/theme/partials/navigation.hbs
+++ /dev/null
@@ -1,22 +0,0 @@
-{{#if isVisible}}
- {{#if isLabel}}
-
- {{{wbr title}}}
-
- {{else}}
- {{#unless isGlobals}}
-
- {{{wbr title}}}
- {{#if isInPath}}
- {{#if children}}
-
- {{#each children}}
- {{> navigation}}
- {{/each}}
-
- {{/if}}
- {{/if}}
-
- {{/unless}}
- {{/if}}
-{{/if}}
diff --git a/docgen/theme/templates/reflection.hbs b/docgen/theme/templates/reflection.hbs
deleted file mode 100644
index 53cd2879a4..0000000000
--- a/docgen/theme/templates/reflection.hbs
+++ /dev/null
@@ -1,72 +0,0 @@
-{{#with model}}
- {{#if hasComment}}
-
- {{/if}}
-{{/with}}
-
-{{#if model.typeParameters}}
-
- Type parameters
- {{#with model}}{{> typeParameters}}{{/with}}
-
-{{/if}}
-
-{{#if model.implementedTypes}}
-
- Implements
-
- {{#each model.implementedTypes}}
- - {{> type}}
- {{/each}}
-
-
-{{/if}}
-
-{{#if model.implementedBy}}
-
- Implemented by
-
- {{#each model.implementedBy}}
- - {{> type}}
- {{/each}}
-
-
-{{/if}}
-
-{{#if model.signatures}}
-
- Callable
- {{#with model}}{{> member.signatures}}{{/with}}
-
-{{/if}}
-
-{{#if model.indexSignature}}
-
- Indexable
- {{#compact}}
- [
- {{#each model.indexSignature.parameters}}
- {{name}}: {{#with type}}{{>type}}{{/with}}
- {{/each}}
- ]:
- {{#with model.indexSignature.type}}{{>type}}{{/with}}
- {{/compact}}
-
- {{#with model.indexSignature}}
- {{> comment}}
- {{/with}}
-
- {{#if model.indexSignature.type.declaration}}
- {{#with model.indexSignature.type.declaration}}
- {{> parameter}}
- {{/with}}
- {{/if}}
-
-{{/if}}
-
-{{#with model}}
- {{> index}}
- {{> members}}
-{{/with}}
\ No newline at end of file
diff --git a/docgen/tsconfig.json b/docgen/tsconfig.json
deleted file mode 100644
index 3c43903cfd..0000000000
--- a/docgen/tsconfig.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "../tsconfig.json"
-}
diff --git a/docgen/typedoc.js b/docgen/typedoc.js
deleted file mode 100644
index 788c9cc071..0000000000
--- a/docgen/typedoc.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * @license
- * Copyright 2019 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const options = {
- includeDeclarations: true,
- excludeExternals: true,
- ignoreCompilerErrors: true,
- name: 'Admin Node.js SDK',
- mode: 'file',
- hideGenerator: true
-};
-
-module.exports = options;
diff --git a/etc/firebase-admin.firestore.api.md b/etc/firebase-admin.firestore.api.md
index 4d300b5397..7d83ee108a 100644
--- a/etc/firebase-admin.firestore.api.md
+++ b/etc/firebase-admin.firestore.api.md
@@ -62,7 +62,7 @@ export { GeoPoint }
// Warning: (ae-forgotten-export) The symbol "App" needs to be exported by the entry point index.d.ts
//
-// @public (undocumented)
+// @public
export function getFirestore(app?: App): Firestore;
export { GrpcStatus }
diff --git a/package-lock.json b/package-lock.json
index fb0b99043a..cd49174385 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -155,6 +155,105 @@
"to-fast-properties": "^2.0.0"
}
},
+ "@firebase/api-documenter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@firebase/api-documenter/-/api-documenter-0.1.1.tgz",
+ "integrity": "sha512-/8EtiyrWquuv6Byy9JYlYrclxAfPIwzUPCAzhOb14shGZW/YWANm8WRHbNSVOFXbZMGd89s3WZX3gVw2zWjZxA==",
+ "dev": true,
+ "requires": {
+ "@microsoft/tsdoc": "0.12.24",
+ "@rushstack/node-core-library": "3.36.0",
+ "@rushstack/ts-command-line": "4.7.8",
+ "api-extractor-model-me": "0.1.1",
+ "colors": "~1.2.1",
+ "resolve": "~1.17.0",
+ "tslib": "^2.1.0"
+ },
+ "dependencies": {
+ "@microsoft/tsdoc": {
+ "version": "0.12.24",
+ "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.24.tgz",
+ "integrity": "sha512-Mfmij13RUTmHEMi9vRUhMXD7rnGR2VvxeNYtaGtaJ4redwwjT4UXYJ+nzmVJF7hhd4pn/Fx5sncDKxMVFJSWPg==",
+ "dev": true
+ },
+ "@rushstack/node-core-library": {
+ "version": "3.36.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.36.0.tgz",
+ "integrity": "sha512-bID2vzXpg8zweXdXgQkKToEdZwVrVCN9vE9viTRk58gqzYaTlz4fMId6V3ZfpXN6H0d319uGi2KDlm+lUEeqCg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "10.17.13",
+ "colors": "~1.2.1",
+ "fs-extra": "~7.0.1",
+ "import-lazy": "~4.0.0",
+ "jju": "~1.4.0",
+ "resolve": "~1.17.0",
+ "semver": "~7.3.0",
+ "timsort": "~0.3.0",
+ "z-schema": "~3.18.3"
+ }
+ },
+ "@rushstack/ts-command-line": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.7.8.tgz",
+ "integrity": "sha512-8ghIWhkph7NnLCMDJtthpsb7TMOsVGXVDvmxjE/CeklTqjbbUFBjGXizJfpbEkRQTELuZQ2+vGn7sGwIWKN2uA==",
+ "dev": true,
+ "requires": {
+ "@types/argparse": "1.0.38",
+ "argparse": "~1.0.9",
+ "colors": "~1.2.1",
+ "string-argv": "~0.3.1"
+ }
+ },
+ "@types/node": {
+ "version": "10.17.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz",
+ "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
"@firebase/app": {
"version": "0.6.13",
"resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.13.tgz",
@@ -1069,12 +1168,6 @@
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
"dev": true
},
- "abab": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
- "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
- "dev": true
- },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -1096,36 +1189,12 @@
"integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
"dev": true
},
- "acorn-globals": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
- "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
- "dev": true,
- "requires": {
- "acorn": "^6.0.1",
- "acorn-walk": "^6.0.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
- "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
- "dev": true
- }
- }
- },
"acorn-jsx": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
"integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
"dev": true
},
- "acorn-walk": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
- "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
- "dev": true
- },
"agent-base": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz",
@@ -1216,6 +1285,82 @@
"normalize-path": "^2.1.1"
}
},
+ "api-extractor-model-me": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/api-extractor-model-me/-/api-extractor-model-me-0.1.1.tgz",
+ "integrity": "sha512-Ez801ZMADfkseOWNRFquvyQYDm3D9McpxfkKMWL6JFCGcpub0miJ+TFNphIR1nSZbrsxz3kIeOovNMY4VlL6Bw==",
+ "dev": true,
+ "requires": {
+ "@microsoft/tsdoc": "0.12.24",
+ "@rushstack/node-core-library": "3.36.0"
+ },
+ "dependencies": {
+ "@microsoft/tsdoc": {
+ "version": "0.12.24",
+ "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.12.24.tgz",
+ "integrity": "sha512-Mfmij13RUTmHEMi9vRUhMXD7rnGR2VvxeNYtaGtaJ4redwwjT4UXYJ+nzmVJF7hhd4pn/Fx5sncDKxMVFJSWPg==",
+ "dev": true
+ },
+ "@rushstack/node-core-library": {
+ "version": "3.36.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.36.0.tgz",
+ "integrity": "sha512-bID2vzXpg8zweXdXgQkKToEdZwVrVCN9vE9viTRk58gqzYaTlz4fMId6V3ZfpXN6H0d319uGi2KDlm+lUEeqCg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "10.17.13",
+ "colors": "~1.2.1",
+ "fs-extra": "~7.0.1",
+ "import-lazy": "~4.0.0",
+ "jju": "~1.4.0",
+ "resolve": "~1.17.0",
+ "semver": "~7.3.0",
+ "timsort": "~0.3.0",
+ "z-schema": "~3.18.3"
+ }
+ },
+ "@types/node": {
+ "version": "10.17.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz",
+ "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
"append-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
@@ -1319,12 +1464,6 @@
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
"dev": true
},
- "array-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
- "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
- "dev": true
- },
"array-initial": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
@@ -1477,12 +1616,6 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -1682,12 +1815,6 @@
}
}
},
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -2263,29 +2390,6 @@
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
"optional": true
},
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
"d": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
@@ -2305,17 +2409,6 @@
"assert-plus": "^1.0.0"
}
},
- "data-urls": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
- "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.0",
- "whatwg-mimetype": "^2.2.0",
- "whatwg-url": "^7.0.0"
- }
- },
"date-and-time": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz",
@@ -2526,15 +2619,6 @@
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==",
"dev": true
},
- "domexception": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
- "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^4.0.2"
- }
- },
"dot-prop": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
@@ -2738,28 +2822,6 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
- "escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- }
- }
- },
"eslint": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
@@ -3431,44 +3493,6 @@
"map-cache": "^0.2.2"
}
},
- "fs-extra": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
- "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- },
- "dependencies": {
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- },
- "dependencies": {
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
- "dev": true
- }
- }
- },
"fs-minipass": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
@@ -4131,27 +4155,6 @@
"glogg": "^1.0.0"
}
},
- "handlebars": {
- "version": "4.7.6",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
- "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4",
- "wordwrap": "^1.0.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -4274,12 +4277,6 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
- "highlight.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.5.0.tgz",
- "integrity": "sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==",
- "dev": true
- },
"homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -4295,15 +4292,6 @@
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
- "html-encoding-sniffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
- "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.1"
- }
- },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4563,12 +4551,6 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
- "ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true
- },
"is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
@@ -5030,40 +5012,6 @@
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
- "jsdom": {
- "version": "15.2.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz",
- "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==",
- "dev": true,
- "requires": {
- "abab": "^2.0.0",
- "acorn": "^7.1.0",
- "acorn-globals": "^4.3.2",
- "array-equal": "^1.0.0",
- "cssom": "^0.4.1",
- "cssstyle": "^2.0.0",
- "data-urls": "^1.1.0",
- "domexception": "^1.0.1",
- "escodegen": "^1.11.1",
- "html-encoding-sniffer": "^1.0.2",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.0",
- "pn": "^1.1.0",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.7",
- "saxes": "^3.1.9",
- "symbol-tree": "^3.2.2",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.1",
- "w3c-xmlserializer": "^1.1.2",
- "webidl-conversions": "^4.0.2",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^7.0.0",
- "ws": "^7.0.0",
- "xml-name-validator": "^3.0.0"
- }
- },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -5469,12 +5417,6 @@
"integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
"dev": true
},
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
"lodash.template": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
@@ -5569,12 +5511,6 @@
"yallist": "^3.0.2"
}
},
- "lunr": {
- "version": "2.3.9",
- "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
- "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
- "dev": true
- },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -5614,12 +5550,6 @@
"object-visit": "^1.0.0"
}
},
- "marked": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.5.tgz",
- "integrity": "sha512-2AlqgYnVPOc9WDyWu7S5DJaEZsfk6dNh/neatQ3IHUW4QLutM/VPSH9lG7bif+XjFWc9K9XR3QvR+fXuECmfdA==",
- "dev": true
- },
"matchdep": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
@@ -6305,12 +6235,6 @@
}
}
},
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
"nested-error-stacks": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
@@ -6616,12 +6540,6 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
},
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"nyc": {
"version": "14.1.1",
"resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz",
@@ -7094,12 +7012,6 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
- "dev": true
- },
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -7265,12 +7177,6 @@
"extend-shallow": "^3.0.2"
}
},
- "pn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
- "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
- "dev": true
- },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -7688,29 +7594,6 @@
"lodash": "^4.17.15"
}
},
- "request-promise-native": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
- "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
- "dev": true,
- "requires": {
- "request-promise-core": "1.1.3",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "dependencies": {
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- }
- }
- },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7848,15 +7731,6 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
- "saxes": {
- "version": "3.1.11",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
- "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.1.1"
- }
- },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -7929,17 +7803,6 @@
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
"dev": true
},
- "shelljs": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
- "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- }
- },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -8466,12 +8329,6 @@
"es6-symbol": "^3.1.1"
}
},
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
"table": {
"version": "5.4.6",
"resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
@@ -8812,26 +8669,6 @@
}
}
},
- "tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
- "dev": true,
- "requires": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
"ts-node": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz",
@@ -8915,76 +8752,12 @@
"is-typedarray": "^1.0.0"
}
},
- "typedoc": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.19.2.tgz",
- "integrity": "sha512-oDEg1BLEzi1qvgdQXc658EYgJ5qJLVSeZ0hQ57Eq4JXy6Vj2VX4RVo18qYxRWz75ifAaYuYNBUCnbhjd37TfOg==",
- "dev": true,
- "requires": {
- "fs-extra": "^9.0.1",
- "handlebars": "^4.7.6",
- "highlight.js": "^10.2.0",
- "lodash": "^4.17.20",
- "lunr": "^2.3.9",
- "marked": "^1.1.1",
- "minimatch": "^3.0.0",
- "progress": "^2.0.3",
- "semver": "^7.3.2",
- "shelljs": "^0.8.4",
- "typedoc-default-themes": "^0.11.4"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "typedoc-default-themes": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.11.4.tgz",
- "integrity": "sha512-Y4Lf+qIb9NTydrexlazAM46SSLrmrQRqWiD52593g53SsmUFioAsMWt8m834J6qsp+7wHRjxCXSZeiiW5cMUdw==",
- "dev": true
- },
"typescript": {
"version": "3.9.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz",
"integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==",
"dev": true
},
- "uglify-js": {
- "version": "3.12.1",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.1.tgz",
- "integrity": "sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ==",
- "dev": true,
- "optional": true
- },
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -9264,32 +9037,6 @@
"vinyl": "^2.0.0"
}
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
- "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
- "dev": true,
- "requires": {
- "domexception": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "xml-name-validator": "^3.0.0"
- }
- },
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
- },
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -9305,32 +9052,6 @@
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
},
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -9361,12 +9082,6 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- },
"workerpool": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz",
@@ -9409,30 +9124,12 @@
"typedarray-to-buffer": "^3.1.5"
}
},
- "ws": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
- "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==",
- "dev": true
- },
"xdg-basedir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"optional": true
},
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
@@ -9457,9 +9154,9 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"yargs": {
- "version": "16.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz",
- "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==",
+ "version": "17.0.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz",
+ "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==",
"dev": true,
"requires": {
"cliui": "^7.0.2",
@@ -9467,7 +9164,7 @@
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
- "y18n": "^5.0.2",
+ "y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"dependencies": {
@@ -9487,9 +9184,9 @@
}
},
"cliui": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz",
- "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
@@ -9525,9 +9222,9 @@
"dev": true
},
"string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -9556,15 +9253,15 @@
}
},
"y18n": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.4.tgz",
- "integrity": "sha512-deLOfD+RvFgrpAmSZgfGdWYE+OKyHcVHaRQ7NphG/63scpRvTHHeQMAxGGvaLVGJ+HYVcCXlzcTK0ZehFf+eHQ==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
},
"yargs-parser": {
- "version": "20.2.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz",
- "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==",
+ "version": "20.2.7",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
+ "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
"dev": true
}
}
diff --git a/package.json b/package.json
index d75168d7ff..e581c9cd57 100644
--- a/package.json
+++ b/package.json
@@ -20,10 +20,12 @@
"test:coverage": "nyc npm run test:unit",
"lint:src": "eslint src/ --ext .ts",
"lint:test": "eslint test/ --ext .ts",
- "apidocs": "node docgen/generate-docs.js --api node",
+ "apidocs": "run-s api-extractor:local api-documenter api-documenter:post",
"api-extractor": "node generate-reports.js",
"api-extractor:local": "npm run build && node generate-reports.js --local",
- "esm-wrap": "node generate-esm-wrapper.js"
+ "esm-wrap": "node generate-esm-wrapper.js",
+ "api-documenter": "api-documenter-fire markdown --input temp --output docgen/markdown -s",
+ "api-documenter:post": "node docgen/post-process.js"
},
"nyc": {
"extension": [
@@ -153,6 +155,7 @@
"@google-cloud/storage": "^5.3.0"
},
"devDependencies": {
+ "@firebase/api-documenter": "^0.1.1",
"@firebase/app": "^0.6.13",
"@firebase/auth": "^0.16.2",
"@firebase/auth-types": "^0.10.1",
@@ -186,7 +189,6 @@
"gulp-replace": "^0.5.4",
"gulp-typescript": "^5.0.1",
"http-message-parser": "^0.0.34",
- "jsdom": "^15.0.0",
"lodash": "^4.17.15",
"minimist": "^1.2.0",
"mocha": "^8.0.0",
@@ -200,8 +202,7 @@
"sinon": "^9.0.0",
"sinon-chai": "^3.0.0",
"ts-node": "^9.0.0",
- "typedoc": "^0.19.2",
"typescript": "^3.7.3",
- "yargs": "^16.0.0"
+ "yargs": "^17.0.1"
}
}
diff --git a/src/database/index.ts b/src/database/index.ts
index e3c1058671..f5b71fb7c3 100644
--- a/src/database/index.ts
+++ b/src/database/index.ts
@@ -47,14 +47,12 @@ export const enableLogging: typeof rtdb.enableLogging = enableLoggingFunc;
export const ServerValue: rtdb.ServerValue = serverValueConst;
/**
- * Gets the {@link database.Database `Database`} service for the default
+ * Gets the {@link Database} service for the default
* app or a given app.
*
* `getDatabase()` can be called with no arguments to access the default
- * app's {@link database.Database `Database`} service or as
- * `getDatabase(app)` to access the
- * {@link database.Database `Database`} service associated with a specific
- * app.
+ * app's `Database` service or as `getDatabase(app)` to access the
+ * `Database` service associated with a specific app.
*
* @example
* ```javascript
@@ -79,14 +77,12 @@ export function getDatabase(app?: App): Database {
}
/**
- * Gets the {@link database.Database `Database`} service for the default
+ * Gets the {@link Database} service for the default
* app or a given app.
*
* `getDatabaseWithUrl()` can be called with no arguments to access the default
- * app's {@link database.Database `Database`} service or as
- * `getDatabaseWithUrl(app)` to access the
- * {@link database.Database `Database`} service associated with a specific
- * app.
+ * app's {@link Database} service or as `getDatabaseWithUrl(app)` to access the
+ * {@link Database} service associated with a specific app.
*
* @example
* ```javascript
diff --git a/src/firestore/index.ts b/src/firestore/index.ts
index efb4047ac1..3d91bf9486 100644
--- a/src/firestore/index.ts
+++ b/src/firestore/index.ts
@@ -50,6 +50,33 @@ export {
setLogFunction,
} from '@google-cloud/firestore';
+/**
+ * Gets the {@link https://googleapis.dev/nodejs/firestore/latest/Firestore.html | Firestore}
+ * service for the default app or a given app.
+ *
+ * `getFirestore()` can be called with no arguments to access the default
+ * app's `Firestore` service or as `getFirestore(app)` to access the
+ * `Firestore` service associated with a specific app.
+ *
+ * @example
+ * ```javascript
+ * // Get the Firestore service for the default app
+ * const defaultFirestore = getFirestore();
+ * ```
+ *
+ * @example
+ * ```javascript
+ * // Get the Firestore service for a specific app
+ * const otherFirestore = getFirestore(app);
+ * ```
+ *
+ * @param App whose `Firestore` service to
+ * return. If not provided, the default `Firestore` service will be returned.
+ *
+ * @returns The default {@link https://googleapis.dev/nodejs/firestore/latest/Firestore.html | Firestore}
+ * service if no app is provided or the `Firestore` service associated with the
+ * provided app.
+ */
export function getFirestore(app?: App): Firestore {
if (typeof app === 'undefined') {
app = getApp();
- {{#each tags}} -- {{tagName}}
- - {{#markdown}}{{{text}}}{{/markdown}}
- {{/each}}
-
- {{/if}} -