authup 1.0.0-beta.26 → 1.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -13,6 +13,14 @@ import consola from 'consola';
13
13
  import { exec } from 'node:child_process';
14
14
  import findUpPackagePath from 'resolve-package-path';
15
15
 
16
+
17
+ // -- Shims --
18
+ import cjsUrl from 'node:url';
19
+ import cjsPath from 'node:path';
20
+ import cjsModule from 'node:module';
21
+ const __filename = cjsUrl.fileURLToPath(import.meta.url);
22
+ const __dirname = cjsPath.dirname(__filename);
23
+ const require = cjsModule.createRequire(import.meta.url);
16
24
  function parseClientWebConfig(input = {}) {
17
25
  const schema = zod.object({
18
26
  port: zod.number().nonnegative().optional(),
@@ -188,27 +196,31 @@ async function execShellCommand(command, ctx = {}) {
188
196
  childProcess.on('spawn', ()=>{
189
197
  resolve(childProcess);
190
198
  });
191
- childProcess.stderr.setEncoding('utf-8');
192
- childProcess.stderr.on('data', (data)=>{
193
- if (typeof data !== 'string' || data.length === 0) {
194
- return;
195
- }
196
- if (ctx.logErrorStream) {
197
- ctx.logErrorStream(data);
198
- }
199
- });
200
- childProcess.stdout.on('data', (data)=>{
201
- if (typeof data !== 'string' || data.length === 0) {
202
- return;
203
- }
204
- if (!ctx.logDataStream) {
205
- return;
206
- }
207
- const lines = parseProcessOutputData(data);
208
- for(let i = 0; i < lines.length; i++){
209
- ctx.logDataStream(lines[i]);
210
- }
211
- });
199
+ if (childProcess.stderr) {
200
+ childProcess.stderr.setEncoding('utf-8');
201
+ childProcess.stderr.on('data', (data)=>{
202
+ if (typeof data !== 'string' || data.length === 0) {
203
+ return;
204
+ }
205
+ if (ctx.logErrorStream) {
206
+ ctx.logErrorStream(data);
207
+ }
208
+ });
209
+ }
210
+ if (childProcess.stdout) {
211
+ childProcess.stdout.on('data', (data)=>{
212
+ if (typeof data !== 'string' || data.length === 0) {
213
+ return;
214
+ }
215
+ if (!ctx.logDataStream) {
216
+ return;
217
+ }
218
+ const lines = parseProcessOutputData(data);
219
+ for(let i = 0; i < lines.length; i++){
220
+ ctx.logDataStream(lines[i]);
221
+ }
222
+ });
223
+ }
212
224
  });
213
225
  }
214
226
 
@@ -374,7 +386,7 @@ function normalizePackageID(input) {
374
386
  return PackageID.SERVER_CORE;
375
387
  }
376
388
  }
377
- return undefined;
389
+ return null;
378
390
  }
379
391
 
380
392
  async function createCLIEntryPointCommand() {
@@ -410,16 +422,16 @@ async function createCLIEntryPointCommand() {
410
422
  }
411
423
  },
