jax-hono 1.0.18 → 1.0.20

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/config.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { existsSync } from 'node:fs';
2
- import { cwd } from 'node:process';
3
- import merge from 'deepmerge';
4
- import { config as loadDotenv } from 'dotenv';
5
- import minimist from 'minimist';
6
- import { requireGeneratedModule, type GeneratedProjectConfig } from './core/generated';
7
- import type { JaxConfig } from './types/config';
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import merge from 'deepmerge';
4
+ import { config as loadDotenv } from 'dotenv';
5
+ import minimist from 'minimist';
6
+ import { getProjectDir, requireGeneratedModule, type GeneratedProjectConfig } from './core/generated';
7
+ import type { JaxConfig } from './types/config';
8
8
 
9
9
  type PlainConfig = Record<string, unknown>;
10
10
  type ProjectConfig = GeneratedProjectConfig;
@@ -16,7 +16,8 @@ type ConfigModuleItem = {
16
16
  export type { JaxConfig } from './types/config';
17
17
  export type Config = JaxConfig & ProjectConfig;
18
18
 
19
- const { configModules } = requireGeneratedModule<{ configModules: readonly ConfigModuleItem[] }>('config.ts');
19
+ const { configModules } = requireGeneratedModule<{ configModules: readonly ConfigModuleItem[] }>('config.ts');
20
+ const projectDir = getProjectDir();
20
21
 
21
22
  loadDotenvFile('.env');
22
23
 
@@ -33,11 +34,13 @@ console.log('env', env);
33
34
 
34
35
  loadDotenvFile(`.env.${env}`);
35
36
 
36
- function loadDotenvFile(file: string) {
37
- if (existsSync(file)) {
38
- loadDotenv({ path: file, override: true });
39
- }
40
- }
37
+ function loadDotenvFile(file: string) {
38
+ const path = join(projectDir, file);
39
+
40
+ if (existsSync(path)) {
41
+ loadDotenv({ path, override: true });
42
+ }
43
+ }
41
44
 
42
45
  function isPlainConfig(value: unknown): value is PlainConfig {
43
46
  return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
@@ -54,8 +57,8 @@ function parsePort(value: string | undefined) {
54
57
  }
55
58
 
56
59
  export function loadConfig(): Config {
57
- const jaxConfig: JaxConfig = {
58
- rootDir: cwd(),
60
+ const jaxConfig: JaxConfig = {
61
+ rootDir: projectDir,
59
62
  port: parsePort(Bun.env.PORT),
60
63
  env
61
64
  };
package/core/generated.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { existsSync } from 'node:fs';
2
- import { cwd, execPath } from 'node:process';
3
- import { dirname, resolve } from 'node:path';
1
+ import { existsSync } from 'node:fs';
2
+ import { cwd, execPath } from 'node:process';
3
+ import { dirname, resolve } from 'node:path';
4
4
 
5
5
  export interface JaxGenerated {}
6
6
 
@@ -28,15 +28,19 @@ export function registerGeneratedModules(modules: GeneratedModuleMap) {
28
28
  Object.assign(generatedModules, modules);
29
29
  }
30
30
 
31
- export function getProjectGeneratedDir() {
32
- const configuredDir = Bun.env.JAX_HONO_GENERATED_DIR;
31
+ export function getProjectGeneratedDir() {
32
+ const configuredDir = Bun.env.JAX_HONO_GENERATED_DIR;
33
33
 
34
34
  if (configuredDir) {
35
35
  return resolve(cwd(), configuredDir);
36
36
  }
37
37
 
38
- return findProjectGeneratedDir();
39
- }
38
+ return findProjectGeneratedDir();
39
+ }
40
+
41
+ export function getProjectDir() {
42
+ return dirname(getProjectGeneratedDir());
43
+ }
40
44
 
41
45
  export function requireGeneratedModule<T>(fileName: string): T {
42
46
  if (fileName in generatedModules) {
@@ -78,19 +82,37 @@ function findGeneratedFile(fileName: string) {
78
82
  return resolve(getGeneratedDirCandidates()[0], fileName);
79
83
  }
80
84
 
81
- function getGeneratedDirCandidates() {
82
- const cwdDir = cwd();
83
- const executableDir = dirname(execPath);
84
- const dirs = [
85
- resolve(cwdDir, '.jax-hono'),
86
- resolve(cwdDir, '..', '.jax-hono'),
87
- resolve(executableDir, '.jax-hono'),
88
- resolve(executableDir, '..', '.jax-hono'),
89
- resolve(cwdDir, 'generated'),
90
- resolve(cwdDir, '..', 'generated'),
91
- resolve(executableDir, 'generated'),
92
- resolve(executableDir, '..', 'generated'),
93
- ];
94
-
95
- return [...new Set(dirs)];
96
- }
85
+ function getGeneratedDirCandidates() {
86
+ const cwdDir = cwd();
87
+ const executableDir = dirname(execPath);
88
+ const entryDir = getEntryDir();
89
+ const baseDirs = [
90
+ cwdDir,
91
+ resolve(cwdDir, '..'),
92
+ executableDir,
93
+ resolve(executableDir, '..'),
94
+ ...entryDir
95
+ ? [
96
+ entryDir,
97
+ resolve(entryDir, '..'),
98
+ resolve(entryDir, '..', '..'),
99
+ ]
100
+ : [],
101
+ ];
102
+ const dirs = [
103
+ ...baseDirs.map((dir) => resolve(dir, '.jax-hono')),
104
+ ...baseDirs.map((dir) => resolve(dir, 'generated')),
105
+ ];
106
+
107
+ return [...new Set(dirs)];
108
+ }
109
+
110
+ function getEntryDir() {
111
+ const main = Bun.main;
112
+
113
+ if (!main || main === '[eval]') {
114
+ return undefined;
115
+ }
116
+
117
+ return dirname(resolve(cwd(), main));
118
+ }
package/docs/agent.md CHANGED
@@ -63,9 +63,11 @@ setup 会在执行命令期间临时把入口文件里对 `jax-hono` 的导入
63
63
  import { config, createApp } from 'jax-hono';
64
64
  ```
65
65
 
66
- 这样 Bun 才能在编译时把生成模块放进可执行文件;运行时动态查找 `.jax-hono/*.ts` 只能作为开发态兜底,旧 `generated/*.ts` 仅作为兼容路径。
67
-
68
- ## 插件生成约定
66
+ 这样 Bun 才能在编译时把生成模块放进可执行文件;运行时动态查找 `.jax-hono/*.ts` 只能作为开发态兜底,旧 `generated/*.ts` 仅作为兼容路径。
67
+
68
+ 运行时除当前 `cwd` 外,也会根据 Bun 入口脚本位置向上查找 `.jax-hono`。这可以兼容 PM2 配成父目录 `cwd`、脚本指向子项目入口的情况;但仍推荐把 PM2 `cwd` 配到具体项目根。
69
+
70
+ ## 插件生成约定
69
71
 
70
72
  生成器只扫描已启用插件。插件启用来源包括:
71
73
 
package/docs/jax.md CHANGED
@@ -115,7 +115,9 @@ import { config, createApp } from 'jax-hono';
115
115
 
116
116
  不要依赖 `jax-hono/generated` 这种包内目录或 Junction。`.jax-hono` 是每个调用项目自己的生成物;多个项目同时 link 到同一个 `jax-hono` 源码目录时,也不应该共享同一份生成结果。
117
117
 
118
- 如果确实需要从非项目根目录运行未编译源码,可以设置 `JAX_HONO_GENERATED_DIR` 指向当前项目的生成目录;旧项目仍可把它设为 `generated`。编译产物仍应通过 setup 包裹构建命令,让 Bun 把 `.jax-hono` 模块打进可执行文件。
118
+ 如果确实需要从非项目根目录运行未编译源码,可以设置 `JAX_HONO_GENERATED_DIR` 指向当前项目的生成目录;旧项目仍可把它设为 `generated`。编译产物仍应通过 setup 包裹构建命令,让 Bun 把 `.jax-hono` 模块打进可执行文件。
119
+
120
+ 运行时会优先按当前 `cwd` 查找 `.jax-hono`,也会根据 Bun 入口脚本位置向上查找。例如 PM2 使用 `cwd: "/data/node/acs"`、`script: "acs-server/src/main.ts"` 时,框架会兼容查找 `/data/node/acs/acs-server/.jax-hono`。推荐配置仍然是把 `cwd` 指向具体项目根。
119
121
 
120
122
  ### `helpers`
121
123
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jax-hono",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "description": "Lightweight framework layer on top of Hono, built for Bun",
5
5
  "type": "module",
6
6
  "main": "./index.ts",