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.
|
* @file Constants for JavaScript and TypeScript files.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/// <reference types="../../types/global.js" />
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current Node.js environment, defaulting to "development" when not set.
|
* The current Node.js environment, defaulting to "development" when not set.
|
||||||
*
|
*
|
||||||
@ -12,6 +13,4 @@
|
|||||||
* ensure that module tree-shaking works correctly.
|
* ensure that module tree-shaking works correctly.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export const NodeEnvironment = /** @type {'development' | 'production'} */ (
|
export const NodeEnvironment = process.env.NODE_ENV || "development";
|
||||||
process.env.NODE_ENV || "development"
|
|
||||||
);
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
/// <reference types="./types/global.js" />
|
||||||
|
|
||||||
export * from "./paths.js";
|
export * from "./paths.js";
|
||||||
export * from "./constants.js";
|
export * from "./constants.js";
|
||||||
|
export * from "./build.js";
|
||||||
export * from "./version.js";
|
export * from "./version.js";
|
||||||
export * from "./scripting.js";
|
export * from "./scripting.js";
|
||||||
|
@ -2,18 +2,27 @@
|
|||||||
"name": "@goauthentik/monorepo",
|
"name": "@goauthentik/monorepo",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Utilities for the authentik monorepo.",
|
"description": "Utilities for the authentik monorepo.",
|
||||||
"private": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": {
|
"exports": {
|
||||||
"./package.json": "./package.json",
|
"./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": {
|
"engines": {
|
||||||
"node": ">=20.11"
|
"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 { dirname, join, resolve } from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
const relativeDirname = dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {'~authentik'} MonoRepoRoot
|
* @typedef {'~authentik'} MonoRepoRoot
|
||||||
@ -11,20 +11,35 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|||||||
/**
|
/**
|
||||||
* The root of the authentik monorepo.
|
* 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);
|
const require = createRequire(import.meta.url);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve a package name to its location in the monorepo to the single node_modules directory.
|
* Resolve a package name to its location in the monorepo to the single node_modules directory.
|
||||||
* @param {string} packageName
|
* @param {string} packageName
|
||||||
|
*
|
||||||
* @returns {string} The resolved path to the package.
|
* @returns {string} The resolved path to the package.
|
||||||
* @throws {Error} If the package cannot be resolved.
|
* @throws {Error} If the package cannot be resolved.
|
||||||
*/
|
*/
|
||||||
export function resolvePackage(packageName) {
|
export function resolvePackage(packageName) {
|
||||||
const packageJSONPath = require.resolve(join(packageName, "package.json"), {
|
const relativePackageJSONPath = join(packageName, "package.json");
|
||||||
paths: [MonoRepoRoot],
|
|
||||||
});
|
|
||||||
|
|
||||||
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 { 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";
|
import { MonoRepoRoot } from "./paths.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user