@squide/firefly 13.3.0 → 14.0.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/CHANGELOG.md +64 -0
- package/dist/AppRouterReducer.d.ts +4 -2
- package/dist/AppRouterReducer.js +63 -45
- package/dist/AppRouterReducer.js.map +1 -1
- package/dist/AppRouterStore.d.ts +3 -3
- package/dist/AppRouterStore.js.map +1 -1
- package/dist/FireflyRuntime.d.ts +22 -5
- package/dist/FireflyRuntime.js +34 -11
- package/dist/FireflyRuntime.js.map +1 -1
- package/dist/honeycomb/activeSpan.d.ts +2 -2
- package/dist/honeycomb/activeSpan.js.map +1 -1
- package/dist/honeycomb/registerHoneycombInstrumentation.js +20 -5
- package/dist/honeycomb/registerHoneycombInstrumentation.js.map +1 -1
- package/package.json +17 -17
- package/src/AppRouterReducer.ts +52 -53
- package/src/AppRouterStore.ts +4 -4
- package/src/FireflyRuntime.tsx +50 -12
- package/src/honeycomb/activeSpan.ts +2 -2
- package/src/honeycomb/registerHoneycombInstrumentation.ts +22 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FireflyRuntime.js","sources":["webpack://@squide/firefly/./src/FireflyRuntime.tsx"],"sourcesContent":["import type { RegisterRouteOptions, RuntimeOptions } from \"@squide/core\";\nimport { MswPlugin, MswPluginName } from \"@squide/msw\";\nimport { ReactRouterRuntime, type Route } from \"@squide/react-router\";\nimport type { RequestHandler } from \"msw\";\nimport { getAreModulesRegistered } from \"./AppRouterReducer.ts\";\nimport { type AppRouterStore, createAppRouterStore } from \"./AppRouterStore.ts\";\n\nexport interface FireflyRuntimeOptions extends RuntimeOptions {\n useMsw?: boolean;\n}\n\nexport class FireflyRuntime extends ReactRouterRuntime {\n
|
|
1
|
+
{"version":3,"file":"FireflyRuntime.js","sources":["webpack://@squide/firefly/./src/FireflyRuntime.tsx"],"sourcesContent":["import type { RegisterRouteOptions, RuntimeMethodOptions, RuntimeOptions } from \"@squide/core\";\nimport { MswPlugin, MswPluginName } from \"@squide/msw\";\nimport { type IReactRouterRuntime, ReactRouterRuntime, ReactRouterRuntimeScope, type Route } from \"@squide/react-router\";\nimport type { Logger } from \"@workleap/logging\";\nimport type { RequestHandler } from \"msw\";\nimport { getAreModulesRegistered } from \"./AppRouterReducer.ts\";\nimport { type AppRouterStore, createAppRouterStore } from \"./AppRouterStore.ts\";\n\nexport interface FireflyRuntimeOptions extends RuntimeOptions {\n useMsw?: boolean;\n}\n\nexport interface RegisterRequestHandlersOptions extends RuntimeMethodOptions {}\n\nexport interface IFireflyRuntime extends IReactRouterRuntime {\n registerRequestHandlers: (handlers: RequestHandler[]) => void;\n get requestHandlers(): RequestHandler[];\n get appRouterStore(): AppRouterStore;\n get isMswEnabled(): boolean;\n}\n\nexport class FireflyRuntime extends ReactRouterRuntime implements IFireflyRuntime {\n protected _appRouterStore: AppRouterStore;\n protected _useMsw: boolean;\n\n constructor({ plugins, useMsw, ...options }: FireflyRuntimeOptions = {}) {\n if (useMsw) {\n super({\n plugins: [\n ...(plugins ?? []),\n runtime => new MswPlugin(runtime)\n ],\n ...options\n });\n\n this._useMsw = true;\n } else {\n super({\n plugins,\n ...options\n });\n\n this._useMsw = false;\n }\n\n this._appRouterStore = createAppRouterStore(this._logger);\n }\n\n registerRequestHandlers(handlers: RequestHandler[], options: RegisterRequestHandlersOptions = {}) {\n const logger = this._getLogger(options);\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot register the provided MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register an MSW request handlers once the modules are registered. Are you trying to register an MSW request handler in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n mswPlugin.registerRequestHandlers(handlers, {\n logger\n });\n }\n\n // Must define a return type otherwise we get an \"error TS2742: The inferred type of 'requestHandlers' cannot be named\" error.\n get requestHandlers(): RequestHandler[] {\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot retrieve MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n return mswPlugin.requestHandlers;\n }\n\n registerRoute(route: Route, options: RegisterRouteOptions = {}) {\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register a route once the modules are registered. Are you trying to register a route in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n super.registerRoute(route, options);\n }\n\n get appRouterStore() {\n return this._appRouterStore;\n }\n\n get isMswEnabled() {\n return this._useMsw;\n }\n\n startScope(logger: Logger): FireflyRuntime {\n return (new FireflyRuntimeScope(this, logger) as unknown) as FireflyRuntime;\n }\n}\n\nexport class FireflyRuntimeScope<TRuntime extends FireflyRuntime = FireflyRuntime> extends ReactRouterRuntimeScope<TRuntime> implements IFireflyRuntime {\n registerRequestHandlers(handlers: RequestHandler[], options: RegisterRequestHandlersOptions = {}) {\n this._runtime.registerRequestHandlers(handlers, {\n ...options,\n logger: this._getLogger(options)\n });\n }\n\n get requestHandlers(): RequestHandler[] {\n return this._runtime.requestHandlers;\n }\n\n get appRouterStore() {\n return this._runtime.appRouterStore;\n }\n\n get isMswEnabled() {\n return this._runtime.isMswEnabled;\n }\n}\n"],"names":["MswPlugin","MswPluginName","ReactRouterRuntime","ReactRouterRuntimeScope","getAreModulesRegistered","createAppRouterStore","FireflyRuntime","plugins","useMsw","options","runtime","handlers","logger","mswPlugin","Error","route","FireflyRuntimeScope"],"mappings":";;;;;;;;;;;;;;AACuD;AACkE;AAGzD;AACgB;AAezE,MAAMM,uBAAuBJ,kBAAkBA;IACxC,gBAAgC;IAChC,QAAiB;IAE3B,YAAY,EAAEK,OAAO,EAAEC,MAAM,EAAE,GAAGC,SAAgC,GAAG,CAAC,CAAC,CAAE;QACrE,IAAID,QAAQ;YACR,KAAK,CAAC;gBACF,SAAS;uBACDD,WAAW,EAAE;oBACjBG,CAAAA,UAAW,IAAIV,SAASA,CAACU;iBAC5B;gBACD,GAAGD,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB,OAAO;YACH,KAAK,CAAC;gBACFF;gBACA,GAAGE,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB;QAEA,IAAI,CAAC,eAAe,GAAGJ,oBAAoBA,CAAC,IAAI,CAAC,OAAO;IAC5D;IAEA,wBAAwBM,QAA0B,EAAEF,UAA0C,CAAC,CAAC,EAAE;QAC9F,MAAMG,SAAS,IAAI,CAAC,UAAU,CAACH;QAC/B,MAAMI,YAAY,IAAI,CAAC,SAAS,CAACZ,aAAaA;QAE9C,IAAI,CAACY,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAIV,uBAAuBA,IAAI;YAC3B,MAAM,IAAIU,MAAM;QACpB;QAEAD,UAAU,uBAAuB,CAACF,UAAU;YACxCC;QACJ;IACJ;IAEA,8HAA8H;IAC9H,IAAI,kBAAoC;QACpC,MAAMC,YAAY,IAAI,CAAC,SAAS,CAACZ,aAAaA;QAE9C,IAAI,CAACY,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,OAAOD,UAAU,eAAe;IACpC;IAEA,cAAcE,KAAY,EAAEN,UAAgC,CAAC,CAAC,EAAE;QAC5D,IAAIL,uBAAuBA,IAAI;YAC3B,MAAM,IAAIU,MAAM;QACpB;QAEA,KAAK,CAAC,cAAcC,OAAON;IAC/B;IAEA,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,WAAWG,MAAc,EAAkB;QACvC,OAAQ,IAAII,oBAAoB,IAAI,EAAEJ;IAC1C;AACJ;AAEO,MAAMI,4BAA8Eb,uBAAuBA;IAC9G,wBAAwBQ,QAA0B,EAAEF,UAA0C,CAAC,CAAC,EAAE;QAC9F,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAACE,UAAU;YAC5C,GAAGF,OAAO;YACV,QAAQ,IAAI,CAAC,UAAU,CAACA;QAC5B;IACJ;IAEA,IAAI,kBAAoC;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe;IACxC;IAEA,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc;IACvC;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;IACrC;AACJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Span } from "@opentelemetry/api";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Logger } from "@workleap/logging";
|
|
3
3
|
export type ActiveSpanId = string;
|
|
4
4
|
export interface ActiveSpan {
|
|
5
5
|
id: ActiveSpanId;
|
|
@@ -9,4 +9,4 @@ export interface ActiveSpan {
|
|
|
9
9
|
export declare function registerActiveSpanStack(): void;
|
|
10
10
|
export declare function setActiveSpan(name: string, span: Span): ActiveSpan;
|
|
11
11
|
export declare function popActiveSpan(span: ActiveSpan): void;
|
|
12
|
-
export declare function createOverrideFetchRequestSpanWithActiveSpanContext(logger:
|
|
12
|
+
export declare function createOverrideFetchRequestSpanWithActiveSpanContext(logger: Logger): (span: Span, request: Request | RequestInit) => true | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"honeycomb/activeSpan.js","sources":["webpack://@squide/firefly/./src/honeycomb/activeSpan.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport { isPlainObject } from \"@squide/core\";\nimport type {
|
|
1
|
+
{"version":3,"file":"honeycomb/activeSpan.js","sources":["webpack://@squide/firefly/./src/honeycomb/activeSpan.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport { isPlainObject } from \"@squide/core\";\nimport type { Logger } from \"@workleap/logging\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { createTraceContextId } from \"./createTraceContextId.ts\";\n\nexport type ActiveSpanId = string;\n\nexport interface ActiveSpan {\n id: ActiveSpanId;\n name: string;\n instance: Span;\n}\n\n// Using a stack because we want a Last In First Out implementation for this.\n// https://github.com/open-telemetry/opentelemetry-js/issues/5084\n// https://github.com/open-telemetry/opentelemetry-js/issues/3558#issuecomment-1760680244\nclass ActiveSpanStack {\n readonly #stack: ActiveSpan[] = [];\n\n push(span: ActiveSpan) {\n this.#stack.push(span);\n }\n\n pop(span: ActiveSpan) {\n const head = this.#stack.pop();\n\n if (!head) {\n throw new Error(\"[squide] Unexpected pop, the active Honeycomb span stack is empty.\");\n }\n\n if (head.id !== span.id) {\n throw new Error(`[squide] The active Honeycomb span is not the expected span. Expected to pop span with name and id \"${span.name} / ${span.id}\" but found \"${head.name} / ${head.id}\". Did you forget to end an active span?`);\n }\n\n return head;\n }\n\n peek() {\n if (this.#stack.length === 0) {\n return undefined;\n }\n\n return this.#stack[this.#stack.length - 1];\n }\n}\n\nconst GlobalActiveSpanStackVariableName = \"__SQUIDE_HONEYCOMB_ACTIVE_SPAN_STACK__\";\n\nexport function registerActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis[GlobalActiveSpanStackVariableName]) {\n throw new Error(`[squide] An ActiveSpanStack instance has already been registered to globalThis.${GlobalActiveSpanStackVariableName}. Did you register the Honeycomb instrumentation twice?`);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n globalThis[GlobalActiveSpanStackVariableName] = new ActiveSpanStack();\n}\n\nfunction getActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis[GlobalActiveSpanStackVariableName] as ActiveSpanStack;\n}\n\nfunction getActiveSpan() {\n const stack = getActiveSpanStack();\n\n if (stack) {\n return stack.peek();\n }\n}\n\nexport function setActiveSpan(name: string, span: Span) {\n const activeSpan: ActiveSpan = {\n id: uuidv4(),\n name: name,\n instance: span\n };\n\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.push(activeSpan);\n }\n\n return activeSpan;\n}\n\nexport function popActiveSpan(span: ActiveSpan) {\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.pop(span);\n }\n}\n\nexport function createOverrideFetchRequestSpanWithActiveSpanContext(logger: Logger) {\n return (span: Span, request: Request | RequestInit) => {\n const activeSpan = getActiveSpan();\n\n if (activeSpan) {\n const activeSpanContext = activeSpan.instance.spanContext();\n const requestSpanContext = span.spanContext();\n\n if (activeSpanContext) {\n logger\n .withText(\"[squide] Found a Honeycomb active context to apply to the following fetch request:\")\n .withLineChange()\n .withText(\"Request span context:\")\n .withObject(requestSpanContext)\n .withLineChange()\n .withText(\"Active span context:\")\n .withObject(activeSpanContext)\n .withLineChange()\n .withText(\"Request:\")\n .withObject(request)\n .debug();\n\n span.setAttribute(\"trace.trace_id\", activeSpanContext.traceId);\n span.setAttribute(\"trace.parent_id\", activeSpanContext.spanId);\n\n const traceParent = createTraceContextId(activeSpanContext.traceId, requestSpanContext.spanId, requestSpanContext.traceFlags);\n\n if (request instanceof Request) {\n request.headers.set(\"traceparent\", traceParent);\n } else if (isPlainObject(request.headers)) {\n request.headers[\"traceparent\"] = traceParent;\n }\n\n // Indicates to not propagate the requests to the subsequent hooks.\n return true;\n }\n }\n };\n}\n"],"names":["isPlainObject","v4","uuidv4","createTraceContextId","ActiveSpanStack","span","head","Error","undefined","GlobalActiveSpanStackVariableName","registerActiveSpanStack","globalThis","getActiveSpanStack","getActiveSpan","stack","setActiveSpan","name","activeSpan","popActiveSpan","createOverrideFetchRequestSpanWithActiveSpanContext","logger","request","activeSpanContext","requestSpanContext","traceParent","Request"],"mappings":";;;;;;;;;;;AAC6C;AAET;AAC6B;AAUjE,6EAA6E;AAC7E,iEAAiE;AACjE,yFAAyF;AACzF,MAAMI;IACO,MAAM,GAAiB,EAAE,CAAC;IAEnC,KAAKC,IAAgB,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA;IACrB;IAEA,IAAIA,IAAgB,EAAE;QAClB,MAAMC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG;QAE5B,IAAI,CAACA,MAAM;YACP,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAID,KAAK,EAAE,KAAKD,KAAK,EAAE,EAAE;YACrB,MAAM,IAAIE,MAAM,CAAC,oGAAoG,EAAEF,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,aAAa,EAAEC,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,wCAAwC,CAAC;QACjO;QAEA,OAAOA;IACX;IAEA,OAAO;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG;YAC1B,OAAOE;QACX;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;IAC9C;AACJ;AAEA,MAAMC,oCAAoC;AAEnC,SAASC;IACZ,6DAA6D;IAC7D,aAAa;IACb,IAAIC,UAAU,CAACF,kCAAkC,EAAE;QAC/C,MAAM,IAAIF,MAAM,CAAC,+EAA+E,EAAEE,kCAAkC,uDAAuD,CAAC;IAChM;IAEA,6DAA6D;IAC7D,aAAa;IACbE,UAAU,CAACF,kCAAkC,GAAG,IAAIL;AACxD;AAEA,SAASQ;IACL,6DAA6D;IAC7D,aAAa;IACb,OAAOD,UAAU,CAACF,kCAAkC;AACxD;AAEA,SAASI;IACL,MAAMC,QAAQF;IAEd,IAAIE,OAAO;QACP,OAAOA,MAAM,IAAI;IACrB;AACJ;AAEO,SAASC,cAAcC,IAAY,EAAEX,IAAU;IAClD,MAAMY,aAAyB;QAC3B,IAAIf,EAAMA;QACV,MAAMc;QACN,UAAUX;IACd;IAEA,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,IAAI,CAACG;IACf;IAEA,OAAOA;AACX;AAEO,SAASC,cAAcb,IAAgB;IAC1C,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,GAAG,CAACT;IACd;AACJ;AAEO,SAASc,oDAAoDC,MAAc;IAC9E,OAAO,CAACf,MAAYgB;QAChB,MAAMJ,aAAaJ;QAEnB,IAAII,YAAY;YACZ,MAAMK,oBAAoBL,WAAW,QAAQ,CAAC,WAAW;YACzD,MAAMM,qBAAqBlB,KAAK,WAAW;YAE3C,IAAIiB,mBAAmB;gBACnBF,OACK,QAAQ,CAAC,sFACT,cAAc,GACd,QAAQ,CAAC,yBACT,UAAU,CAACG,oBACX,cAAc,GACd,QAAQ,CAAC,wBACT,UAAU,CAACD,mBACX,cAAc,GACd,QAAQ,CAAC,YACT,UAAU,CAACD,SACX,KAAK;gBAEVhB,KAAK,YAAY,CAAC,kBAAkBiB,kBAAkB,OAAO;gBAC7DjB,KAAK,YAAY,CAAC,mBAAmBiB,kBAAkB,MAAM;gBAE7D,MAAME,cAAcrB,oBAAoBA,CAACmB,kBAAkB,OAAO,EAAEC,mBAAmB,MAAM,EAAEA,mBAAmB,UAAU;gBAE5H,IAAIF,mBAAmBI,SAAS;oBAC5BJ,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAeG;gBACvC,OAAO,IAAIxB,aAAaA,CAACqB,QAAQ,OAAO,GAAG;oBACvCA,QAAQ,OAAO,CAAC,cAAc,GAAGG;gBACrC;gBAEA,mEAAmE;gBACnE,OAAO;YACX;QACJ;IACJ;AACJ"}
|
|
@@ -47,10 +47,15 @@ function reduceDataFetchEvents(runtime, onDataFetchStarted, onDataReady, onPubli
|
|
|
47
47
|
}, {
|
|
48
48
|
once: true
|
|
49
49
|
});
|
|
50
|
-
runtime.eventBus.addListener(PublicDataReadyEvent, ()=>{
|
|
50
|
+
runtime.eventBus.addListener(PublicDataReadyEvent, (payload)=>{
|
|
51
51
|
onPublicDataReady();
|
|
52
52
|
if (dataFetchState === "fetching-data") {
|
|
53
|
-
|
|
53
|
+
if (payload && !payload.waitForProtectedData) {
|
|
54
|
+
dataFetchState = "data-ready";
|
|
55
|
+
onDataReady();
|
|
56
|
+
} else {
|
|
57
|
+
dataFetchState = "public-data-ready";
|
|
58
|
+
}
|
|
54
59
|
} else if (dataFetchState === "protected-data-ready") {
|
|
55
60
|
dataFetchState = "data-ready";
|
|
56
61
|
onDataReady();
|
|
@@ -67,10 +72,15 @@ function reduceDataFetchEvents(runtime, onDataFetchStarted, onDataReady, onPubli
|
|
|
67
72
|
}, {
|
|
68
73
|
once: true
|
|
69
74
|
});
|
|
70
|
-
runtime.eventBus.addListener(ProtectedDataReadyEvent, ()=>{
|
|
75
|
+
runtime.eventBus.addListener(ProtectedDataReadyEvent, (payload)=>{
|
|
71
76
|
onProtectedDataReady();
|
|
72
77
|
if (dataFetchState === "fetching-data") {
|
|
73
|
-
|
|
78
|
+
if (payload && !payload.waitForPublicData) {
|
|
79
|
+
dataFetchState = "data-ready";
|
|
80
|
+
onDataReady();
|
|
81
|
+
} else {
|
|
82
|
+
dataFetchState = "protected-data-ready";
|
|
83
|
+
}
|
|
74
84
|
} else if (dataFetchState === "public-data-ready") {
|
|
75
85
|
dataFetchState = "data-ready";
|
|
76
86
|
onDataReady();
|
|
@@ -300,7 +310,12 @@ function registerTrackingListeners(runtime) {
|
|
|
300
310
|
queriesErrors.forEach((x)=>{
|
|
301
311
|
traceError(dataFetchSpan.instance, x);
|
|
302
312
|
});
|
|
303
|
-
dataFetchSpan
|
|
313
|
+
endActiveSpan(dataFetchSpan);
|
|
314
|
+
// Global data fetch errors are unmanaged, which mean the host application bootstrapping flow
|
|
315
|
+
// will be aborted and a react-router error boundary will be rendered.
|
|
316
|
+
if (bootstrappingSpan) {
|
|
317
|
+
bootstrappingSpan.end();
|
|
318
|
+
}
|
|
304
319
|
}
|
|
305
320
|
};
|
|
306
321
|
reduceDataFetchEvents(runtime, handleFetchDataStarted, handleDataReady, handlePublicDataFetchStarted, handlePublicDataReady, handleProtectedDataFetchStarted, handleProtectedDataReady, handleDataFetchFailed);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"honeycomb/registerHoneycombInstrumentation.js","sources":["webpack://@squide/firefly/./src/honeycomb/registerHoneycombInstrumentation.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport {\n LocalModuleDeferredRegistrationFailedEvent,\n LocalModuleDeferredRegistrationUpdateFailedEvent,\n LocalModuleRegistrationFailedEvent,\n LocalModulesDeferredRegistrationCompletedEvent,\n type LocalModulesDeferredRegistrationCompletedEventPayload,\n LocalModulesDeferredRegistrationStartedEvent,\n type LocalModulesDeferredRegistrationStartedEventPayload,\n LocalModulesDeferredRegistrationsUpdateCompletedEvent,\n type LocalModulesDeferredRegistrationsUpdateCompletedEventPayload,\n LocalModulesDeferredRegistrationsUpdateStartedEvent,\n type LocalModulesDeferredRegistrationsUpdateStartedEventPayload,\n LocalModulesRegistrationCompletedEvent,\n type LocalModulesRegistrationCompletedEventPayload,\n LocalModulesRegistrationStartedEvent,\n type LocalModulesRegistrationStartedEventPayload,\n type ModuleRegistrationError\n} from \"@squide/core\";\nimport {\n DeferredRegistrationsUpdateCompletedEvent,\n DeferredRegistrationsUpdateStartedEvent,\n RemoteModuleDeferredRegistrationFailedEvent,\n RemoteModuleDeferredRegistrationUpdateFailedEvent,\n type RemoteModuleRegistrationError,\n RemoteModuleRegistrationFailedEvent,\n RemoteModulesDeferredRegistrationCompletedEvent,\n type RemoteModulesDeferredRegistrationCompletedEventPayload,\n RemoteModulesDeferredRegistrationStartedEvent,\n type RemoteModulesDeferredRegistrationStartedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateCompletedEvent,\n type RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateStartedEvent,\n type RemoteModulesDeferredRegistrationsUpdateStartedEventPayload,\n RemoteModulesRegistrationCompletedEvent,\n type RemoteModulesRegistrationCompletedEventPayload,\n RemoteModulesRegistrationStartedEvent,\n type RemoteModulesRegistrationStartedEventPayload\n} from \"@squide/module-federation\";\nimport { ApplicationBoostrappedEvent, ModulesReadyEvent, ModulesRegisteredEvent, MswReadyEvent, ProtectedDataReadyEvent, PublicDataReadyEvent } from \"../AppRouterReducer.ts\";\nimport type { FireflyRuntime } from \"../FireflyRuntime.tsx\";\nimport { ApplicationBootstrappingStartedEvent } from \"../initializeFirefly.ts\";\nimport { ProtectedDataFetchFailedEvent, ProtectedDataFetchStartedEvent } from \"../useProtectedDataQueries.ts\";\nimport { PublicDataFetchFailedEvent, PublicDataFetchStartedEvent } from \"../usePublicDataQueries.ts\";\nimport { type ActiveSpan, createOverrideFetchRequestSpanWithActiveSpanContext, registerActiveSpanStack } from \"./activeSpan.ts\";\nimport { getTracer } from \"./tracer.ts\";\nimport { endActiveSpan, startActiveChildSpan, startChildSpan, startSpan, traceError } from \"./utils.ts\";\n\n// TIPS:\n// To query those traces in Honeycomb, use the following query filter: \"root.name = squide-bootstrapping\".\n\ntype DataFetchState = \"none\" | \"fetching-data\" | \"public-data-ready\" | \"protected-data-ready\" | \"data-ready\" | \"data-fetch-failed\";\n\nexport function reduceDataFetchEvents(\n runtime: FireflyRuntime,\n onDataFetchStarted: () => void,\n onDataReady: () => void,\n onPublicDataFetchStarted: () => void,\n onPublicDataReady: () => void,\n onProtectedDataFetchStarted: () => void,\n onProtectedDataReady: () => void,\n onDataFetchFailed: (queriesErrors: Error[]) => void\n) {\n let dataFetchState: DataFetchState = \"none\";\n\n runtime.eventBus.addListener(PublicDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onPublicDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(PublicDataReadyEvent, () => {\n onPublicDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n dataFetchState = \"public-data-ready\";\n } else if (dataFetchState === \"protected-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onProtectedDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataReadyEvent, () => {\n onProtectedDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n dataFetchState = \"protected-data-ready\";\n } else if (dataFetchState === \"public-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n const handleDataFetchFailed = (payload: unknown) => {\n if (dataFetchState !== \"data-fetch-failed\") {\n dataFetchState = \"data-fetch-failed\";\n\n onDataFetchFailed(payload as Error[]);\n }\n };\n\n runtime.eventBus.addListener(PublicDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n runtime.eventBus.addListener(ProtectedDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n}\n\nfunction registerTrackingListeners(runtime: FireflyRuntime) {\n let bootstrappingSpan: Span;\n let localModuleRegistrationSpan: Span;\n let localModuleDeferredRegistrationSpan: Span;\n let remoteModuleRegistrationSpan: Span;\n let remoteModuleDeferredRegistrationSpan: Span;\n let dataFetchSpan: ActiveSpan;\n let deferredRegistrationsUpdateSpan: Span;\n let localModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n let remoteModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n\n runtime.eventBus.addListener(ApplicationBootstrappingStartedEvent, () => {\n bootstrappingSpan = startSpan((options, context) => getTracer().startSpan(\"squide-bootstrapping\", options, context));\n }, { once: true });\n\n runtime.eventBus.addListener(ApplicationBoostrappedEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(MswReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"msw-ready\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationStartedEventPayload).moduleCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-started\", attributes);\n }\n\n localModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-completed\", {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationCompletedEventPayload).moduleCount\n });\n }\n\n if (localModuleRegistrationSpan) {\n localModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-started\", attributes);\n }\n\n localModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationSpan) {\n localModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationStartedEventPayload).remoteCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-started\", attributes);\n }\n\n remoteModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-completed\", {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationCompletedEventPayload).remoteCount\n });\n }\n\n if (remoteModuleRegistrationSpan) {\n remoteModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleRegistrationSpan) {\n traceError(remoteModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationSpan) {\n remoteModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationSpan) {\n traceError(remoteModuleDeferredRegistrationSpan, registrationError);\n }\n });\n\n const handleFetchDataStarted = () => {\n dataFetchSpan = startActiveChildSpan(bootstrappingSpan, (options, context) => {\n const name = \"data-fetch\";\n const span = getTracer().startSpan(name, options, context);\n\n return {\n name,\n span\n };\n });\n };\n\n const handleDataReady = () => {\n if (dataFetchSpan) {\n endActiveSpan(dataFetchSpan);\n }\n };\n\n const handlePublicDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-fetch-started\");\n }\n };\n\n const handlePublicDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-ready\");\n }\n };\n\n const handleProtectedDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-fetch-started\");\n }\n };\n\n const handleProtectedDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-ready\");\n }\n };\n\n const handleDataFetchFailed = (queriesErrors: Error[]) => {\n if (dataFetchSpan) {\n queriesErrors.forEach(x => {\n traceError(dataFetchSpan.instance, x);\n });\n\n dataFetchSpan.instance.end();\n }\n };\n\n reduceDataFetchEvents(\n runtime,\n handleFetchDataStarted,\n handleDataReady,\n handlePublicDataFetchStarted,\n handlePublicDataReady,\n handleProtectedDataFetchStarted,\n handleProtectedDataReady,\n handleDataFetchFailed\n );\n\n runtime.eventBus.addListener(ModulesRegisteredEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-registered\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ModulesReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-ready\");\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateStartedEvent, () => {\n deferredRegistrationsUpdateSpan = startSpan((options, context) => getTracer().startSpan(\"squide-deferred-registrations-update\", options, context));\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateCompletedEvent, () => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.end();\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-started\", attributes);\n }\n\n localModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"local-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(localModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n traceError(localModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"remote-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(remoteModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n traceError(remoteModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n}\n\nfunction getRegisterFetchRequestHookFunction() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__;\n }\n\n // Fallback to fix an error. Will remove soon.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK;\n}\n\nexport function registerHoneycombInstrumentation(runtime: FireflyRuntime) {\n const registerFetchRequestHookFunction = getRegisterFetchRequestHookFunction();\n\n if (registerFetchRequestHookFunction) {\n registerActiveSpanStack();\n\n const activeSpanOverrideFunction = createOverrideFetchRequestSpanWithActiveSpanContext(runtime.logger);\n\n // Dynamically registering this request hook function to nest the HTTP requests\n // of squide bootstrapping under the appropriate Honeycomb span.\n registerFetchRequestHookFunction(activeSpanOverrideFunction);\n } else {\n runtime.logger.warning(\"[squide] Cannot register Honeycomb fetch request hook because \\\"globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__\\\" is not available. Honeycomb instrumentation is still functional but in degraded mode.\");\n }\n\n registerTrackingListeners(runtime);\n}\n"],"names":["LocalModuleDeferredRegistrationFailedEvent","LocalModuleDeferredRegistrationUpdateFailedEvent","LocalModuleRegistrationFailedEvent","LocalModulesDeferredRegistrationCompletedEvent","LocalModulesDeferredRegistrationStartedEvent","LocalModulesDeferredRegistrationsUpdateCompletedEvent","LocalModulesDeferredRegistrationsUpdateStartedEvent","LocalModulesRegistrationCompletedEvent","LocalModulesRegistrationStartedEvent","DeferredRegistrationsUpdateCompletedEvent","DeferredRegistrationsUpdateStartedEvent","RemoteModuleDeferredRegistrationFailedEvent","RemoteModuleDeferredRegistrationUpdateFailedEvent","RemoteModuleRegistrationFailedEvent","RemoteModulesDeferredRegistrationCompletedEvent","RemoteModulesDeferredRegistrationStartedEvent","RemoteModulesDeferredRegistrationsUpdateCompletedEvent","RemoteModulesDeferredRegistrationsUpdateStartedEvent","RemoteModulesRegistrationCompletedEvent","RemoteModulesRegistrationStartedEvent","ApplicationBoostrappedEvent","ModulesReadyEvent","ModulesRegisteredEvent","MswReadyEvent","ProtectedDataReadyEvent","PublicDataReadyEvent","ApplicationBootstrappingStartedEvent","ProtectedDataFetchFailedEvent","ProtectedDataFetchStartedEvent","PublicDataFetchFailedEvent","PublicDataFetchStartedEvent","createOverrideFetchRequestSpanWithActiveSpanContext","registerActiveSpanStack","getTracer","endActiveSpan","startActiveChildSpan","startChildSpan","startSpan","traceError","reduceDataFetchEvents","runtime","onDataFetchStarted","onDataReady","onPublicDataFetchStarted","onPublicDataReady","onProtectedDataFetchStarted","onProtectedDataReady","onDataFetchFailed","dataFetchState","handleDataFetchFailed","payload","registerTrackingListeners","bootstrappingSpan","localModuleRegistrationSpan","localModuleDeferredRegistrationSpan","remoteModuleRegistrationSpan","remoteModuleDeferredRegistrationSpan","dataFetchSpan","deferredRegistrationsUpdateSpan","localModuleDeferredRegistrationsUpdateSpan","remoteModuleDeferredRegistrationsUpdateSpan","options","context","attributes","registrationError","handleFetchDataStarted","name","span","handleDataReady","handlePublicDataFetchStarted","handlePublicDataReady","handleProtectedDataFetchStarted","handleProtectedDataReady","queriesErrors","x","getRegisterFetchRequestHookFunction","globalThis","registerHoneycombInstrumentation","registerFetchRequestHookFunction","activeSpanOverrideFunction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"honeycomb/registerHoneycombInstrumentation.js","sources":["webpack://@squide/firefly/./src/honeycomb/registerHoneycombInstrumentation.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport {\n LocalModuleDeferredRegistrationFailedEvent,\n LocalModuleDeferredRegistrationUpdateFailedEvent,\n LocalModuleRegistrationFailedEvent,\n LocalModulesDeferredRegistrationCompletedEvent,\n type LocalModulesDeferredRegistrationCompletedEventPayload,\n LocalModulesDeferredRegistrationStartedEvent,\n type LocalModulesDeferredRegistrationStartedEventPayload,\n LocalModulesDeferredRegistrationsUpdateCompletedEvent,\n type LocalModulesDeferredRegistrationsUpdateCompletedEventPayload,\n LocalModulesDeferredRegistrationsUpdateStartedEvent,\n type LocalModulesDeferredRegistrationsUpdateStartedEventPayload,\n LocalModulesRegistrationCompletedEvent,\n type LocalModulesRegistrationCompletedEventPayload,\n LocalModulesRegistrationStartedEvent,\n type LocalModulesRegistrationStartedEventPayload,\n type ModuleRegistrationError\n} from \"@squide/core\";\nimport {\n DeferredRegistrationsUpdateCompletedEvent,\n DeferredRegistrationsUpdateStartedEvent,\n RemoteModuleDeferredRegistrationFailedEvent,\n RemoteModuleDeferredRegistrationUpdateFailedEvent,\n type RemoteModuleRegistrationError,\n RemoteModuleRegistrationFailedEvent,\n RemoteModulesDeferredRegistrationCompletedEvent,\n type RemoteModulesDeferredRegistrationCompletedEventPayload,\n RemoteModulesDeferredRegistrationStartedEvent,\n type RemoteModulesDeferredRegistrationStartedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateCompletedEvent,\n type RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateStartedEvent,\n type RemoteModulesDeferredRegistrationsUpdateStartedEventPayload,\n RemoteModulesRegistrationCompletedEvent,\n type RemoteModulesRegistrationCompletedEventPayload,\n RemoteModulesRegistrationStartedEvent,\n type RemoteModulesRegistrationStartedEventPayload\n} from \"@squide/module-federation\";\nimport { ApplicationBoostrappedEvent, type AppRouterWaitState, ModulesReadyEvent, ModulesRegisteredEvent, MswReadyEvent, ProtectedDataReadyEvent, PublicDataReadyEvent } from \"../AppRouterReducer.ts\";\nimport type { FireflyRuntime } from \"../FireflyRuntime.tsx\";\nimport { ApplicationBootstrappingStartedEvent } from \"../initializeFirefly.ts\";\nimport { ProtectedDataFetchFailedEvent, ProtectedDataFetchStartedEvent } from \"../useProtectedDataQueries.ts\";\nimport { PublicDataFetchFailedEvent, PublicDataFetchStartedEvent } from \"../usePublicDataQueries.ts\";\nimport { type ActiveSpan, createOverrideFetchRequestSpanWithActiveSpanContext, registerActiveSpanStack } from \"./activeSpan.ts\";\nimport { getTracer } from \"./tracer.ts\";\nimport { endActiveSpan, startActiveChildSpan, startChildSpan, startSpan, traceError } from \"./utils.ts\";\n\n// TIPS:\n// To query those traces in Honeycomb, use the following query filter: \"root.name = squide-bootstrapping\".\n\ntype DataFetchState = \"none\" | \"fetching-data\" | \"public-data-ready\" | \"protected-data-ready\" | \"data-ready\" | \"data-fetch-failed\";\n\nexport function reduceDataFetchEvents(\n runtime: FireflyRuntime,\n onDataFetchStarted: () => void,\n onDataReady: () => void,\n onPublicDataFetchStarted: () => void,\n onPublicDataReady: () => void,\n onProtectedDataFetchStarted: () => void,\n onProtectedDataReady: () => void,\n onDataFetchFailed: (queriesErrors: Error[]) => void\n) {\n let dataFetchState: DataFetchState = \"none\";\n\n runtime.eventBus.addListener(PublicDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onPublicDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(PublicDataReadyEvent, payload => {\n onPublicDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n if (payload && !(payload as AppRouterWaitState).waitForProtectedData) {\n dataFetchState = \"data-ready\";\n onDataReady();\n } else {\n dataFetchState = \"public-data-ready\";\n }\n } else if (dataFetchState === \"protected-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onProtectedDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataReadyEvent, payload => {\n onProtectedDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n if (payload && !(payload as AppRouterWaitState).waitForPublicData) {\n dataFetchState = \"data-ready\";\n onDataReady();\n } else {\n dataFetchState = \"protected-data-ready\";\n }\n } else if (dataFetchState === \"public-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n const handleDataFetchFailed = (payload: unknown) => {\n if (dataFetchState !== \"data-fetch-failed\") {\n dataFetchState = \"data-fetch-failed\";\n\n onDataFetchFailed(payload as Error[]);\n }\n };\n\n runtime.eventBus.addListener(PublicDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n runtime.eventBus.addListener(ProtectedDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n}\n\nfunction registerTrackingListeners(runtime: FireflyRuntime) {\n let bootstrappingSpan: Span;\n let localModuleRegistrationSpan: Span;\n let localModuleDeferredRegistrationSpan: Span;\n let remoteModuleRegistrationSpan: Span;\n let remoteModuleDeferredRegistrationSpan: Span;\n let dataFetchSpan: ActiveSpan;\n let deferredRegistrationsUpdateSpan: Span;\n let localModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n let remoteModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n\n runtime.eventBus.addListener(ApplicationBootstrappingStartedEvent, () => {\n bootstrappingSpan = startSpan((options, context) => getTracer().startSpan(\"squide-bootstrapping\", options, context));\n }, { once: true });\n\n runtime.eventBus.addListener(ApplicationBoostrappedEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(MswReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"msw-ready\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationStartedEventPayload).moduleCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-started\", attributes);\n }\n\n localModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-completed\", {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationCompletedEventPayload).moduleCount\n });\n }\n\n if (localModuleRegistrationSpan) {\n localModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-started\", attributes);\n }\n\n localModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationSpan) {\n localModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationStartedEventPayload).remoteCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-started\", attributes);\n }\n\n remoteModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-completed\", {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationCompletedEventPayload).remoteCount\n });\n }\n\n if (remoteModuleRegistrationSpan) {\n remoteModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleRegistrationSpan) {\n traceError(remoteModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationSpan) {\n remoteModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationSpan) {\n traceError(remoteModuleDeferredRegistrationSpan, registrationError);\n }\n });\n\n const handleFetchDataStarted = () => {\n dataFetchSpan = startActiveChildSpan(bootstrappingSpan, (options, context) => {\n const name = \"data-fetch\";\n const span = getTracer().startSpan(name, options, context);\n\n return {\n name,\n span\n };\n });\n };\n\n const handleDataReady = () => {\n if (dataFetchSpan) {\n endActiveSpan(dataFetchSpan);\n }\n };\n\n const handlePublicDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-fetch-started\");\n }\n };\n\n const handlePublicDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-ready\");\n }\n };\n\n const handleProtectedDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-fetch-started\");\n }\n };\n\n const handleProtectedDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-ready\");\n }\n };\n\n const handleDataFetchFailed = (queriesErrors: Error[]) => {\n if (dataFetchSpan) {\n queriesErrors.forEach(x => {\n traceError(dataFetchSpan.instance, x);\n });\n\n endActiveSpan(dataFetchSpan);\n\n // Global data fetch errors are unmanaged, which mean the host application bootstrapping flow\n // will be aborted and a react-router error boundary will be rendered.\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }\n };\n\n reduceDataFetchEvents(\n runtime,\n handleFetchDataStarted,\n handleDataReady,\n handlePublicDataFetchStarted,\n handlePublicDataReady,\n handleProtectedDataFetchStarted,\n handleProtectedDataReady,\n handleDataFetchFailed\n );\n\n runtime.eventBus.addListener(ModulesRegisteredEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-registered\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ModulesReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-ready\");\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateStartedEvent, () => {\n deferredRegistrationsUpdateSpan = startSpan((options, context) => getTracer().startSpan(\"squide-deferred-registrations-update\", options, context));\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateCompletedEvent, () => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.end();\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-started\", attributes);\n }\n\n localModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"local-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(localModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n traceError(localModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"remote-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(remoteModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n traceError(remoteModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n}\n\nfunction getRegisterFetchRequestHookFunction() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__;\n }\n\n // Fallback to fix an error. Will remove soon.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK;\n}\n\nexport function registerHoneycombInstrumentation(runtime: FireflyRuntime) {\n const registerFetchRequestHookFunction = getRegisterFetchRequestHookFunction();\n\n if (registerFetchRequestHookFunction) {\n registerActiveSpanStack();\n\n const activeSpanOverrideFunction = createOverrideFetchRequestSpanWithActiveSpanContext(runtime.logger);\n\n // Dynamically registering this request hook function to nest the HTTP requests\n // of squide bootstrapping under the appropriate Honeycomb span.\n registerFetchRequestHookFunction(activeSpanOverrideFunction);\n } else {\n runtime.logger.warning(\"[squide] Cannot register Honeycomb fetch request hook because \\\"globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__\\\" is not available. Honeycomb instrumentation is still functional but in degraded mode.\");\n }\n\n registerTrackingListeners(runtime);\n}\n"],"names":["LocalModuleDeferredRegistrationFailedEvent","LocalModuleDeferredRegistrationUpdateFailedEvent","LocalModuleRegistrationFailedEvent","LocalModulesDeferredRegistrationCompletedEvent","LocalModulesDeferredRegistrationStartedEvent","LocalModulesDeferredRegistrationsUpdateCompletedEvent","LocalModulesDeferredRegistrationsUpdateStartedEvent","LocalModulesRegistrationCompletedEvent","LocalModulesRegistrationStartedEvent","DeferredRegistrationsUpdateCompletedEvent","DeferredRegistrationsUpdateStartedEvent","RemoteModuleDeferredRegistrationFailedEvent","RemoteModuleDeferredRegistrationUpdateFailedEvent","RemoteModuleRegistrationFailedEvent","RemoteModulesDeferredRegistrationCompletedEvent","RemoteModulesDeferredRegistrationStartedEvent","RemoteModulesDeferredRegistrationsUpdateCompletedEvent","RemoteModulesDeferredRegistrationsUpdateStartedEvent","RemoteModulesRegistrationCompletedEvent","RemoteModulesRegistrationStartedEvent","ApplicationBoostrappedEvent","ModulesReadyEvent","ModulesRegisteredEvent","MswReadyEvent","ProtectedDataReadyEvent","PublicDataReadyEvent","ApplicationBootstrappingStartedEvent","ProtectedDataFetchFailedEvent","ProtectedDataFetchStartedEvent","PublicDataFetchFailedEvent","PublicDataFetchStartedEvent","createOverrideFetchRequestSpanWithActiveSpanContext","registerActiveSpanStack","getTracer","endActiveSpan","startActiveChildSpan","startChildSpan","startSpan","traceError","reduceDataFetchEvents","runtime","onDataFetchStarted","onDataReady","onPublicDataFetchStarted","onPublicDataReady","onProtectedDataFetchStarted","onProtectedDataReady","onDataFetchFailed","dataFetchState","payload","handleDataFetchFailed","registerTrackingListeners","bootstrappingSpan","localModuleRegistrationSpan","localModuleDeferredRegistrationSpan","remoteModuleRegistrationSpan","remoteModuleDeferredRegistrationSpan","dataFetchSpan","deferredRegistrationsUpdateSpan","localModuleDeferredRegistrationsUpdateSpan","remoteModuleDeferredRegistrationsUpdateSpan","options","context","attributes","registrationError","handleFetchDataStarted","name","span","handleDataReady","handlePublicDataFetchStarted","handlePublicDataReady","handleProtectedDataFetchStarted","handleProtectedDataReady","queriesErrors","x","getRegisterFetchRequestHookFunction","globalThis","registerHoneycombInstrumentation","registerFetchRequestHookFunction","activeSpanOverrideFunction"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squide/firefly",
|
|
3
3
|
"author": "Workleap",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "14.0.0",
|
|
5
5
|
"description": "Helpers to facilitate the creation of an application with the Squide firefly technology stack.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
@@ -29,34 +29,34 @@
|
|
|
29
29
|
],
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@opentelemetry/api": "^1.9.0",
|
|
32
|
-
"@tanstack/react-query": "^5.
|
|
33
|
-
"msw": "^2.
|
|
32
|
+
"@tanstack/react-query": "^5.87.1",
|
|
33
|
+
"msw": "^2.11.1",
|
|
34
34
|
"react": "^18.0.0 || ^19.0.0",
|
|
35
35
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
36
|
-
"react-router": "^7.
|
|
36
|
+
"react-router": "^7.8.2"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@workleap/logging": "^1.
|
|
40
|
-
"uuid": "^
|
|
41
|
-
"@squide/core": "
|
|
42
|
-
"@squide/module-federation": "
|
|
43
|
-
"@squide/
|
|
44
|
-
"@squide/
|
|
39
|
+
"@workleap/logging": "^1.3.0",
|
|
40
|
+
"uuid": "^12.0.0",
|
|
41
|
+
"@squide/core": "6.0.0",
|
|
42
|
+
"@squide/module-federation": "7.0.0",
|
|
43
|
+
"@squide/msw": "4.0.0",
|
|
44
|
+
"@squide/react-router": "8.0.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@rsbuild/core": "1.4
|
|
48
|
-
"@rslib/core": "0.
|
|
47
|
+
"@rsbuild/core": "1.5.4",
|
|
48
|
+
"@rslib/core": "0.12.4",
|
|
49
49
|
"@testing-library/react": "16.3.0",
|
|
50
|
-
"@types/react": "19.1.
|
|
51
|
-
"@types/react-dom": "19.1.
|
|
52
|
-
"@typescript-eslint/parser": "8.
|
|
53
|
-
"@vitejs/plugin-react": "
|
|
50
|
+
"@types/react": "19.1.12",
|
|
51
|
+
"@types/react-dom": "19.1.9",
|
|
52
|
+
"@typescript-eslint/parser": "8.42.0",
|
|
53
|
+
"@vitejs/plugin-react": "5.0.2",
|
|
54
54
|
"@workleap/eslint-plugin": "3.5.0",
|
|
55
55
|
"@workleap/rslib-configs": "1.1.0",
|
|
56
56
|
"@workleap/typescript-configs": "3.0.4",
|
|
57
57
|
"eslint": "8.57.0",
|
|
58
58
|
"happy-dom": "18.0.1",
|
|
59
|
-
"typescript": "5.
|
|
59
|
+
"typescript": "5.9.2",
|
|
60
60
|
"vitest": "3.2.4"
|
|
61
61
|
},
|
|
62
62
|
"sideEffects": false,
|
package/src/AppRouterReducer.ts
CHANGED
|
@@ -9,10 +9,13 @@ import { isBootstrapping } from "./useIsBootstrapping.ts";
|
|
|
9
9
|
|
|
10
10
|
export type ActiveRouteVisiblity = "unknown" | "public" | "protected";
|
|
11
11
|
|
|
12
|
-
export interface
|
|
12
|
+
export interface AppRouterWaitState {
|
|
13
13
|
waitForMsw: boolean;
|
|
14
14
|
waitForPublicData: boolean;
|
|
15
15
|
waitForProtectedData: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AppRouterState extends AppRouterWaitState {
|
|
16
19
|
areModulesRegistered: boolean;
|
|
17
20
|
areModulesReady: boolean;
|
|
18
21
|
isMswReady: boolean;
|
|
@@ -54,6 +57,7 @@ export const ApplicationBoostrappedEvent = "squide-app-boostrapped";
|
|
|
54
57
|
|
|
55
58
|
export interface AppRouterAction {
|
|
56
59
|
type: AppRouterActionType;
|
|
60
|
+
payload?: unknown;
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
export type AppRouterDispatch = Dispatch<AppRouterAction>;
|
|
@@ -184,16 +188,11 @@ export function useModuleRegistrationStatusDispatcher(areModulesRegisteredValue:
|
|
|
184
188
|
dispatch({ type: "modules-registered" });
|
|
185
189
|
|
|
186
190
|
logger
|
|
187
|
-
.withText("[squide]"
|
|
188
|
-
.withText("Modules are registered", {
|
|
191
|
+
.withText("[squide] Modules are registered.", {
|
|
189
192
|
style: {
|
|
190
|
-
color: "
|
|
191
|
-
backgroundColor: "green"
|
|
193
|
+
color: "green"
|
|
192
194
|
}
|
|
193
195
|
})
|
|
194
|
-
.withText(".", {
|
|
195
|
-
leadingSpace: false
|
|
196
|
-
})
|
|
197
196
|
.information();
|
|
198
197
|
|
|
199
198
|
return true;
|
|
@@ -207,16 +206,11 @@ export function useModuleRegistrationStatusDispatcher(areModulesRegisteredValue:
|
|
|
207
206
|
dispatch({ type: "modules-ready" });
|
|
208
207
|
|
|
209
208
|
logger
|
|
210
|
-
.withText("[squide]"
|
|
211
|
-
.withText("Modules are ready", {
|
|
209
|
+
.withText("[squide] Modules are ready.", {
|
|
212
210
|
style: {
|
|
213
|
-
color: "
|
|
214
|
-
backgroundColor: "green"
|
|
211
|
+
color: "green"
|
|
215
212
|
}
|
|
216
213
|
})
|
|
217
|
-
.withText(".", {
|
|
218
|
-
leadingSpace: false
|
|
219
|
-
})
|
|
220
214
|
.information();
|
|
221
215
|
|
|
222
216
|
return true;
|
|
@@ -254,16 +248,11 @@ export function useMswStatusDispatcher(isMswReadyValue: boolean, dispatch: AppRo
|
|
|
254
248
|
dispatch({ type: "msw-ready" });
|
|
255
249
|
|
|
256
250
|
logger
|
|
257
|
-
.withText("[squide]"
|
|
258
|
-
.withText("MSW is ready", {
|
|
251
|
+
.withText("[squide] MSW is ready.", {
|
|
259
252
|
style: {
|
|
260
|
-
color: "
|
|
261
|
-
backgroundColor: "green"
|
|
253
|
+
color: "green"
|
|
262
254
|
}
|
|
263
255
|
})
|
|
264
|
-
.withText(".", {
|
|
265
|
-
leadingSpace: false
|
|
266
|
-
})
|
|
267
256
|
.information();
|
|
268
257
|
|
|
269
258
|
return true;
|
|
@@ -283,7 +272,7 @@ export function useMswStatusDispatcher(isMswReadyValue: boolean, dispatch: AppRo
|
|
|
283
272
|
}, [isMswReadyValue, dispatchMswReady]);
|
|
284
273
|
}
|
|
285
274
|
|
|
286
|
-
|
|
275
|
+
function useBootstrappingCompletedDispatcher(waitState: AppRouterWaitState, state: AppRouterState) {
|
|
287
276
|
const eventBus = useEventBus();
|
|
288
277
|
|
|
289
278
|
const areModulesRegisteredValue = state.areModulesRegistered;
|
|
@@ -291,13 +280,13 @@ export function useBootstrappingCompletedDispatcher(state: AppRouterState) {
|
|
|
291
280
|
|
|
292
281
|
useExecuteOnce(useCallback(() => {
|
|
293
282
|
if (areModulesRegisteredValue && !isBoostrapping) {
|
|
294
|
-
eventBus.dispatch(ApplicationBoostrappedEvent);
|
|
283
|
+
eventBus.dispatch(ApplicationBoostrappedEvent, waitState);
|
|
295
284
|
|
|
296
285
|
return true;
|
|
297
286
|
}
|
|
298
287
|
|
|
299
288
|
return false;
|
|
300
|
-
}, [areModulesRegisteredValue, isBoostrapping, eventBus]), true);
|
|
289
|
+
}, [areModulesRegisteredValue, isBoostrapping, waitState, eventBus]), true);
|
|
301
290
|
}
|
|
302
291
|
|
|
303
292
|
let dispatchProxyFactory: ((reactDispatch: AppRouterDispatch) => AppRouterDispatch) | undefined;
|
|
@@ -318,7 +307,7 @@ function useReducerDispatchProxy(reactDispatch: AppRouterDispatch) {
|
|
|
318
307
|
}, [reactDispatch]);
|
|
319
308
|
}
|
|
320
309
|
|
|
321
|
-
function useEnhancedReducerDispatch(reducerDispatch: AppRouterDispatch) {
|
|
310
|
+
function useEnhancedReducerDispatch(waitState: AppRouterWaitState, reducerDispatch: AppRouterDispatch) {
|
|
322
311
|
const logger = useLogger();
|
|
323
312
|
const appRouterStore = useAppRouterStore();
|
|
324
313
|
const eventBus = useEventBus();
|
|
@@ -329,11 +318,11 @@ function useEnhancedReducerDispatch(reducerDispatch: AppRouterDispatch) {
|
|
|
329
318
|
.withObject(action)
|
|
330
319
|
.debug();
|
|
331
320
|
|
|
332
|
-
appRouterStore.dispatch(action);
|
|
333
|
-
eventBus.dispatch(`squide-${action.type}
|
|
321
|
+
appRouterStore.dispatch({ ...action, payload: waitState });
|
|
322
|
+
eventBus.dispatch(`squide-${action.type}`, waitState);
|
|
334
323
|
|
|
335
324
|
reducerDispatch(action);
|
|
336
|
-
}, [reducerDispatch, logger, appRouterStore, eventBus]);
|
|
325
|
+
}, [waitState, reducerDispatch, logger, appRouterStore, eventBus]);
|
|
337
326
|
}
|
|
338
327
|
|
|
339
328
|
export function useAppRouterReducer(waitForPublicData: boolean, waitForProtectedData: boolean): [AppRouterState, AppRouterDispatch] {
|
|
@@ -341,56 +330,66 @@ export function useAppRouterReducer(waitForPublicData: boolean, waitForProtected
|
|
|
341
330
|
const eventBus = useEventBus();
|
|
342
331
|
const appRouterStore = useAppRouterStore();
|
|
343
332
|
|
|
333
|
+
const isMswEnabled = runtime.isMswEnabled;
|
|
334
|
+
|
|
344
335
|
const areModulesInitiallyRegistered = getAreModulesRegistered();
|
|
345
336
|
const areModulesInitiallyReady = getAreModulesReady();
|
|
346
337
|
const isMswInitiallyReady = isMswReady();
|
|
347
338
|
|
|
339
|
+
const waitState = useMemo(() => ({
|
|
340
|
+
waitForMsw: isMswEnabled,
|
|
341
|
+
waitForPublicData,
|
|
342
|
+
waitForProtectedData
|
|
343
|
+
}), [isMswEnabled, waitForPublicData, waitForProtectedData]);
|
|
344
|
+
|
|
345
|
+
const initialState = useMemo(() => ({
|
|
346
|
+
waitForMsw: waitState.waitForMsw,
|
|
347
|
+
waitForPublicData: waitState.waitForPublicData,
|
|
348
|
+
waitForProtectedData: waitState.waitForProtectedData,
|
|
349
|
+
// When the modules registration functions are awaited, the event listeners are registered after the modules are registered.
|
|
350
|
+
areModulesRegistered: areModulesInitiallyRegistered,
|
|
351
|
+
areModulesReady: areModulesInitiallyReady,
|
|
352
|
+
isMswReady: isMswInitiallyReady,
|
|
353
|
+
isPublicDataReady: false,
|
|
354
|
+
isProtectedDataReady: false,
|
|
355
|
+
activeRouteVisibility: "unknown",
|
|
356
|
+
isUnauthorized: false
|
|
357
|
+
} satisfies AppRouterState), [waitState, areModulesInitiallyRegistered, areModulesInitiallyReady, isMswInitiallyReady]);
|
|
358
|
+
|
|
348
359
|
// When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
|
|
349
360
|
// To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
|
|
350
361
|
useExecuteOnce(useCallback(() => {
|
|
351
362
|
if (areModulesInitiallyRegistered) {
|
|
352
|
-
appRouterStore.dispatch({ type: "modules-registered" });
|
|
353
|
-
eventBus.dispatch(ModulesRegisteredEvent);
|
|
363
|
+
appRouterStore.dispatch({ type: "modules-registered", payload: waitState });
|
|
364
|
+
eventBus.dispatch(ModulesRegisteredEvent, waitState);
|
|
354
365
|
}
|
|
355
366
|
|
|
356
367
|
return true;
|
|
357
|
-
}, [areModulesInitiallyRegistered, appRouterStore, eventBus]), true);
|
|
368
|
+
}, [areModulesInitiallyRegistered, appRouterStore, eventBus, waitState]), true);
|
|
358
369
|
|
|
359
370
|
// When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
|
|
360
371
|
// To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
|
|
361
372
|
useExecuteOnce(useCallback(() => {
|
|
362
373
|
if (areModulesInitiallyReady) {
|
|
363
|
-
appRouterStore.dispatch({ type: "modules-ready" });
|
|
364
|
-
eventBus.dispatch(ModulesReadyEvent);
|
|
374
|
+
appRouterStore.dispatch({ type: "modules-ready", payload: waitState });
|
|
375
|
+
eventBus.dispatch(ModulesReadyEvent, waitState);
|
|
365
376
|
}
|
|
366
377
|
|
|
367
378
|
return true;
|
|
368
|
-
}, [areModulesInitiallyReady, appRouterStore, eventBus]), true);
|
|
379
|
+
}, [areModulesInitiallyReady, appRouterStore, eventBus, waitState]), true);
|
|
369
380
|
|
|
370
381
|
// When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
|
|
371
382
|
// To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
|
|
372
383
|
useExecuteOnce(useCallback(() => {
|
|
373
384
|
if (isMswInitiallyReady) {
|
|
374
|
-
appRouterStore.dispatch({ type: "msw-ready" });
|
|
375
|
-
eventBus.dispatch(MswReadyEvent);
|
|
385
|
+
appRouterStore.dispatch({ type: "msw-ready", payload: waitState });
|
|
386
|
+
eventBus.dispatch(MswReadyEvent, waitState);
|
|
376
387
|
}
|
|
377
388
|
|
|
378
389
|
return true;
|
|
379
|
-
}, [isMswInitiallyReady, appRouterStore, eventBus]), true);
|
|
390
|
+
}, [isMswInitiallyReady, appRouterStore, eventBus, waitState]), true);
|
|
380
391
|
|
|
381
|
-
const [state, reactDispatch] = useReducer(reducer,
|
|
382
|
-
waitForMsw: runtime.isMswEnabled,
|
|
383
|
-
waitForPublicData,
|
|
384
|
-
waitForProtectedData,
|
|
385
|
-
// When the modules registration functions are awaited, the event listeners are registered after the modules are registered.
|
|
386
|
-
areModulesRegistered: areModulesInitiallyRegistered,
|
|
387
|
-
areModulesReady: areModulesInitiallyReady,
|
|
388
|
-
isMswReady: isMswInitiallyReady,
|
|
389
|
-
isPublicDataReady: false,
|
|
390
|
-
isProtectedDataReady: false,
|
|
391
|
-
activeRouteVisibility: "unknown",
|
|
392
|
-
isUnauthorized: false
|
|
393
|
-
});
|
|
392
|
+
const [state, reactDispatch] = useReducer(reducer, initialState);
|
|
394
393
|
|
|
395
394
|
const {
|
|
396
395
|
areModulesRegistered: areModulesRegisteredValue,
|
|
@@ -401,11 +400,11 @@ export function useAppRouterReducer(waitForPublicData: boolean, waitForProtected
|
|
|
401
400
|
// The dispatch proxy is strictly an utility allowing tests to mock the useReducer dispatch function. It's easier
|
|
402
401
|
// than mocking the import from React.
|
|
403
402
|
const dispatchProxy = useReducerDispatchProxy(reactDispatch);
|
|
404
|
-
const dispatch = useEnhancedReducerDispatch(dispatchProxy);
|
|
403
|
+
const dispatch = useEnhancedReducerDispatch(waitState, dispatchProxy);
|
|
405
404
|
|
|
406
405
|
useModuleRegistrationStatusDispatcher(areModulesRegisteredValue, areModulesReadyValue, dispatch);
|
|
407
406
|
useMswStatusDispatcher(isMswReadyValue, dispatch);
|
|
408
|
-
useBootstrappingCompletedDispatcher(state);
|
|
407
|
+
useBootstrappingCompletedDispatcher(waitState, state);
|
|
409
408
|
|
|
410
409
|
return [state, dispatch];
|
|
411
410
|
}
|
package/src/AppRouterStore.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// access to the state and ease the integration with third-party libraries such as the Platform Widgets.
|
|
3
3
|
// Eventually, AppRouterReducer should be deprecated in favor of this new AppRouterStore.
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type { Logger } from "@workleap/logging";
|
|
6
6
|
import type { AppRouterAction, AppRouterState } from "./AppRouterReducer.ts";
|
|
7
7
|
|
|
8
8
|
export type AppRouterStoreState = Omit<AppRouterState, "waitForMsw" | "waitForPublicData" | "waitForProtectedData">;
|
|
@@ -13,9 +13,9 @@ export class AppRouterStore {
|
|
|
13
13
|
#state: AppRouterStoreState;
|
|
14
14
|
|
|
15
15
|
readonly #listeners = new Set<AppRouterStoreListenerFunction>();
|
|
16
|
-
readonly #logger:
|
|
16
|
+
readonly #logger: Logger;
|
|
17
17
|
|
|
18
|
-
constructor(initialialState: AppRouterStoreState, logger:
|
|
18
|
+
constructor(initialialState: AppRouterStoreState, logger: Logger) {
|
|
19
19
|
this.#state = initialialState;
|
|
20
20
|
this.#logger = logger;
|
|
21
21
|
}
|
|
@@ -160,7 +160,7 @@ export class AppRouterStore {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
export function createAppRouterStore(logger:
|
|
163
|
+
export function createAppRouterStore(logger: Logger) {
|
|
164
164
|
const initialState: AppRouterStoreState = {
|
|
165
165
|
areModulesRegistered: false,
|
|
166
166
|
areModulesReady: false,
|