mirror of
https://github.com/goauthentik/authentik
synced 2026-04-27 09:57:31 +02:00
* web: Separate global styles from element roots. * web: Flesh out style strategy plugin, fixes for imported styles. * web: Clean up applying of dark theme. web: unminify. * web: Fix alignment, rendering on high contrast. web: Apply footer resize. web: Fix application of global styles in style roots. web: Fix missing layout attribute. web: Normalize background alignment. web: Fix layout issues, color overrides. web: Fix alignment, colors, jank. web: Separate method into function. web: Clean up alignment, reflow. web: Fix colors, compatibility mode. web: Add content left/right support. web: Fix colors, compatibility mode overrides. * Fix issue where missing config throws runtime error. * web: Refactor. * Update tests. * web: Fix Storybook imports. * Fix order of theme application. * web: Fix storybook asset paths. * web: Flesh out tests surrounding source buttons, fix alignment, contrast. * Update tests, clarify errors. * Update test selectors, assertions. * Clarify redirect handling. * Adjust user check. * Update logs. * web: Fix selector timing. * Fix alignment. * Fix selectors, timing. * Log current URL content. * Refine shadow selector, add delay. * Replace IDs with named elements. * Fix overlay color. * Fix footer padding. * Fix contrast. * Add selectable name to button. * Fix alignment, mobile layout. * web: Spread exported parts to stages. * Fix z-index order. * Tidy colors, behaviors, layout. * Fix overflow scroll. * Clean up duplicate color styles. * Clarify selector order. Fix overrides, color contrast. * Attempt to read JSON multiple times. * Clarify error. * web: Fix timeouts, URL changes. * web: Fix disabled styles. * Fix color flip. * Fix selector. * Fix issue where hidden tables will alter test URLs. * Use DOM to look for connection, rather than API. Update selectors. * Immediately navigate to tab. * Upgrade Dex. * Ensure Dex redirects. * Use same host during tests. * web: Update package-lock.json * Add delay.
102 lines
2.6 KiB
JavaScript
102 lines
2.6 KiB
JavaScript
/**
|
|
* @file MDX plugin for ESBuild.
|
|
*
|
|
* @import {
|
|
* OnLoadArgs,
|
|
* OnLoadResult,
|
|
* OnResolveArgs,
|
|
* OnResolveResult,
|
|
* Plugin,
|
|
* PluginBuild
|
|
* } from "esbuild"
|
|
*/
|
|
|
|
import * as fs from "node:fs/promises";
|
|
import * as path from "node:path";
|
|
|
|
import { MonoRepoRoot } from "@goauthentik/core/paths/node";
|
|
|
|
/**
|
|
* @typedef {Omit<OnLoadArgs, 'pluginData'> & LoadDataFields} LoadData Data passed to `onload`.
|
|
*
|
|
* @typedef LoadDataFields Extra fields given in `data` to `onload`.
|
|
* @property {PluginData | null | undefined} [pluginData] Plugin data.
|
|
*
|
|
* @typedef PluginData Extra data passed.
|
|
* @property {Buffer | string | null | undefined} [contents] File contents.
|
|
*/
|
|
|
|
const pluginName = "mdx-plugin";
|
|
|
|
/**
|
|
* @typedef MDXPluginOptions
|
|
*
|
|
* @property {string} root Root directory.
|
|
*/
|
|
|
|
/**
|
|
* Bundle MDX into JSON modules.
|
|
*
|
|
* @param {MDXPluginOptions} options
|
|
* @returns {Plugin}
|
|
*/
|
|
export function mdxPlugin({ root }) {
|
|
const prefix = "~docs";
|
|
|
|
// TODO: Replace with `resolvePackage` after NPM Workspaces support is added.
|
|
const docsPackageRoot = path.resolve(MonoRepoRoot, "website");
|
|
|
|
/**
|
|
* @param {PluginBuild} build
|
|
*/
|
|
function setup(build) {
|
|
/**
|
|
* @param {OnResolveArgs} args
|
|
* @returns {Promise<OnResolveResult>}
|
|
*/
|
|
async function resolveListener(args) {
|
|
if (!args.path.startsWith("~")) return args;
|
|
|
|
return {
|
|
path: path.join(docsPackageRoot, "docs", args.path.slice(prefix.length)),
|
|
|
|
pluginName,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @param {LoadData} data
|
|
* @returns {Promise<OnLoadResult>}
|
|
*/
|
|
async function loadListener(data) {
|
|
const content = String(
|
|
data.pluginData &&
|
|
data.pluginData.contents !== null &&
|
|
data.pluginData.contents !== undefined
|
|
? data.pluginData.contents
|
|
: await fs.readFile(data.path),
|
|
);
|
|
|
|
const publicPath = path.resolve(
|
|
"/",
|
|
path.relative(path.join(root, "website", "docs"), data.path),
|
|
);
|
|
const publicDirectory = path.dirname(publicPath);
|
|
|
|
return {
|
|
contents: JSON.stringify({ content, publicPath, publicDirectory }),
|
|
loader: "file",
|
|
pluginName,
|
|
};
|
|
}
|
|
|
|
build.onResolve({ filter: /\.mdx?$/ }, resolveListener);
|
|
build.onLoad({ filter: /\.mdx?$/ }, loadListener);
|
|
}
|
|
|
|
return {
|
|
name: pluginName,
|
|
setup,
|
|
};
|
|
}
|