mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-03 03:12:35 +02:00
refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS (#5561)
* migration * Move to devDeps * Use type assertion
This commit is contained in:
parent
2ef70cb806
commit
19b27ef73b
13 changed files with 128 additions and 30 deletions
|
@ -2,10 +2,15 @@
|
||||||
"name": "@docusaurus/plugin-google-analytics",
|
"name": "@docusaurus/plugin-google-analytics",
|
||||||
"version": "2.0.0-beta.6",
|
"version": "2.0.0-beta.6",
|
||||||
"description": "Global analytics (analytics.js) plugin for Docusaurus.",
|
"description": "Global analytics (analytics.js) plugin for Docusaurus.",
|
||||||
"main": "src/index.js",
|
"main": "lib/index.js",
|
||||||
|
"types": "src/plugin-google-analytics.d.ts",
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
},
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc",
|
||||||
|
"watch": "tsc --watch"
|
||||||
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/facebook/docusaurus.git",
|
"url": "https://github.com/facebook/docusaurus.git",
|
||||||
|
@ -15,6 +20,9 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "2.0.0-beta.6"
|
"@docusaurus/core": "2.0.0-beta.6"
|
||||||
},
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@docusaurus/types": "2.0.0-beta.6"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.8.4 || ^17.0.0",
|
"react": "^16.8.4 || ^17.0.0",
|
||||||
"react-dom": "^16.8.4 || ^17.0.0"
|
"react-dom": "^16.8.4 || ^17.0.0"
|
||||||
|
|
|
@ -13,7 +13,7 @@ export default (function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
onRouteUpdate({location}) {
|
onRouteUpdate({location}: {location: Location}) {
|
||||||
// Set page so that subsequent hits on this page are attributed
|
// Set page so that subsequent hits on this page are attributed
|
||||||
// to this page. This is recommended for Single-page Applications.
|
// to this page. This is recommended for Single-page Applications.
|
||||||
window.ga('set', 'page', location.pathname);
|
window.ga('set', 'page', location.pathname);
|
|
@ -5,12 +5,15 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const path = require('path');
|
import path from 'path';
|
||||||
|
import type {LoadContext, Plugin, HtmlTags} from '@docusaurus/types';
|
||||||
|
import type {ThemeConfig} from '@docusaurus/plugin-google-analytics';
|
||||||
|
|
||||||
module.exports = function (context) {
|
export default function pluginGoogleAnalytics(context: LoadContext): Plugin {
|
||||||
const {siteConfig} = context;
|
const {
|
||||||
const {themeConfig} = siteConfig;
|
siteConfig: {themeConfig},
|
||||||
const {googleAnalytics} = themeConfig || {};
|
} = context;
|
||||||
|
const {googleAnalytics} = themeConfig as ThemeConfig;
|
||||||
|
|
||||||
if (!googleAnalytics) {
|
if (!googleAnalytics) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -66,8 +69,8 @@ module.exports = function (context) {
|
||||||
src: 'https://www.google-analytics.com/analytics.js',
|
src: 'https://www.google-analytics.com/analytics.js',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
] as HtmlTags,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
}
|
13
packages/docusaurus-plugin-google-analytics/src/plugin-google-analytics.d.ts
vendored
Normal file
13
packages/docusaurus-plugin-google-analytics/src/plugin-google-analytics.d.ts
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface ThemeConfig {
|
||||||
|
googleAnalytics?: {
|
||||||
|
trackingID: string;
|
||||||
|
anonymizeIP?: boolean;
|
||||||
|
};
|
||||||
|
}
|
12
packages/docusaurus-plugin-google-analytics/src/types.d.ts
vendored
Normal file
12
packages/docusaurus-plugin-google-analytics/src/types.d.ts
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// <reference types="@docusaurus/module-type-aliases" />
|
||||||
|
|
||||||
|
interface Window {
|
||||||
|
ga: (command: string, ...fields: string[]) => void;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"incremental": true,
|
||||||
|
"tsBuildInfoFile": "./lib/.tsbuildinfo",
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "lib"
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,12 @@
|
||||||
"name": "@docusaurus/plugin-google-gtag",
|
"name": "@docusaurus/plugin-google-gtag",
|
||||||
"version": "2.0.0-beta.6",
|
"version": "2.0.0-beta.6",
|
||||||
"description": "Global Site Tag (gtag.js) plugin for Docusaurus.",
|
"description": "Global Site Tag (gtag.js) plugin for Docusaurus.",
|
||||||
"main": "src/index.js",
|
"main": "lib/index.js",
|
||||||
|
"types": "src/plugin-google-gtag.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc",
|
||||||
|
"watch": "tsc --watch"
|
||||||
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
},
|
},
|
||||||
|
@ -15,6 +20,9 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "2.0.0-beta.6"
|
"@docusaurus/core": "2.0.0-beta.6"
|
||||||
},
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@docusaurus/types": "2.0.0-beta.6"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.8.4 || ^17.0.0",
|
"react": "^16.8.4 || ^17.0.0",
|
||||||
"react-dom": "^16.8.4 || ^17.0.0"
|
"react-dom": "^16.8.4 || ^17.0.0"
|
||||||
|
|
|
@ -7,20 +7,19 @@
|
||||||
|
|
||||||
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
||||||
import siteConfig from '@generated/docusaurus.config';
|
import siteConfig from '@generated/docusaurus.config';
|
||||||
|
import type {ThemeConfig} from '@docusaurus/plugin-google-gtag';
|
||||||
|
|
||||||
export default (function () {
|
export default (function () {
|
||||||
if (!ExecutionEnvironment.canUseDOM) {
|
if (!ExecutionEnvironment.canUseDOM) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {themeConfig} = siteConfig;
|
||||||
themeConfig: {
|
const {gtag} = themeConfig as ThemeConfig;
|
||||||
gtag: {trackingID},
|
const {trackingID} = gtag!;
|
||||||
},
|
|
||||||
} = siteConfig;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
onRouteUpdate({location}) {
|
onRouteUpdate({location}: {location: Location}) {
|
||||||
// Always refer to the variable on window in-case it gets overridden elsewhere.
|
// Always refer to the variable on window in-case it gets overridden elsewhere.
|
||||||
window.gtag('config', trackingID, {
|
window.gtag('config', trackingID, {
|
||||||
page_path: location.pathname,
|
page_path: location.pathname,
|
|
@ -5,12 +5,15 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const path = require('path');
|
import path from 'path';
|
||||||
|
import type {LoadContext, Plugin, HtmlTags} from '@docusaurus/types';
|
||||||
|
import type {ThemeConfig} from '@docusaurus/plugin-google-gtag';
|
||||||
|
|
||||||
module.exports = function (context) {
|
export default function pluginGoogleGtag(context: LoadContext): Plugin {
|
||||||
const {siteConfig} = context;
|
const {
|
||||||
const {themeConfig} = siteConfig;
|
siteConfig: {themeConfig},
|
||||||
const {gtag} = themeConfig || {};
|
} = context;
|
||||||
|
const {gtag} = themeConfig as ThemeConfig;
|
||||||
|
|
||||||
if (!gtag) {
|
if (!gtag) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -75,8 +78,8 @@ module.exports = function (context) {
|
||||||
anonymizeIP ? "'anonymize_ip': true" : ''
|
anonymizeIP ? "'anonymize_ip': true" : ''
|
||||||
} });`,
|
} });`,
|
||||||
},
|
},
|
||||||
],
|
] as HtmlTags,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
}
|
13
packages/docusaurus-plugin-google-gtag/src/plugin-google-gtag.d.ts
vendored
Normal file
13
packages/docusaurus-plugin-google-gtag/src/plugin-google-gtag.d.ts
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface ThemeConfig {
|
||||||
|
gtag?: {
|
||||||
|
trackingID: string;
|
||||||
|
anonymizeIP?: boolean;
|
||||||
|
};
|
||||||
|
}
|
21
packages/docusaurus-plugin-google-gtag/src/types.d.ts
vendored
Normal file
21
packages/docusaurus-plugin-google-gtag/src/types.d.ts
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable camelcase */
|
||||||
|
/// <reference types="@docusaurus/module-type-aliases" />
|
||||||
|
|
||||||
|
interface Window {
|
||||||
|
gtag: (
|
||||||
|
command: string,
|
||||||
|
fields: string,
|
||||||
|
params: {
|
||||||
|
page_title?: string;
|
||||||
|
page_location?: string;
|
||||||
|
page_path?: string;
|
||||||
|
},
|
||||||
|
) => void;
|
||||||
|
}
|
9
packages/docusaurus-plugin-google-gtag/tsconfig.json
Normal file
9
packages/docusaurus-plugin-google-gtag/tsconfig.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"incremental": true,
|
||||||
|
"tsBuildInfoFile": "./lib/.tsbuildinfo",
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "lib"
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,10 +14,10 @@ export type Options = {
|
||||||
theme?: import('@docusaurus/theme-classic').Options;
|
theme?: import('@docusaurus/theme-classic').Options;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ThemeConfig = import('@docusaurus/theme-common').ThemeConfig & {
|
export type ThemeConfig = import('@docusaurus/theme-common').ThemeConfig &
|
||||||
|
import('@docusaurus/plugin-google-analytics').ThemeConfig &
|
||||||
|
import('@docusaurus/plugin-google-gtag').ThemeConfig & {
|
||||||
// Those themeConfigs should rather be moved to preset/plugin options
|
// Those themeConfigs should rather be moved to preset/plugin options
|
||||||
// Plugin data can be made available to browser thank to the globalData api
|
// Plugin data can be made available to browser thank to the globalData api
|
||||||
algolia?: unknown; // TODO type plugin
|
algolia?: unknown; // TODO type plugin
|
||||||
googleAnalytics?: unknown; // TODO type plugin
|
|
||||||
gtag?: unknown; // TODO type plugin
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue