@codefluss/sandbox 0.0.1-alpha.1

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 (233) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +413 -0
  3. package/dist/__tests__/auto-resize-script.test.d.ts +2 -0
  4. package/dist/__tests__/auto-resize-script.test.d.ts.map +1 -0
  5. package/dist/__tests__/auto-resize-script.test.js +49 -0
  6. package/dist/__tests__/auto-resize-script.test.js.map +1 -0
  7. package/dist/__tests__/sandbox-component.test.d.ts +2 -0
  8. package/dist/__tests__/sandbox-component.test.d.ts.map +1 -0
  9. package/dist/__tests__/sandbox-component.test.js +281 -0
  10. package/dist/__tests__/sandbox-component.test.js.map +1 -0
  11. package/dist/__tests__/sandbox-config.test.d.ts +2 -0
  12. package/dist/__tests__/sandbox-config.test.d.ts.map +1 -0
  13. package/dist/__tests__/sandbox-config.test.js +148 -0
  14. package/dist/__tests__/sandbox-config.test.js.map +1 -0
  15. package/dist/__tests__/sandbox-iframe.test.d.ts +2 -0
  16. package/dist/__tests__/sandbox-iframe.test.d.ts.map +1 -0
  17. package/dist/__tests__/sandbox-iframe.test.js +212 -0
  18. package/dist/__tests__/sandbox-iframe.test.js.map +1 -0
  19. package/dist/__tests__/setup.d.ts +2 -0
  20. package/dist/__tests__/setup.d.ts.map +1 -0
  21. package/dist/__tests__/setup.js +27 -0
  22. package/dist/__tests__/setup.js.map +1 -0
  23. package/dist/components/index.d.ts +5 -0
  24. package/dist/components/index.d.ts.map +1 -0
  25. package/dist/components/index.js +5 -0
  26. package/dist/components/index.js.map +1 -0
  27. package/dist/components/performance-wrapper.d.ts +12 -0
  28. package/dist/components/performance-wrapper.d.ts.map +1 -0
  29. package/dist/components/performance-wrapper.js +162 -0
  30. package/dist/components/performance-wrapper.js.map +1 -0
  31. package/dist/components/sandbox-component.d.ts +3 -0
  32. package/dist/components/sandbox-component.d.ts.map +1 -0
  33. package/dist/components/sandbox-component.js +123 -0
  34. package/dist/components/sandbox-component.js.map +1 -0
  35. package/dist/components/sandbox-iframe-cached.d.ts +3 -0
  36. package/dist/components/sandbox-iframe-cached.d.ts.map +1 -0
  37. package/dist/components/sandbox-iframe-cached.js +176 -0
  38. package/dist/components/sandbox-iframe-cached.js.map +1 -0
  39. package/dist/components/sandbox-iframe.d.ts +3 -0
  40. package/dist/components/sandbox-iframe.d.ts.map +1 -0
  41. package/dist/components/sandbox-iframe.js +131 -0
  42. package/dist/components/sandbox-iframe.js.map +1 -0
  43. package/dist/converters/auto-detect/auto-detect.d.ts +13 -0
  44. package/dist/converters/auto-detect/auto-detect.d.ts.map +1 -0
  45. package/dist/converters/auto-detect/auto-detect.js +224 -0
  46. package/dist/converters/auto-detect/auto-detect.js.map +1 -0
  47. package/dist/converters/auto-detect/index.d.ts +3 -0
  48. package/dist/converters/auto-detect/index.d.ts.map +1 -0
  49. package/dist/converters/auto-detect/index.js +2 -0
  50. package/dist/converters/auto-detect/index.js.map +1 -0
  51. package/dist/converters/codepen/codepen-converter.d.ts +9 -0
  52. package/dist/converters/codepen/codepen-converter.d.ts.map +1 -0
  53. package/dist/converters/codepen/codepen-converter.js +99 -0
  54. package/dist/converters/codepen/codepen-converter.js.map +1 -0
  55. package/dist/converters/codepen/index.d.ts +2 -0
  56. package/dist/converters/codepen/index.d.ts.map +1 -0
  57. package/dist/converters/codepen/index.js +2 -0
  58. package/dist/converters/codepen/index.js.map +1 -0
  59. package/dist/converters/gist/gist-converter.d.ts +31 -0
  60. package/dist/converters/gist/gist-converter.d.ts.map +1 -0
  61. package/dist/converters/gist/gist-converter.js +162 -0
  62. package/dist/converters/gist/gist-converter.js.map +1 -0
  63. package/dist/converters/gist/index.d.ts +2 -0
  64. package/dist/converters/gist/index.d.ts.map +1 -0
  65. package/dist/converters/gist/index.js +2 -0
  66. package/dist/converters/gist/index.js.map +1 -0
  67. package/dist/converters/shared/html-parser.d.ts +4 -0
  68. package/dist/converters/shared/html-parser.d.ts.map +1 -0
  69. package/dist/converters/shared/html-parser.js +39 -0
  70. package/dist/converters/shared/html-parser.js.map +1 -0
  71. package/dist/converters/shared/index.d.ts +4 -0
  72. package/dist/converters/shared/index.d.ts.map +1 -0
  73. package/dist/converters/shared/index.js +3 -0
  74. package/dist/converters/shared/index.js.map +1 -0
  75. package/dist/converters/shared/sanitization.d.ts +5 -0
  76. package/dist/converters/shared/sanitization.d.ts.map +1 -0
  77. package/dist/converters/shared/sanitization.js +176 -0
  78. package/dist/converters/shared/sanitization.js.map +1 -0
  79. package/dist/converters/shared/types.d.ts +23 -0
  80. package/dist/converters/shared/types.d.ts.map +1 -0
  81. package/dist/converters/shared/types.js +2 -0
  82. package/dist/converters/shared/types.js.map +1 -0
  83. package/dist/core/index.d.ts +13 -0
  84. package/dist/core/index.d.ts.map +1 -0
  85. package/dist/core/index.js +10 -0
  86. package/dist/core/index.js.map +1 -0
  87. package/dist/frameworks/__tests__/file-utils.test.d.ts +2 -0
  88. package/dist/frameworks/__tests__/file-utils.test.d.ts.map +1 -0
  89. package/dist/frameworks/__tests__/file-utils.test.js +408 -0
  90. package/dist/frameworks/__tests__/file-utils.test.js.map +1 -0
  91. package/dist/frameworks/__tests__/sandpack-wrapper.test.d.ts +2 -0
  92. package/dist/frameworks/__tests__/sandpack-wrapper.test.d.ts.map +1 -0
  93. package/dist/frameworks/__tests__/sandpack-wrapper.test.js +147 -0
  94. package/dist/frameworks/__tests__/sandpack-wrapper.test.js.map +1 -0
  95. package/dist/frameworks/file-utils.d.ts +20 -0
  96. package/dist/frameworks/file-utils.d.ts.map +1 -0
  97. package/dist/frameworks/file-utils.js +293 -0
  98. package/dist/frameworks/file-utils.js.map +1 -0
  99. package/dist/frameworks/framework-detector.d.ts +5 -0
  100. package/dist/frameworks/framework-detector.d.ts.map +1 -0
  101. package/dist/frameworks/framework-detector.js +117 -0
  102. package/dist/frameworks/framework-detector.js.map +1 -0
  103. package/dist/frameworks/index.d.ts +6 -0
  104. package/dist/frameworks/index.d.ts.map +1 -0
  105. package/dist/frameworks/index.js +5 -0
  106. package/dist/frameworks/index.js.map +1 -0
  107. package/dist/frameworks/sandpack-wrapper.d.ts +28 -0
  108. package/dist/frameworks/sandpack-wrapper.d.ts.map +1 -0
  109. package/dist/frameworks/sandpack-wrapper.js +55 -0
  110. package/dist/frameworks/sandpack-wrapper.js.map +1 -0
  111. package/dist/frameworks/templates/index.d.ts +8 -0
  112. package/dist/frameworks/templates/index.d.ts.map +1 -0
  113. package/dist/frameworks/templates/index.js +29 -0
  114. package/dist/frameworks/templates/index.js.map +1 -0
  115. package/dist/frameworks/templates/react-template.d.ts +3 -0
  116. package/dist/frameworks/templates/react-template.d.ts.map +1 -0
  117. package/dist/frameworks/templates/react-template.js +376 -0
  118. package/dist/frameworks/templates/react-template.js.map +1 -0
  119. package/dist/frameworks/templates/svelte-template.d.ts +3 -0
  120. package/dist/frameworks/templates/svelte-template.d.ts.map +1 -0
  121. package/dist/frameworks/templates/svelte-template.js +373 -0
  122. package/dist/frameworks/templates/svelte-template.js.map +1 -0
  123. package/dist/frameworks/templates/vanilla-template.d.ts +3 -0
  124. package/dist/frameworks/templates/vanilla-template.d.ts.map +1 -0
  125. package/dist/frameworks/templates/vanilla-template.js +455 -0
  126. package/dist/frameworks/templates/vanilla-template.js.map +1 -0
  127. package/dist/frameworks/templates/vue-template.d.ts +3 -0
  128. package/dist/frameworks/templates/vue-template.d.ts.map +1 -0
  129. package/dist/frameworks/templates/vue-template.js +388 -0
  130. package/dist/frameworks/templates/vue-template.js.map +1 -0
  131. package/dist/frameworks/types.d.ts +57 -0
  132. package/dist/frameworks/types.d.ts.map +1 -0
  133. package/dist/frameworks/types.js +2 -0
  134. package/dist/frameworks/types.js.map +1 -0
  135. package/dist/index.d.ts +7 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +7 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/lib/performance-tracker.d.ts +45 -0
  140. package/dist/lib/performance-tracker.d.ts.map +1 -0
  141. package/dist/lib/performance-tracker.js +165 -0
  142. package/dist/lib/performance-tracker.js.map +1 -0
  143. package/dist/lib/sandbox-cache.d.ts +24 -0
  144. package/dist/lib/sandbox-cache.d.ts.map +1 -0
  145. package/dist/lib/sandbox-cache.js +138 -0
  146. package/dist/lib/sandbox-cache.js.map +1 -0
  147. package/dist/locales/de.json +72 -0
  148. package/dist/locales/en.json +72 -0
  149. package/dist/locales/index.d.ts +148 -0
  150. package/dist/locales/index.d.ts.map +1 -0
  151. package/dist/locales/index.js +7 -0
  152. package/dist/locales/index.js.map +1 -0
  153. package/dist/performance/sandpack-bundle-cache.d.ts +19 -0
  154. package/dist/performance/sandpack-bundle-cache.d.ts.map +1 -0
  155. package/dist/performance/sandpack-bundle-cache.js +48 -0
  156. package/dist/performance/sandpack-bundle-cache.js.map +1 -0
  157. package/dist/sandbox-config.d.ts +4 -0
  158. package/dist/sandbox-config.d.ts.map +1 -0
  159. package/dist/sandbox-config.js +235 -0
  160. package/dist/sandbox-config.js.map +1 -0
  161. package/dist/storage/__tests__/indexeddb-adapter.test.d.ts +2 -0
  162. package/dist/storage/__tests__/indexeddb-adapter.test.d.ts.map +1 -0
  163. package/dist/storage/__tests__/indexeddb-adapter.test.js +192 -0
  164. package/dist/storage/__tests__/indexeddb-adapter.test.js.map +1 -0
  165. package/dist/storage/__tests__/project-manager.test.d.ts +2 -0
  166. package/dist/storage/__tests__/project-manager.test.d.ts.map +1 -0
  167. package/dist/storage/__tests__/project-manager.test.js +266 -0
  168. package/dist/storage/__tests__/project-manager.test.js.map +1 -0
  169. package/dist/storage/index.d.ts +5 -0
  170. package/dist/storage/index.d.ts.map +1 -0
  171. package/dist/storage/index.js +4 -0
  172. package/dist/storage/index.js.map +1 -0
  173. package/dist/storage/indexeddb-adapter.d.ts +18 -0
  174. package/dist/storage/indexeddb-adapter.d.ts.map +1 -0
  175. package/dist/storage/indexeddb-adapter.js +232 -0
  176. package/dist/storage/indexeddb-adapter.js.map +1 -0
  177. package/dist/storage/project-manager.d.ts +35 -0
  178. package/dist/storage/project-manager.d.ts.map +1 -0
  179. package/dist/storage/project-manager.js +213 -0
  180. package/dist/storage/project-manager.js.map +1 -0
  181. package/dist/storage/types.d.ts +59 -0
  182. package/dist/storage/types.d.ts.map +1 -0
  183. package/dist/storage/types.js +2 -0
  184. package/dist/storage/types.js.map +1 -0
  185. package/dist/storage/zip-handler.d.ts +5 -0
  186. package/dist/storage/zip-handler.d.ts.map +1 -0
  187. package/dist/storage/zip-handler.js +200 -0
  188. package/dist/storage/zip-handler.js.map +1 -0
  189. package/dist/types/sandbox-types.d.ts +54 -0
  190. package/dist/types/sandbox-types.d.ts.map +1 -0
  191. package/dist/types/sandbox-types.js +2 -0
  192. package/dist/types/sandbox-types.js.map +1 -0
  193. package/dist/utils/__tests__/converters/auto-detect.test.d.ts +2 -0
  194. package/dist/utils/__tests__/converters/auto-detect.test.d.ts.map +1 -0
  195. package/dist/utils/__tests__/converters/auto-detect.test.js +381 -0
  196. package/dist/utils/__tests__/converters/auto-detect.test.js.map +1 -0
  197. package/dist/utils/__tests__/converters/codepen-converter.test.d.ts +2 -0
  198. package/dist/utils/__tests__/converters/codepen-converter.test.d.ts.map +1 -0
  199. package/dist/utils/__tests__/converters/codepen-converter.test.js +408 -0
  200. package/dist/utils/__tests__/converters/codepen-converter.test.js.map +1 -0
  201. package/dist/utils/__tests__/converters/gist-converter.test.d.ts +2 -0
  202. package/dist/utils/__tests__/converters/gist-converter.test.d.ts.map +1 -0
  203. package/dist/utils/__tests__/converters/gist-converter.test.js +458 -0
  204. package/dist/utils/__tests__/converters/gist-converter.test.js.map +1 -0
  205. package/dist/utils/__tests__/converters/html-parser.test.d.ts +2 -0
  206. package/dist/utils/__tests__/converters/html-parser.test.d.ts.map +1 -0
  207. package/dist/utils/__tests__/converters/html-parser.test.js +285 -0
  208. package/dist/utils/__tests__/converters/html-parser.test.js.map +1 -0
  209. package/dist/utils/__tests__/converters/sanitization.test.d.ts +2 -0
  210. package/dist/utils/__tests__/converters/sanitization.test.d.ts.map +1 -0
  211. package/dist/utils/__tests__/converters/sanitization.test.js +210 -0
  212. package/dist/utils/__tests__/converters/sanitization.test.js.map +1 -0
  213. package/dist/utils/auto-resize-script.d.ts +4 -0
  214. package/dist/utils/auto-resize-script.d.ts.map +1 -0
  215. package/dist/utils/auto-resize-script.js +125 -0
  216. package/dist/utils/auto-resize-script.js.map +1 -0
  217. package/dist/widgets/banner/BannerWidget.d.ts +15 -0
  218. package/dist/widgets/banner/BannerWidget.d.ts.map +1 -0
  219. package/dist/widgets/banner/BannerWidget.js +33 -0
  220. package/dist/widgets/banner/BannerWidget.js.map +1 -0
  221. package/dist/widgets/form/FormWidget.d.ts +23 -0
  222. package/dist/widgets/form/FormWidget.d.ts.map +1 -0
  223. package/dist/widgets/form/FormWidget.js +42 -0
  224. package/dist/widgets/form/FormWidget.js.map +1 -0
  225. package/dist/widgets/index.d.ts +8 -0
  226. package/dist/widgets/index.d.ts.map +1 -0
  227. package/dist/widgets/index.js +28 -0
  228. package/dist/widgets/index.js.map +1 -0
  229. package/dist/widgets/types.d.ts +28 -0
  230. package/dist/widgets/types.d.ts.map +1 -0
  231. package/dist/widgets/types.js +2 -0
  232. package/dist/widgets/types.js.map +1 -0
  233. package/package.json +116 -0