412
424
  async run (ctx) {
413
- let pkgs = ctx.args.package ? ctx.args.package.split(',') : [];
414
- if (pkgs.length > 0) {
415
- pkgs = pkgs.map((pkg)=>normalizePackageID(pkg)).filter((pkg)=>Boolean(pkg));
425
+ let packages = ctx.args.package ? ctx.args.package.split(',') : [];
426
+ if (packages.length > 0) {
427
+ packages = packages.map((pkg)=>normalizePackageID(pkg)).filter((pkg)=>Boolean(pkg)).map((pkg)=>`${pkg}`);
416
428
  }
417
- if (pkgs.length === 0) {
418
- pkgs = Object.values(PackageID);
429
+ if (packages.length === 0) {
430
+ packages = Object.values(PackageID);
419
431
  }
420
432
  const promises = [];
421
- for(let i = 0; i < pkgs.length; i++){
422
- promises.push(executePackageCommand(pkgs[i], ctx.args.command, {
433
+ for(let i = 0; i < packages.length; i++){
434
+ promises.push(executePackageCommand(packages[i], ctx.args.command, {
423
435
  configFile: ctx.args.configFile,
424
436
  configDirectory: ctx.args.configDirectory
425
437
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/packages/client-web/config/parse.ts","../src/packages/client-web/config/build.ts","../src/packages/client-web/config/read/env.ts","../src/packages/client-web/config/read/fs.ts","../src/packages/client-web/config/read/module.ts","../src/utils/line-breaks.ts","../src/utils/process-output.ts","../src/utils/stringify-object-args.ts","../src/utils/shell.ts","../src/constants.ts","../src/utils/modules-path.ts","../src/packages/constants.ts","../src/packages/client-web/module.ts","../src/packages/server-core/module.ts","../src/packages/execute.ts","../src/packages/normalize.ts","../src/module.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport zod from 'zod';\nimport type { ClientWebConfigInput } from './type';\n\nexport function parseClientWebConfig(input: unknown = {}) : ClientWebConfigInput {\n const schema = zod.object({\n port: zod.number().nonnegative().optional(),\n host: zod.string().optional(),\n apiUrl: zod.string().url().optional(),\n publicUrl: zod.string().url().optional(),\n });\n\n return schema.parse(input);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { extendObject, makeURLPublicAccessible } from '@authup/kit';\nimport { defineGetter, dycraft } from 'dycraft';\nimport { parseClientWebConfig } from './parse';\nimport type { ClientWebConfig, ClientWebConfigInput } from './type';\n\nexport function buildClientWebConfig(raw: ClientWebConfigInput): ClientWebConfig {\n const config = dycraft({\n defaults: {\n port: 3000,\n host: '0.0.0.0',\n apiUrl: 'http://127.0.0.1:3001/',\n },\n getters: {\n publicUrl: defineGetter((\n context,\n ) => `http://${makeURLPublicAccessible(context.get('host'))}:${context.get('port')}/`),\n },\n });\n\n return extendObject(config, parseClientWebConfig(raw));\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { oneOf, read, readInt } from 'envix';\nimport type { ClientWebConfigInput } from '../type';\n\nexport function readClientWebConfigFromEnv() : ClientWebConfigInput {\n const config : ClientWebConfigInput = {};\n\n const port = oneOf([\n readInt('UI_PORT'),\n readInt('NITRO_UI_PORT'),\n readInt('NUXT_UI_PORT'),\n readInt('NUXT_PUBLIC_UI_PORT'),\n readInt('PORT'),\n readInt('NITRO_PORT'),\n readInt('NUXT_PORT'),\n readInt('NUXT_PUBLIC_PORT'),\n ]);\n\n if (typeof port !== 'undefined') {\n config.port = port;\n }\n\n const host = oneOf([\n read('HOST'),\n read('NITRO_HOST'),\n read('NUXT_HOST'),\n ]);\n\n if (host) {\n config.host = host;\n }\n\n const apiUrl = oneOf([\n read('API_URL'),\n read('NUXT_API_URL'),\n read('NUXT_PUBLIC_API_URL'),\n ]);\n\n if (apiUrl) {\n config.apiUrl = apiUrl;\n }\n\n const publicURL = oneOf([\n read('PUBLIC_URL'),\n read('NUXT_PUBLIC_URL'),\n read('NUXT_PUBLIC_PUBLIC_URL'),\n ]);\n\n if (publicURL) {\n config.publicUrl = publicURL;\n }\n\n return config;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { makeURLPublicAccessible } from '@authup/kit';\nimport { Container } from 'confinity';\nimport type { ClientWebConfigInput } from '../type';\n\nexport type ClientWebConfigReadFsOptions = {\n cwd?: string,\n file?: string | string[]\n};\n\nexport async function readClientWebConfigFromFS(options: ClientWebConfigReadFsOptions = {}) : Promise<ClientWebConfigInput> {\n const container = new Container({\n prefix: 'authup',\n cwd: options.cwd,\n });\n\n if (options.file) {\n await container.loadFile(options.file);\n } else {\n await container.load();\n }\n\n const clientRaw = container.get('client.web') || {};\n const serverRaw = container.get('server.core') || {};\n if (serverRaw) {\n if (\n !clientRaw.apiUrl &&\n typeof serverRaw.publicUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.publicUrl);\n }\n\n if (\n !clientRaw.publicUrl &&\n typeof serverRaw.authorizeRedirectUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.authorizeRedirectUrl);\n }\n }\n\n return clientRaw;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { ClientWebConfigInput } from '../type';\nimport { readClientWebConfigFromEnv } from './env';\nimport type { ClientWebConfigReadFsOptions } from './fs';\nimport { readClientWebConfigFromFS } from './fs';\n\nexport type ClientWebConfigRawReadOptions = {\n fs?: boolean | ClientWebConfigReadFsOptions,\n env?: boolean,\n};\n\nexport async function readClientWebConfigRaw(options: ClientWebConfigRawReadOptions = {}) : Promise<ClientWebConfigInput> {\n if (options.fs && options.env) {\n const fsOptions = boolableToObject(options.fs);\n const fs = await readClientWebConfigFromFS(fsOptions);\n const env = readClientWebConfigFromEnv();\n\n return merge(env, fs);\n }\n\n if (options.fs) {\n const fsOptions = boolableToObject(options.fs);\n return readClientWebConfigFromFS(fsOptions);\n }\n\n if (options.env) {\n return readClientWebConfigFromEnv();\n }\n\n return {};\n}\n\nfunction boolableToObject<T>(input: T | boolean) : T {\n if (typeof input === 'boolean') {\n return {} as T;\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeLineBreaks(input: string) {\n return input.replace(/(\\r\\n|\\n|\\r)/gm, '');\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@authup/kit';\nimport { removeLineBreaks } from './line-breaks';\n\nexport function parseProcessOutputData(input: unknown) : string[] {\n if (typeof input !== 'string') {\n return [];\n }\n\n const lines = input\n .split(/\\r?\\n/)\n .filter((element) => element);\n\n const items : string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = removeLineBreaks(lines[i]).trim();\n if (line.length === 0) {\n continue;\n }\n\n try {\n const parsed = JSON.parse(line);\n\n if (\n isObject(parsed) &&\n hasOwnProperty(parsed, 'message') &&\n typeof parsed.message === 'string'\n ) {\n items.push(parsed.message);\n continue;\n }\n } catch (e) {\n // no json :/\n }\n\n items.push(line);\n }\n\n return items;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function stringifyObjectArgs(ob: Record<string, any>) {\n const parts : string[] = [];\n\n const keys = Object.keys(ob);\n for (let i = 0; i < keys.length; i++) {\n parts.push(`--${keys[i]} ${ob[keys[i]]}`);\n }\n\n return parts.join(' ');\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { exec } from 'node:child_process';\nimport process from 'node:process';\nimport { parseProcessOutputData } from './process-output';\nimport { stringifyObjectArgs } from './stringify-object-args';\n\nexport type ShellCommandExecOptions = {\n configFile?: string,\n configDirectory?: string,\n\n env?: Record<string, string | undefined>,\n envFromProcess?: boolean,\n args?: Record<string, any>,\n logErrorStream?: (content: string) => void,\n logDataStream?: (content: string) => void\n};\n\nexport async function execShellCommand(\n command: string,\n ctx: ShellCommandExecOptions = {},\n) {\n return new Promise<ChildProcess>((resolve, reject) => {\n const childProcess = exec(`${command} ${stringifyObjectArgs(ctx.args || {})}`, {\n env: {\n PATH: process.env.PATH,\n ...(ctx.envFromProcess ? process.env : {}),\n ...(ctx.env ? ctx.env : {}),\n },\n });\n\n childProcess.on('error', (data) => {\n reject(data);\n });\n\n childProcess.on('spawn', () => {\n resolve(childProcess);\n });\n\n childProcess.stderr.setEncoding('utf-8');\n childProcess.stderr.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (ctx.logErrorStream) {\n ctx.logErrorStream(data);\n }\n });\n\n childProcess.stdout.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (!ctx.logDataStream) {\n return;\n }\n\n const lines = parseProcessOutputData(data);\n for (let i = 0; i < lines.length; i++) {\n ctx.logDataStream(lines[i]);\n }\n });\n });\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\n\nexport const PACKAGE_DIRECTORY = path.join(__dirname, '..');\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport process from 'node:process';\nimport findUpPackagePath from 'resolve-package-path';\nimport { PACKAGE_DIRECTORY } from '../constants';\n\nexport function findModulePath(module: string) : string | undefined {\n let modulePath = findUpPackagePath(module, PACKAGE_DIRECTORY);\n if (PACKAGE_DIRECTORY !== process.cwd()) {\n modulePath = findUpPackagePath(module, process.cwd());\n }\n\n if (!modulePath) {\n return undefined;\n }\n\n return modulePath;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PackageName {\n CLIENT_WEB = '@authup/client-web',\n SERVER_CORE = '@authup/server-core',\n}\n\nexport enum PackageID {\n CLIENT_WEB = 'client.web',\n SERVER_CORE = 'server.core',\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport type { ChildProcess } from 'node:child_process';\nimport path from 'node:path';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\nimport { buildClientWebConfig, readClientWebConfigRaw } from './config';\n\nexport class ClientWebPackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) : Promise<ChildProcess> {\n const shellCommand = await this.buildShellCommand();\n const env = await this.buildEnv({\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n env,\n logDataStream(line) {\n consola.info(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand() {\n let shellCommand : string;\n\n const modulePath = findModulePath(PackageName.CLIENT_WEB);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, '.output', 'server', 'index.mjs');\n shellCommand = `node ${outputPath}`;\n } else {\n shellCommand = `npx ${PackageName.CLIENT_WEB}`;\n }\n\n return shellCommand;\n }\n\n protected async buildEnv(ctx: PackageExecuteOptions) {\n const env : Record<string, any> = {};\n\n const configRaw = await readClientWebConfigRaw({\n fs: {\n file: ctx.configFile,\n cwd: ctx.configDirectory,\n },\n });\n const config = buildClientWebConfig(configRaw);\n\n if (config.host) {\n env.HOST = config.host;\n }\n\n if (config.port) {\n env.PORT = `${config.port}`;\n }\n\n if (config.apiUrl) {\n env.API_URL = config.apiUrl;\n }\n\n if (config.publicUrl) {\n env.PUBLIC_URL = config.publicUrl;\n }\n\n return this.extendEnvKeys(env);\n }\n\n extendEnvKeys(input: Record<string, string | undefined>) {\n const env : Record<string, any> = {};\n\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n env[keys[i]] = input[keys[i]];\n\n if (!keys[i].match(/^(?:NUXT|NITRO)_.*$/)) {\n env[`NUXT_PUBLIC_${keys[i]}`] = input[keys[i]];\n }\n }\n\n return env;\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport path from 'node:path';\nimport type { ShellCommandExecOptions } from '../../utils';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\n\nexport class ServerCorePackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) {\n const shellCommand = await this.buildShellCommand(command, {\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n logDataStream(line) {\n consola.info(`${PackageID.SERVER_CORE}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.SERVER_CORE}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand(command: string, options: ShellCommandExecOptions) {\n const parts : string[] = [];\n\n const modulePath = findModulePath(PackageName.SERVER_CORE);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, 'dist', 'cli', 'index.js');\n parts.push(`node ${outputPath}`);\n } else {\n parts.push(`npx ${PackageName.SERVER_CORE}`);\n }\n\n parts.push(command);\n\n if (options.configFile) {\n parts.push(`--configFile=${options.configFile}`);\n }\n\n if (options.configDirectory) {\n parts.push(`--configDirectory=${options.configDirectory}`);\n }\n\n return parts.join(' ');\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { ClientWebPackage } from './client-web';\nimport { PackageID } from './constants';\nimport { ServerCorePackage } from './server-core';\nimport type { PackageExecuteOptions } from './types';\n\nexport async function executePackageCommand(\n pkg: string,\n command: string,\n options: PackageExecuteOptions = {},\n) : Promise<ChildProcess> {\n switch (pkg) {\n case PackageID.CLIENT_WEB: {\n const serverCore = new ClientWebPackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n case PackageID.SERVER_CORE: {\n const serverCore = new ServerCorePackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n }\n\n throw new Error(`The package ${pkg} is not supported.`);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PackageID } from './constants';\n\nexport function normalizePackageID(input: string) {\n const value = input.trim().toLowerCase();\n\n switch (value) {\n case 'client.web':\n case 'client/web':\n case 'client-web': {\n return PackageID.CLIENT_WEB;\n }\n case 'server.core':\n case 'server/core':\n case 'server-core': {\n return PackageID.SERVER_CORE;\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { defineCommand } from 'citty';\nimport type { ChildProcess } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { PackageID, executePackageCommand, normalizePackageID } from './packages';\n\nexport async function createCLIEntryPointCommand() {\n const pkgRaw = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n { encoding: 'utf8' },\n );\n const pkg = JSON.parse(pkgRaw);\n\n return defineCommand({\n meta: {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n },\n args: {\n command: {\n type: 'positional',\n description: 'The command which should be forwarded to the package.',\n },\n package: {\n type: 'positional',\n description: 'The package, which should be targeted.',\n required: false,\n },\n configDirectory: {\n type: 'string',\n description: 'Config directory path',\n alias: 'cD',\n },\n configFile: {\n type: 'string',\n description: 'Name of one or more configuration files.',\n alias: 'cF',\n },\n },\n async run(ctx) {\n let pkgs = ctx.args.package ?\n ctx.args.package.split(',') :\n [];\n\n if (pkgs.length > 0) {\n pkgs = pkgs\n .map((pkg) => normalizePackageID(pkg))\n .filter((pkg) => Boolean(pkg));\n }\n\n if (pkgs.length === 0) {\n pkgs = Object.values(PackageID);\n }\n\n const promises : Promise<ChildProcess>[] = [];\n for (let i = 0; i < pkgs.length; i++) {\n promises.push(executePackageCommand(\n pkgs[i],\n ctx.args.command,\n {\n configFile: ctx.args.configFile,\n configDirectory: ctx.args.configDirectory,\n },\n ));\n }\n\n await Promise.all(promises);\n },\n });\n}\n","#!/usr/bin/env node\n\nimport { runMain } from 'citty';\nimport { createCLIEntryPointCommand } from './module';\n\nPromise.resolve()\n .then(() => createCLIEntryPointCommand())\n .then((command) => runMain(command));\n"],"names":["parseClientWebConfig","input","schema","zod","object","port","number","nonnegative","optional","host","string","apiUrl","url","publicUrl","parse","buildClientWebConfig","raw","config","dycraft","defaults","getters","defineGetter","context","makeURLPublicAccessible","get","extendObject","readClientWebConfigFromEnv","oneOf","readInt","read","publicURL","readClientWebConfigFromFS","options","container","Container","prefix","cwd","file","loadFile","load","clientRaw","serverRaw","authorizeRedirectUrl","readClientWebConfigRaw","fs","env","fsOptions","boolableToObject","merge","removeLineBreaks","replace","parseProcessOutputData","lines","split","filter","element","items","i","length","line","trim","parsed","JSON","isObject","hasOwnProperty","message","push","e","stringifyObjectArgs","ob","parts","keys","Object","join","execShellCommand","command","ctx","Promise","resolve","reject","childProcess","exec","args","PATH","process","envFromProcess","on","data","stderr","setEncoding","logErrorStream","stdout","logDataStream","PACKAGE_DIRECTORY","path","__dirname","findModulePath","module","modulePath","findUpPackagePath","undefined","PackageName","PackageID","ClientWebPackage","execute","shellCommand","buildShellCommand","buildEnv","configDirectory","configFile","consola","info","CLIENT_WEB","warn","directory","dirname","outputPath","configRaw","HOST","PORT","API_URL","PUBLIC_URL","extendEnvKeys","match","ServerCorePackage","SERVER_CORE","executePackageCommand","pkg","serverCore","Error","normalizePackageID","value","toLowerCase","createCLIEntryPointCommand","pkgRaw","promises","readFile","encoding","defineCommand","meta","name","version","description","type","package","required","alias","run","pkgs","map","Boolean","values","all","then","runMain"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/packages/client-web/config/parse.ts","../src/packages/client-web/config/build.ts","../src/packages/client-web/config/read/env.ts","../src/packages/client-web/config/read/fs.ts","../src/packages/client-web/config/read/module.ts","../src/utils/line-breaks.ts","../src/utils/process-output.ts","../src/utils/stringify-object-args.ts","../src/utils/shell.ts","../src/constants.ts","../src/utils/modules-path.ts","../src/packages/constants.ts","../src/packages/client-web/module.ts","../src/packages/server-core/module.ts","../src/packages/execute.ts","../src/packages/normalize.ts","../src/module.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport zod from 'zod';\nimport type { ClientWebConfigInput } from './type';\n\nexport function parseClientWebConfig(input: unknown = {}) : ClientWebConfigInput {\n const schema = zod.object({\n port: zod.number().nonnegative().optional(),\n host: zod.string().optional(),\n apiUrl: zod.string().url().optional(),\n publicUrl: zod.string().url().optional(),\n });\n\n return schema.parse(input);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { extendObject, makeURLPublicAccessible } from '@authup/kit';\nimport { defineGetter, dycraft } from 'dycraft';\nimport { parseClientWebConfig } from './parse';\nimport type { ClientWebConfig, ClientWebConfigInput } from './type';\n\nexport function buildClientWebConfig(raw: ClientWebConfigInput): ClientWebConfig {\n const config = dycraft({\n defaults: {\n port: 3000,\n host: '0.0.0.0',\n apiUrl: 'http://127.0.0.1:3001/',\n },\n getters: {\n publicUrl: defineGetter((\n context,\n ) => `http://${makeURLPublicAccessible(context.get('host'))}:${context.get('port')}/`),\n },\n });\n\n return extendObject(config, parseClientWebConfig(raw));\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { oneOf, read, readInt } from 'envix';\nimport type { ClientWebConfigInput } from '../type';\n\nexport function readClientWebConfigFromEnv() : ClientWebConfigInput {\n const config : ClientWebConfigInput = {};\n\n const port = oneOf([\n readInt('UI_PORT'),\n readInt('NITRO_UI_PORT'),\n readInt('NUXT_UI_PORT'),\n readInt('NUXT_PUBLIC_UI_PORT'),\n readInt('PORT'),\n readInt('NITRO_PORT'),\n readInt('NUXT_PORT'),\n readInt('NUXT_PUBLIC_PORT'),\n ]);\n\n if (typeof port !== 'undefined') {\n config.port = port;\n }\n\n const host = oneOf([\n read('HOST'),\n read('NITRO_HOST'),\n read('NUXT_HOST'),\n ]);\n\n if (host) {\n config.host = host;\n }\n\n const apiUrl = oneOf([\n read('API_URL'),\n read('NUXT_API_URL'),\n read('NUXT_PUBLIC_API_URL'),\n ]);\n\n if (apiUrl) {\n config.apiUrl = apiUrl;\n }\n\n const publicURL = oneOf([\n read('PUBLIC_URL'),\n read('NUXT_PUBLIC_URL'),\n read('NUXT_PUBLIC_PUBLIC_URL'),\n ]);\n\n if (publicURL) {\n config.publicUrl = publicURL;\n }\n\n return config;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { makeURLPublicAccessible } from '@authup/kit';\nimport { Container } from 'confinity';\nimport type { ClientWebConfigInput } from '../type';\n\nexport type ClientWebConfigReadFsOptions = {\n cwd?: string,\n file?: string | string[]\n};\n\nexport async function readClientWebConfigFromFS(options: ClientWebConfigReadFsOptions = {}) : Promise<ClientWebConfigInput> {\n const container = new Container({\n prefix: 'authup',\n cwd: options.cwd,\n });\n\n if (options.file) {\n await container.loadFile(options.file);\n } else {\n await container.load();\n }\n\n const clientRaw = container.get('client.web') || {};\n const serverRaw = container.get('server.core') || {};\n if (serverRaw) {\n if (\n !clientRaw.apiUrl &&\n typeof serverRaw.publicUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.publicUrl);\n }\n\n if (\n !clientRaw.publicUrl &&\n typeof serverRaw.authorizeRedirectUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.authorizeRedirectUrl);\n }\n }\n\n return clientRaw;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { ClientWebConfigInput } from '../type';\nimport { readClientWebConfigFromEnv } from './env';\nimport type { ClientWebConfigReadFsOptions } from './fs';\nimport { readClientWebConfigFromFS } from './fs';\n\nexport type ClientWebConfigRawReadOptions = {\n fs?: boolean | ClientWebConfigReadFsOptions,\n env?: boolean,\n};\n\nexport async function readClientWebConfigRaw(options: ClientWebConfigRawReadOptions = {}) : Promise<ClientWebConfigInput> {\n if (options.fs && options.env) {\n const fsOptions = boolableToObject(options.fs);\n const fs = await readClientWebConfigFromFS(fsOptions);\n const env = readClientWebConfigFromEnv();\n\n return merge(env, fs);\n }\n\n if (options.fs) {\n const fsOptions = boolableToObject(options.fs);\n return readClientWebConfigFromFS(fsOptions);\n }\n\n if (options.env) {\n return readClientWebConfigFromEnv();\n }\n\n return {};\n}\n\nfunction boolableToObject<T>(input: T | boolean) : T {\n if (typeof input === 'boolean') {\n return {} as T;\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeLineBreaks(input: string) {\n return input.replace(/(\\r\\n|\\n|\\r)/gm, '');\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@authup/kit';\nimport { removeLineBreaks } from './line-breaks';\n\nexport function parseProcessOutputData(input: unknown) : string[] {\n if (typeof input !== 'string') {\n return [];\n }\n\n const lines = input\n .split(/\\r?\\n/)\n .filter((element) => element);\n\n const items : string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = removeLineBreaks(lines[i]).trim();\n if (line.length === 0) {\n continue;\n }\n\n try {\n const parsed = JSON.parse(line);\n\n if (\n isObject(parsed) &&\n hasOwnProperty(parsed, 'message') &&\n typeof parsed.message === 'string'\n ) {\n items.push(parsed.message);\n continue;\n }\n } catch (e) {\n // no json :/\n }\n\n items.push(line);\n }\n\n return items;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function stringifyObjectArgs(ob: Record<string, any>) {\n const parts : string[] = [];\n\n const keys = Object.keys(ob);\n for (let i = 0; i < keys.length; i++) {\n parts.push(`--${keys[i]} ${ob[keys[i]]}`);\n }\n\n return parts.join(' ');\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { exec } from 'node:child_process';\nimport process from 'node:process';\nimport { parseProcessOutputData } from './process-output';\nimport { stringifyObjectArgs } from './stringify-object-args';\n\nexport type ShellCommandExecOptions = {\n configFile?: string,\n configDirectory?: string,\n\n env?: Record<string, string | undefined>,\n envFromProcess?: boolean,\n args?: Record<string, any>,\n logErrorStream?: (content: string) => void,\n logDataStream?: (content: string) => void\n};\n\nexport async function execShellCommand(\n command: string,\n ctx: ShellCommandExecOptions = {},\n) {\n return new Promise<ChildProcess>((resolve, reject) => {\n const childProcess = exec(`${command} ${stringifyObjectArgs(ctx.args || {})}`, {\n env: {\n PATH: process.env.PATH,\n ...(ctx.envFromProcess ? process.env : {}),\n ...(ctx.env ? ctx.env : {}),\n },\n });\n\n childProcess.on('error', (data) => {\n reject(data);\n });\n\n childProcess.on('spawn', () => {\n resolve(childProcess);\n });\n\n if (childProcess.stderr) {\n childProcess.stderr.setEncoding('utf-8');\n childProcess.stderr.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (ctx.logErrorStream) {\n ctx.logErrorStream(data);\n }\n });\n }\n if (childProcess.stdout) {\n childProcess.stdout.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (!ctx.logDataStream) {\n return;\n }\n\n const lines = parseProcessOutputData(data);\n for (let i = 0; i < lines.length; i++) {\n ctx.logDataStream(lines[i]);\n }\n });\n }\n });\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\n\nexport const PACKAGE_DIRECTORY = path.join(__dirname, '..');\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport process from 'node:process';\nimport findUpPackagePath from 'resolve-package-path';\nimport { PACKAGE_DIRECTORY } from '../constants';\n\nexport function findModulePath(module: string) : string | undefined {\n let modulePath = findUpPackagePath(module, PACKAGE_DIRECTORY);\n if (PACKAGE_DIRECTORY !== process.cwd()) {\n modulePath = findUpPackagePath(module, process.cwd());\n }\n\n if (!modulePath) {\n return undefined;\n }\n\n return modulePath;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PackageName {\n CLIENT_WEB = '@authup/client-web',\n SERVER_CORE = '@authup/server-core',\n}\n\nexport enum PackageID {\n CLIENT_WEB = 'client.web',\n SERVER_CORE = 'server.core',\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport type { ChildProcess } from 'node:child_process';\nimport path from 'node:path';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\nimport { buildClientWebConfig, readClientWebConfigRaw } from './config';\n\nexport class ClientWebPackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) : Promise<ChildProcess> {\n const shellCommand = await this.buildShellCommand();\n const env = await this.buildEnv({\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n env,\n logDataStream(line) {\n consola.info(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand() {\n let shellCommand : string;\n\n const modulePath = findModulePath(PackageName.CLIENT_WEB);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, '.output', 'server', 'index.mjs');\n shellCommand = `node ${outputPath}`;\n } else {\n shellCommand = `npx ${PackageName.CLIENT_WEB}`;\n }\n\n return shellCommand;\n }\n\n protected async buildEnv(ctx: PackageExecuteOptions) {\n const env : Record<string, any> = {};\n\n const configRaw = await readClientWebConfigRaw({\n fs: {\n file: ctx.configFile,\n cwd: ctx.configDirectory,\n },\n });\n const config = buildClientWebConfig(configRaw);\n\n if (config.host) {\n env.HOST = config.host;\n }\n\n if (config.port) {\n env.PORT = `${config.port}`;\n }\n\n if (config.apiUrl) {\n env.API_URL = config.apiUrl;\n }\n\n if (config.publicUrl) {\n env.PUBLIC_URL = config.publicUrl;\n }\n\n return this.extendEnvKeys(env);\n }\n\n extendEnvKeys(input: Record<string, string | undefined>) {\n const env : Record<string, any> = {};\n\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n env[keys[i]] = input[keys[i]];\n\n if (!keys[i].match(/^(?:NUXT|NITRO)_.*$/)) {\n env[`NUXT_PUBLIC_${keys[i]}`] = input[keys[i]];\n }\n }\n\n return env;\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport path from 'node:path';\nimport type { ShellCommandExecOptions } from '../../utils';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\n\nexport class ServerCorePackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) {\n const shellCommand = await this.buildShellCommand(command, {\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n logDataStream(line) {\n consola.info(`${PackageID.SERVER_CORE}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.SERVER_CORE}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand(command: string, options: ShellCommandExecOptions) {\n const parts : string[] = [];\n\n const modulePath = findModulePath(PackageName.SERVER_CORE);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, 'dist', 'cli', 'index.js');\n parts.push(`node ${outputPath}`);\n } else {\n parts.push(`npx ${PackageName.SERVER_CORE}`);\n }\n\n parts.push(command);\n\n if (options.configFile) {\n parts.push(`--configFile=${options.configFile}`);\n }\n\n if (options.configDirectory) {\n parts.push(`--configDirectory=${options.configDirectory}`);\n }\n\n return parts.join(' ');\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { ClientWebPackage } from './client-web';\nimport { PackageID } from './constants';\nimport { ServerCorePackage } from './server-core';\nimport type { PackageExecuteOptions } from './types';\n\nexport async function executePackageCommand(\n pkg: string,\n command: string,\n options: PackageExecuteOptions = {},\n) : Promise<ChildProcess> {\n switch (pkg) {\n case PackageID.CLIENT_WEB: {\n const serverCore = new ClientWebPackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n case PackageID.SERVER_CORE: {\n const serverCore = new ServerCorePackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n }\n\n throw new Error(`The package ${pkg} is not supported.`);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PackageID } from './constants';\n\nexport function normalizePackageID(input: string) : `${PackageID}` | null {\n const value = input.trim().toLowerCase();\n\n switch (value) {\n case 'client.web':\n case 'client/web':\n case 'client-web': {\n return PackageID.CLIENT_WEB;\n }\n case 'server.core':\n case 'server/core':\n case 'server-core': {\n return PackageID.SERVER_CORE;\n }\n }\n\n return null;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { defineCommand } from 'citty';\nimport type { ChildProcess } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { PackageID, executePackageCommand, normalizePackageID } from './packages';\n\nexport async function createCLIEntryPointCommand() {\n const pkgRaw = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n { encoding: 'utf8' },\n );\n const pkg = JSON.parse(pkgRaw);\n\n return defineCommand({\n meta: {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n },\n args: {\n command: {\n type: 'positional',\n description: 'The command which should be forwarded to the package.',\n },\n package: {\n type: 'positional',\n description: 'The package, which should be targeted.',\n required: false,\n },\n configDirectory: {\n type: 'string',\n description: 'Config directory path',\n alias: 'cD',\n },\n configFile: {\n type: 'string',\n description: 'Name of one or more configuration files.',\n alias: 'cF',\n },\n },\n async run(ctx) {\n let packages = ctx.args.package ?\n ctx.args.package.split(',') :\n [];\n\n if (packages.length > 0) {\n packages = packages\n .map((pkg) => normalizePackageID(pkg))\n .filter((pkg) => Boolean(pkg))\n .map((pkg) => `${pkg}`);\n }\n\n if (packages.length === 0) {\n packages = Object.values(PackageID);\n }\n\n const promises : Promise<ChildProcess>[] = [];\n for (let i = 0; i < packages.length; i++) {\n promises.push(executePackageCommand(\n packages[i],\n ctx.args.command,\n {\n configFile: ctx.args.configFile,\n configDirectory: ctx.args.configDirectory,\n },\n ));\n }\n\n await Promise.all(promises);\n },\n });\n}\n","#!/usr/bin/env node\n\nimport { runMain } from 'citty';\nimport { createCLIEntryPointCommand } from './module';\n\nPromise.resolve()\n .then(() => createCLIEntryPointCommand())\n .then((command) => runMain(command));\n"],"names":["port","apiUrl","publicUrl","config","cwd","clientRaw","items","parts","childProcess","ctx","PackageName","PackageID","configDirectory","configFile","env","logDataStream","logErrorStream","shellCommand","file","extendEnvKeys","name","version","description","packages","Promise"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAUO;;AAECA;;AAEAC;AACAC;AACJ;;AAGJ;;ACPO;AACH;;;;;AAKI;;AAEIA;AAGJ;AACJ;;AAGJ;;ACjBO;AACH;AAEA;;;;;;;;;AASC;;AAGGC;AACJ;AAEA;;;;AAIC;AAED;AACIA;AACJ;AAEA;;;;AAIC;AAED;AACIA;AACJ;AAEA;;;;AAIC;AAED;AACIA;AACJ;;AAGJ;;AC3CO;;;AAGCC;AACJ;;AAGI;;AAEA;AACJ;AAEA;AACA;AACA;;AAKQC;AACJ;;AAMIA;AACJ;AACJ;;AAGJ;;AC7BO;AACH;;;AAGI;AAEA;AACJ;;;AAII;AACJ;;;AAIA;AAEA;AACJ;AAEA;;AAEQ;AACJ;;AAGJ;;AC7CA;;;;;;;AASA;;ACCO;;AAEC;AACJ;;AAMA;AAEA;AACI;;AAEI;AACJ;;;;;AAWQ;AACJ;AACJ;;AAEA;AAEAC;AACJ;;AAGJ;;AC9CA;;;;;;AAQI;;AAGA;AACIC;AACJ;;AAGJ;;ACQO;;AAKC;;;AAGQ;AACA;AACJ;AACJ;;;AAIA;;;AAIA;;;AAIIC;AACI;AACI;AACJ;;AAGIC;AACJ;AACJ;AACJ;;AAEID;AACI;AACI;AACJ;;AAGI;AACJ;AAEA;AACA;AACIC;AACJ;AACJ;AACJ;AACJ;AACJ;;ACjEO;;ACEA;;;;AAIH;AAEA;;AAEA;;AAGJ;;ACtBA;;;;;;;;AAOYC;AAGX;AAEM;;;AAAKC;AAGX;;ACAM;AACH;AACI;AACA;AACIC;AACAC;AACJ;AAEA;AACIC;AACAC;;AAEA;AACAC;;AAEA;AACJ;AACJ;AAEA;;;;;AAMQ;;;AAGAC;AACJ;;AAGJ;;AAGI;;;AAIQC;AACAd;AACJ;AACJ;AACA;;;AAIA;;AAGIU;AACJ;;;AAIA;;;AAIA;;AAGJ;AAEAK;AACI;;AAGA;;AAGI;AACIL;AACJ;AACJ;;AAGJ;AACJ;;AC/EO;AACH;AACI;AACIF;AACAC;AACJ;AAEA;AACIE;;AAEA;AACAC;;AAEA;AACJ;AACJ;AAEA;AACI;;;;AAKI;AACAT;;AAEAA;AACJ;AAEAA;;AAGIA;AACJ;;AAGIA;AACJ;;AAGJ;AACJ;;AC1CO;;AAMC;AAA2B;AACvB;;AAMJ;AACA;AAA4B;AACxB;;AAMJ;AACJ;AAEA;AACJ;;AC7BO;AACH;;;;;AAKuB;AACf;AACJ;;;;AAGoB;AAChB;AACJ;AACJ;;AAGJ;;ACZO;AACH;;AAEuB;;AAIvB;;AAEQa;AACAC;AACAC;AACJ;;;;;AAKI;;;;;AAKA;;;;;AAKA;;;;;AAKA;AACJ;AACA;AACI;;AAKIC;AAIJ;;;AAIA;AAEA;AACA;;;;AAOQ;AAER;;AAGJ;AACJ;AACJ;;AC1EAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAcA,wBAAsB,0BAA0B;;;;;;;;;;;;;;;;;;;;IAgE/C"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAcA,wBAAsB,0BAA0B;;;;;;;;;;;;;;;;;;;;IAiE/C"}
@@ -1,3 +1,3 @@
1
1
  import { PackageID } from './constants';
2
- export declare function normalizePackageID(input: string): PackageID;
2
+ export declare function normalizePackageID(input: string): `${PackageID}` | null;
3
3
  //# sourceMappingURL=normalize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/packages/normalize.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,aAiB/C"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/packages/normalize.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAI,GAAG,SAAS,EAAE,GAAG,IAAI,CAiBxE"}
@@ -1,7 +1,7 @@
1
1
  import type { ShellCommandExecOptions } from '../../utils';
2
2
  import type { Package, PackageExecuteOptions } from '../types';
3
3
  export declare class ServerCorePackage implements Package {
4
- execute(command: string, options?: PackageExecuteOptions): Promise<import("child_process").ChildProcess>;
4
+ execute(command: string, options?: PackageExecuteOptions): Promise<import("node:child_process").ChildProcess>;
5
5
  protected buildShellCommand(command: string, options: ShellCommandExecOptions): Promise<string>;
6
6
  }
7
7
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,MAAM,uBAAuB,GAAG;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C,CAAC;AAEF,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,uBAA4B,yBA6CpC"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,MAAM,uBAAuB,GAAG;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C,CAAC;AAEF,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,uBAA4B,yBAgDpC"}
package/package.json CHANGED
@@ -1,31 +1,33 @@
1
1
  {
2
2
  "name": "authup",
3
- "version": "1.0.0-beta.26",
3
+ "type": "module",
4
+ "version": "1.0.0-beta.28",
4
5
  "description": "This is the CLI for the authup ecosystem.",
5
6
  "license": "Apache-2.0",
6
7
  "exports": {
7
8
  "./package.json": "./package.json",
8
9
  ".": {
9
10
  "types": "./dist/index.d.ts",
10
- "import": "./dist/index.mjs",
11
- "require": "./dist/index.cjs"
11
+ "import": "./dist/index.mjs"
12
12
  }
13
13
  },
14
- "main": "./dist/index.cjs",
15
14
  "module": "./dist/index.mjs",
16
15
  "types": "./dist/index.d.ts",
17
16
  "files": [
18
17
  "dist"
19
18
  ],
20
19
  "scripts": {
21
- "cli": "node dist/index.cjs",
20
+ "cli": "node dist/index.mjs",
22
21
  "cli-dev": "npm run build && npm run cli",
23
22
  "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
24
23
  "build:js": "rollup -c",
25
24
  "build": "rimraf ./dist && cross-env NODE_ENV=production npm run build:js && npm run build:types"
26
25
  },
26
+ "engines": {
27
+ "node": "^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0"
28
+ },
27
29
  "bin": {
28
- "authup": "dist/index.cjs"
30
+ "authup": "dist/index.mjs"
29
31
  },
30
32
  "keywords": [],
31
33
  "author": {
@@ -43,19 +45,19 @@
43
45
  },
44
46
  "homepage": "https://github.com/authup/authup#readme",
45
47
  "dependencies": {
46
- "@authup/client-web": "^1.0.0-beta.26",
47
- "@authup/kit": "^1.0.0-beta.26",
48
- "@authup/core-kit": "^1.0.0-beta.26",
49
- "@authup/server-core": "^1.0.0-beta.26",
48
+ "@authup/client-web": "^1.0.0-beta.28",
49
+ "@authup/kit": "^1.0.0-beta.28",
50
+ "@authup/core-kit": "^1.0.0-beta.28",
51
+ "@authup/server-core": "^1.0.0-beta.28",
50
52
  "citty": "^0.1.6",
51
- "chalk": "^4.1.2",
53
+ "chalk": "^5.6.2",
52
54
  "confinity": "^1.0.0-beta.1",
53
55
  "consola": "^3.4.0",
54
56
  "dycraft": "^1.1.0",
55
57
  "envix": "^1.5.0",
56
58
  "resolve-package-path": "^4.0.3",
57
59
  "smob": "^1.5.0",
58
- "zod": "^3.24.1"
60
+ "zod": "^4.3.5"
59
61
  },
60
62
  "publishConfig": {
61
63
  "access": "public"
package/dist/index.cjs DELETED
@@ -1,435 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var citty = require('citty');
5
- var fs = require('node:fs');
6
- var path = require('node:path');
7
- var process = require('node:process');
8
- var kit = require('@authup/kit');
9
- var dycraft = require('dycraft');
10
- var zod = require('zod');
11
- var smob = require('smob');
12
- var envix = require('envix');
13
- var confinity = require('confinity');
14
- var consola = require('consola');
15
- var node_child_process = require('node:child_process');
16
- var findUpPackagePath = require('resolve-package-path');
17
-
18
- function parseClientWebConfig(input = {}) {
19
- const schema = zod.object({
20
- port: zod.number().nonnegative().optional(),
21
- host: zod.string().optional(),
22
- apiUrl: zod.string().url().optional(),
23
- publicUrl: zod.string().url().optional()
24
- });
25
- return schema.parse(input);
26
- }
27
-
28
- function buildClientWebConfig(raw) {
29
- const config = dycraft.dycraft({
30
- defaults: {
31
- port: 3000,
32
- host: '0.0.0.0',
33
- apiUrl: 'http://127.0.0.1:3001/'
34
- },
35
- getters: {
36
- publicUrl: dycraft.defineGetter((context)=>`http://${kit.makeURLPublicAccessible(context.get('host'))}:${context.get('port')}/`)
37
- }
38
- });
39
- return kit.extendObject(config, parseClientWebConfig(raw));
40
- }
41
-
42
- function readClientWebConfigFromEnv() {
43
- const config = {};
44
- const port = envix.oneOf([
45
- envix.readInt('UI_PORT'),
46
- envix.readInt('NITRO_UI_PORT'),
47
- envix.readInt('NUXT_UI_PORT'),
48
- envix.readInt('NUXT_PUBLIC_UI_PORT'),
49
- envix.readInt('PORT'),
50
- envix.readInt('NITRO_PORT'),
51
- envix.readInt('NUXT_PORT'),
52
- envix.readInt('NUXT_PUBLIC_PORT')
53
- ]);
54
- if (typeof port !== 'undefined') {
55
- config.port = port;
56
- }
57
- const host = envix.oneOf([
58
- envix.read('HOST'),
59
- envix.read('NITRO_HOST'),
60
- envix.read('NUXT_HOST')
61
- ]);
62
- if (host) {
63
- config.host = host;
64
- }
65
- const apiUrl = envix.oneOf([
66
- envix.read('API_URL'),
67
- envix.read('NUXT_API_URL'),
68
- envix.read('NUXT_PUBLIC_API_URL')
69
- ]);
70
- if (apiUrl) {
71
- config.apiUrl = apiUrl;
72
- }
73
- const publicURL = envix.oneOf([
74
- envix.read('PUBLIC_URL'),
75
- envix.read('NUXT_PUBLIC_URL'),
76
- envix.read('NUXT_PUBLIC_PUBLIC_URL')
77
- ]);
78
- if (publicURL) {
79
- config.publicUrl = publicURL;
80
- }
81
- return config;
82
- }
83
-
84
- async function readClientWebConfigFromFS(options = {}) {
85
- const container = new confinity.Container({
86
- prefix: 'authup',
87
- cwd: options.cwd
88
- });
89
- if (options.file) {
90
- await container.loadFile(options.file);
91
- } else {
92
- await container.load();
93
- }
94
- const clientRaw = container.get('client.web') || {};
95
- const serverRaw = container.get('server.core') || {};
96
- if (serverRaw) {
97
- if (!clientRaw.apiUrl && typeof serverRaw.publicUrl === 'string') {
98
- clientRaw.apiUrl = kit.makeURLPublicAccessible(serverRaw.publicUrl);
99
- }
100
- if (!clientRaw.publicUrl && typeof serverRaw.authorizeRedirectUrl === 'string') {
101
- clientRaw.apiUrl = kit.makeURLPublicAccessible(serverRaw.authorizeRedirectUrl);
102
- }
103
- }
104
- return clientRaw;
105
- }
106
-
107
- async function readClientWebConfigRaw(options = {}) {
108
- if (options.fs && options.env) {
109
- const fsOptions = boolableToObject(options.fs);
110
- const fs = await readClientWebConfigFromFS(fsOptions);
111
- const env = readClientWebConfigFromEnv();
112
- return smob.merge(env, fs);
113
- }
114
- if (options.fs) {
115
- const fsOptions = boolableToObject(options.fs);
116
- return readClientWebConfigFromFS(fsOptions);
117
- }
118
- if (options.env) {
119
- return readClientWebConfigFromEnv();
120
- }
121
- return {};
122
- }
123
- function boolableToObject(input) {
124
- if (typeof input === 'boolean') {
125
- return {};
126
- }
127
- return input;
128
- }
129
-
130
- /*
131
- * Copyright (c) 2022-2024.
132
- * Author Peter Placzek (tada5hi)
133
- * For the full copyright and license information,
134
- * view the LICENSE file that was distributed with this source code.
135
- */ function removeLineBreaks(input) {
136
- return input.replace(/(\r\n|\n|\r)/gm, '');
137
- }
138
-
139
- function parseProcessOutputData(input) {
140
- if (typeof input !== 'string') {
141
- return [];
142
- }
143
- const lines = input.split(/\r?\n/).filter((element)=>element);
144
- const items = [];
145
- for(let i = 0; i < lines.length; i++){
146
- const line = removeLineBreaks(lines[i]).trim();
147
- if (line.length === 0) {
148
- continue;
149
- }
150
- try {
151
- const parsed = JSON.parse(line);
152
- if (kit.isObject(parsed) && kit.hasOwnProperty(parsed, 'message') && typeof parsed.message === 'string') {
153
- items.push(parsed.message);
154
- continue;
155
- }
156
- } catch (e) {
157
- // no json :/
158
- }
159
- items.push(line);
160
- }
161
- return items;
162
- }
163
-
164
- /*
165
- * Copyright (c) 2022-2024.
166
- * Author Peter Placzek (tada5hi)
167
- * For the full copyright and license information,
168
- * view the LICENSE file that was distributed with this source code.
169
- */ function stringifyObjectArgs(ob) {
170
- const parts = [];
171
- const keys = Object.keys(ob);
172
- for(let i = 0; i < keys.length; i++){
173
- parts.push(`--${keys[i]} ${ob[keys[i]]}`);
174
- }
175
- return parts.join(' ');
176
- }
177
-
178
- async function execShellCommand(command, ctx = {}) {
179
- return new Promise((resolve, reject)=>{
180
- const childProcess = node_child_process.exec(`${command} ${stringifyObjectArgs(ctx.args || {})}`, {
181
- env: {
182
- PATH: process.env.PATH,
183
- ...ctx.envFromProcess ? process.env : {},
184
- ...ctx.env ? ctx.env : {}
185
- }
186
- });
187
- childProcess.on('error', (data)=>{
188
- reject(data);
189
- });
190
- childProcess.on('spawn', ()=>{
191
- resolve(childProcess);
192
- });
193
- childProcess.stderr.setEncoding('utf-8');
194
- childProcess.stderr.on('data', (data)=>{
195
- if (typeof data !== 'string' || data.length === 0) {
196
- return;
197
- }
198
- if (ctx.logErrorStream) {
199
- ctx.logErrorStream(data);
200
- }
201
- });
202
- childProcess.stdout.on('data', (data)=>{
203
- if (typeof data !== 'string' || data.length === 0) {
204
- return;
205
- }
206
- if (!ctx.logDataStream) {
207
- return;
208
- }
209
- const lines = parseProcessOutputData(data);
210
- for(let i = 0; i < lines.length; i++){
211
- ctx.logDataStream(lines[i]);
212
- }
213
- });
214
- });
215
- }
216
-
217
- const PACKAGE_DIRECTORY = path.join(__dirname, '..');
218
-
219
- function findModulePath(module) {
220
- let modulePath = findUpPackagePath(module, PACKAGE_DIRECTORY);
221
- if (PACKAGE_DIRECTORY !== process.cwd()) {
222
- modulePath = findUpPackagePath(module, process.cwd());
223
- }
224
- if (!modulePath) {
225
- return undefined;
226
- }
227
- return modulePath;
228
- }
229
-
230
- /*
231
- * Copyright (c) 2023-2024.
232
- * Author Peter Placzek (tada5hi)
233
- * For the full copyright and license information,
234
- * view the LICENSE file that was distributed with this source code.
235
- */ var PackageName = /*#__PURE__*/ function(PackageName) {
236
- PackageName["CLIENT_WEB"] = "@authup/client-web";
237
- PackageName["SERVER_CORE"] = "@authup/server-core";
238
- return PackageName;
239
- }({});
240
- var PackageID = /*#__PURE__*/ function(PackageID) {
241
- PackageID["CLIENT_WEB"] = "client.web";
242
- PackageID["SERVER_CORE"] = "server.core";
243
- return PackageID;
244
- }({});
245
-
246
- class ClientWebPackage {
247
- async execute(command, options = {}) {
248
- const shellCommand = await this.buildShellCommand();
249
- const env = await this.buildEnv({
250
- configDirectory: options.configDirectory,
251
- configFile: options.configFile
252
- });
253
- return execShellCommand(shellCommand, {
254
- env,
255
- logDataStream (line) {
256
- consola.info(`${PackageID.CLIENT_WEB}: ${line}`);
257
- },
258
- logErrorStream (line) {
259
- consola.warn(`${PackageID.CLIENT_WEB}: ${line}`);
260
- }
261
- });
262
- }
263
- async buildShellCommand() {
264
- let shellCommand;
265
- const modulePath = findModulePath(PackageName.CLIENT_WEB);
266
- if (typeof modulePath === 'string') {
267
- const directory = path.dirname(modulePath);
268
- const outputPath = path.join(directory, '.output', 'server', 'index.mjs');
269
- shellCommand = `node ${outputPath}`;
270
- } else {
271
- shellCommand = `npx ${PackageName.CLIENT_WEB}`;
272
- }
273
- return shellCommand;
274
- }
275
- async buildEnv(ctx) {
276
- const env = {};
277
- const configRaw = await readClientWebConfigRaw({
278
- fs: {
279
- file: ctx.configFile,
280
- cwd: ctx.configDirectory
281
- }
282
- });
283
- const config = buildClientWebConfig(configRaw);
284
- if (config.host) {
285
- env.HOST = config.host;
286
- }
287
- if (config.port) {
288
- env.PORT = `${config.port}`;
289
- }
290
- if (config.apiUrl) {
291
- env.API_URL = config.apiUrl;
292
- }
293
- if (config.publicUrl) {
294
- env.PUBLIC_URL = config.publicUrl;
295
- }
296
- return this.extendEnvKeys(env);
297
- }
298
- extendEnvKeys(input) {
299
- const env = {};
300
- const keys = Object.keys(input);
301
- for(let i = 0; i < keys.length; i++){
302
- env[keys[i]] = input[keys[i]];
303
- if (!keys[i].match(/^(?:NUXT|NITRO)_.*$/)) {
304
- env[`NUXT_PUBLIC_${keys[i]}`] = input[keys[i]];
305
- }
306
- }
307
- return env;
308
- }
309
- }
310
-
311
- class ServerCorePackage {
312
- async execute(command, options = {}) {
313
- const shellCommand = await this.buildShellCommand(command, {
314
- configDirectory: options.configDirectory,
315
- configFile: options.configFile
316
- });
317
- return execShellCommand(shellCommand, {
318
- logDataStream (line) {
319
- consola.info(`${PackageID.SERVER_CORE}: ${line}`);
320
- },
321
- logErrorStream (line) {
322
- consola.warn(`${PackageID.SERVER_CORE}: ${line}`);
323
- }
324
- });
325
- }
326
- async buildShellCommand(command, options) {
327
- const parts = [];
328
- const modulePath = findModulePath(PackageName.SERVER_CORE);
329
- if (typeof modulePath === 'string') {
330
- const directory = path.dirname(modulePath);
331
- const outputPath = path.join(directory, 'dist', 'cli', 'index.js');
332
- parts.push(`node ${outputPath}`);
333
- } else {
334
- parts.push(`npx ${PackageName.SERVER_CORE}`);
335
- }
336
- parts.push(command);
337
- if (options.configFile) {
338
- parts.push(`--configFile=${options.configFile}`);
339
- }
340
- if (options.configDirectory) {
341
- parts.push(`--configDirectory=${options.configDirectory}`);
342
- }
343
- return parts.join(' ');
344
- }
345
- }
346
-
347
- async function executePackageCommand(pkg, command, options = {}) {
348
- switch(pkg){
349
- case PackageID.CLIENT_WEB:
350
- {
351
- const serverCore = new ClientWebPackage();
352
- return serverCore.execute(command, options);
353
- }
354
- case PackageID.SERVER_CORE:
355
- {
356
- const serverCore = new ServerCorePackage();
357
- return serverCore.execute(command, options);
358
- }
359
- }
360
- throw new Error(`The package ${pkg} is not supported.`);
361
- }
362
-
363
- function normalizePackageID(input) {
364
- const value = input.trim().toLowerCase();
365
- switch(value){
366
- case 'client.web':
367
- case 'client/web':
368
- case 'client-web':
369
- {
370
- return PackageID.CLIENT_WEB;
371
- }
372
- case 'server.core':
373
- case 'server/core':
374
- case 'server-core':
375
- {
376
- return PackageID.SERVER_CORE;
377
- }
378
- }
379
- return undefined;
380
- }
381
-
382
- async function createCLIEntryPointCommand() {
383
- const pkgRaw = await fs.promises.readFile(path.join(process.cwd(), 'package.json'), {
384
- encoding: 'utf8'
385
- });
386
- const pkg = JSON.parse(pkgRaw);
387
- return citty.defineCommand({
388
- meta: {
389
- name: pkg.name,
390
- version: pkg.version,
391
- description: pkg.description
392
- },
393
- args: {
394
- command: {
395
- type: 'positional',
396
- description: 'The command which should be forwarded to the package.'
397
- },
398
- package: {
399
- type: 'positional',
400
- description: 'The package, which should be targeted.',
401
- required: false
402
- },
403
- configDirectory: {
404
- type: 'string',
405
- description: 'Config directory path',
406
- alias: 'cD'
407
- },
408
- configFile: {
409
- type: 'string',
410
- description: 'Name of one or more configuration files.',
411
- alias: 'cF'
412
- }
413
- },
414
- async run (ctx) {
415
- let pkgs = ctx.args.package ? ctx.args.package.split(',') : [];
416
- if (pkgs.length > 0) {
417
- pkgs = pkgs.map((pkg)=>normalizePackageID(pkg)).filter((pkg)=>Boolean(pkg));
418
- }
419
- if (pkgs.length === 0) {
420
- pkgs = Object.values(PackageID);
421
- }
422
- const promises = [];
423
- for(let i = 0; i < pkgs.length; i++){
424
- promises.push(executePackageCommand(pkgs[i], ctx.args.command, {
425
- configFile: ctx.args.configFile,
426
- configDirectory: ctx.args.configDirectory
427
- }));
428
- }
429
- await Promise.all(promises);
430
- }
431
- });
432
- }
433
-
434
- Promise.resolve().then(()=>createCLIEntryPointCommand()).then((command)=>citty.runMain(command));
435
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/packages/client-web/config/parse.ts","../src/packages/client-web/config/build.ts","../src/packages/client-web/config/read/env.ts","../src/packages/client-web/config/read/fs.ts","../src/packages/client-web/config/read/module.ts","../src/utils/line-breaks.ts","../src/utils/process-output.ts","../src/utils/stringify-object-args.ts","../src/utils/shell.ts","../src/constants.ts","../src/utils/modules-path.ts","../src/packages/constants.ts","../src/packages/client-web/module.ts","../src/packages/server-core/module.ts","../src/packages/execute.ts","../src/packages/normalize.ts","../src/module.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport zod from 'zod';\nimport type { ClientWebConfigInput } from './type';\n\nexport function parseClientWebConfig(input: unknown = {}) : ClientWebConfigInput {\n const schema = zod.object({\n port: zod.number().nonnegative().optional(),\n host: zod.string().optional(),\n apiUrl: zod.string().url().optional(),\n publicUrl: zod.string().url().optional(),\n });\n\n return schema.parse(input);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { extendObject, makeURLPublicAccessible } from '@authup/kit';\nimport { defineGetter, dycraft } from 'dycraft';\nimport { parseClientWebConfig } from './parse';\nimport type { ClientWebConfig, ClientWebConfigInput } from './type';\n\nexport function buildClientWebConfig(raw: ClientWebConfigInput): ClientWebConfig {\n const config = dycraft({\n defaults: {\n port: 3000,\n host: '0.0.0.0',\n apiUrl: 'http://127.0.0.1:3001/',\n },\n getters: {\n publicUrl: defineGetter((\n context,\n ) => `http://${makeURLPublicAccessible(context.get('host'))}:${context.get('port')}/`),\n },\n });\n\n return extendObject(config, parseClientWebConfig(raw));\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { oneOf, read, readInt } from 'envix';\nimport type { ClientWebConfigInput } from '../type';\n\nexport function readClientWebConfigFromEnv() : ClientWebConfigInput {\n const config : ClientWebConfigInput = {};\n\n const port = oneOf([\n readInt('UI_PORT'),\n readInt('NITRO_UI_PORT'),\n readInt('NUXT_UI_PORT'),\n readInt('NUXT_PUBLIC_UI_PORT'),\n readInt('PORT'),\n readInt('NITRO_PORT'),\n readInt('NUXT_PORT'),\n readInt('NUXT_PUBLIC_PORT'),\n ]);\n\n if (typeof port !== 'undefined') {\n config.port = port;\n }\n\n const host = oneOf([\n read('HOST'),\n read('NITRO_HOST'),\n read('NUXT_HOST'),\n ]);\n\n if (host) {\n config.host = host;\n }\n\n const apiUrl = oneOf([\n read('API_URL'),\n read('NUXT_API_URL'),\n read('NUXT_PUBLIC_API_URL'),\n ]);\n\n if (apiUrl) {\n config.apiUrl = apiUrl;\n }\n\n const publicURL = oneOf([\n read('PUBLIC_URL'),\n read('NUXT_PUBLIC_URL'),\n read('NUXT_PUBLIC_PUBLIC_URL'),\n ]);\n\n if (publicURL) {\n config.publicUrl = publicURL;\n }\n\n return config;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { makeURLPublicAccessible } from '@authup/kit';\nimport { Container } from 'confinity';\nimport type { ClientWebConfigInput } from '../type';\n\nexport type ClientWebConfigReadFsOptions = {\n cwd?: string,\n file?: string | string[]\n};\n\nexport async function readClientWebConfigFromFS(options: ClientWebConfigReadFsOptions = {}) : Promise<ClientWebConfigInput> {\n const container = new Container({\n prefix: 'authup',\n cwd: options.cwd,\n });\n\n if (options.file) {\n await container.loadFile(options.file);\n } else {\n await container.load();\n }\n\n const clientRaw = container.get('client.web') || {};\n const serverRaw = container.get('server.core') || {};\n if (serverRaw) {\n if (\n !clientRaw.apiUrl &&\n typeof serverRaw.publicUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.publicUrl);\n }\n\n if (\n !clientRaw.publicUrl &&\n typeof serverRaw.authorizeRedirectUrl === 'string'\n ) {\n clientRaw.apiUrl = makeURLPublicAccessible(serverRaw.authorizeRedirectUrl);\n }\n }\n\n return clientRaw;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { ClientWebConfigInput } from '../type';\nimport { readClientWebConfigFromEnv } from './env';\nimport type { ClientWebConfigReadFsOptions } from './fs';\nimport { readClientWebConfigFromFS } from './fs';\n\nexport type ClientWebConfigRawReadOptions = {\n fs?: boolean | ClientWebConfigReadFsOptions,\n env?: boolean,\n};\n\nexport async function readClientWebConfigRaw(options: ClientWebConfigRawReadOptions = {}) : Promise<ClientWebConfigInput> {\n if (options.fs && options.env) {\n const fsOptions = boolableToObject(options.fs);\n const fs = await readClientWebConfigFromFS(fsOptions);\n const env = readClientWebConfigFromEnv();\n\n return merge(env, fs);\n }\n\n if (options.fs) {\n const fsOptions = boolableToObject(options.fs);\n return readClientWebConfigFromFS(fsOptions);\n }\n\n if (options.env) {\n return readClientWebConfigFromEnv();\n }\n\n return {};\n}\n\nfunction boolableToObject<T>(input: T | boolean) : T {\n if (typeof input === 'boolean') {\n return {} as T;\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeLineBreaks(input: string) {\n return input.replace(/(\\r\\n|\\n|\\r)/gm, '');\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@authup/kit';\nimport { removeLineBreaks } from './line-breaks';\n\nexport function parseProcessOutputData(input: unknown) : string[] {\n if (typeof input !== 'string') {\n return [];\n }\n\n const lines = input\n .split(/\\r?\\n/)\n .filter((element) => element);\n\n const items : string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = removeLineBreaks(lines[i]).trim();\n if (line.length === 0) {\n continue;\n }\n\n try {\n const parsed = JSON.parse(line);\n\n if (\n isObject(parsed) &&\n hasOwnProperty(parsed, 'message') &&\n typeof parsed.message === 'string'\n ) {\n items.push(parsed.message);\n continue;\n }\n } catch (e) {\n // no json :/\n }\n\n items.push(line);\n }\n\n return items;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function stringifyObjectArgs(ob: Record<string, any>) {\n const parts : string[] = [];\n\n const keys = Object.keys(ob);\n for (let i = 0; i < keys.length; i++) {\n parts.push(`--${keys[i]} ${ob[keys[i]]}`);\n }\n\n return parts.join(' ');\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { exec } from 'node:child_process';\nimport process from 'node:process';\nimport { parseProcessOutputData } from './process-output';\nimport { stringifyObjectArgs } from './stringify-object-args';\n\nexport type ShellCommandExecOptions = {\n configFile?: string,\n configDirectory?: string,\n\n env?: Record<string, string | undefined>,\n envFromProcess?: boolean,\n args?: Record<string, any>,\n logErrorStream?: (content: string) => void,\n logDataStream?: (content: string) => void\n};\n\nexport async function execShellCommand(\n command: string,\n ctx: ShellCommandExecOptions = {},\n) {\n return new Promise<ChildProcess>((resolve, reject) => {\n const childProcess = exec(`${command} ${stringifyObjectArgs(ctx.args || {})}`, {\n env: {\n PATH: process.env.PATH,\n ...(ctx.envFromProcess ? process.env : {}),\n ...(ctx.env ? ctx.env : {}),\n },\n });\n\n childProcess.on('error', (data) => {\n reject(data);\n });\n\n childProcess.on('spawn', () => {\n resolve(childProcess);\n });\n\n childProcess.stderr.setEncoding('utf-8');\n childProcess.stderr.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (ctx.logErrorStream) {\n ctx.logErrorStream(data);\n }\n });\n\n childProcess.stdout.on('data', (data) => {\n if (typeof data !== 'string' || data.length === 0) {\n return;\n }\n\n if (!ctx.logDataStream) {\n return;\n }\n\n const lines = parseProcessOutputData(data);\n for (let i = 0; i < lines.length; i++) {\n ctx.logDataStream(lines[i]);\n }\n });\n });\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\n\nexport const PACKAGE_DIRECTORY = path.join(__dirname, '..');\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport process from 'node:process';\nimport findUpPackagePath from 'resolve-package-path';\nimport { PACKAGE_DIRECTORY } from '../constants';\n\nexport function findModulePath(module: string) : string | undefined {\n let modulePath = findUpPackagePath(module, PACKAGE_DIRECTORY);\n if (PACKAGE_DIRECTORY !== process.cwd()) {\n modulePath = findUpPackagePath(module, process.cwd());\n }\n\n if (!modulePath) {\n return undefined;\n }\n\n return modulePath;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum PackageName {\n CLIENT_WEB = '@authup/client-web',\n SERVER_CORE = '@authup/server-core',\n}\n\nexport enum PackageID {\n CLIENT_WEB = 'client.web',\n SERVER_CORE = 'server.core',\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport type { ChildProcess } from 'node:child_process';\nimport path from 'node:path';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\nimport { buildClientWebConfig, readClientWebConfigRaw } from './config';\n\nexport class ClientWebPackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) : Promise<ChildProcess> {\n const shellCommand = await this.buildShellCommand();\n const env = await this.buildEnv({\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n env,\n logDataStream(line) {\n consola.info(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.CLIENT_WEB}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand() {\n let shellCommand : string;\n\n const modulePath = findModulePath(PackageName.CLIENT_WEB);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, '.output', 'server', 'index.mjs');\n shellCommand = `node ${outputPath}`;\n } else {\n shellCommand = `npx ${PackageName.CLIENT_WEB}`;\n }\n\n return shellCommand;\n }\n\n protected async buildEnv(ctx: PackageExecuteOptions) {\n const env : Record<string, any> = {};\n\n const configRaw = await readClientWebConfigRaw({\n fs: {\n file: ctx.configFile,\n cwd: ctx.configDirectory,\n },\n });\n const config = buildClientWebConfig(configRaw);\n\n if (config.host) {\n env.HOST = config.host;\n }\n\n if (config.port) {\n env.PORT = `${config.port}`;\n }\n\n if (config.apiUrl) {\n env.API_URL = config.apiUrl;\n }\n\n if (config.publicUrl) {\n env.PUBLIC_URL = config.publicUrl;\n }\n\n return this.extendEnvKeys(env);\n }\n\n extendEnvKeys(input: Record<string, string | undefined>) {\n const env : Record<string, any> = {};\n\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n env[keys[i]] = input[keys[i]];\n\n if (!keys[i].match(/^(?:NUXT|NITRO)_.*$/)) {\n env[`NUXT_PUBLIC_${keys[i]}`] = input[keys[i]];\n }\n }\n\n return env;\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport consola from 'consola';\nimport path from 'node:path';\nimport type { ShellCommandExecOptions } from '../../utils';\nimport { execShellCommand, findModulePath } from '../../utils';\nimport { PackageID, PackageName } from '../constants';\nimport type { Package, PackageExecuteOptions } from '../types';\n\nexport class ServerCorePackage implements Package {\n async execute(command: string, options: PackageExecuteOptions = {}) {\n const shellCommand = await this.buildShellCommand(command, {\n configDirectory: options.configDirectory,\n configFile: options.configFile,\n });\n\n return execShellCommand(shellCommand, {\n logDataStream(line) {\n consola.info(`${PackageID.SERVER_CORE}: ${line}`);\n },\n logErrorStream(line) {\n consola.warn(`${PackageID.SERVER_CORE}: ${line}`);\n },\n });\n }\n\n protected async buildShellCommand(command: string, options: ShellCommandExecOptions) {\n const parts : string[] = [];\n\n const modulePath = findModulePath(PackageName.SERVER_CORE);\n if (typeof modulePath === 'string') {\n const directory = path.dirname(modulePath);\n const outputPath = path.join(directory, 'dist', 'cli', 'index.js');\n parts.push(`node ${outputPath}`);\n } else {\n parts.push(`npx ${PackageName.SERVER_CORE}`);\n }\n\n parts.push(command);\n\n if (options.configFile) {\n parts.push(`--configFile=${options.configFile}`);\n }\n\n if (options.configDirectory) {\n parts.push(`--configDirectory=${options.configDirectory}`);\n }\n\n return parts.join(' ');\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { ClientWebPackage } from './client-web';\nimport { PackageID } from './constants';\nimport { ServerCorePackage } from './server-core';\nimport type { PackageExecuteOptions } from './types';\n\nexport async function executePackageCommand(\n pkg: string,\n command: string,\n options: PackageExecuteOptions = {},\n) : Promise<ChildProcess> {\n switch (pkg) {\n case PackageID.CLIENT_WEB: {\n const serverCore = new ClientWebPackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n case PackageID.SERVER_CORE: {\n const serverCore = new ServerCorePackage();\n\n return serverCore.execute(\n command,\n options,\n );\n }\n }\n\n throw new Error(`The package ${pkg} is not supported.`);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PackageID } from './constants';\n\nexport function normalizePackageID(input: string) {\n const value = input.trim().toLowerCase();\n\n switch (value) {\n case 'client.web':\n case 'client/web':\n case 'client-web': {\n return PackageID.CLIENT_WEB;\n }\n case 'server.core':\n case 'server/core':\n case 'server-core': {\n return PackageID.SERVER_CORE;\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { defineCommand } from 'citty';\nimport type { ChildProcess } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { PackageID, executePackageCommand, normalizePackageID } from './packages';\n\nexport async function createCLIEntryPointCommand() {\n const pkgRaw = await fs.promises.readFile(\n path.join(process.cwd(), 'package.json'),\n { encoding: 'utf8' },\n );\n const pkg = JSON.parse(pkgRaw);\n\n return defineCommand({\n meta: {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n },\n args: {\n command: {\n type: 'positional',\n description: 'The command which should be forwarded to the package.',\n },\n package: {\n type: 'positional',\n description: 'The package, which should be targeted.',\n required: false,\n },\n configDirectory: {\n type: 'string',\n description: 'Config directory path',\n alias: 'cD',\n },\n configFile: {\n type: 'string',\n description: 'Name of one or more configuration files.',\n alias: 'cF',\n },\n },\n async run(ctx) {\n let pkgs = ctx.args.package ?\n ctx.args.package.split(',') :\n [];\n\n if (pkgs.length > 0) {\n pkgs = pkgs\n .map((pkg) => normalizePackageID(pkg))\n .filter((pkg) => Boolean(pkg));\n }\n\n if (pkgs.length === 0) {\n pkgs = Object.values(PackageID);\n }\n\n const promises : Promise<ChildProcess>[] = [];\n for (let i = 0; i < pkgs.length; i++) {\n promises.push(executePackageCommand(\n pkgs[i],\n ctx.args.command,\n {\n configFile: ctx.args.configFile,\n configDirectory: ctx.args.configDirectory,\n },\n ));\n }\n\n await Promise.all(promises);\n },\n });\n}\n","#!/usr/bin/env node\n\nimport { runMain } from 'citty';\nimport { createCLIEntryPointCommand } from './module';\n\nPromise.resolve()\n .then(() => createCLIEntryPointCommand())\n .then((command) => runMain(command));\n"],"names":["parseClientWebConfig","input","schema","zod","object","port","number","nonnegative","optional","host","string","apiUrl","url","publicUrl","parse","buildClientWebConfig","raw","config","dycraft","defaults","getters","defineGetter","context","makeURLPublicAccessible","get","extendObject","readClientWebConfigFromEnv","oneOf","readInt","read","publicURL","readClientWebConfigFromFS","options","container","Container","prefix","cwd","file","loadFile","load","clientRaw","serverRaw","authorizeRedirectUrl","readClientWebConfigRaw","fs","env","fsOptions","boolableToObject","merge","removeLineBreaks","replace","parseProcessOutputData","lines","split","filter","element","items","i","length","line","trim","parsed","JSON","isObject","hasOwnProperty","message","push","e","stringifyObjectArgs","ob","parts","keys","Object","join","execShellCommand","command","ctx","Promise","resolve","reject","childProcess","exec","args","PATH","process","envFromProcess","on","data","stderr","setEncoding","logErrorStream","stdout","logDataStream","PACKAGE_DIRECTORY","path","__dirname","findModulePath","module","modulePath","findUpPackagePath","undefined","PackageName","PackageID","ClientWebPackage","execute","shellCommand","buildShellCommand","buildEnv","configDirectory","configFile","consola","info","CLIENT_WEB","warn","directory","dirname","outputPath","configRaw","HOST","PORT","API_URL","PUBLIC_URL","extendEnvKeys","match","ServerCorePackage","SERVER_CORE","executePackageCommand","pkg","serverCore","Error","normalizePackageID","value","toLowerCase","createCLIEntryPointCommand","pkgRaw","promises","readFile","encoding","defineCommand","meta","name","version","description","type","package","required","alias","run","pkgs","map","Boolean","values","all","then","runMain"],"mappings":"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"}