@classytic/arc 2.41.0 → 2.43.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/{EventTransport-CbUKDzZZ.d.mts → EventTransport-CiicKz2Z.d.mts} +1 -1
- package/dist/{EventTransport-n7qO5Cz3.mjs → EventTransport-tzA7CAB4.mjs} +22 -17
- package/dist/{HookSystem-CxvZBo77.mjs → HookSystem-B6UaKRbF.mjs} +2 -2
- package/dist/{QueryCache-DFA-QrU9.d.mts → QueryCache--5uAuYPW.d.mts} +7 -3
- package/dist/{ResourceRegistry-Cu7uTJp9.mjs → ResourceRegistry-CuCARu2B.mjs} +44 -13
- package/dist/actionPermissions-BotX1YOa.mjs +776 -0
- package/dist/audit/index.d.mts +43 -5
- package/dist/audit/index.mjs +48 -26
- package/dist/auth/audit.mjs +1 -1
- package/dist/auth/index.d.mts +43 -13
- package/dist/auth/index.mjs +130 -155
- package/dist/auth/redis-session.mjs +1 -1
- package/dist/{authorizationDecision-2YY_Kaj1.mjs → authorizationDecision-DQYrkl5f.mjs} +7 -102
- package/dist/{base-CxrV1LmG.d.mts → base-CZyixEQR.d.mts} +27 -5
- package/dist/boundedMap-BULzfXYU.mjs +57 -0
- package/dist/{buildHandler-CUhjGHGZ.mjs → buildHandler-CRQ8EcX5.mjs} +4 -4
- package/dist/cache/index.d.mts +22 -34
- package/dist/cache/index.mjs +4 -4
- package/dist/{caching-DsWDjIxx.mjs → caching-Cc2M1DwO.mjs} +3 -3
- package/dist/claimed-B10RTfkM.mjs +8 -0
- package/dist/cleanup/index.d.mts +6 -10
- package/dist/cleanup/index.mjs +27 -73
- package/dist/cli/commands/describe.d.mts +4 -2
- package/dist/cli/commands/describe.mjs +7 -4
- package/dist/cli/commands/docs.mjs +3 -3
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/generate.mjs +2 -2
- package/dist/cli/commands/init.mjs +2 -2
- package/dist/cli/commands/introspect.mjs +2 -2
- package/dist/cli/index.mjs +3 -3
- package/dist/{constants-BxLgNFF7.mjs → constants-Cu7Mx7_U.mjs} +4 -2
- package/dist/context/index.d.mts +2 -5
- package/dist/context/index.mjs +18 -38
- package/dist/core/index.d.mts +3 -3
- package/dist/core/index.mjs +8 -8
- package/dist/{core-iNGqYerO.mjs → core-Cb0LjccA.mjs} +5 -4
- package/dist/{createActionRouter-BBlbPs3k.mjs → createActionRouter-xjqonMRO.mjs} +87 -39
- package/dist/{createAggregationRouter-Dv5SuK2x.mjs → createAggregationRouter-zRYWw_5D.mjs} +11 -8
- package/dist/{preloadResources-Bbp4QJ8V.mjs → createApp-D-953ZAq.mjs} +299 -390
- package/dist/{createMcpServer-CbDWkZ1T.d.mts → createMcpServer-C9cxS8zt.d.mts} +1 -1
- package/dist/{defineAggregation-UyeurGkp.mjs → defineAggregation-Bm8RjMbq.mjs} +1 -1
- package/dist/{defineResource-DzGT-2LP.mjs → defineResource-DIC7JZGU.mjs} +118 -1024
- package/dist/discovery/index.mjs +1 -1
- package/dist/docs/index.d.mts +10 -4
- package/dist/docs/index.mjs +4 -4
- package/dist/{elevation-BXCfVcNG.d.mts → elevation-BW2J3tNj.d.mts} +1 -2
- package/dist/{elevation-BF-vhGxY.mjs → elevation-DG8SrLN-.mjs} +41 -12
- package/dist/encryption/index.mjs +3 -3
- package/dist/{errorHandler-CIMkCOWm.mjs → errorHandler-BnfDviL1.mjs} +26 -5
- package/dist/{errors-C_YhELhe.mjs → errors-CtrywMHP.mjs} +58 -23
- package/dist/{errors-BGdVwP25.d.mts → errors-JYc9vwqE.d.mts} +9 -0
- package/dist/{eventPlugin-B52abJ8W.d.mts → eventPlugin-BtmA4-3P.d.mts} +65 -9
- package/dist/{eventPlugin-CmXaPWLv.mjs → eventPlugin-Q6BhzHzs.mjs} +82 -21
- package/dist/{subscribe-helpers-AVYPgqTl.mjs → eventTypes-Cdhm6ZlV.mjs} +151 -17
- package/dist/events/index.d.mts +33 -8
- package/dist/events/index.mjs +49 -53
- package/dist/events/transports/redis-stream-entry.d.mts +1 -1
- package/dist/events/transports/redis-stream-entry.mjs +139 -157
- package/dist/events/transports/redis.d.mts +1 -1
- package/dist/events/transports/redis.mjs +2 -2
- package/dist/factory/index.d.mts +32 -17
- package/dist/factory/index.mjs +213 -32
- package/dist/{fastify-augmentation-Cq2nHVaW.d.mts → fastify-augmentation-DhUJ-mvo.d.mts} +11 -25
- package/dist/{fields-I_EeRWND.d.mts → fields-BBSpf8pS.d.mts} +1 -1
- package/dist/{fields-BTyPLHK0.mjs → fields-ToPYpMqS.mjs} +1 -1
- package/dist/filter-merge-IpGywvym.mjs +99 -0
- package/dist/{generate-D_YmiCNf.mjs → generate-DRTkLlIl.mjs} +2 -2
- package/dist/{headers-CNECDE6q.mjs → headers-BbkIF6vA.mjs} +2 -2
- package/dist/health-D-Ft6JM6.mjs +22 -0
- package/dist/{health-CxQzbJmr.mjs → health-DqbsG-_w.mjs} +115 -55
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.mjs +2 -2
- package/dist/idempotency/index.d.mts +31 -7
- package/dist/idempotency/index.mjs +155 -98
- package/dist/idempotency/redis.d.mts +1 -1
- package/dist/idempotency/redis.mjs +48 -11
- package/dist/{index-BHdZD8zK.d.mts → index-Bxriq3so.d.mts} +84 -21
- package/dist/{preloadResources-CjS2OfpU.d.mts → index-C8zVGYsk.d.mts} +37 -38
- package/dist/{index-D4u76eQW.d.mts → index-CRoPtISf.d.mts} +23 -73
- package/dist/{index-CbJiYrfv.d.mts → index-Chgz3d0i.d.mts} +1 -1
- package/dist/index-JdbZAIsm.d.mts +510 -0
- package/dist/{index-DHbyPo5j.d.mts → index-mqaqZNpe.d.mts} +253 -254
- package/dist/index.d.mts +8 -8
- package/dist/index.mjs +11 -11
- package/dist/{init-Y2MlSN9n.mjs → init-B_oUYDXI.mjs} +1 -1
- package/dist/integrations/event-gateway.d.mts +8 -3
- package/dist/integrations/event-gateway.mjs +4 -4
- package/dist/integrations/index.d.mts +3 -3
- package/dist/integrations/index.mjs +1 -1
- package/dist/integrations/jobs/index.d.mts +1 -1
- package/dist/integrations/jobs/index.mjs +18 -5
- package/dist/integrations/mcp/index.d.mts +72 -59
- package/dist/integrations/mcp/index.mjs +19 -4
- package/dist/integrations/mcp/testing.d.mts +2 -2
- package/dist/integrations/mcp/testing.mjs +2 -2
- package/dist/integrations/streamline.d.mts +78 -136
- package/dist/integrations/streamline.mjs +116 -54
- package/dist/integrations/webhooks.d.mts +60 -120
- package/dist/integrations/webhooks.mjs +36 -80
- package/dist/integrations/websocket-pushref-redis.d.mts +1 -1
- package/dist/integrations/websocket-pushref-redis.mjs +1 -1
- package/dist/integrations/websocket-redis.d.mts +1 -1
- package/dist/integrations/websocket-redis.mjs +1 -1
- package/dist/integrations/websocket.d.mts +3 -3
- package/dist/integrations/websocket.mjs +2 -2
- package/dist/{interface-DEWNOMza.d.mts → interface-C0395yUN.d.mts} +13 -1
- package/dist/{jsonBody-Cq9KYl2Z.mjs → jsonBody-B4YVGcql.mjs} +2 -2
- package/dist/{keys-Cmv4cBRa.mjs → keys-B2KtgMLJ.mjs} +7 -18
- package/dist/{loadResources-CblF7xt2.mjs → loadResources-Dn4lalw2.mjs} +3 -3
- package/dist/{loadResourcesFromEntry-99fIMC3p.mjs → loadResourcesFromEntry-3sLYbuse.mjs} +2 -2
- package/dist/logger/index.d.mts +1 -8
- package/dist/logger/index.mjs +3 -153
- package/dist/logger-DXjfIqjV.mjs +160 -0
- package/dist/{mcpPlugin-xF3Gw-HW.mjs → mcpPlugin-C08HalN5.mjs} +433 -170
- package/dist/{memory-CpDZ9NPw.mjs → memory-9Cp7611C.mjs} +36 -34
- package/dist/{metrics-BaKnq8ag.mjs → metrics-CWI11eRu.mjs} +39 -72
- package/dist/middleware/index.d.mts +2 -2
- package/dist/middleware/index.mjs +3 -3
- package/dist/migrations/index.mjs +2 -2
- package/dist/{module-BkQEesNQ.mjs → module-BSvOQC7E.mjs} +8 -8
- package/dist/multiTenant-cY0FkDiA.d.mts +104 -0
- package/dist/{multipartBody-C92aJ8am.mjs → multipartBody-CXM2a-Dy.mjs} +46 -7
- package/dist/{openapi-C3LFRzPq.mjs → openapi-DT_G4VhY.mjs} +48 -10
- package/dist/outbox-admin/index.d.mts +3 -3
- package/dist/outbox-admin/index.mjs +6 -18
- package/dist/{outbox-module-dsCyLxXH.mjs → outbox-module-Bjgzl6tg.mjs} +203 -33
- package/dist/{outbox-module-BHdUnuuK.d.mts → outbox-module-gZCHoE4H.d.mts} +79 -6
- package/dist/permissions/index.d.mts +5 -4
- package/dist/permissions/index.mjs +8 -6
- package/dist/{permissions-DiHXy8Ck.mjs → permissions-Cm0uYHvd.mjs} +149 -33
- package/dist/{pipe-CBVmUJ-j.mjs → pipe-BqeGT6UO.mjs} +2 -2
- package/dist/pipeline/index.d.mts +2 -2
- package/dist/pipeline/index.mjs +2 -2
- package/dist/plan-FVR6LP59.mjs +565 -0
- package/dist/{BaseController-DYJRZ0EJ.mjs → plugin-BccET1tL.mjs} +1256 -344
- package/dist/plugins/index.d.mts +14 -11
- package/dist/plugins/index.mjs +44 -22
- package/dist/plugins/response-cache.mjs +8 -14
- package/dist/plugins/tracing-entry.mjs +2 -2
- package/dist/{pluralize-2_U6QZQg.mjs → pluralize-CVIOcgMF.mjs} +1 -1
- package/dist/presets/filesUpload.d.mts +2 -2
- package/dist/presets/filesUpload.mjs +5 -5
- package/dist/presets/index.d.mts +26 -31
- package/dist/presets/index.mjs +4 -4
- package/dist/presets/multiTenant.d.mts +2 -107
- package/dist/presets/multiTenant.mjs +22 -162
- package/dist/presets/search.d.mts +2 -2
- package/dist/presets/search.mjs +2 -2
- package/dist/{presets-BdlugYTc.mjs → presets-Cpvj6fGO.mjs} +99 -107
- package/dist/{projection-Uvgp-EEj.mjs → projection-Ce4aQhQk.mjs} +2 -2
- package/dist/{pushref-registry-Dov9l4qE.d.mts → pushref-registry-UxCkoA4C.d.mts} +1 -1
- package/dist/{queryCachePlugin-BzqxconG.d.mts → queryCachePlugin-C2lZjTxk.d.mts} +1 -1
- package/dist/{queryCachePlugin-B5F09bYr.mjs → queryCachePlugin-CFWNH8aT.mjs} +12 -14
- package/dist/{rateLimitKey-CK-EU2L8.mjs → rateLimitKey-C4O-kPm0.mjs} +1 -1
- package/dist/{realtime-FnnD0n3Z.mjs → realtime-DmPE9S54.mjs} +25 -21
- package/dist/redis-stream-BMk-bpQS.d.mts +219 -0
- package/dist/{redis-Bzi1y3F9.d.mts → redis-vLvtcGy_.d.mts} +13 -24
- package/dist/redisShapes-CQksY67q.d.mts +55 -0
- package/dist/registry/index.d.mts +9 -4
- package/dist/registry/index.mjs +4 -4
- package/dist/{registry-D3y8VEJ1.mjs → registry-Bcz9G1bh.mjs} +10 -8
- package/dist/{renewingLease-B3VYh5aU.mjs → renewingLease-qODa7KJQ.mjs} +1 -1
- package/dist/{replyHelpers-DPHsdw-5.mjs → replyHelpers-CG_VtVgS.mjs} +2 -2
- package/dist/{requestContext-cSVKnYPk.mjs → requestContext-Dsu9P1bV.mjs} +1 -1
- package/dist/requirement-CbiLdQ1n.d.mts +22 -0
- package/dist/requirement-KDdoRcOP.mjs +35 -0
- package/dist/resourceRateLimit-Wf6d6FL9.d.mts +30 -0
- package/dist/resourceRateLimit-dSjVr1pk.mjs +180 -0
- package/dist/{rolldown-runtime-DjDuyglE.mjs → rolldown-runtime-D1w9Y1VJ.mjs} +1 -1
- package/dist/routeValidator-D36SW8qt.mjs +70 -0
- package/dist/{runtimeCapabilities-DSA_dH1_.mjs → runtimeCapabilities-0tccjRlj.mjs} +1 -1
- package/dist/{schedules-BktJb3Y3.mjs → schedules-C-OpmHBq.mjs} +46 -37
- package/dist/{schemaConverter-BLCSmNbr.mjs → schemaConverter-BORek3O-.mjs} +2 -2
- package/dist/{schemaIR-K16Bb5BX.mjs → schemaIR-C7Vbp71I.mjs} +2 -2
- package/dist/schemas/index.d.mts +10 -0
- package/dist/schemas/index.mjs +8 -3
- package/dist/scim/index.mjs +2 -2
- package/dist/scope/index.d.mts +2 -2
- package/dist/scope/index.mjs +6 -6
- package/dist/{scope-jSxuBTFM.mjs → scope-DQthe88b.mjs} +4 -4
- package/dist/shutdown-MqA81z_P.mjs +59 -0
- package/dist/{simpleEqualityMatcher-BiOnyflP.mjs → simpleEqualityMatcher-auW8QjXN.mjs} +1 -1
- package/dist/{sse-CH7Slxc1.mjs → sse-CYzQBVFe.mjs} +11 -15
- package/dist/{sseStream-CN-Lh1Tu.mjs → sseStream-B5_Afiqn.mjs} +2 -2
- package/dist/{store-helpers-9DX9-1j_.mjs → store-helpers-BOzk-CuX.mjs} +1 -1
- package/dist/{streaming-dvppnxsr.mjs → streaming-DjTQhZrN.mjs} +1 -1
- package/dist/subscriberIdentity-CW39uA8G.mjs +28 -0
- package/dist/tenancy--ed9eH_z.mjs +43 -0
- package/dist/tenantPreparation-BKon6Yox.mjs +67 -0
- package/dist/testing/cleanupStoreContract.mjs +1 -1
- package/dist/testing/index.d.mts +193 -175
- package/dist/testing/index.mjs +286 -212
- package/dist/testing/outboxStoreContract.mjs +137 -2
- package/dist/testing/requiredPorts.d.mts +17 -0
- package/dist/testing/requiredPorts.mjs +65 -0
- package/dist/testing/storageContract.mjs +1 -1
- package/dist/timing-qczZ0YC-.mjs +46 -0
- package/dist/{transactionContext-DCWMI6hV.mjs → transactionContext-DjFkrNG6.mjs} +1 -1
- package/dist/{typeGuards-D7tHFdH6.mjs → typeGuards-CySF12G-.mjs} +1 -1
- package/dist/types/index.d.mts +4 -4
- package/dist/types/index.mjs +1 -1
- package/dist/types/storage.mjs +1 -1
- package/dist/{types-CWQn9-IC.d.mts → types-B4Aq4Sdj.d.mts} +22 -9
- package/dist/{types-DfVDvkdP.d.mts → types-BJ-2XqVF.d.mts} +189 -204
- package/dist/{types-CDy3-zw1.mjs → types-Bk9NOgOC.mjs} +4 -4
- package/dist/usage/index.d.mts +2 -3
- package/dist/usage/index.mjs +5 -5
- package/dist/{userHelpers-DDMOZ_Pm.mjs → userHelpers-aklawRaK.mjs} +1 -1
- package/dist/utils/index.d.mts +84 -223
- package/dist/utils/index.mjs +13 -12
- package/dist/{utils-B-zj_b__.mjs → utils-ec1oTo1n.mjs} +315 -404
- package/dist/{validate-R0G_JrnK.mjs → validate-9yzHC1e2.mjs} +6 -14
- package/dist/{versioning-D6JIK8Tk.d.mts → versioning-Bsb51gGT.d.mts} +28 -13
- package/dist/{versioning-DuVWcu-F.mjs → versioning-fhhWHV74.mjs} +4 -4
- package/dist/{websocket-BOXVggMf.d.mts → websocket-Cs4awVyD.d.mts} +1 -1
- package/dist/{workScope-BhsWde4k.mjs → workScope-zpPyge4t.mjs} +2 -2
- package/package.json +578 -574
- package/skills/arc/SKILL.md +13 -4
- package/skills/arc/references/auth.md +8 -5
- package/skills/arc/references/integrations.md +1 -1
- package/skills/arc/references/mcp.md +8 -6
- package/skills/arc/references/multi-tenancy.md +19 -14
- package/skills/arc/references/production.md +27 -10
- package/dist/actionPermissions-DPwPWPOV.mjs +0 -350
- package/dist/index-CFfLKMH4.d.mts +0 -290
- package/dist/interface-BIpgzbZl.mjs +0 -17
- package/dist/redis-stream-BPKscsTB.d.mts +0 -260
- package/dist/registerRoute-DRsSHPSM.mjs +0 -364
- package/dist/sync/changelog.d.mts +0 -3
- package/dist/sync/changelog.mjs +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
3
|
-
import { arcLog } from "./logger
|
|
1
|
+
/*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-D1w9Y1VJ.mjs";
|
|
3
|
+
import { t as arcLog } from "./logger-DXjfIqjV.mjs";
|
|
4
4
|
import { readdir } from "node:fs/promises";
|
|
5
5
|
import { dirname, join, resolve } from "node:path";
|
|
6
6
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as ResourceRegistry } from "./ResourceRegistry-
|
|
1
|
+
/*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as ResourceRegistry } from "./ResourceRegistry-CuCARu2B.mjs";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { pathToFileURL } from "node:url";
|
|
5
5
|
//#region src/cli/utils/loadResourcesFromEntry.ts
|
package/dist/logger/index.d.mts
CHANGED
|
@@ -62,13 +62,6 @@ interface ArcLogger {
|
|
|
62
62
|
* post-construction boot warning to the console instead of the app's logger.
|
|
63
63
|
*/
|
|
64
64
|
declare function runWithArcLogger<T>(options: ArcLoggerOptions, fn: () => T): T;
|
|
65
|
-
/**
|
|
66
|
-
* Enter `options` for the remainder of the current async context.
|
|
67
|
-
*
|
|
68
|
-
* For Fastify's `onRequest` hook, where `run(store, done)` wraps the rest of
|
|
69
|
-
* the request lifecycle. Outside a hook, prefer {@link runWithArcLogger}.
|
|
70
|
-
*/
|
|
71
|
-
declare function enterArcLoggerScope(options: ArcLoggerOptions, done: () => void): void;
|
|
72
65
|
/**
|
|
73
66
|
* Configure the PROCESS-GLOBAL Arc logger — the fallback used outside any app.
|
|
74
67
|
*
|
|
@@ -123,4 +116,4 @@ interface PinoLike {
|
|
|
123
116
|
*/
|
|
124
117
|
declare function createPinoWriter(logger: PinoLike): ArcLogWriter;
|
|
125
118
|
//#endregion
|
|
126
|
-
export { ArcLogWriter, ArcLogger, ArcLoggerOptions, PinoLike, arcLog, configureArcLogger, createPinoWriter,
|
|
119
|
+
export { ArcLogWriter, ArcLogger, ArcLoggerOptions, PinoLike, arcLog, configureArcLogger, createPinoWriter, runWithArcLogger };
|
package/dist/logger/index.mjs
CHANGED
|
@@ -1,153 +1,3 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Per-app logger options, resolved from the async context.
|
|
6
|
-
*
|
|
7
|
-
* The process-global below is a FALLBACK, not the source of truth. It used to
|
|
8
|
-
* be both, and `configureArcLogger` overwrote it on every boot — so the
|
|
9
|
-
* last-created app owned the writer for every app in the process. One app's
|
|
10
|
-
* framework warnings then surfaced through another app's transports, level,
|
|
11
|
-
* and redaction config. Fine for one-app-per-process; wrong for multi-app test
|
|
12
|
-
* files and for serverless containers that reuse a warm process across apps.
|
|
13
|
-
*
|
|
14
|
-
* Follows the same shape as `requestContext`: the scope is entered once and
|
|
15
|
-
* wraps everything downstream, so the 23 `arcLog()` call sites keep their
|
|
16
|
-
* zero-argument signature and resolve correctly without threading a logger.
|
|
17
|
-
*/
|
|
18
|
-
const scope = new AsyncLocalStorage();
|
|
19
|
-
let globalOptions = {};
|
|
20
|
-
/** Active options: the app's if we're inside one, else the process fallback. */
|
|
21
|
-
function resolveOptions() {
|
|
22
|
-
return scope.getStore() ?? globalOptions;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Run `fn` with `options` as the active logger config.
|
|
26
|
-
*
|
|
27
|
-
* `options` is held BY REFERENCE deliberately: `createApp` enters the scope
|
|
28
|
-
* before Fastify exists, then fills in the pino writer once `fastify.log` is
|
|
29
|
-
* constructed. Copying here would freeze the pre-Fastify view and send every
|
|
30
|
-
* post-construction boot warning to the console instead of the app's logger.
|
|
31
|
-
*/
|
|
32
|
-
function runWithArcLogger(options, fn) {
|
|
33
|
-
return scope.run(options, fn);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Enter `options` for the remainder of the current async context.
|
|
37
|
-
*
|
|
38
|
-
* For Fastify's `onRequest` hook, where `run(store, done)` wraps the rest of
|
|
39
|
-
* the request lifecycle. Outside a hook, prefer {@link runWithArcLogger}.
|
|
40
|
-
*/
|
|
41
|
-
function enterArcLoggerScope(options, done) {
|
|
42
|
-
scope.run(options, done);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Configure the PROCESS-GLOBAL Arc logger — the fallback used outside any app.
|
|
46
|
-
*
|
|
47
|
-
* `createApp` no longer routes its writer through here; each app carries its
|
|
48
|
-
* own scoped options (see {@link runWithArcLogger}) so two apps in one process
|
|
49
|
-
* cannot overwrite each other's. This remains the way to configure arcLog for
|
|
50
|
-
* standalone use — `defineResource()` at module import, CLI commands, and any
|
|
51
|
-
* code running before or outside a `createApp` boot.
|
|
52
|
-
*/
|
|
53
|
-
function configureArcLogger(options) {
|
|
54
|
-
globalOptions = { ...options };
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Create a module-scoped logger.
|
|
58
|
-
*
|
|
59
|
-
* Debug and info messages are gated by the `ARC_DEBUG` env var or
|
|
60
|
-
* `createApp({ debug })` option. Warnings always show (unless
|
|
61
|
-
* `ARC_SUPPRESS_WARNINGS=1`). Errors always show.
|
|
62
|
-
*
|
|
63
|
-
* @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')
|
|
64
|
-
* @returns Logger instance for that module
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* const log = arcLog('elevation');
|
|
69
|
-
* log.debug('Checking elevation header');
|
|
70
|
-
* log.warn('No authenticate decorator found');
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
function arcLog(module) {
|
|
74
|
-
const prefix = `[arc:${module}]`;
|
|
75
|
-
return {
|
|
76
|
-
debug(...args) {
|
|
77
|
-
if (isDebugEnabled(module)) getWriter().debug(prefix, ...args);
|
|
78
|
-
},
|
|
79
|
-
info(...args) {
|
|
80
|
-
if (isDebugEnabled(module)) getWriter().info(prefix, ...args);
|
|
81
|
-
},
|
|
82
|
-
warn(...args) {
|
|
83
|
-
if (isSuppressed()) return;
|
|
84
|
-
getWriter().warn(prefix, ...args);
|
|
85
|
-
},
|
|
86
|
-
error(...args) {
|
|
87
|
-
getWriter().error(prefix, ...args);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Bridge an `ArcLogWriter` onto a pino-style logger (`fastify.log`).
|
|
93
|
-
*
|
|
94
|
-
* arcLog call sites use the console convention — positional args like
|
|
95
|
-
* `log.warn("message", { userId })` — which pino would silently drop
|
|
96
|
-
* (extra args are printf interpolation values there). The bridge folds
|
|
97
|
-
* string args into the message, merges object args into the pino merge
|
|
98
|
-
* object, and maps `Error` instances to `{ err }` so pino's error
|
|
99
|
-
* serializer applies.
|
|
100
|
-
*
|
|
101
|
-
* `createApp` installs this automatically so arc-internal warnings flow
|
|
102
|
-
* through the host's transports, level, and redaction config.
|
|
103
|
-
*/
|
|
104
|
-
function createPinoWriter(logger) {
|
|
105
|
-
const emit = (level) => (...args) => {
|
|
106
|
-
const parts = [];
|
|
107
|
-
let merge;
|
|
108
|
-
for (const arg of args) if (typeof arg === "string") parts.push(arg);
|
|
109
|
-
else if (arg instanceof Error) merge = {
|
|
110
|
-
...merge ?? {},
|
|
111
|
-
err: arg
|
|
112
|
-
};
|
|
113
|
-
else if (arg !== null && typeof arg === "object") merge = {
|
|
114
|
-
...merge ?? {},
|
|
115
|
-
...arg
|
|
116
|
-
};
|
|
117
|
-
else parts.push(String(arg));
|
|
118
|
-
const msg = parts.join(" ");
|
|
119
|
-
if (merge) logger[level](merge, msg);
|
|
120
|
-
else logger[level](msg);
|
|
121
|
-
};
|
|
122
|
-
return {
|
|
123
|
-
debug: emit("debug"),
|
|
124
|
-
info: emit("info"),
|
|
125
|
-
warn: emit("warn"),
|
|
126
|
-
error: emit("error")
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
function getWriter() {
|
|
130
|
-
return resolveOptions().writer ?? console;
|
|
131
|
-
}
|
|
132
|
-
function isDebugEnabled(module) {
|
|
133
|
-
const configDebug = resolveOptions().debug;
|
|
134
|
-
if (configDebug !== void 0 && configDebug !== false) return matchesModule(configDebug, module);
|
|
135
|
-
const envDebug = typeof process !== "undefined" ? process.env?.ARC_DEBUG : void 0;
|
|
136
|
-
if (envDebug) return matchesModule(envDebug, module);
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
function matchesModule(debug, module) {
|
|
140
|
-
if (debug === true) return true;
|
|
141
|
-
if (typeof debug === "string") {
|
|
142
|
-
const normalized = debug.trim();
|
|
143
|
-
if (normalized === "1" || normalized === "true" || normalized === "*") return true;
|
|
144
|
-
return normalized.split(",").map((s) => s.trim()).includes(module);
|
|
145
|
-
}
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
function isSuppressed() {
|
|
149
|
-
const env = typeof process !== "undefined" ? process.env?.ARC_SUPPRESS_WARNINGS : void 0;
|
|
150
|
-
return env === "1" || env === "true";
|
|
151
|
-
}
|
|
152
|
-
//#endregion
|
|
153
|
-
export { arcLog, configureArcLogger, createPinoWriter, enterArcLoggerScope, runWithArcLogger };
|
|
1
|
+
/*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
|
|
2
|
+
import { i as runWithArcLogger, n as configureArcLogger, r as createPinoWriter, t as arcLog } from "../logger-DXjfIqjV.mjs";
|
|
3
|
+
export { arcLog, configureArcLogger, createPinoWriter, runWithArcLogger };
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
//#region src/logger/scope.ts
|
|
4
|
+
/**
|
|
5
|
+
* Internal — NOT a package entry. The per-app logger scope that
|
|
6
|
+
* `@classytic/arc/logger` resolves against, plus the one hook-shaped entry
|
|
7
|
+
* point `createApp` needs. Kept off the public barrel: hosts use
|
|
8
|
+
* `runWithArcLogger` from `@classytic/arc/logger`.
|
|
9
|
+
*
|
|
10
|
+
* Per-app logger options, resolved from the async context.
|
|
11
|
+
*
|
|
12
|
+
* The process-global in `./index.ts` is a FALLBACK, not the source of truth. It
|
|
13
|
+
* used to be both, and `configureArcLogger` overwrote it on every boot — so the
|
|
14
|
+
* last-created app owned the writer for every app in the process. One app's
|
|
15
|
+
* framework warnings then surfaced through another app's transports, level,
|
|
16
|
+
* and redaction config. Fine for one-app-per-process; wrong for multi-app test
|
|
17
|
+
* files and for serverless containers that reuse a warm process across apps.
|
|
18
|
+
*
|
|
19
|
+
* Follows the same shape as `requestContext`: the scope is entered once and
|
|
20
|
+
* wraps everything downstream, so the `arcLog()` call sites keep their
|
|
21
|
+
* zero-argument signature and resolve correctly without threading a logger.
|
|
22
|
+
*/
|
|
23
|
+
const arcLoggerScope = new AsyncLocalStorage();
|
|
24
|
+
/**
|
|
25
|
+
* Enter `options` for the remainder of the current async context.
|
|
26
|
+
*
|
|
27
|
+
* For Fastify's `onRequest` hook, where `run(store, done)` wraps the rest of
|
|
28
|
+
* the request lifecycle. Outside a hook, use `runWithArcLogger`.
|
|
29
|
+
*/
|
|
30
|
+
function enterArcLoggerScope(options, done) {
|
|
31
|
+
arcLoggerScope.run(options, done);
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/logger/index.ts
|
|
35
|
+
let globalOptions = {};
|
|
36
|
+
/** Active options: the app's if we're inside one, else the process fallback. */
|
|
37
|
+
function resolveOptions() {
|
|
38
|
+
return arcLoggerScope.getStore() ?? globalOptions;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Run `fn` with `options` as the active logger config.
|
|
42
|
+
*
|
|
43
|
+
* `options` is held BY REFERENCE deliberately: `createApp` enters the scope
|
|
44
|
+
* before Fastify exists, then fills in the pino writer once `fastify.log` is
|
|
45
|
+
* constructed. Copying here would freeze the pre-Fastify view and send every
|
|
46
|
+
* post-construction boot warning to the console instead of the app's logger.
|
|
47
|
+
*/
|
|
48
|
+
function runWithArcLogger(options, fn) {
|
|
49
|
+
return arcLoggerScope.run(options, fn);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Configure the PROCESS-GLOBAL Arc logger — the fallback used outside any app.
|
|
53
|
+
*
|
|
54
|
+
* `createApp` no longer routes its writer through here; each app carries its
|
|
55
|
+
* own scoped options (see {@link runWithArcLogger}) so two apps in one process
|
|
56
|
+
* cannot overwrite each other's. This remains the way to configure arcLog for
|
|
57
|
+
* standalone use — `defineResource()` at module import, CLI commands, and any
|
|
58
|
+
* code running before or outside a `createApp` boot.
|
|
59
|
+
*/
|
|
60
|
+
function configureArcLogger(options) {
|
|
61
|
+
globalOptions = { ...options };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a module-scoped logger.
|
|
65
|
+
*
|
|
66
|
+
* Debug and info messages are gated by the `ARC_DEBUG` env var or
|
|
67
|
+
* `createApp({ debug })` option. Warnings always show (unless
|
|
68
|
+
* `ARC_SUPPRESS_WARNINGS=1`). Errors always show.
|
|
69
|
+
*
|
|
70
|
+
* @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')
|
|
71
|
+
* @returns Logger instance for that module
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const log = arcLog('elevation');
|
|
76
|
+
* log.debug('Checking elevation header');
|
|
77
|
+
* log.warn('No authenticate decorator found');
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
function arcLog(module) {
|
|
81
|
+
const prefix = `[arc:${module}]`;
|
|
82
|
+
return {
|
|
83
|
+
debug(...args) {
|
|
84
|
+
if (isDebugEnabled(module)) getWriter().debug(prefix, ...args);
|
|
85
|
+
},
|
|
86
|
+
info(...args) {
|
|
87
|
+
if (isDebugEnabled(module)) getWriter().info(prefix, ...args);
|
|
88
|
+
},
|
|
89
|
+
warn(...args) {
|
|
90
|
+
if (isSuppressed()) return;
|
|
91
|
+
getWriter().warn(prefix, ...args);
|
|
92
|
+
},
|
|
93
|
+
error(...args) {
|
|
94
|
+
getWriter().error(prefix, ...args);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Bridge an `ArcLogWriter` onto a pino-style logger (`fastify.log`).
|
|
100
|
+
*
|
|
101
|
+
* arcLog call sites use the console convention — positional args like
|
|
102
|
+
* `log.warn("message", { userId })` — which pino would silently drop
|
|
103
|
+
* (extra args are printf interpolation values there). The bridge folds
|
|
104
|
+
* string args into the message, merges object args into the pino merge
|
|
105
|
+
* object, and maps `Error` instances to `{ err }` so pino's error
|
|
106
|
+
* serializer applies.
|
|
107
|
+
*
|
|
108
|
+
* `createApp` installs this automatically so arc-internal warnings flow
|
|
109
|
+
* through the host's transports, level, and redaction config.
|
|
110
|
+
*/
|
|
111
|
+
function createPinoWriter(logger) {
|
|
112
|
+
const emit = (level) => (...args) => {
|
|
113
|
+
const parts = [];
|
|
114
|
+
let merge;
|
|
115
|
+
for (const arg of args) if (typeof arg === "string") parts.push(arg);
|
|
116
|
+
else if (arg instanceof Error) merge = {
|
|
117
|
+
...merge ?? {},
|
|
118
|
+
err: arg
|
|
119
|
+
};
|
|
120
|
+
else if (arg !== null && typeof arg === "object") merge = {
|
|
121
|
+
...merge ?? {},
|
|
122
|
+
...arg
|
|
123
|
+
};
|
|
124
|
+
else parts.push(String(arg));
|
|
125
|
+
const msg = parts.join(" ");
|
|
126
|
+
if (merge) logger[level](merge, msg);
|
|
127
|
+
else logger[level](msg);
|
|
128
|
+
};
|
|
129
|
+
return {
|
|
130
|
+
debug: emit("debug"),
|
|
131
|
+
info: emit("info"),
|
|
132
|
+
warn: emit("warn"),
|
|
133
|
+
error: emit("error")
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function getWriter() {
|
|
137
|
+
return resolveOptions().writer ?? console;
|
|
138
|
+
}
|
|
139
|
+
function isDebugEnabled(module) {
|
|
140
|
+
const configDebug = resolveOptions().debug;
|
|
141
|
+
if (configDebug !== void 0 && configDebug !== false) return matchesModule(configDebug, module);
|
|
142
|
+
const envDebug = typeof process !== "undefined" ? process.env?.ARC_DEBUG : void 0;
|
|
143
|
+
if (envDebug) return matchesModule(envDebug, module);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
function matchesModule(debug, module) {
|
|
147
|
+
if (debug === true) return true;
|
|
148
|
+
if (typeof debug === "string") {
|
|
149
|
+
const normalized = debug.trim();
|
|
150
|
+
if (normalized === "1" || normalized === "true" || normalized === "*") return true;
|
|
151
|
+
return normalized.split(",").map((s) => s.trim()).includes(module);
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
function isSuppressed() {
|
|
156
|
+
const env = typeof process !== "undefined" ? process.env?.ARC_SUPPRESS_WARNINGS : void 0;
|
|
157
|
+
return env === "1" || env === "true";
|
|
158
|
+
}
|
|
159
|
+
//#endregion
|
|
160
|
+
export { enterArcLoggerScope as a, runWithArcLogger as i, configureArcLogger as n, createPinoWriter as r, arcLog as t };
|