@gravito/signal 3.0.3 → 3.1.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.
Files changed (131) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +99 -59
  3. package/README.zh-TW.md +140 -9
  4. package/build.ts +133 -0
  5. package/dist/Mailable.d.ts +453 -0
  6. package/dist/OrbitSignal.d.ts +267 -0
  7. package/dist/Queueable.d.ts +9 -0
  8. package/dist/TypedMailable.d.ts +95 -0
  9. package/dist/dev/DevMailbox.d.ts +79 -0
  10. package/dist/dev/DevServer.d.ts +39 -0
  11. package/dist/dev/storage/FileMailboxStorage.d.ts +16 -0
  12. package/dist/dev/storage/MailboxStorage.d.ts +14 -0
  13. package/dist/dev/storage/MemoryMailboxStorage.d.ts +13 -0
  14. package/dist/dev/ui/mailbox.d.ts +11 -0
  15. package/dist/dev/ui/preview.d.ts +11 -0
  16. package/dist/dev/ui/shared.d.ts +15 -0
  17. package/dist/errors.d.ts +58 -0
  18. package/dist/events.d.ts +63 -0
  19. package/dist/index.cjs +88291 -0
  20. package/dist/index.cjs.map +712 -0
  21. package/dist/index.d.ts +31 -643
  22. package/dist/index.mjs +87748 -335
  23. package/dist/index.mjs.map +710 -0
  24. package/dist/renderers/HtmlRenderer.d.ts +34 -0
  25. package/dist/renderers/MjmlRenderer.d.ts +41 -0
  26. package/dist/renderers/ReactMjmlRenderer.d.ts +38 -0
  27. package/dist/renderers/ReactRenderer.d.ts +46 -0
  28. package/dist/renderers/Renderer.d.ts +66 -0
  29. package/dist/renderers/TemplateRenderer.d.ts +55 -0
  30. package/dist/renderers/VueMjmlRenderer.d.ts +39 -0
  31. package/dist/renderers/VueRenderer.d.ts +47 -0
  32. package/dist/renderers/mjml-templates.d.ts +11 -0
  33. package/dist/transports/BaseTransport.d.ts +111 -0
  34. package/dist/transports/LogTransport.d.ts +42 -0
  35. package/dist/transports/MemoryTransport.d.ts +51 -0
  36. package/dist/transports/SesTransport.d.ts +79 -0
  37. package/dist/transports/SmtpTransport.d.ts +124 -0
  38. package/dist/transports/Transport.d.ts +44 -0
  39. package/dist/types.d.ts +294 -0
  40. package/dist/utils/html.d.ts +29 -0
  41. package/dist/webhooks/SendGridWebhookDriver.d.ts +45 -0
  42. package/dist/webhooks/SesWebhookDriver.d.ts +23 -0
  43. package/doc/ADVANCED_RENDERING.md +71 -0
  44. package/doc/DISTRIBUTED_MESSAGING.md +79 -0
  45. package/doc/OPTIMIZATION_PLAN.md +496 -0
  46. package/package.json +14 -11
  47. package/package.json.bak +75 -0
  48. package/scripts/check-coverage.ts +64 -0
  49. package/src/Mailable.ts +340 -44
  50. package/src/OrbitSignal.ts +350 -50
  51. package/src/TypedMailable.ts +96 -0
  52. package/src/dev/DevMailbox.ts +89 -33
  53. package/src/dev/DevServer.ts +14 -14
  54. package/src/dev/storage/FileMailboxStorage.ts +66 -0
  55. package/src/dev/storage/MailboxStorage.ts +15 -0
  56. package/src/dev/storage/MemoryMailboxStorage.ts +36 -0
  57. package/src/dev/ui/mailbox.ts +1 -1
  58. package/src/dev/ui/preview.ts +4 -4
  59. package/src/errors.ts +69 -0
  60. package/src/events.ts +72 -0
  61. package/src/index.ts +20 -1
  62. package/src/renderers/HtmlRenderer.ts +20 -18
  63. package/src/renderers/MjmlRenderer.ts +73 -0
  64. package/src/renderers/ReactMjmlRenderer.ts +94 -0
  65. package/src/renderers/ReactRenderer.ts +26 -21
  66. package/src/renderers/Renderer.ts +43 -3
  67. package/src/renderers/TemplateRenderer.ts +48 -15
  68. package/src/renderers/VueMjmlRenderer.ts +99 -0
  69. package/src/renderers/VueRenderer.ts +26 -21
  70. package/src/renderers/mjml-templates.ts +50 -0
  71. package/src/transports/BaseTransport.ts +148 -0
  72. package/src/transports/LogTransport.ts +28 -6
  73. package/src/transports/MemoryTransport.ts +34 -6
  74. package/src/transports/SesTransport.ts +62 -17
  75. package/src/transports/SmtpTransport.ts +123 -27
  76. package/src/transports/Transport.ts +33 -4
  77. package/src/types.ts +172 -3
  78. package/src/utils/html.ts +43 -0
  79. package/src/webhooks/SendGridWebhookDriver.ts +80 -0
  80. package/src/webhooks/SesWebhookDriver.ts +44 -0
  81. package/tests/DevMailbox.test.ts +54 -0
  82. package/tests/FileMailboxStorage.test.ts +56 -0
  83. package/tests/MjmlLayout.test.ts +28 -0
  84. package/tests/MjmlRenderer.test.ts +53 -0
  85. package/tests/OrbitSignalWebhook.test.ts +56 -0
  86. package/tests/ReactMjmlRenderer.test.ts +33 -0
  87. package/tests/SendGridWebhookDriver.test.ts +69 -0
  88. package/tests/SesWebhookDriver.test.ts +46 -0
  89. package/tests/VueMjmlRenderer.test.ts +35 -0
  90. package/tests/dev-server.test.ts +1 -1
  91. package/tests/transports.test.ts +3 -3
  92. package/tsconfig.build.json +24 -0
  93. package/tsconfig.json +8 -25
  94. package/dist/OrbitMail-2Z7ZTKYA.mjs +0 -7
  95. package/dist/OrbitMail-BGV32HWN.mjs +0 -7
  96. package/dist/OrbitMail-FUYZQSAV.mjs +0 -7
  97. package/dist/OrbitMail-NAPCRK7B.mjs +0 -7
  98. package/dist/OrbitMail-REGJ276B.mjs +0 -7
  99. package/dist/OrbitMail-TCFBJWDT.mjs +0 -7
  100. package/dist/OrbitMail-XZZW6U4N.mjs +0 -7
  101. package/dist/OrbitSignal-IPSA2CDO.mjs +0 -7
  102. package/dist/OrbitSignal-MABW4DDW.mjs +0 -7
  103. package/dist/OrbitSignal-QSW5VQ5M.mjs +0 -7
  104. package/dist/OrbitSignal-R22QHWAA.mjs +0 -7
  105. package/dist/OrbitSignal-ZKKMEC27.mjs +0 -7
  106. package/dist/ReactRenderer-24SQ4KRU.mjs +0 -27
  107. package/dist/ReactRenderer-CMCAOEPH.mjs +0 -28
  108. package/dist/ReactRenderer-KYNA4WKE.mjs +0 -28
  109. package/dist/ReactRenderer-L5INVYKT.mjs +0 -27
  110. package/dist/VueRenderer-DWTCD2RF.mjs +0 -31
  111. package/dist/VueRenderer-IIR5SYTM.mjs +0 -31
  112. package/dist/VueRenderer-S65ZARRI.mjs +0 -37129
  113. package/dist/VueRenderer-SUP66ISX.mjs +0 -29
  114. package/dist/VueRenderer-Z5PRVBNH.mjs +0 -37298
  115. package/dist/chunk-3U2CYJO5.mjs +0 -367
  116. package/dist/chunk-3XFC4T6M.mjs +0 -392
  117. package/dist/chunk-456QRYFW.mjs +0 -401
  118. package/dist/chunk-6DZX6EAA.mjs +0 -37
  119. package/dist/chunk-DT3R2TNV.mjs +0 -367
  120. package/dist/chunk-EBO3CZXG.mjs +0 -15
  121. package/dist/chunk-F6MVTUCT.mjs +0 -421
  122. package/dist/chunk-GADWIVC4.mjs +0 -400
  123. package/dist/chunk-HHKFAMSE.mjs +0 -380
  124. package/dist/chunk-NEQCQSZI.mjs +0 -406
  125. package/dist/chunk-OKRNL6PN.mjs +0 -400
  126. package/dist/chunk-ULN3GMY2.mjs +0 -367
  127. package/dist/chunk-XAWO7RSP.mjs +0 -398
  128. package/dist/chunk-YLVDJSED.mjs +0 -431
  129. package/dist/index.d.mts +0 -644
  130. package/dist/index.js +0 -38251
  131. package/dist/server-renderer-4W4FI7YG.mjs +0 -37269
