web: Update build paths. Fix types.
This commit is contained in:
		
				
					committed by
					
						
						Teffen Ellis
					
				
			
			
				
	
			
			
			
						parent
						
							01b9369afb
						
					
				
				
					commit
					9382fdf8cd
				
			
							
								
								
									
										42
									
								
								web/packages/monorepo/build.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								web/packages/monorepo/build.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @file Utility functions for building and copying files.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A source environment variable, which can be a string, number, boolean, null, or undefined.
 | 
			
		||||
 * @typedef {string | number | boolean | null | undefined} EnvironmentVariable
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A type helper for serializing environment variables.
 | 
			
		||||
 *
 | 
			
		||||
 * @template {EnvironmentVariable} T
 | 
			
		||||
 * @typedef {T extends string ? `"${T}"` : T} JSONify
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Given an object of environment variables, returns a new object with the same keys and values, but
 | 
			
		||||
 * with the values serialized as strings.
 | 
			
		||||
 *
 | 
			
		||||
 * @template {Record<string, EnvironmentVariable>} EnvRecord
 | 
			
		||||
 * @template {string} [Prefix='process.env.']
 | 
			
		||||
 *
 | 
			
		||||
 * @param {EnvRecord} input
 | 
			
		||||
 * @param {Prefix} [prefix='process.env.']
 | 
			
		||||
 *
 | 
			
		||||
 * @returns {{[K in keyof EnvRecord as `${Prefix}${K}`]: JSONify<EnvRecord[K]>}}
 | 
			
		||||
 */
 | 
			
		||||
