@linktr.ee/messaging-react 4.2.0-rc-1787325521 → 4.2.0-rc-1787325710
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/AttachmentCard-C-X0jLZ2.cjs +2 -0
- package/dist/AttachmentCard-C-X0jLZ2.cjs.map +1 -0
- package/dist/AttachmentCard-D2IoHdcv.js +410 -0
- package/dist/AttachmentCard-D2IoHdcv.js.map +1 -0
- package/dist/Card-C7uLQbYz.js +105 -0
- package/dist/Card-C7uLQbYz.js.map +1 -0
- package/dist/Card-DENHpLIC.cjs +2 -0
- package/dist/Card-DENHpLIC.cjs.map +1 -0
- package/dist/Card-Ds1FMcUj.cjs +2 -0
- package/dist/Card-Ds1FMcUj.cjs.map +1 -0
- package/dist/Card-EKD9NkTa.js +498 -0
- package/dist/Card-EKD9NkTa.js.map +1 -0
- package/dist/LoadingDots-BSk_UeS0.cjs +2 -0
- package/dist/LoadingDots-BSk_UeS0.cjs.map +1 -0
- package/dist/LoadingDots-B_WiXBeQ.js +73 -0
- package/dist/LoadingDots-B_WiXBeQ.js.map +1 -0
- package/dist/assets/index.css +2 -1
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -26
- package/dist/index.js +4071 -41
- package/dist/index.js.map +1 -1
- package/dist/rolldown-runtime-BocRIvOZ.cjs +1 -0
- package/dist/testing.cjs +2 -2
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.js +106 -118
- package/dist/testing.js.map +1 -1
- package/package.json +5 -5
- package/src/components/ChannelView.stories.tsx +0 -4
- package/src/index.ts +0 -3
- package/src/providers/MessagingProvider.test.tsx +1 -127
- package/src/providers/MessagingProvider.tsx +15 -26
- package/src/types.ts +0 -8
- package/dist/Card-BYJyA83X.js +0 -701
- package/dist/Card-BYJyA83X.js.map +0 -1
- package/dist/Card-Be81K6su.cjs +0 -2
- package/dist/Card-Be81K6su.cjs.map +0 -1
- package/dist/Card-BplJtZao.cjs +0 -2
- package/dist/Card-BplJtZao.cjs.map +0 -1
- package/dist/Card-BzvDr-pU.js +0 -112
- package/dist/Card-BzvDr-pU.js.map +0 -1
- package/dist/PurchaseStatusBadge-BmqAQEV9.cjs +0 -2
- package/dist/PurchaseStatusBadge-BmqAQEV9.cjs.map +0 -1
- package/dist/PurchaseStatusBadge-D1RRsubZ.js +0 -59
- package/dist/PurchaseStatusBadge-D1RRsubZ.js.map +0 -1
- package/dist/index-BUC9vqhJ.js +0 -5916
- package/dist/index-BUC9vqhJ.js.map +0 -1
- package/dist/index-BkqyKPJP.cjs +0 -3
- package/dist/index-BkqyKPJP.cjs.map +0 -1
- package/src/logging/index.test.tsx +0 -136
- package/src/logging/index.tsx +0 -48
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import type { Logger } from '@linktr.ee/messaging-core'
|
|
2
|
-
import { render } from '@testing-library/react'
|
|
3
|
-
import React from 'react'
|
|
4
|
-
import { describe, it, expect, vi, afterEach } from 'vitest'
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
MessagingLoggerProvider,
|
|
8
|
-
consoleLogger,
|
|
9
|
-
resolveLogger,
|
|
10
|
-
useMessagingLogger,
|
|
11
|
-
} from './index'
|
|
12
|
-
|
|
13
|
-
const ERROR_MESSAGE = '[MessagingShell] Failed to load channels:'
|
|
14
|
-
|
|
15
|
-
/** Logs one error through the seam the way a call site would. */
|
|
16
|
-
const ErrorEmitter: React.FC<{ error: Error }> = ({ error }) => {
|
|
17
|
-
const logger = useMessagingLogger()
|
|
18
|
-
logger.error(ERROR_MESSAGE, error)
|
|
19
|
-
return null
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Emits one line at every level so partial-sink fallback is observable. */
|
|
23
|
-
const AllLevelsEmitter: React.FC = () => {
|
|
24
|
-
const logger = useMessagingLogger()
|
|
25
|
-
logger.debug('debug line', 1)
|
|
26
|
-
logger.info('info line', 2)
|
|
27
|
-
logger.warn('warn line', 3)
|
|
28
|
-
logger.error('error line', 4)
|
|
29
|
-
return null
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
afterEach(() => {
|
|
33
|
-
vi.restoreAllMocks()
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
describe('logger seam', () => {
|
|
37
|
-
it('routes error to an injected sink with the exact message and raw error object', () => {
|
|
38
|
-
const error = new Error('boom')
|
|
39
|
-
const sink = { error: vi.fn() }
|
|
40
|
-
|
|
41
|
-
render(
|
|
42
|
-
<MessagingLoggerProvider logger={sink}>
|
|
43
|
-
<ErrorEmitter error={error} />
|
|
44
|
-
</MessagingLoggerProvider>
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
expect(sink.error).toHaveBeenCalledTimes(1)
|
|
48
|
-
expect(sink.error).toHaveBeenCalledWith(ERROR_MESSAGE, error)
|
|
49
|
-
// The raw Error instance, not a serialized copy.
|
|
50
|
-
expect(sink.error.mock.calls[0][1]).toBe(error)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('passes identical arguments to console.error when no sink is injected', () => {
|
|
54
|
-
const error = new Error('boom')
|
|
55
|
-
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
56
|
-
const sink = { error: vi.fn() }
|
|
57
|
-
|
|
58
|
-
render(
|
|
59
|
-
<MessagingLoggerProvider logger={sink}>
|
|
60
|
-
<ErrorEmitter error={error} />
|
|
61
|
-
</MessagingLoggerProvider>
|
|
62
|
-
)
|
|
63
|
-
const injectedArgs = sink.error.mock.calls[0]
|
|
64
|
-
|
|
65
|
-
// No provider at all, and a provider with no logger prop: both must produce
|
|
66
|
-
// byte-identical console output to what the injected sink received.
|
|
67
|
-
render(<ErrorEmitter error={error} />)
|
|
68
|
-
render(
|
|
69
|
-
<MessagingLoggerProvider>
|
|
70
|
-
<ErrorEmitter error={error} />
|
|
71
|
-
</MessagingLoggerProvider>
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
expect(consoleError).toHaveBeenCalledTimes(2)
|
|
75
|
-
expect(consoleError.mock.calls[0]).toEqual(injectedArgs)
|
|
76
|
-
expect(consoleError.mock.calls[1]).toEqual(injectedArgs)
|
|
77
|
-
expect(consoleError.mock.calls[0][1]).toBe(error)
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
it('falls back to console for the levels a partial sink omits', () => {
|
|
81
|
-
const consoleLog = vi.spyOn(console, 'log').mockImplementation(() => {})
|
|
82
|
-
const consoleWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
83
|
-
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
84
|
-
const sink: Logger = { warn: vi.fn(), error: vi.fn() }
|
|
85
|
-
|
|
86
|
-
render(
|
|
87
|
-
<MessagingLoggerProvider logger={sink}>
|
|
88
|
-
<AllLevelsEmitter />
|
|
89
|
-
</MessagingLoggerProvider>
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
expect(sink.warn).toHaveBeenCalledWith('warn line', 3)
|
|
93
|
-
expect(sink.error).toHaveBeenCalledWith('error line', 4)
|
|
94
|
-
expect(consoleWarn).not.toHaveBeenCalled()
|
|
95
|
-
expect(consoleError).not.toHaveBeenCalled()
|
|
96
|
-
// debug and info are unset on the sink, so both land on console.log.
|
|
97
|
-
expect(consoleLog.mock.calls).toEqual([
|
|
98
|
-
['debug line', 1],
|
|
99
|
-
['info line', 2],
|
|
100
|
-
])
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
it('defaults every level to console when the hook is used with no provider', () => {
|
|
104
|
-
const consoleLog = vi.spyOn(console, 'log').mockImplementation(() => {})
|
|
105
|
-
const consoleWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
106
|
-
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
107
|
-
|
|
108
|
-
render(<AllLevelsEmitter />)
|
|
109
|
-
|
|
110
|
-
expect(consoleLog.mock.calls).toEqual([
|
|
111
|
-
['debug line', 1],
|
|
112
|
-
['info line', 2],
|
|
113
|
-
])
|
|
114
|
-
expect(consoleWarn).toHaveBeenCalledWith('warn line', 3)
|
|
115
|
-
expect(consoleError).toHaveBeenCalledWith('error line', 4)
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
it('resolveLogger keeps provided levels and fills the rest from console', () => {
|
|
119
|
-
const warn = vi.fn()
|
|
120
|
-
const resolved = resolveLogger({ warn })
|
|
121
|
-
|
|
122
|
-
expect(resolved.warn).toBe(warn)
|
|
123
|
-
expect(resolved.debug).toBe(consoleLogger.debug)
|
|
124
|
-
expect(resolved.info).toBe(consoleLogger.info)
|
|
125
|
-
expect(resolved.error).toBe(consoleLogger.error)
|
|
126
|
-
expect(resolveLogger()).toEqual(consoleLogger)
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
it('consoleLogger dispatches through console at call time, not bind time', () => {
|
|
130
|
-
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
131
|
-
|
|
132
|
-
consoleLogger.error('late spy', 'arg')
|
|
133
|
-
|
|
134
|
-
expect(consoleError).toHaveBeenCalledWith('late spy', 'arg')
|
|
135
|
-
})
|
|
136
|
-
})
|
package/src/logging/index.tsx
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { Logger } from '@linktr.ee/messaging-core'
|
|
2
|
-
import React, { createContext, useContext, useMemo } from 'react'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Default sink: the console calls the package makes today. Wrappers, not
|
|
6
|
-
* `console.error.bind(console)`, so a later-installed spy is still observed.
|
|
7
|
-
*/
|
|
8
|
-
export const consoleLogger: Required<Logger> = {
|
|
9
|
-
debug: (message, ...args) => console.log(message, ...args),
|
|
10
|
-
info: (message, ...args) => console.log(message, ...args),
|
|
11
|
-
warn: (message, ...args) => console.warn(message, ...args),
|
|
12
|
-
error: (message, ...args) => console.error(message, ...args),
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Merge a partial sink over the console defaults, so a consumer can route only
|
|
17
|
-
* the levels it cares about (e.g. `error`) and leave the rest on console.
|
|
18
|
-
*/
|
|
19
|
-
export const resolveLogger = (logger?: Logger): Required<Logger> => ({
|
|
20
|
-
debug: logger?.debug ?? consoleLogger.debug,
|
|
21
|
-
info: logger?.info ?? consoleLogger.info,
|
|
22
|
-
warn: logger?.warn ?? consoleLogger.warn,
|
|
23
|
-
error: logger?.error ?? consoleLogger.error,
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
const LoggerContext = createContext<Required<Logger>>(consoleLogger)
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Provides the resolved logger sink to the messaging subtree. Rendered by
|
|
30
|
-
* `MessagingProvider`; usable standalone in tests or in a subtree that needs a
|
|
31
|
-
* different sink.
|
|
32
|
-
*/
|
|
33
|
-
export const MessagingLoggerProvider: React.FC<{
|
|
34
|
-
logger?: Logger
|
|
35
|
-
children: React.ReactNode
|
|
36
|
-
}> = ({ logger, children }) => {
|
|
37
|
-
const value = useMemo(() => resolveLogger(logger), [logger])
|
|
38
|
-
return (
|
|
39
|
-
<LoggerContext.Provider value={value}>{children}</LoggerContext.Provider>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* The logger sink for the current subtree. Falls back to console when no
|
|
45
|
-
* provider (or no `logger` prop) is present, so call sites never branch.
|
|
46
|
-
*/
|
|
47
|
-
export const useMessagingLogger = (): Required<Logger> =>
|
|
48
|
-
useContext(LoggerContext)
|