From 966c6b363686689586b199c0902564e41b79360c Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Tue, 27 Jun 2023 23:03:59 +0900 Subject: [PATCH 1/6] feat: implement fathom --- packages/docusaurus-fathom/CHANGELOG.md | 1 + packages/docusaurus-fathom/package.json | 38 +++++++++++++++++++ .../docusaurus-fathom/src/client/index.ts | 33 ++++++++++++++++ .../docusaurus-fathom/src/client/options.ts | 2 + .../src/client/types/plugin.types.ts | 4 ++ packages/docusaurus-fathom/src/deps.d.ts | 0 packages/docusaurus-fathom/src/index.ts | 25 ++++++++++++ packages/docusaurus-fathom/src/plugin.d.ts | 1 + .../docusaurus-fathom/tsconfig.client.json | 16 ++++++++ packages/docusaurus-fathom/tsconfig.json | 14 +++++++ .../docusaurus.config.js | 9 +++++ packages/docusaurus-playground/src/fathom.ts | 33 ++++++++++++++++ packages/logos-docusaurus-preset/src/index.ts | 1 + 13 files changed, 177 insertions(+) create mode 100644 packages/docusaurus-fathom/CHANGELOG.md create mode 100644 packages/docusaurus-fathom/package.json create mode 100644 packages/docusaurus-fathom/src/client/index.ts create mode 100644 packages/docusaurus-fathom/src/client/options.ts create mode 100644 packages/docusaurus-fathom/src/client/types/plugin.types.ts create mode 100644 packages/docusaurus-fathom/src/deps.d.ts create mode 100644 packages/docusaurus-fathom/src/index.ts create mode 100644 packages/docusaurus-fathom/src/plugin.d.ts create mode 100644 packages/docusaurus-fathom/tsconfig.client.json create mode 100644 packages/docusaurus-fathom/tsconfig.json create mode 100644 packages/docusaurus-playground/src/fathom.ts diff --git a/packages/docusaurus-fathom/CHANGELOG.md b/packages/docusaurus-fathom/CHANGELOG.md new file mode 100644 index 0000000..420e6f2 --- /dev/null +++ b/packages/docusaurus-fathom/CHANGELOG.md @@ -0,0 +1 @@ +# Change Log diff --git a/packages/docusaurus-fathom/package.json b/packages/docusaurus-fathom/package.json new file mode 100644 index 0000000..182f46b --- /dev/null +++ b/packages/docusaurus-fathom/package.json @@ -0,0 +1,38 @@ +{ + "name": "@acid-info/docusaurus-fathom", + "version": "1.0.0-alpha.1", + "description": "Docusaurus fathom plugin", + "main": "lib/index.js", + "types": "src/plugin.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/acid-info/logos-docusaurus-plugins.git", + "directory": "packages/docusaurus-fathom" + }, + "license": "MIT", + "scripts": { + "build": "tsc --build", + "watch": "tsc --build --watch", + "prepublishOnly": "yarn build" + }, + "dependencies": { + "@docusaurus/core": "^2.4.1", + "@docusaurus/module-type-aliases": "^2.4.1", + "@docusaurus/types": "^2.4.1", + "@docusaurus/utils": "^2.4.1", + "@docusaurus/utils-common": "^2.4.1", + "@docusaurus/utils-validation": "^2.4.1", + "lodash": "^4.17.21", + "node-html-parser": "^6.1.5", + "object-hash": "^3.0.0", + "satori": "^0.10.1", + "sharp": "^0.32.1" + }, + "engines": { + "node": ">=16.14" + }, + "devDependencies": { + "@types/lodash": "^4.14.186" + }, + "gitHead": "d2ee08c6c0678f78ad70f5d04183f7f781d11563" +} diff --git a/packages/docusaurus-fathom/src/client/index.ts b/packages/docusaurus-fathom/src/client/index.ts new file mode 100644 index 0000000..f70e3d8 --- /dev/null +++ b/packages/docusaurus-fathom/src/client/index.ts @@ -0,0 +1,33 @@ +import { SITE_ID, SCRIPT_URL } from './options' + +declare global { + interface Window { + fathom: any + } +} + +;(function (f: any, a: Window, t: string, h: string) { + a[h] = + a[h] || + function () { + ;(a[h].q = a[h].q || []).push(arguments) + } + const o = f.createElement('script') + const m = f.getElementsByTagName('script')[0] + o.async = 1 + o.src = t + o.id = 'fathom-script' + m.parentNode.insertBefore(o, m) +})(document, window, SCRIPT_URL, 'fathom') + +const { fathom } = window as any +fathom('set', 'siteId', SITE_ID) +fathom('trackPageview') + +console.log('PLUGIN_SITE_ID', SITE_ID) + +export function onRouteDidUpdate({ location, previousLocation }) { + if (location.pathname !== previousLocation?.pathname) { + fathom('trackPageview') + } +} diff --git a/packages/docusaurus-fathom/src/client/options.ts b/packages/docusaurus-fathom/src/client/options.ts new file mode 100644 index 0000000..2691185 --- /dev/null +++ b/packages/docusaurus-fathom/src/client/options.ts @@ -0,0 +1,2 @@ +export const SITE_ID = '' +export const SCRIPT_URL = '' diff --git a/packages/docusaurus-fathom/src/client/types/plugin.types.ts b/packages/docusaurus-fathom/src/client/types/plugin.types.ts new file mode 100644 index 0000000..5e0aabe --- /dev/null +++ b/packages/docusaurus-fathom/src/client/types/plugin.types.ts @@ -0,0 +1,4 @@ +export type PluginOptions = { + siteId: string + scriptUrl: string +} diff --git a/packages/docusaurus-fathom/src/deps.d.ts b/packages/docusaurus-fathom/src/deps.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/docusaurus-fathom/src/index.ts b/packages/docusaurus-fathom/src/index.ts new file mode 100644 index 0000000..9de6fb3 --- /dev/null +++ b/packages/docusaurus-fathom/src/index.ts @@ -0,0 +1,25 @@ +import type { LoadContext, Plugin } from '@docusaurus/types' +import { PluginOptions } from './client/types/plugin.types' +import path from 'path' +import fs from 'fs-extra' + +export default function fathomPlugin( + context: LoadContext, + options: PluginOptions, +): Plugin { + const { siteId, scriptUrl } = options + const dir = path.join(context.generatedFilesDir, 'docusaurus-fathom/default') + fs.ensureDirSync(dir) + + fs.writeFileSync( + path.join(dir, 'options.ts'), + `export const SITE_ID = '${siteId}'\nexport const SCRIPT_URL = '${scriptUrl}'`, + ) + + return { + name: 'docusaurus-fathom', + getClientModules: () => [path.resolve(__dirname, './client/index.js')], + } +} + +export { type PluginOptions } diff --git a/packages/docusaurus-fathom/src/plugin.d.ts b/packages/docusaurus-fathom/src/plugin.d.ts new file mode 100644 index 0000000..ccd487e --- /dev/null +++ b/packages/docusaurus-fathom/src/plugin.d.ts @@ -0,0 +1 @@ +export type * from './index' diff --git a/packages/docusaurus-fathom/tsconfig.client.json b/packages/docusaurus-fathom/tsconfig.client.json new file mode 100644 index 0000000..1085444 --- /dev/null +++ b/packages/docusaurus-fathom/tsconfig.client.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo-client", + "rootDir": "src", + "outDir": "lib", + "module": "esnext", + "target": "esnext", + "lib": ["DOM"] + }, + "include": ["src/client", "src/*.d.ts"], + "exclude": ["**/__tests__/**"] +} diff --git a/packages/docusaurus-fathom/tsconfig.json b/packages/docusaurus-fathom/tsconfig.json new file mode 100644 index 0000000..ac2d96a --- /dev/null +++ b/packages/docusaurus-fathom/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "references": [{ "path": "./tsconfig.client.json" }], + "compilerOptions": { + "noEmit": false, + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "rootDir": "src", + "outDir": "lib", + "lib": ["DOM"] + }, + "include": ["src"], + "exclude": ["src/theme", "**/__tests__/**"] +} diff --git a/packages/docusaurus-playground/docusaurus.config.js b/packages/docusaurus-playground/docusaurus.config.js index 8ed3f61..651e6c8 100644 --- a/packages/docusaurus-playground/docusaurus.config.js +++ b/packages/docusaurus-playground/docusaurus.config.js @@ -54,6 +54,8 @@ const config = { ], ], + // clientModules: ['./src/fathom.ts'], + plugins: [ [ '@docusaurus/plugin-content-blog', @@ -69,6 +71,13 @@ const config = { authorsMapPath: 'authors.yml', }), ], + [ + '@acid-info/docusaurus-fathom', + { + siteId: 'SIDE_ID_2', + scriptUrl: 'SCRIPT_URL_2', + }, + ], ], themeConfig: diff --git a/packages/docusaurus-playground/src/fathom.ts b/packages/docusaurus-playground/src/fathom.ts new file mode 100644 index 0000000..c45a4b0 --- /dev/null +++ b/packages/docusaurus-playground/src/fathom.ts @@ -0,0 +1,33 @@ +const SCRIPT_URL = '//fathom.status.im/tracker.js' +const SITE_ID = 'FUTMI' + +declare global { + interface Window { + fathom: any + } +} + +;(function (f: any, a: Window, t: string, h: string) { + a[h] = + a[h] || + function () { + ;(a[h].q = a[h].q || []).push(arguments) + } + const o = f.createElement('script') + const m = f.getElementsByTagName('script')[0] + o.async = 1 + o.src = t + o.id = 'fathom-script' + m.parentNode.insertBefore(o, m) +})(document, window, SCRIPT_URL, 'fathom') + +const { fathom } = window as any +fathom('set', 'siteId', SITE_ID) +fathom('trackPageview') + +export function onRouteDidUpdate({ location, previousLocation }) { + console.log('vvxcvxcv') + if (location.pathname !== previousLocation?.pathname) { + fathom('trackPageview') + } +} diff --git a/packages/logos-docusaurus-preset/src/index.ts b/packages/logos-docusaurus-preset/src/index.ts index eaae3c4..144d109 100644 --- a/packages/logos-docusaurus-preset/src/index.ts +++ b/packages/logos-docusaurus-preset/src/index.ts @@ -45,6 +45,7 @@ export default function logosPreset( context: LoadContext, options: PluginOptions, ): Preset { + //@ts-ignore const docsEnabled = options.docs !== false const siteConfig: typeof context.siteConfig = defaultsDeep( From 2f1919de34f6bf0b2891b622aa4ed85030cc75af Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Tue, 27 Jun 2023 23:25:02 +0900 Subject: [PATCH 2/6] chore: use generated options --- packages/docusaurus-fathom/src/client/index.ts | 7 ++++--- packages/docusaurus-fathom/src/client/options.ts | 2 -- packages/docusaurus-fathom/src/deps.d.ts | 1 + packages/docusaurus-fathom/src/index.ts | 2 +- packages/docusaurus-playground/docusaurus.config.js | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 packages/docusaurus-fathom/src/client/options.ts diff --git a/packages/docusaurus-fathom/src/client/index.ts b/packages/docusaurus-fathom/src/client/index.ts index f70e3d8..9ab3488 100644 --- a/packages/docusaurus-fathom/src/client/index.ts +++ b/packages/docusaurus-fathom/src/client/index.ts @@ -1,4 +1,7 @@ -import { SITE_ID, SCRIPT_URL } from './options' +import { + SITE_ID, + SCRIPT_URL, +} from '@generated/docusaurus-fathom/default/options' declare global { interface Window { @@ -24,8 +27,6 @@ const { fathom } = window as any fathom('set', 'siteId', SITE_ID) fathom('trackPageview') -console.log('PLUGIN_SITE_ID', SITE_ID) - export function onRouteDidUpdate({ location, previousLocation }) { if (location.pathname !== previousLocation?.pathname) { fathom('trackPageview') diff --git a/packages/docusaurus-fathom/src/client/options.ts b/packages/docusaurus-fathom/src/client/options.ts deleted file mode 100644 index 2691185..0000000 --- a/packages/docusaurus-fathom/src/client/options.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const SITE_ID = '' -export const SCRIPT_URL = '' diff --git a/packages/docusaurus-fathom/src/deps.d.ts b/packages/docusaurus-fathom/src/deps.d.ts index e69de29..300767f 100644 --- a/packages/docusaurus-fathom/src/deps.d.ts +++ b/packages/docusaurus-fathom/src/deps.d.ts @@ -0,0 +1 @@ +declare module '@generated/docusaurus-fathom/default/options' diff --git a/packages/docusaurus-fathom/src/index.ts b/packages/docusaurus-fathom/src/index.ts index 9de6fb3..966e821 100644 --- a/packages/docusaurus-fathom/src/index.ts +++ b/packages/docusaurus-fathom/src/index.ts @@ -13,7 +13,7 @@ export default function fathomPlugin( fs.writeFileSync( path.join(dir, 'options.ts'), - `export const SITE_ID = '${siteId}'\nexport const SCRIPT_URL = '${scriptUrl}'`, + `export const SITE_ID = "${siteId}"\nexport const SCRIPT_URL = "${scriptUrl}"`, ) return { diff --git a/packages/docusaurus-playground/docusaurus.config.js b/packages/docusaurus-playground/docusaurus.config.js index 651e6c8..bd7ff53 100644 --- a/packages/docusaurus-playground/docusaurus.config.js +++ b/packages/docusaurus-playground/docusaurus.config.js @@ -74,8 +74,8 @@ const config = { [ '@acid-info/docusaurus-fathom', { - siteId: 'SIDE_ID_2', - scriptUrl: 'SCRIPT_URL_2', + siteId: 'FUTMI', + scriptUrl: '//fathom.status.im/tracker.js', }, ], ], From 0d03f51790c613a43c96925f51caa5e8e346b3fd Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Wed, 28 Jun 2023 00:29:11 +0900 Subject: [PATCH 3/6] fix: fix build errors --- .../docusaurus-fathom/src/client/index.ts | 49 +++++++++++-------- packages/docusaurus-fathom/src/deps.d.ts | 1 + 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/packages/docusaurus-fathom/src/client/index.ts b/packages/docusaurus-fathom/src/client/index.ts index 9ab3488..895013d 100644 --- a/packages/docusaurus-fathom/src/client/index.ts +++ b/packages/docusaurus-fathom/src/client/index.ts @@ -2,6 +2,7 @@ import { SITE_ID, SCRIPT_URL, } from '@generated/docusaurus-fathom/default/options' +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' declare global { interface Window { @@ -9,26 +10,34 @@ declare global { } } -;(function (f: any, a: Window, t: string, h: string) { - a[h] = - a[h] || - function () { - ;(a[h].q = a[h].q || []).push(arguments) +let onRouteDidUpdate + +if (ExecutionEnvironment.canUseDOM) { + ;(function (f: any, a: any, t: string, h: string) { + a[h] = + a[h] || + function () { + ;(a[h].q = a[h].q || []).push(arguments) + } + const o = f.createElement('script') + const m = f.getElementsByTagName('script')[0] + o.async = 1 + o.src = t + o.id = 'fathom-script' + m.parentNode.insertBefore(o, m) + })(document, window, SCRIPT_URL, 'fathom') + + const { fathom } = window as any + fathom('set', 'siteId', SITE_ID) + fathom('trackPageview') + + function onRouteDidUpdateFnc({ location, previousLocation }) { + if (location.pathname !== previousLocation?.pathname) { + fathom('trackPageview') } - const o = f.createElement('script') - const m = f.getElementsByTagName('script')[0] - o.async = 1 - o.src = t - o.id = 'fathom-script' - m.parentNode.insertBefore(o, m) -})(document, window, SCRIPT_URL, 'fathom') - -const { fathom } = window as any -fathom('set', 'siteId', SITE_ID) -fathom('trackPageview') - -export function onRouteDidUpdate({ location, previousLocation }) { - if (location.pathname !== previousLocation?.pathname) { - fathom('trackPageview') } + + onRouteDidUpdate = onRouteDidUpdateFnc } + +export { onRouteDidUpdate } diff --git a/packages/docusaurus-fathom/src/deps.d.ts b/packages/docusaurus-fathom/src/deps.d.ts index 300767f..0114c79 100644 --- a/packages/docusaurus-fathom/src/deps.d.ts +++ b/packages/docusaurus-fathom/src/deps.d.ts @@ -1 +1,2 @@ declare module '@generated/docusaurus-fathom/default/options' +declare module '@docusaurus/ExecutionEnvironment' From 02b3cad4fd1a3897ef09e8648dc789aec0029ae5 Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Wed, 28 Jun 2023 09:33:48 +0900 Subject: [PATCH 4/6] fix: remove unnecessary fathom file --- .../docusaurus.config.js | 4 +-- packages/docusaurus-playground/src/fathom.ts | 33 ------------------- 2 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 packages/docusaurus-playground/src/fathom.ts diff --git a/packages/docusaurus-playground/docusaurus.config.js b/packages/docusaurus-playground/docusaurus.config.js index bd7ff53..b164d10 100644 --- a/packages/docusaurus-playground/docusaurus.config.js +++ b/packages/docusaurus-playground/docusaurus.config.js @@ -54,8 +54,6 @@ const config = { ], ], - // clientModules: ['./src/fathom.ts'], - plugins: [ [ '@docusaurus/plugin-content-blog', @@ -75,7 +73,7 @@ const config = { '@acid-info/docusaurus-fathom', { siteId: 'FUTMI', - scriptUrl: '//fathom.status.im/tracker.js', + scriptUrl: 'https://fathom.status.im/tracker.js', }, ], ], diff --git a/packages/docusaurus-playground/src/fathom.ts b/packages/docusaurus-playground/src/fathom.ts deleted file mode 100644 index c45a4b0..0000000 --- a/packages/docusaurus-playground/src/fathom.ts +++ /dev/null @@ -1,33 +0,0 @@ -const SCRIPT_URL = '//fathom.status.im/tracker.js' -const SITE_ID = 'FUTMI' - -declare global { - interface Window { - fathom: any - } -} - -;(function (f: any, a: Window, t: string, h: string) { - a[h] = - a[h] || - function () { - ;(a[h].q = a[h].q || []).push(arguments) - } - const o = f.createElement('script') - const m = f.getElementsByTagName('script')[0] - o.async = 1 - o.src = t - o.id = 'fathom-script' - m.parentNode.insertBefore(o, m) -})(document, window, SCRIPT_URL, 'fathom') - -const { fathom } = window as any -fathom('set', 'siteId', SITE_ID) -fathom('trackPageview') - -export function onRouteDidUpdate({ location, previousLocation }) { - console.log('vvxcvxcv') - if (location.pathname !== previousLocation?.pathname) { - fathom('trackPageview') - } -} From 86039478d19ac473ce73967fca292e3ff576c892 Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Wed, 28 Jun 2023 09:38:20 +0900 Subject: [PATCH 5/6] refactor: export onRouteDidUpdate for fathom plugin --- .../docusaurus-fathom/src/client/index.ts | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/docusaurus-fathom/src/client/index.ts b/packages/docusaurus-fathom/src/client/index.ts index 895013d..b05afd9 100644 --- a/packages/docusaurus-fathom/src/client/index.ts +++ b/packages/docusaurus-fathom/src/client/index.ts @@ -3,6 +3,7 @@ import { SCRIPT_URL, } from '@generated/docusaurus-fathom/default/options' import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' +import { ClientModule } from '@docusaurus/types/src/clientModule' declare global { interface Window { @@ -10,8 +11,6 @@ declare global { } } -let onRouteDidUpdate - if (ExecutionEnvironment.canUseDOM) { ;(function (f: any, a: any, t: string, h: string) { a[h] = @@ -30,14 +29,13 @@ if (ExecutionEnvironment.canUseDOM) { const { fathom } = window as any fathom('set', 'siteId', SITE_ID) fathom('trackPageview') - - function onRouteDidUpdateFnc({ location, previousLocation }) { - if (location.pathname !== previousLocation?.pathname) { - fathom('trackPageview') - } - } - - onRouteDidUpdate = onRouteDidUpdateFnc } -export { onRouteDidUpdate } +export const onRouteDidUpdate: ClientModule['onRouteDidUpdate'] = ({ + location, + previousLocation, +}) => { + if (location.pathname !== previousLocation?.pathname) { + window.fathom('trackPageview') + } +} From 86093fcc22b0b95005e901dc8e1f64dac7aaa9c3 Mon Sep 17 00:00:00 2001 From: jinhojang6 Date: Wed, 28 Jun 2023 09:40:32 +0900 Subject: [PATCH 6/6] refactor: remove ts-ignore from logosPreset --- packages/logos-docusaurus-preset/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/logos-docusaurus-preset/src/index.ts b/packages/logos-docusaurus-preset/src/index.ts index 144d109..eaae3c4 100644 --- a/packages/logos-docusaurus-preset/src/index.ts +++ b/packages/logos-docusaurus-preset/src/index.ts @@ -45,7 +45,6 @@ export default function logosPreset( context: LoadContext, options: PluginOptions, ): Preset { - //@ts-ignore const docsEnabled = options.docs !== false const siteConfig: typeof context.siteConfig = defaultsDeep(