export function serializeEnvironmentVars(input, prefix = /** @type {Prefix} */ ("process.env.")) {
 | 
			
		||||
    /**
 | 
			
		||||
     * @type {Record<string, string>}
 | 
			
		||||
     */
 | 
			
		||||
    const env = {};
 | 
			
		||||
 | 
			
		||||
    for (const [key, value] of Object.entries(input)) {
 | 
			
		||||
        const namespaceKey = prefix + key;
 | 
			
		||||
 | 
			
		||||
        env[namespaceKey] = JSON.stringify(value || "");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return /** @type {any} */ (env);
 | 
			
		||||
}
 | 
			
		||||
@ -1,8 +1,9 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @file Constants for JavaScript and TypeScript files.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/// <reference types="../../types/global.js" />
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The current Node.js environment, defaulting to "development" when not set.
 | 
			
		||||
 *
 | 
			
		||||
@ -12,6 +13,4 @@
 | 
			
		||||
 * ensure that module tree-shaking works correctly.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
export const NodeEnvironment = /** @type {'development' | 'production'} */ (
 | 
			
		||||
    process.env.NODE_ENV || "development"
 | 
			
		||||
);
 | 
			
		||||
export const NodeEnvironment = process.env.NODE_ENV || "development";
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,7 @@
 | 
			
		||||
/// <reference types="./types/global.js" />
 | 
			
		||||
 | 
			
		||||
export * from "./paths.js";
 | 
			
		||||
export * from "./constants.js";
 | 
			
		||||
export * from "./build.js";
 | 
			
		||||
export * from "./version.js";
 | 
			
		||||
export * from "./scripting.js";
 | 
			
		||||
 | 
			
		||||
@ -2,18 +2,27 @@
 | 
			
		||||
    "name": "@goauthentik/monorepo",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
    "description": "Utilities for the authentik monorepo.",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "main": "index.js",
 | 
			
		||||
    "type": "module",
 | 
			
		||||
    "exports": {
 | 
			
		||||
        "./package.json": "./package.json",
 | 
			
		||||
        ".": {
 | 
			
		||||
            "import": "./index.js",
 | 
			
		||||
            "types": "./out/index.d.ts"
 | 
			
		||||
            "types": "./out/index.d.ts",
 | 
			
		||||
            "import": "./index.js"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "types": "./out/index.d.ts",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@goauthentik/prettier-config": "^1.0.4",
 | 
			
		||||
        "@goauthentik/tsconfig": "^1.0.4",
 | 
			
		||||
        "@types/node": "^22.14.1",
 | 
			
		||||
        "prettier": "^3.3.3",
 | 
			
		||||
        "typescript": "^5.6.2"
 | 
			
		||||
    },
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=20.11"
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
    "types": "./out/index.d.ts",
 | 
			
		||||
    "prettier": "@goauthentik/prettier-config"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ import { createRequire } from "node:module";
 | 
			
		||||
import { dirname, join, resolve } from "node:path";
 | 
			
		||||
import { fileURLToPath } from "node:url";
 | 
			
		||||
 | 
			
		||||
const __dirname = dirname(fileURLToPath(import.meta.url));
 | 
			
		||||
const relativeDirname = dirname(fileURLToPath(import.meta.url));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {'~authentik'} MonoRepoRoot
 | 
			
		||||
@ -11,20 +11,35 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
 | 
			
		||||
/**
 | 
			
		||||
 * The root of the authentik monorepo.
 | 
			
		||||
 */
 | 
			
		||||
export const MonoRepoRoot = /** @type {MonoRepoRoot} */ (resolve(__dirname, "..", ".."));
 | 
			
		||||
// TODO: Revise when this package is moved to the monorepo's `packages/monorepo` directory.
 | 
			
		||||
export const MonoRepoRoot = /** @type {MonoRepoRoot} */ (
 | 
			
		||||
    resolve(relativeDirname, "..", "..", "..")
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const require = createRequire(import.meta.url);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Resolve a package name to its location in the monorepo to the single node_modules directory.
 | 
			
		||||
 * @param {string} packageName
 | 
			
		||||
 *
 | 
			
		||||
 * @returns {string} The resolved path to the package.
 | 
			
		||||
 * @throws {Error} If the package cannot be resolved.
 | 
			
		||||
 */
 | 
			
		||||
export function resolvePackage(packageName) {
 | 
			
		||||
    const packageJSONPath = require.resolve(join(packageName, "package.json"), {
 | 
			
		||||
        paths: [MonoRepoRoot],
 | 
			
		||||
    });
 | 
			
		||||
    const relativePackageJSONPath = join(packageName, "package.json");
 | 
			
		||||
 | 
			
		||||
    return dirname(packageJSONPath);
 | 
			
		||||
    /** @type {string} */
 | 
			
		||||
    let absolutePackageJSONPath;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        absolutePackageJSONPath = require.resolve(relativePackageJSONPath);
 | 
			
		||||
    } catch (cause) {
 | 
			
		||||
        const error = new Error(`Failed to resolve package "${packageName}"`);
 | 
			
		||||
 | 
			
		||||
        error.cause = cause;
 | 
			
		||||
 | 
			
		||||
        throw error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return dirname(absolutePackageJSONPath);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								web/packages/monorepo/types/global.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								web/packages/monorepo/types/global.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
declare module "process" {
 | 
			
		||||
    global {
 | 
			
		||||
        namespace NodeJS {
 | 
			
		||||
            interface ProcessEnv {
 | 
			
		||||
                /**
 | 
			
		||||
                 * An environment variable used to determine
 | 
			
		||||
                 * whether Node.js is running in production mode.
 | 
			
		||||
                 *
 | 
			
		||||
                 * @see {@link https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production | The difference between development and production}
 | 
			
		||||
                 */
 | 
			
		||||
                NODE_ENV?: "production" | "development";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { execSync } from "node:child_process";
 | 
			
		||||
 | 
			
		||||
import PackageJSON from "../../package.json" with { type: "json" };
 | 
			
		||||
import PackageJSON from "../../../package.json" with { type: "json" };
 | 
			
		||||
import { MonoRepoRoot } from "./paths.js";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user