@@ -0,0 +1,33 @@
1
+ import { describe, expect, it, mock } from 'bun:test'
2
+ import { ReactMjmlRenderer } from '../src/renderers/ReactMjmlRenderer'
3
+
4
+ describe('ReactMjmlRenderer', () => {
5
+ it('should render React component to MJML then to HTML', async () => {
6
+ const mockComponent = {}
7
+ const mockElement = { type: 'mjml' }
8
+ const mockMjml = '<mjml><mj-body>Hello</mj-body></mjml>'
9
+ const mockHtml = '<html><body>Hello</body></html>'
10
+
11
+ const createElement = mock(() => mockElement)
12
+ const renderToStaticMarkup = mock(() => mockMjml)
13
+ const mjml2html = mock(() => ({ html: mockHtml, errors: [] }))
14
+
15
+ const renderer = new ReactMjmlRenderer(
16
+ mockComponent,
17
+ { name: 'World' },
18
+ {},
19
+ {
20
+ createElement,
21
+ renderToStaticMarkup,
22
+ mjml2html,
23
+ }
24
+ )
25
+
26
+ const result = await renderer.render({ extra: 'data' })
27
+
28
+ expect(createElement).toHaveBeenCalledWith(mockComponent, { name: 'World', extra: 'data' })
29
+ expect(renderToStaticMarkup).toHaveBeenCalledWith(mockElement)
30
+ expect(mjml2html).toHaveBeenCalledWith(mockMjml, expect.any(Object))
31
+ expect(result.html).toBe(mockHtml)
32
+ })
33
+ })
@@ -0,0 +1,69 @@
1
+ import { describe, expect, it } from 'bun:test'
2
+ import type { GravitoContext } from '@gravito/core'
3
+ import { SendGridWebhookDriver } from '../src/webhooks/SendGridWebhookDriver'
4
+
5
+ describe('SendGridWebhookDriver', () => {
6
+ it('should parse batch events from request body', async () => {
7
+ const driver = new SendGridWebhookDriver()
8
+
9
+ const mockEvents = [
10
+ { event: 'delivered', email: 'user1@example.com', timestamp: 123456789 },
11
+ { event: 'opened', email: 'user1@example.com', timestamp: 123456790 },
12
+ ]
13
+
14
+ const mockCtx = {
15
+ req: {
16
+ json: async () => mockEvents,
17
+ header: () => undefined,
18
+ },
19
+ } as unknown as GravitoContext
20
+
21
+ const result = await driver.handle(mockCtx)
22
+
23
+ expect(result).toHaveLength(2)
24
+ expect(result?.[0].event).toBe('delivered')
25
+ expect(result?.[1].event).toBe('opened')
26
+ expect(result?.[0].payload.email).toBe('user1@example.com')
27
+ })
28
+
29
+ it('should handle single event body', async () => {
30
+ const driver = new SendGridWebhookDriver()
31
+ const mockEvent = { event: 'bounced', email: 'bad@example.com' }
32
+
33
+ const mockCtx = {
34
+ req: {
35
+ json: async () => mockEvent,
36
+ header: () => undefined,
37
+ },
38
+ } as unknown as GravitoContext
39
+
40
+ const result = await driver.handle(mockCtx)
41
+ expect(result).toHaveLength(1)
42
+ expect(result?.[0].event).toBe('bounced')
43
+ })
44
+
45
+ it('should return null for empty body', async () => {
46
+ const driver = new SendGridWebhookDriver()
47
+ const mockCtx = {
48
+ req: {
49
+ json: async () => [],
50
+ header: () => undefined,
51
+ },
52
+ } as unknown as GravitoContext
53
+
54
+ const result = await driver.handle(mockCtx)
55
+ expect(result).toBeNull()
56
+ })
57
+
58
+ it('should throw if public key is set but signature is missing', async () => {
59
+ const driver = new SendGridWebhookDriver({ publicKey: 'some-key' })
60
+ const mockCtx = {
61
+ req: {
62
+ json: async () => [{ event: 'test' }],
63
+ header: (_name: string) => undefined,
64
+ },
65
+ } as unknown as GravitoContext
66
+
67
+ expect(driver.handle(mockCtx)).rejects.toThrow('Missing SendGrid signature headers')
68
+ })
69
+ })
@@ -0,0 +1,46 @@
1
+ import { describe, expect, it } from 'bun:test'
2
+ import type { GravitoContext } from '@gravito/core'
3
+ import { SesWebhookDriver } from '../src/webhooks/SesWebhookDriver'
4
+
5
+ describe('SesWebhookDriver', () => {
6
+ it('should parse SNS notification events', async () => {
7
+ const driver = new SesWebhookDriver()
8
+
9
+ const mockSnsBody = {
10
+ Type: 'Notification',
11
+ Message: JSON.stringify({
12
+ notificationType: 'Bounce',
13
+ bounce: { bounceType: 'Permanent', bounceSubType: 'General' },
14
+ }),
15
+ }
16
+
17
+ const mockCtx = {
18
+ req: {
19
+ json: async () => mockSnsBody,
20
+ },
21
+ } as unknown as GravitoContext
22
+
23
+ const result = await driver.handle(mockCtx)
24
+
25
+ expect(result).toHaveLength(1)
26
+ expect(result?.[0].event).toBe('bounce')
27
+ expect(result?.[0].payload.bounce.bounceType).toBe('Permanent')
28
+ })
29
+
30
+ it('should handle subscription confirmation', async () => {
31
+ const driver = new SesWebhookDriver()
32
+ const mockSnsBody = {
33
+ Type: 'SubscriptionConfirmation',
34
+ SubscribeURL: 'https://sns.aws.com/confirm',
35
+ }
36
+
37
+ const mockCtx = {
38
+ req: {
39
+ json: async () => mockSnsBody,
40
+ },
41
+ } as unknown as GravitoContext
42
+
43
+ const result = await driver.handle(mockCtx)
44
+ expect(result?.[0].event).toBe('sns:subscription')
45
+ })
46
+ })
@@ -0,0 +1,35 @@
1
+ import { describe, expect, it, mock } from 'bun:test'
2
+ import { VueMjmlRenderer } from '../src/renderers/VueMjmlRenderer'
3
+
4
+ describe('VueMjmlRenderer', () => {
5
+ it('should render Vue component to MJML then to HTML', async () => {
6
+ const mockComponent = { name: 'Test' }
7
+ const mockApp = { _context: {} }
8
+ const mockMjml = '<mjml><mj-body>Vue MJML</mj-body></mjml>'
9
+ const mockHtml = '<html><body>Vue MJML</body></html>'
10
+
11
+ const createSSRApp = mock(() => mockApp)
12
+ const h = mock(() => ({}))
13
+ const renderToString = mock(async () => mockMjml)
14
+ const mjml2html = mock(() => ({ html: mockHtml, errors: [] }))
15
+
16
+ const renderer = new VueMjmlRenderer(
17
+ mockComponent,
18
+ { name: 'World' },
19
+ {},
20
+ {
21
+ createSSRApp,
22
+ h,
23
+ renderToString,
24
+ mjml2html,
25
+ }
26
+ )
27
+
28
+ const result = await renderer.render({ extra: 'data' })
29
+
30
+ expect(createSSRApp).toHaveBeenCalled()
31
+ expect(renderToString).toHaveBeenCalledWith(mockApp)
32
+ expect(mjml2html).toHaveBeenCalledWith(mockMjml, expect.any(Object))
33
+ expect(result.html).toBe(mockHtml)
34
+ })
35
+ })
@@ -20,7 +20,7 @@ const createCore = () => {
20
20
  describe('DevServer', () => {
21
21
  it('registers mailbox routes and serves entries', async () => {
22
22
  const mailbox = new DevMailbox()
23
- const entry = mailbox.add({
23
+ const entry = await mailbox.add({
24
24
  from: { address: 'from@example.com' },
25
25
  to: [{ address: 'to@example.com' }],
26
26
  subject: 'Hello',
@@ -19,7 +19,7 @@ describe('Transports', () => {
19
19
 
20
20
  await transport.send(message)
21
21
 
22
- const entries = mailbox.list()
22
+ const entries = await mailbox.list()
23
23
  expect(entries).toHaveLength(1)
24
24
 
25
25
  const entry = entries[0]
@@ -44,9 +44,9 @@ describe('Transports', () => {
44
44
  })
45
45
  }
46
46
 
47
- expect(mailbox.list().length).toBeLessThanOrEqual(50)
47
+ expect((await mailbox.list()).length).toBeLessThanOrEqual(50)
48
48
  // Should be the latest ones (last one added is index 0)
49
- expect(mailbox.list()[0].envelope.subject).toBe('Msg 59')
49
+ expect((await mailbox.list())[0].envelope.subject).toBe('Msg 59')
50
50
  })
51
51
  })
52
52
  })
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "noEmit": false,
7
+ "emitDeclarationOnly": true,
8
+ "declaration": true,
9
+ "declarationMap": false,
10
+ "outDir": "./dist",
11
+ "skipLibCheck": true,
12
+ "noCheck": true,
13
+ "types": ["bun-types"],
14
+ "paths": {
15
+ "@gravito/signal": ["./src/index.ts"],
16
+ "@gravito/core": ["../core/src/index.ts"],
17
+ "@gravito/stream": ["../stream/src/index.ts"],
18
+ "@gravito/prism": ["../prism/src/index.ts"],
19
+ "@gravito/*": ["../*/src/index.ts"]
20
+ }
21
+ },
22
+ "include": ["src/**/*.ts"],
23
+ "exclude": ["node_modules", "dist", "tests", "**/*.test.ts"]
24
+ }
package/tsconfig.json CHANGED
@@ -1,26 +1,9 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "baseUrl": ".",
6
- "paths": {
7
- "@gravito/core": [
8
- "../../packages/core/src/index.ts"
9
- ],
10
- "@gravito/*": [
11
- "../../packages/*/src/index.ts"
12
- ]
13
- },
14
- "types": [
15
- "bun-types"
16
- ]
17
- },
18
- "include": [
19
- "src/**/*"
20
- ],
21
- "exclude": [
22
- "node_modules",
23
- "dist",
24
- "**/*.test.ts"
25
- ]
26
- }
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "types": ["bun-types"]
6
+ },
7
+ "include": ["src/**/*"],
8
+ "exclude": ["node_modules", "dist", "**/*.test.ts"]
9
+ }
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-XAWO7RSP.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-DT3R2TNV.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-OKRNL6PN.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-HHKFAMSE.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-3XFC4T6M.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-3U2CYJO5.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitMail
3
- } from "./chunk-ULN3GMY2.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitMail
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitSignal
3
- } from "./chunk-YLVDJSED.mjs";
4
- import "./chunk-EBO3CZXG.mjs";
5
- export {
6
- OrbitSignal
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitSignal
3
- } from "./chunk-456QRYFW.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitSignal
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitSignal
3
- } from "./chunk-NEQCQSZI.mjs";
4
- import "./chunk-EBO3CZXG.mjs";
5
- export {
6
- OrbitSignal
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitSignal
3
- } from "./chunk-F6MVTUCT.mjs";
4
- import "./chunk-EBO3CZXG.mjs";
5
- export {
6
- OrbitSignal
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- OrbitSignal
3
- } from "./chunk-GADWIVC4.mjs";
4
- import "./chunk-6DZX6EAA.mjs";
5
- export {
6
- OrbitSignal
7
- };
@@ -1,27 +0,0 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/renderers/ReactRenderer.ts
4
- var ReactRenderer = class {
5
- constructor(component, props) {
6
- this.component = component;
7
- this.props = props;
8
- }
9
- async render(data) {
10
- const { createElement } = await import("react");
11
- const { renderToStaticMarkup } = await import("react-dom/server");
12
- const mergedProps = { ...this.props, ...data };
13
- const element = createElement(this.component, mergedProps);
14
- const html = renderToStaticMarkup(element);
15
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
16
- return {
17
- html: fullHtml,
18
- text: this.stripHtml(html)
19
- };
20
- }
21
- stripHtml(html) {
22
- return html.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "").replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
23
- }
24
- };
25
- export {
26
- ReactRenderer
27
- };
@@ -1,28 +0,0 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/renderers/ReactRenderer.ts
4
- var ReactRenderer = class {
5
- constructor(component, props, deps = {}) {
6
- this.component = component;
7
- this.props = props;
8
- this.deps = deps;
9
- }
10
- async render(data) {
11
- const createElement = this.deps.createElement ?? (await import("react")).createElement;
12
- const renderToStaticMarkup = this.deps.renderToStaticMarkup ?? (await import("react-dom/server")).renderToStaticMarkup;
13
- const mergedProps = { ...this.props, ...data };
14
- const element = createElement(this.component, mergedProps);
15
- const html = renderToStaticMarkup(element);
16
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
17
- return {
18
- html: fullHtml,
19
- text: this.stripHtml(html)
20
- };
21
- }
22
- stripHtml(html) {
23
- return html.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "").replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
24
- }
25
- };
26
- export {
27
- ReactRenderer
28
- };
@@ -1,28 +0,0 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/renderers/ReactRenderer.ts
4
- var ReactRenderer = class {
5
- constructor(component, props, deps = {}) {
6
- this.component = component;
7
- this.props = props;
8
- this.deps = deps;
9
- }
10
- async render(data) {
11
- const createElement = this.deps.createElement ?? (await import("react")).createElement;
12
- const renderToStaticMarkup = this.deps.renderToStaticMarkup ?? (await import("react-dom/server")).renderToStaticMarkup;
13
- const mergedProps = { ...this.props, ...data };
14
- const element = createElement(this.component, mergedProps);
15
- const html = renderToStaticMarkup(element);
16
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
17
- return {
18
- html: fullHtml,
19
- text: this.stripHtml(html)
20
- };
21
- }
22
- stripHtml(html) {
23
- return html.replace(/<style(?:\s[^>]*)?>[\s\S]*?<\/style>/gi, "").replace(/<script(?:\s[^>]*)?>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
24
- }
25
- };
26
- export {
27
- ReactRenderer
28
- };
@@ -1,27 +0,0 @@
1
- import "./chunk-6DZX6EAA.mjs";
2
-
3
- // src/renderers/ReactRenderer.ts
4
- import { createElement } from "react";
5
- import { renderToStaticMarkup } from "react-dom/server";
6
- var ReactRenderer = class {
7
- constructor(component, props) {
8
- this.component = component;
9
- this.props = props;
10
- }
11
- async render(data) {
12
- const mergedProps = { ...this.props, ...data };
13
- const element = createElement(this.component, mergedProps);
14
- const html = renderToStaticMarkup(element);
15
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
16
- return {
17
- html: fullHtml,
18
- text: this.stripHtml(html)
19
- };
20
- }
21
- stripHtml(html) {
22
- return html.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "").replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
23
- }
24
- };
25
- export {
26
- ReactRenderer
27
- };
@@ -1,31 +0,0 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/renderers/VueRenderer.ts
4
- var VueRenderer = class {
5
- constructor(component, props, deps = {}) {
6
- this.component = component;
7
- this.props = props;
8
- this.deps = deps;
9
- }
10
- async render(data) {
11
- const createSSRApp = this.deps.createSSRApp ?? (await import("vue")).createSSRApp;
12
- const h = this.deps.h ?? (await import("vue")).h;
13
- const renderToString = this.deps.renderToString ?? (await import("./server-renderer-4W4FI7YG.mjs")).renderToString;
14
- const mergedProps = { ...this.props, ...data };
15
- const app = createSSRApp({
16
- render: () => h(this.component, mergedProps)
17
- });
18
- const html = await renderToString(app);
19
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
20
- return {
21
- html: fullHtml,
22
- text: this.stripHtml(html)
23
- };
24
- }
25
- stripHtml(html) {
26
- return html.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "").replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
27
- }
28
- };
29
- export {
30
- VueRenderer
31
- };
@@ -1,31 +0,0 @@
1
- import "./chunk-EBO3CZXG.mjs";
2
-
3
- // src/renderers/VueRenderer.ts
4
- var VueRenderer = class {
5
- constructor(component, props, deps = {}) {
6
- this.component = component;
7
- this.props = props;
8
- this.deps = deps;
9
- }
10
- async render(data) {
11
- const createSSRApp = this.deps.createSSRApp ?? (await import("vue")).createSSRApp;
12
- const h = this.deps.h ?? (await import("vue")).h;
13
- const renderToString = this.deps.renderToString ?? (await import("./server-renderer-4W4FI7YG.mjs")).renderToString;
14
- const mergedProps = { ...this.props, ...data };
15
- const app = createSSRApp({
16
- render: () => h(this.component, mergedProps)
17
- });
18
- const html = await renderToString(app);
19
- const fullHtml = html.startsWith("<!DOCTYPE") ? html : `<!DOCTYPE html>${html}`;
20
- return {
21
- html: fullHtml,
22
- text: this.stripHtml(html)
23
- };
24
- }
25
- stripHtml(html) {
26
- return html.replace(/<style(?:\s[^>]*)?>[\s\S]*?<\/style>/gi, "").replace(/<script(?:\s[^>]*)?>[\s\S]*?<\/script>/gi, "").replace(/<[^>]+>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
27
- }
28
- };
29
- export {
30
- VueRenderer
31
- };