@@ -0,0 +1,408 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { convertFromCodePen, isCodePenEmbed, validateCodePenFormat, } from '../../../converters/codepen/codepen-converter';
3
+ describe('convertFromCodePen', () => {
4
+ describe('Basic Conversion', () => {
5
+ it('should convert simple CodePen export', () => {
6
+ const codepenHTML = `
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+ <head>
10
+ <meta charset="UTF-8">
11
+ <title>My Pen</title>
12
+ <style>
13
+ .container {
14
+ padding: 20px;
15
+ background: #f0f0f0;
16
+ }
17
+ </style>
18
+ </head>
19
+ <body>
20
+ <div class="container">
21
+ <h1>Hello CodePen</h1>
22
+ </div>
23
+ <script>
24
+ console.log('CodePen loaded');
25
+ </script>
26
+ </body>
27
+ </html>
28
+ `;
29
+ const result = convertFromCodePen(codepenHTML);
30
+ expect(result.code.html).toContain('Hello CodePen');
31
+ expect(result.code.css).toContain('.container');
32
+ expect(result.code.js).toContain('console.log');
33
+ expect(result.format).toBe('codepen');
34
+ expect(result.converter).toBe('codepen-converter@0.1.0');
35
+ expect(result.sanitized).toBe(true);
36
+ });
37
+ it('should extract external libraries', () => {
38
+ const htmlWithLibs = `
39
+ <!DOCTYPE html>
40
+ <html>
41
+ <head>
42
+ <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
43
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
44
+ </head>
45
+ <body>
46
+ <div>Content</div>
47
+ </body>
48
+ </html>
49
+ `;
50
+ const result = convertFromCodePen(htmlWithLibs);
51
+ expect(result.externalLibraries).toBeDefined();
52
+ expect(result.externalLibraries?.length).toBe(2);
53
+ expect(result.externalLibraries?.[0]).toContain('jquery');
54
+ expect(result.externalLibraries?.[1]).toContain('bootstrap');
55
+ expect(result.warnings.some(w => w.includes('external libraries'))).toBe(true);
56
+ });
57
+ it('should handle inline styles without style tags', () => {
58
+ const html = `
59
+ <div style="color: red; padding: 10px;">
60
+ <span style="font-weight: bold;">Styled content</span>
61
+ </div>
62
+ `;
63
+ const result = convertFromCodePen(html);
64
+ expect(result.code.html).toContain('Styled content');
65
+ expect(result.code.html).toContain('style=');
66
+ expect(result.code.css).toBe('');
67
+ });
68
+ it('should preserve data attributes', () => {
69
+ const html = `
70
+ <div data-id="123" data-name="test" aria-label="Demo">
71
+ <button data-action="click">Click</button>
72
+ </div>
73
+ `;
74
+ const result = convertFromCodePen(html);
75
+ expect(result.code.html).toContain('data-id');
76
+ expect(result.code.html).toContain('data-name');
77
+ expect(result.code.html).toContain('aria-label');
78
+ expect(result.code.html).toContain('data-action');
79
+ });
80
+ });
81
+ describe('CodePen Embed Detection', () => {
82
+ it('should detect CodePen iframe embed', () => {
83
+ const embed = `
84
+ <iframe height="300" style="width: 100%;" scrolling="no" title="My Pen"
85
+ src="https://codepen.io/username/embed/abc123?default-tab=html,result"
86
+ frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
87
+ </iframe>
88
+ `;
89
+ const result = convertFromCodePen(embed);
90
+ expect(result.warnings.some(w => w.includes('CodePen embed detected'))).toBe(true);
91
+ });
92
+ it('should detect data-slug-hash attribute', () => {
93
+ const embed = `
94
+ <p class="codepen" data-height="300" data-default-tab="html,result"
95
+ data-slug-hash="abc123" data-user="username">
96
+ </p>
97
+ `;
98
+ const result = convertFromCodePen(embed);
99
+ expect(result.warnings.some(w => w.includes('CodePen embed detected'))).toBe(true);
100
+ });
101
+ it('should detect CodePen script embeds', () => {
102
+ const embed = `
103
+ <script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
104
+ <p class="codepen" data-slug-hash="abc123">See the Pen</p>
105
+ `;
106
+ const result = convertFromCodePen(embed);
107
+ expect(result.warnings.some(w => w.includes('CodePen embed detected'))).toBe(true);
108
+ });
109
+ });
110
+ describe('Security & Sanitization', () => {
111
+ it('should sanitize malicious content by default', () => {
112
+ const malicious = `
113
+ <div>Safe content</div>
114
+ <script>alert('XSS')</script>
115
+ <img src=x onerror="alert('XSS')">
116
+ `;
117
+ const result = convertFromCodePen(malicious);
118
+ expect(result.code.html).not.toContain('alert');
119
+ expect(result.code.html).not.toContain('onerror');
120
+ expect(result.sanitized).toBe(true);
121
+ expect(result.warnings.some(w => w.includes('sanitized'))).toBe(true);
122
+ });
123
+ it('should allow disabling sanitization', () => {
124
+ const html = `
125
+ <div>Content</div>
126
+ <script>console.log('test');</script>
127
+ `;
128
+ const result = convertFromCodePen(html, { sanitize: false });
129
+ expect(result.sanitized).toBe(false);
130
+ expect(result.code.js).toContain('console.log');
131
+ });
132
+ it('should enforce size limits', () => {
133
+ const huge = '<div>' + 'x'.repeat(2 * 1024 * 1024) + '</div>';
134
+ expect(() => convertFromCodePen(huge)).toThrow('exceeds maximum size');
135
+ });
136
+ it('should handle custom size limits', () => {
137
+ const small = '<div>' + 'x'.repeat(100) + '</div>';
138
+ expect(() => convertFromCodePen(small, { maxSize: 50 })).toThrow('exceeds maximum size');
139
+ });
140
+ });
141
+ describe('Real-World CodePen Examples', () => {
142
+ it('should handle typical CodePen export structure', () => {
143
+ const codepenExport = `
144
+ <!DOCTYPE html>
145
+ <html lang="en">
146
+ <head>
147
+ <meta charset="UTF-8">
148
+ <title>CodePen - Animated Button</title>
149
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
150
+ <style>
151
+ * {
152
+ box-sizing: border-box;
153
+ }
154
+ body {
155
+ font-family: 'Arial', sans-serif;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ min-height: 100vh;
160
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
161
+ }
162
+ .btn {
163
+ padding: 15px 30px;
164
+ border: none;
165
+ background: white;
166
+ color: #667eea;
167
+ font-size: 18px;
168
+ cursor: pointer;
169
+ transition: all 0.3s ease;
170
+ }
171
+ .btn:hover {
172
+ transform: translateY(-3px);
173
+ box-shadow: 0 10px 20px rgba(0,0,0,0.2);
174
+ }
175
+ </style>
176
+ </head>
177
+ <body>
178
+ <button class="btn">Click Me!</button>
179
+ <script>
180
+ document.querySelector('.btn').addEventListener('click', function() {
181
+ this.textContent = 'Clicked!';
182
+ setTimeout(() => {
183
+ this.textContent = 'Click Me!';
184
+ }, 1000);
185
+ });
186
+ </script>
187
+ </body>
188
+ </html>
189
+ `;
190
+ const result = convertFromCodePen(codepenExport);
191
+ expect(result.code.html).toContain('Click Me!');
192
+ expect(result.code.css).toContain('.btn');
193
+ expect(result.code.css).toContain('box-sizing');
194
+ expect(result.code.js).toContain('addEventListener');
195
+ expect(result.externalLibraries).toBeDefined();
196
+ expect(result.externalLibraries?.[0]).toContain('normalize');
197
+ });
198
+ it('should handle CodePen with multiple scripts', () => {
199
+ const html = `
200
+ <div id="app"></div>
201
+ <script src="https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js"></script>
202
+ <script>
203
+ const { createApp } = Vue;
204
+ createApp({
205
+ data() {
206
+ return { message: 'Hello Vue!' }
207
+ }
208
+ }).mount('#app');
209
+ </script>
210
+ `;
211
+ const result = convertFromCodePen(html);
212
+ expect(result.code.html).toContain('id="app"');
213
+ expect(result.code.js).toContain('createApp');
214
+ expect(result.externalLibraries).toBeDefined();
215
+ expect(result.externalLibraries?.[0]).toContain('vue');
216
+ });
217
+ it('should handle SVG content', () => {
218
+ const html = `
219
+ <div class="icon-container">
220
+ <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
221
+ <circle cx="50" cy="50" r="40" fill="blue" />
222
+ <path d="M 10,30 A 20,20 0,0,1 50,30" stroke="red" fill="none" />
223
+ </svg>
224
+ </div>
225
+ <style>
226
+ .icon-container {
227
+ width: 200px;
228
+ height: 200px;
229
+ }
230
+ </style>
231
+ `;
232
+ const result = convertFromCodePen(html);
233
+ expect(result.code.html).toContain('svg');
234
+ expect(result.code.html).toContain('circle');
235
+ expect(result.code.html).toContain('path');
236
+ expect(result.code.css).toContain('.icon-container');
237
+ });
238
+ it('should handle Canvas API usage', () => {
239
+ const html = `
240
+ <canvas id="myCanvas" width="400" height="400"></canvas>
241
+ <script>
242
+ const canvas = document.getElementById('myCanvas');
243
+ const ctx = canvas.getContext('2d');
244
+ ctx.fillStyle = '#FF0000';
245
+ ctx.fillRect(0, 0, 150, 75);
246
+ </script>
247
+ `;
248
+ const result = convertFromCodePen(html);
249
+ expect(result.code.html).toContain('canvas');
250
+ expect(result.code.js).toContain('getContext');
251
+ expect(result.code.js).toContain('fillRect');
252
+ });
253
+ });
254
+ describe('Edge Cases', () => {
255
+ it('should throw on empty input', () => {
256
+ expect(() => convertFromCodePen('')).toThrow('Empty HTML content');
257
+ });
258
+ it('should throw on whitespace-only input', () => {
259
+ expect(() => convertFromCodePen(' \n\t ')).toThrow('Empty HTML content');
260
+ });
261
+ it('should handle malformed HTML', () => {
262
+ const malformed = '<div><p>Unclosed paragraph<div>Nested wrong</div>';
263
+ const result = convertFromCodePen(malformed);
264
+ expect(result.code.html).toBeTruthy();
265
+ });
266
+ it('should handle no CSS', () => {
267
+ const html = '<div>Just HTML</div><script>console.log("JS");</script>';
268
+ const result = convertFromCodePen(html);
269
+ expect(result.code.html).toContain('Just HTML');
270
+ expect(result.code.css).toBe('');
271
+ expect(result.code.js).toContain('console.log');
272
+ });
273
+ it('should handle no JavaScript', () => {
274
+ const html = '<div>Just HTML</div><style>div { color: red; }</style>';
275
+ const result = convertFromCodePen(html);
276
+ expect(result.code.html).toContain('Just HTML');
277
+ expect(result.code.css).toContain('color: red');
278
+ expect(result.code.js).toBe('');
279
+ });
280
+ it('should handle only HTML', () => {
281
+ const html = '<div>Only HTML, no CSS or JS</div>';
282
+ const result = convertFromCodePen(html);
283
+ expect(result.code.html).toContain('Only HTML');
284
+ expect(result.code.css).toBe('');
285
+ expect(result.code.js).toBe('');
286
+ });
287
+ it('should preserve comments in HTML', () => {
288
+ const html = `
289
+ <!-- Main container -->
290
+ <div class="main">
291
+ <!-- Content goes here -->
292
+ <p>Content</p>
293
+ </div>
294
+ `;
295
+ const result = convertFromCodePen(html, { stripComments: false });
296
+ expect(result.code.html).toContain('Content');
297
+ });
298
+ });
299
+ describe('Warning System', () => {
300
+ it('should warn about external libraries', () => {
301
+ const html = '<script src="https://example.com/lib.js"></script>';
302
+ const result = convertFromCodePen(html);
303
+ expect(result.warnings.length).toBeGreaterThan(0);
304
+ expect(result.warnings.some(w => w.includes('external libraries'))).toBe(true);
305
+ });
306
+ it('should warn about sanitization', () => {
307
+ const html = '<div onclick="alert(1)">Test</div>';
308
+ const result = convertFromCodePen(html);
309
+ expect(result.warnings.some(w => w.includes('sanitized'))).toBe(true);
310
+ });
311
+ it('should warn about removed tags', () => {
312
+ const html = '<div>Safe</div><script>alert(1)</script>';
313
+ const result = convertFromCodePen(html);
314
+ expect(result.sanitized).toBe(true);
315
+ expect(result.code.html).not.toContain('script');
316
+ expect(result.code.html).not.toContain('alert');
317
+ });
318
+ });
319
+ });
320
+ describe('isCodePenEmbed', () => {
321
+ it('should detect codepen.io domain', () => {
322
+ expect(isCodePenEmbed('<iframe src="https://codepen.io/pen/abc123"></iframe>')).toBe(true);
323
+ });
324
+ it('should detect data-slug-hash', () => {
325
+ expect(isCodePenEmbed('<p data-slug-hash="abc123"></p>')).toBe(true);
326
+ });
327
+ it('should detect cpembed script', () => {
328
+ expect(isCodePenEmbed('<script src="https://cpwebassets.codepen.io/ei.js"></script>')).toBe(true);
329
+ });
330
+ it('should return false for regular HTML', () => {
331
+ expect(isCodePenEmbed('<div>Regular content</div>')).toBe(false);
332
+ });
333
+ it('should be case insensitive', () => {
334
+ expect(isCodePenEmbed('<iframe src="https://CodePen.io/pen/abc"></iframe>')).toBe(true);
335
+ });
336
+ });
337
+ describe('validateCodePenFormat', () => {
338
+ it('should validate typical CodePen export', () => {
339
+ const html = `
340
+ <!DOCTYPE html>
341
+ <html>
342
+ <head>
343
+ <style>.demo { color: blue; }</style>
344
+ <script src="https://codepen.io/assets/embed.js"></script>
345
+ </head>
346
+ <body>
347
+ <div class="container">Content</div>
348
+ </body>
349
+ </html>
350
+ `;
351
+ const validation = validateCodePenFormat(html);
352
+ expect(validation.valid).toBe(true);
353
+ expect(validation.confidence).toBeGreaterThan(0.3);
354
+ expect(validation.indicators).toContain('CodePen domain reference');
355
+ expect(validation.indicators).toContain('Inline styles present');
356
+ });
357
+ it('should have low confidence for minimal HTML', () => {
358
+ const html = '<div>Just a div</div>';
359
+ const validation = validateCodePenFormat(html);
360
+ expect(validation.valid).toBe(false);
361
+ expect(validation.confidence).toBeLessThan(0.3);
362
+ });
363
+ it('should detect complete HTML document', () => {
364
+ const html = `
365
+ <!DOCTYPE html>
366
+ <html>
367
+ <head><style>body { margin: 0; }</style></head>
368
+ <body><div>Content</div></body>
369
+ </html>
370
+ `;
371
+ const validation = validateCodePenFormat(html);
372
+ expect(validation.indicators).toContain('Complete HTML document');
373
+ expect(validation.indicators).toContain('Inline styles present');
374
+ });
375
+ it('should detect external libraries', () => {
376
+ const html = `
377
+ <div>Content</div>
378
+ <script src="https://cdn.jsdelivr.net/npm/jquery"></script>
379
+ `;
380
+ const validation = validateCodePenFormat(html);
381
+ expect(validation.indicators).toContain('External libraries detected');
382
+ });
383
+ it('should cap confidence at 1.0', () => {
384
+ const html = `
385
+ <!DOCTYPE html>
386
+ <html>
387
+ <head>
388
+ <script src="https://codepen.io/embed.js"></script>
389
+ <link rel="stylesheet" href="https://cdn.example.com/style.css">
390
+ <style>.demo { color: blue; }</style>
391
+ </head>
392
+ <body>
393
+ <div class="container">
394
+ <script>console.log('test');</script>
395
+ </div>
396
+ </body>
397
+ </html>
398
+ `;
399
+ const validation = validateCodePenFormat(html);
400
+ expect(validation.confidence).toBeLessThanOrEqual(1.0);
401
+ });
402
+ it('should return empty indicators for non-CodePen HTML', () => {
403
+ const validation = validateCodePenFormat('<div>Plain text</div>');
404
+ expect(validation.indicators).toEqual([]);
405
+ expect(validation.confidence).toBe(0);
406
+ });
407
+ });
408
+ //# sourceMappingURL=codepen-converter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codepen-converter.test.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/converters/codepen-converter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gist-converter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gist-converter.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/__tests__/converters/gist-converter.test.ts"],"names":[],"mappings":""}