@zeltjs/adapter-node 0.10.1-canary.0 → 0.11.0
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.cjs +2 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -86,7 +86,7 @@ const createNodeApp = (readyApp, shutdown, args) => {
|
|
|
86
86
|
for (const entry of readyApp.getFeatureEntries(_zeltjs_core.HttpFeature)) Object.defineProperty(nodeApp, entry.key, {
|
|
87
87
|
value: {
|
|
88
88
|
...entry.capabilities,
|
|
89
|
-
listen: createListenForHttp(entry.capabilities.fetch, (callback) =>
|
|
89
|
+
listen: createListenForHttp(entry.capabilities.fetch, (callback) => readyApp.registerShutdown(callback))
|
|
90
90
|
},
|
|
91
91
|
configurable: true,
|
|
92
92
|
enumerable: true
|
|
@@ -96,6 +96,7 @@ const createNodeApp = (readyApp, shutdown, args) => {
|
|
|
96
96
|
/** @throws {ZeltLifecycleStateError} */ async function onNode(app, options = {}) {
|
|
97
97
|
const readyApp = await app.createRuntime({
|
|
98
98
|
...options.configs === void 0 ? {} : { configs: options.configs },
|
|
99
|
+
...options.prebuilt === void 0 ? {} : { prebuilt: options.prebuilt },
|
|
99
100
|
fallbackConfigs: [NodeCliConfig, ProcessEnvAdaptor],
|
|
100
101
|
warmup: options.warmup ?? true
|
|
101
102
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServerType, createAdaptorServer } from "@hono/node-server";
|
|
2
|
-
import { CliConfig, ConfigClass, ConfiguredFeature, EnvAdaptor, FeatureApp, FeatureReadyCapabilities, HttpFeature, RuntimeApp, Signal, SignalHandler } from "@zeltjs/core";
|
|
2
|
+
import { CliConfig, ConfigClass, ConfiguredFeature, EnvAdaptor, FeatureApp, FeatureReadyCapabilities, HttpFeature, RuntimeApp, Signal, SignalHandler, ZeltPrebuilt } from "@zeltjs/core";
|
|
3
3
|
|
|
4
4
|
//#region src/listen.lib.d.ts
|
|
5
5
|
type ListenOptions = {
|
|
@@ -30,6 +30,7 @@ declare class NodeCliConfig extends CliConfig {
|
|
|
30
30
|
type NodeAppOptions = {
|
|
31
31
|
readonly configs?: readonly ConfigClass<object>[];
|
|
32
32
|
readonly warmup?: boolean;
|
|
33
|
+
readonly prebuilt?: ZeltPrebuilt;
|
|
33
34
|
};
|
|
34
35
|
type EnvironmentNodeAppPart = {
|
|
35
36
|
readonly args: readonly string[];
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/on-node.ts","../src/process-env.adaptor.ts","../src/serve.lib.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGC,YAAA;EAAA,SACD,OAAA;IAAW,IAAA;IAAc,OAAA;EAAA;EAAA,SACzB,QAAA,QAAgB,OAAA;AAAA;;cASd,mBAAA,GACX,QAAA,GAAW,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA,GACxC,gBAAA,GAAmB,QAAA,QAAgB,OAAA,iBAAwB,OAAA,aACxD,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;;;cClB3C,aAAA,SAAsB,SAAA;EACxB,GAAA,CAAA;EAIA,IAAA,CAAA;EAIA,IAAA,CAAK,IAAA;EAIL,WAAA,CAAY,IAAA;EAIZ,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;EAIlC,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/on-node.ts","../src/process-env.adaptor.ts","../src/serve.lib.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGC,YAAA;EAAA,SACD,OAAA;IAAW,IAAA;IAAc,OAAA;EAAA;EAAA,SACzB,QAAA,QAAgB,OAAA;AAAA;;cASd,mBAAA,GACX,QAAA,GAAW,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA,GACxC,gBAAA,GAAmB,QAAA,QAAgB,OAAA,iBAAwB,OAAA,aACxD,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;;;cClB3C,aAAA,SAAsB,SAAA;EACxB,GAAA,CAAA;EAIA,IAAA,CAAA;EAIA,IAAA,CAAK,IAAA;EAIL,WAAA,CAAY,IAAA;EAIZ,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;EAIlC,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;AAAA;;;KCRlC,cAAA;EAAA,SACD,OAAA,YAAmB,WAAA;EAAA,SACnB,MAAA;EAAA,SACA,QAAA,GAAW,YAAA;AAAA;AAAA,KAKjB,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,QAAA,QAAgB,OAAA;AAAA;AAAA,KAGtB,eAAA;EAAA,SACM,MAAA,GAAS,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;AAAA;AAAA,KAGlE,uBAAA,kBAAyC,iBAAA,IAC5C,wBAAA,CAAyB,QAAA,KACtB,QAAA,SAAiB,WAAA,WAAsB,eAAA;AAAA,KAEvC,0BAAA,oBAA8C,iBAAA,8BAC3B,CAAA,YAAa,QAAA,UAAkB,uBAAA,CAAwB,QAAA;AAAA,KAK1E,kBAAA,oBAAsC,iBAAA,MAAuB,UAAA,CAAW,CAAA,IAC3E,sBAAA,GACA,0BAAA,CAA2B,CAAA;AAAA,iBAiCb,MAAA,0BAAgC,iBAAA,GAAA,CAC9C,GAAA,EAAK,UAAA,CAAW,CAAA,GAChB,OAAA,GAAU,cAAA,GACT,OAAA,CAAQ,kBAAA,CAAmB,CAAA;;;cC/EjB,iBAAA,SAA0B,UAAA;EAC5B,GAAA,CAAI,GAAA;AAAA;;;KCDH,YAAA;EACV,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,WAAA;EACV,IAAA;EACA,OAAA;AAAA;AAAA,KAGG,OAAA;EACH,KAAA,GAAQ,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;AAAA;AAAA,cAa1B,QAAA,GACX,GAAA,EAAK,OAAA,EACL,iBAAA,GAAoB,YAAA,KAAiB,IAAA,EAAM,WAAA,YAC3C,aAAA,IAAiB,IAAA,EAAM,WAAA,cACtB,UAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServerType, createAdaptorServer } from "@hono/node-server";
|
|
2
|
-
import { CliConfig, ConfigClass, ConfiguredFeature, EnvAdaptor, FeatureApp, FeatureReadyCapabilities, HttpFeature, RuntimeApp, Signal, SignalHandler } from "@zeltjs/core";
|
|
2
|
+
import { CliConfig, ConfigClass, ConfiguredFeature, EnvAdaptor, FeatureApp, FeatureReadyCapabilities, HttpFeature, RuntimeApp, Signal, SignalHandler, ZeltPrebuilt } from "@zeltjs/core";
|
|
3
3
|
|
|
4
4
|
//#region src/listen.lib.d.ts
|
|
5
5
|
type ListenOptions = {
|
|
@@ -30,6 +30,7 @@ declare class NodeCliConfig extends CliConfig {
|
|
|
30
30
|
type NodeAppOptions = {
|
|
31
31
|
readonly configs?: readonly ConfigClass<object>[];
|
|
32
32
|
readonly warmup?: boolean;
|
|
33
|
+
readonly prebuilt?: ZeltPrebuilt;
|
|
33
34
|
};
|
|
34
35
|
type EnvironmentNodeAppPart = {
|
|
35
36
|
readonly args: readonly string[];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/on-node.ts","../src/process-env.adaptor.ts","../src/serve.lib.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGC,YAAA;EAAA,SACD,OAAA;IAAW,IAAA;IAAc,OAAA;EAAA;EAAA,SACzB,QAAA,QAAgB,OAAA;AAAA;;cASd,mBAAA,GACX,QAAA,GAAW,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA,GACxC,gBAAA,GAAmB,QAAA,QAAgB,OAAA,iBAAwB,OAAA,aACxD,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;;;cClB3C,aAAA,SAAsB,SAAA;EACxB,GAAA,CAAA;EAIA,IAAA,CAAA;EAIA,IAAA,CAAK,IAAA;EAIL,WAAA,CAAY,IAAA;EAIZ,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;EAIlC,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/on-node.ts","../src/process-env.adaptor.ts","../src/serve.lib.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,IAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGC,YAAA;EAAA,SACD,OAAA;IAAW,IAAA;IAAc,OAAA;EAAA;EAAA,SACzB,QAAA,QAAgB,OAAA;AAAA;;cASd,mBAAA,GACX,QAAA,GAAW,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA,GACxC,gBAAA,GAAmB,QAAA,QAAgB,OAAA,iBAAwB,OAAA,aACxD,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;;;cClB3C,aAAA,SAAsB,SAAA;EACxB,GAAA,CAAA;EAIA,IAAA,CAAA;EAIA,IAAA,CAAK,IAAA;EAIL,WAAA,CAAY,IAAA;EAIZ,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;EAIlC,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,aAAA;AAAA;;;KCRlC,cAAA;EAAA,SACD,OAAA,YAAmB,WAAA;EAAA,SACnB,MAAA;EAAA,SACA,QAAA,GAAW,YAAA;AAAA;AAAA,KAKjB,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,QAAA,QAAgB,OAAA;AAAA;AAAA,KAGtB,eAAA;EAAA,SACM,MAAA,GAAS,aAAA,YAAyB,aAAA,KAAkB,OAAA,CAAQ,YAAA;AAAA;AAAA,KAGlE,uBAAA,mBAAyC,iBAAA,IAC5C,wBAAA,CAAyB,SAAA,KACtB,SAAA,SAAiB,WAAA,WAAsB,eAAA;AAAA,KAEvC,0BAAA,oBAA8C,iBAAA,8BAC3B,CAAA,YAAa,QAAA,UAAkB,uBAAA,CAAwB,QAAA;AAAA,KAK1E,kBAAA,oBAAsC,iBAAA,MAAuB,UAAA,CAAW,CAAA,IAC3E,sBAAA,GACA,0BAAA,CAA2B,CAAA;AAAA,iBAiCb,MAAA,0BAAgC,iBAAA,GAAA,CAC9C,GAAA,EAAK,UAAA,CAAW,CAAA,GAChB,OAAA,GAAU,cAAA,GACT,OAAA,CAAQ,kBAAA,CAAmB,CAAA;;;cC/EjB,iBAAA,SAA0B,UAAA;EAC5B,GAAA,CAAI,GAAA;AAAA;;;KCDH,YAAA;EACV,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,WAAA;EACV,IAAA;EACA,OAAA;AAAA;AAAA,KAGG,OAAA;EACH,KAAA,GAAQ,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;AAAA;AAAA,cAa1B,QAAA,GACX,GAAA,EAAK,OAAA,EACL,iBAAA,GAAoB,YAAA,KAAiB,IAAA,EAAM,WAAA,YAC3C,aAAA,IAAiB,IAAA,EAAM,WAAA,cACtB,UAAA"}
|
package/dist/index.js
CHANGED
|
@@ -85,7 +85,7 @@ const createNodeApp = (readyApp, shutdown, args) => {
|
|
|
85
85
|
for (const entry of readyApp.getFeatureEntries(HttpFeature)) Object.defineProperty(nodeApp, entry.key, {
|
|
86
86
|
value: {
|
|
87
87
|
...entry.capabilities,
|
|
88
|
-
listen: createListenForHttp(entry.capabilities.fetch, (callback) =>
|
|
88
|
+
listen: createListenForHttp(entry.capabilities.fetch, (callback) => readyApp.registerShutdown(callback))
|
|
89
89
|
},
|
|
90
90
|
configurable: true,
|
|
91
91
|
enumerable: true
|
|
@@ -95,6 +95,7 @@ const createNodeApp = (readyApp, shutdown, args) => {
|
|
|
95
95
|
/** @throws {ZeltLifecycleStateError} */ async function onNode(app, options = {}) {
|
|
96
96
|
const readyApp = await app.createRuntime({
|
|
97
97
|
...options.configs === void 0 ? {} : { configs: options.configs },
|
|
98
|
+
...options.prebuilt === void 0 ? {} : { prebuilt: options.prebuilt },
|
|
98
99
|
fallbackConfigs: [NodeCliConfig, ProcessEnvAdaptor],
|
|
99
100
|
warmup: options.warmup ?? true
|
|
100
101
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["serve","closeServer","server","Promise","resolve","reject","close","err","createListenForHttp","appFetch","registerShutdown","portOrOptions","listenOptions","port","hostname","serverReady","onError","fetch","info","off","address","once","shutdown","CliConfig","Config","NodeCliConfig","cwd","process","argv","exit","code","setExitCode","exitCode","onSignal","signal","handler","on","offSignal","off","Config","EnvAdaptor","ProcessEnvAdaptor","get","key","process","env","HttpFeature","createListenForHttp","NodeCliConfig","ProcessEnvAdaptor","getArgs","globalThis","process","argv","slice","createNodeApp","readyApp","shutdown","args","base","nodeApp","entry","getFeatureEntries","Object","defineProperty","key","value","capabilities","listen","fetch","callback","feature","registerShutdown","configurable","enumerable","onNode","app","options","createRuntime","configs","undefined","fallbackConfigs","warmup","cliConfig","get","shuttingDown","detachSignals","offSignal","gracefulShutdown","catch","onSignal","serve","buildServeOptions","optionsOrCallback","extractCallback","maybeCallback","serveApp","app","options","callback","fetch","port","hostname"],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/process-env.adaptor.ts","../src/on-node.ts","../src/serve.lib.ts"],"sourcesContent":["import type { ServerType } from '@hono/node-server';\nimport { serve } from '@hono/node-server';\n\nexport type ListenOptions = {\n readonly port?: number;\n readonly hostname?: string;\n};\n\nexport type ServerHandle = {\n readonly address: { port: number; address: string };\n readonly shutdown: () => Promise<void>;\n};\n\nconst closeServer = (server: ServerType): Promise<void> =>\n new Promise<void>((resolve, reject) => {\n server.close((err) => (err ? reject(err) : resolve()));\n });\n\n/** @throws {Error} propagates the server's bind error (e.g. EADDRINUSE) instead of hanging */\nexport const createListenForHttp = (\n appFetch: (request: Request) => Promise<Response>,\n registerShutdown: (callback: () => Promise<void>) => () => Promise<void>,\n): ((portOrOptions?: number | ListenOptions) => Promise<ServerHandle>) => {\n return async (portOrOptions?: number | ListenOptions): Promise<ServerHandle> => {\n const listenOptions: ListenOptions =\n typeof portOrOptions === 'number' ? { port: portOrOptions } : (portOrOptions ?? {});\n\n const port = listenOptions.port ?? 3000;\n const hostname = listenOptions.hostname ?? '0.0.0.0';\n\n let server!: ServerType;\n const serverReady = new Promise<{ port: number; address: string }>((resolve, reject) => {\n const onError = (err: Error): void => reject(err);\n server = serve({ fetch: appFetch, port, hostname }, (info) => {\n server.off('error', onError);\n resolve({ port: info.port, address: info.address });\n });\n server.once('error', onError);\n });\n\n const address = await serverReady;\n const shutdown = registerShutdown(() => closeServer(server));\n\n return { address, shutdown };\n };\n};\n","import type { Signal, SignalHandler } from '@zeltjs/core';\nimport { CliConfig, Config } from '@zeltjs/core';\n\n@Config\nexport class NodeCliConfig extends CliConfig {\n override cwd(): string {\n return process.cwd();\n }\n\n override argv(): readonly string[] {\n return process.argv;\n }\n\n override exit(code: number): never {\n process.exit(code);\n }\n\n override setExitCode(code: number): void {\n process.exitCode = code;\n }\n\n override onSignal(signal: Signal, handler: SignalHandler): void {\n process.on(signal, handler);\n }\n\n override offSignal(signal: Signal, handler: SignalHandler): void {\n process.off(signal, handler);\n }\n}\n","import { Config, EnvAdaptor } from '@zeltjs/core';\n\n@Config\nexport class ProcessEnvAdaptor extends EnvAdaptor {\n override get(key: string): string | undefined {\n return process.env[key];\n }\n}\n","import type {\n ConfigClass,\n ConfiguredFeature,\n FeatureApp,\n FeatureReadyCapabilities,\n RuntimeApp,\n} from '@zeltjs/core';\nimport { HttpFeature } from '@zeltjs/core';\n\nimport type { ListenOptions, ServerHandle } from './listen.lib';\nimport { createListenForHttp } from './listen.lib';\nimport { NodeCliConfig } from './node-cli.config';\nimport { ProcessEnvAdaptor } from './process-env.adaptor';\n\nexport type { ServerHandle } from './listen.lib';\n\nexport type NodeAppOptions = {\n readonly configs?: readonly ConfigClass<object>[];\n readonly warmup?: boolean;\n};\n\nexport type { ExecResult } from '@zeltjs/core';\n\ntype EnvironmentNodeAppPart = {\n readonly args: readonly string[];\n readonly shutdown: () => Promise<void>;\n};\n\ntype HttpNodeAppPart = {\n readonly listen: (portOrOptions?: number | ListenOptions) => Promise<ServerHandle>;\n};\n\ntype NodeFeatureCapabilities<TFeature extends ConfiguredFeature> =\n FeatureReadyCapabilities<TFeature> &\n (TFeature extends HttpFeature<string> ? HttpNodeAppPart : unknown);\n\ntype NodeNamespacedCapabilities<F extends readonly ConfiguredFeature[]> = {\n readonly [TFeature in F[number] as TFeature['key']]: NodeFeatureCapabilities<TFeature>;\n};\n\nexport type NodeApp = RuntimeApp<readonly ConfiguredFeature[]> & EnvironmentNodeAppPart;\n\ntype NodeAppForFeatures<F extends readonly ConfiguredFeature[]> = RuntimeApp<F> &\n EnvironmentNodeAppPart &\n NodeNamespacedCapabilities<F>;\n\nconst getArgs = (): readonly string[] => globalThis.process.argv.slice(2);\n\nconst createNodeApp = (\n readyApp: RuntimeApp<readonly ConfiguredFeature[]>,\n shutdown: () => Promise<void>,\n args: readonly string[],\n): NodeApp => {\n const base: RuntimeApp<readonly ConfiguredFeature[]> & EnvironmentNodeAppPart = {\n ...readyApp,\n args,\n shutdown,\n };\n\n const nodeApp: NodeApp = { ...base };\n\n for (const entry of readyApp.getFeatureEntries(HttpFeature)) {\n Object.defineProperty(nodeApp, entry.key, {\n value: {\n ...entry.capabilities,\n listen: createListenForHttp(entry.capabilities.fetch, (callback) =>\n entry.feature.registerShutdown(callback),\n ),\n },\n configurable: true,\n enumerable: true,\n });\n }\n\n return nodeApp;\n};\n\nexport function onNode<const F extends readonly ConfiguredFeature[]>(\n app: FeatureApp<F>,\n options?: NodeAppOptions,\n): Promise<NodeAppForFeatures<F>>;\n\n/** @throws {ZeltLifecycleStateError} */\nexport async function onNode<const F extends readonly ConfiguredFeature[]>(\n app: FeatureApp<F>,\n options: NodeAppOptions = {},\n): Promise<NodeApp> {\n const readyApp = await app.createRuntime({\n ...(options.configs === undefined ? {} : { configs: options.configs }),\n fallbackConfigs: [NodeCliConfig, ProcessEnvAdaptor],\n warmup: options.warmup ?? true,\n });\n\n const cliConfig = await readyApp.get(NodeCliConfig);\n\n let shuttingDown = false;\n const detachSignals = (): void => {\n cliConfig.offSignal('SIGINT', gracefulShutdown);\n cliConfig.offSignal('SIGTERM', gracefulShutdown);\n };\n\n const shutdown = async (): Promise<void> => {\n if (shuttingDown) return;\n shuttingDown = true;\n try {\n await readyApp.shutdown();\n } finally {\n detachSignals();\n }\n };\n\n const gracefulShutdown = (): void => {\n void shutdown().catch(() => {});\n };\n\n cliConfig.onSignal('SIGINT', gracefulShutdown);\n cliConfig.onSignal('SIGTERM', gracefulShutdown);\n\n const args = getArgs();\n\n return createNodeApp(readyApp, shutdown, args);\n}\n","import type { ServerType } from '@hono/node-server';\nimport { serve } from '@hono/node-server';\n\nexport type ServeOptions = {\n port?: number;\n hostname?: string;\n};\n\nexport type AddressInfo = {\n port: number;\n address: string;\n};\n\ntype AppLike = {\n fetch: (request: Request) => Promise<Response>;\n};\n\nconst buildServeOptions = (\n optionsOrCallback: ServeOptions | ((info: AddressInfo) => void) | undefined,\n): ServeOptions => (typeof optionsOrCallback === 'function' ? {} : (optionsOrCallback ?? {}));\n\nconst extractCallback = (\n optionsOrCallback: ServeOptions | ((info: AddressInfo) => void) | undefined,\n maybeCallback: ((info: AddressInfo) => void) | undefined,\n): ((info: AddressInfo) => void) | undefined =>\n typeof optionsOrCallback === 'function' ? optionsOrCallback : maybeCallback;\n\nexport const serveApp = (\n app: AppLike,\n optionsOrCallback?: ServeOptions | ((info: AddressInfo) => void),\n maybeCallback?: (info: AddressInfo) => void,\n): ServerType => {\n const options = buildServeOptions(optionsOrCallback);\n const callback = extractCallback(optionsOrCallback, maybeCallback);\n\n return serve(\n {\n fetch: app.fetch,\n port: options.port ?? 3000,\n hostname: options.hostname ?? '0.0.0.0',\n },\n callback,\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["serve","closeServer","server","Promise","resolve","reject","close","err","createListenForHttp","appFetch","registerShutdown","portOrOptions","listenOptions","port","hostname","serverReady","onError","fetch","info","off","address","once","shutdown","CliConfig","Config","NodeCliConfig","cwd","process","argv","exit","code","setExitCode","exitCode","onSignal","signal","handler","on","offSignal","off","Config","EnvAdaptor","ProcessEnvAdaptor","get","key","process","env","HttpFeature","createListenForHttp","NodeCliConfig","ProcessEnvAdaptor","getArgs","globalThis","process","argv","slice","createNodeApp","readyApp","shutdown","args","base","nodeApp","entry","getFeatureEntries","Object","defineProperty","key","value","capabilities","listen","fetch","callback","registerShutdown","configurable","enumerable","onNode","app","options","createRuntime","configs","undefined","prebuilt","fallbackConfigs","warmup","cliConfig","get","shuttingDown","detachSignals","offSignal","gracefulShutdown","catch","onSignal","serve","buildServeOptions","optionsOrCallback","extractCallback","maybeCallback","serveApp","app","options","callback","fetch","port","hostname"],"sources":["../src/listen.lib.ts","../src/node-cli.config.ts","../src/process-env.adaptor.ts","../src/on-node.ts","../src/serve.lib.ts"],"sourcesContent":["import type { ServerType } from '@hono/node-server';\nimport { serve } from '@hono/node-server';\n\nexport type ListenOptions = {\n readonly port?: number;\n readonly hostname?: string;\n};\n\nexport type ServerHandle = {\n readonly address: { port: number; address: string };\n readonly shutdown: () => Promise<void>;\n};\n\nconst closeServer = (server: ServerType): Promise<void> =>\n new Promise<void>((resolve, reject) => {\n server.close((err) => (err ? reject(err) : resolve()));\n });\n\n/** @throws {Error} propagates the server's bind error (e.g. EADDRINUSE) instead of hanging */\nexport const createListenForHttp = (\n appFetch: (request: Request) => Promise<Response>,\n registerShutdown: (callback: () => Promise<void>) => () => Promise<void>,\n): ((portOrOptions?: number | ListenOptions) => Promise<ServerHandle>) => {\n return async (portOrOptions?: number | ListenOptions): Promise<ServerHandle> => {\n const listenOptions: ListenOptions =\n typeof portOrOptions === 'number' ? { port: portOrOptions } : (portOrOptions ?? {});\n\n const port = listenOptions.port ?? 3000;\n const hostname = listenOptions.hostname ?? '0.0.0.0';\n\n let server!: ServerType;\n const serverReady = new Promise<{ port: number; address: string }>((resolve, reject) => {\n const onError = (err: Error): void => reject(err);\n server = serve({ fetch: appFetch, port, hostname }, (info) => {\n server.off('error', onError);\n resolve({ port: info.port, address: info.address });\n });\n server.once('error', onError);\n });\n\n const address = await serverReady;\n const shutdown = registerShutdown(() => closeServer(server));\n\n return { address, shutdown };\n };\n};\n","import type { Signal, SignalHandler } from '@zeltjs/core';\nimport { CliConfig, Config } from '@zeltjs/core';\n\n@Config\nexport class NodeCliConfig extends CliConfig {\n override cwd(): string {\n return process.cwd();\n }\n\n override argv(): readonly string[] {\n return process.argv;\n }\n\n override exit(code: number): never {\n process.exit(code);\n }\n\n override setExitCode(code: number): void {\n process.exitCode = code;\n }\n\n override onSignal(signal: Signal, handler: SignalHandler): void {\n process.on(signal, handler);\n }\n\n override offSignal(signal: Signal, handler: SignalHandler): void {\n process.off(signal, handler);\n }\n}\n","import { Config, EnvAdaptor } from '@zeltjs/core';\n\n@Config\nexport class ProcessEnvAdaptor extends EnvAdaptor {\n override get(key: string): string | undefined {\n return process.env[key];\n }\n}\n","import type {\n ConfigClass,\n ConfiguredFeature,\n FeatureApp,\n FeatureReadyCapabilities,\n RuntimeApp,\n ZeltPrebuilt,\n} from '@zeltjs/core';\nimport { HttpFeature } from '@zeltjs/core';\n\nimport type { ListenOptions, ServerHandle } from './listen.lib';\nimport { createListenForHttp } from './listen.lib';\nimport { NodeCliConfig } from './node-cli.config';\nimport { ProcessEnvAdaptor } from './process-env.adaptor';\n\nexport type { ServerHandle } from './listen.lib';\n\nexport type NodeAppOptions = {\n readonly configs?: readonly ConfigClass<object>[];\n readonly warmup?: boolean;\n readonly prebuilt?: ZeltPrebuilt;\n};\n\nexport type { ExecResult } from '@zeltjs/core';\n\ntype EnvironmentNodeAppPart = {\n readonly args: readonly string[];\n readonly shutdown: () => Promise<void>;\n};\n\ntype HttpNodeAppPart = {\n readonly listen: (portOrOptions?: number | ListenOptions) => Promise<ServerHandle>;\n};\n\ntype NodeFeatureCapabilities<TFeature extends ConfiguredFeature> =\n FeatureReadyCapabilities<TFeature> &\n (TFeature extends HttpFeature<string> ? HttpNodeAppPart : unknown);\n\ntype NodeNamespacedCapabilities<F extends readonly ConfiguredFeature[]> = {\n readonly [TFeature in F[number] as TFeature['key']]: NodeFeatureCapabilities<TFeature>;\n};\n\nexport type NodeApp = RuntimeApp<readonly ConfiguredFeature[]> & EnvironmentNodeAppPart;\n\ntype NodeAppForFeatures<F extends readonly ConfiguredFeature[]> = RuntimeApp<F> &\n EnvironmentNodeAppPart &\n NodeNamespacedCapabilities<F>;\n\nconst getArgs = (): readonly string[] => globalThis.process.argv.slice(2);\n\nconst createNodeApp = (\n readyApp: RuntimeApp<readonly ConfiguredFeature[]>,\n shutdown: () => Promise<void>,\n args: readonly string[],\n): NodeApp => {\n const base: RuntimeApp<readonly ConfiguredFeature[]> & EnvironmentNodeAppPart = {\n ...readyApp,\n args,\n shutdown,\n };\n\n const nodeApp: NodeApp = { ...base };\n\n for (const entry of readyApp.getFeatureEntries(HttpFeature)) {\n Object.defineProperty(nodeApp, entry.key, {\n value: {\n ...entry.capabilities,\n listen: createListenForHttp(entry.capabilities.fetch, (callback) =>\n readyApp.registerShutdown(callback),\n ),\n },\n configurable: true,\n enumerable: true,\n });\n }\n\n return nodeApp;\n};\n\nexport function onNode<const F extends readonly ConfiguredFeature[]>(\n app: FeatureApp<F>,\n options?: NodeAppOptions,\n): Promise<NodeAppForFeatures<F>>;\n\n/** @throws {ZeltLifecycleStateError} */\nexport async function onNode<const F extends readonly ConfiguredFeature[]>(\n app: FeatureApp<F>,\n options: NodeAppOptions = {},\n): Promise<NodeApp> {\n const readyApp = await app.createRuntime({\n ...(options.configs === undefined ? {} : { configs: options.configs }),\n ...(options.prebuilt === undefined ? {} : { prebuilt: options.prebuilt }),\n fallbackConfigs: [NodeCliConfig, ProcessEnvAdaptor],\n warmup: options.warmup ?? true,\n });\n\n const cliConfig = await readyApp.get(NodeCliConfig);\n\n let shuttingDown = false;\n const detachSignals = (): void => {\n cliConfig.offSignal('SIGINT', gracefulShutdown);\n cliConfig.offSignal('SIGTERM', gracefulShutdown);\n };\n\n const shutdown = async (): Promise<void> => {\n if (shuttingDown) return;\n shuttingDown = true;\n try {\n await readyApp.shutdown();\n } finally {\n detachSignals();\n }\n };\n\n const gracefulShutdown = (): void => {\n void shutdown().catch(() => {});\n };\n\n cliConfig.onSignal('SIGINT', gracefulShutdown);\n cliConfig.onSignal('SIGTERM', gracefulShutdown);\n\n const args = getArgs();\n\n return createNodeApp(readyApp, shutdown, args);\n}\n","import type { ServerType } from '@hono/node-server';\nimport { serve } from '@hono/node-server';\n\nexport type ServeOptions = {\n port?: number;\n hostname?: string;\n};\n\nexport type AddressInfo = {\n port: number;\n address: string;\n};\n\ntype AppLike = {\n fetch: (request: Request) => Promise<Response>;\n};\n\nconst buildServeOptions = (\n optionsOrCallback: ServeOptions | ((info: AddressInfo) => void) | undefined,\n): ServeOptions => (typeof optionsOrCallback === 'function' ? {} : (optionsOrCallback ?? {}));\n\nconst extractCallback = (\n optionsOrCallback: ServeOptions | ((info: AddressInfo) => void) | undefined,\n maybeCallback: ((info: AddressInfo) => void) | undefined,\n): ((info: AddressInfo) => void) | undefined =>\n typeof optionsOrCallback === 'function' ? optionsOrCallback : maybeCallback;\n\nexport const serveApp = (\n app: AppLike,\n optionsOrCallback?: ServeOptions | ((info: AddressInfo) => void),\n maybeCallback?: (info: AddressInfo) => void,\n): ServerType => {\n const options = buildServeOptions(optionsOrCallback);\n const callback = extractCallback(optionsOrCallback, maybeCallback);\n\n return serve(\n {\n fetch: app.fetch,\n port: options.port ?? 3000,\n hostname: options.hostname ?? '0.0.0.0',\n },\n callback,\n );\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeltjs/adapter-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "Node.js adapter for the Zelt framework",
|
|
4
5
|
"type": "module",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"repository": {
|
|
@@ -30,11 +31,11 @@
|
|
|
30
31
|
"@hono/node-server": "2.0.1"
|
|
31
32
|
},
|
|
32
33
|
"peerDependencies": {
|
|
33
|
-
"@zeltjs/core": "0.
|
|
34
|
+
"@zeltjs/core": "0.11.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@types/node": "22.19.17",
|
|
37
|
-
"@zeltjs/core": "0.
|
|
38
|
+
"@zeltjs/core": "0.11.0"
|
|
38
39
|
},
|
|
39
40
|
"volta": {
|
|
40
41
|
"extends": "../../package.json"
|