@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,458 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { convertFromGist, parseGistInput, fetchGist, extractGistCode, isGistURL, } from '../../../converters/gist/gist-converter';
3
+ const mockFetch = vi.fn();
4
+ global.fetch = mockFetch;
5
+ describe('parseGistInput', () => {
6
+ it('should parse full Gist URL with username', () => {
7
+ const url = 'https://gist.github.com/username/abc123def456';
8
+ expect(parseGistInput(url)).toBe('abc123def456');
9
+ });
10
+ it('should parse Gist URL without username', () => {
11
+ const url = 'https://gist.github.com/abc123def456';
12
+ expect(parseGistInput(url)).toBe('abc123def456');
13
+ });
14
+ it('should parse Gist URL without https', () => {
15
+ const url = 'gist.github.com/username/abc123def456';
16
+ expect(parseGistInput(url)).toBe('abc123def456');
17
+ });
18
+ it('should accept raw Gist ID', () => {
19
+ const id = 'abc123def456789012345678';
20
+ expect(parseGistInput(id)).toBe(id);
21
+ });
22
+ it('should return null for invalid input', () => {
23
+ expect(parseGistInput('')).toBe(null);
24
+ expect(parseGistInput(' ')).toBe(null);
25
+ expect(parseGistInput('not-a-gist')).toBe(null);
26
+ expect(parseGistInput('https://github.com/repo')).toBe(null);
27
+ });
28
+ it('should handle case insensitivity', () => {
29
+ const url = 'https://GIST.GITHUB.COM/user/ABC123DEF456';
30
+ expect(parseGistInput(url)).toBe('ABC123DEF456');
31
+ });
32
+ it('should reject too short IDs', () => {
33
+ expect(parseGistInput('abc123')).toBe(null);
34
+ });
35
+ });
36
+ describe('isGistURL', () => {
37
+ it('should detect valid Gist URLs', () => {
38
+ expect(isGistURL('https://gist.github.com/user/abc123')).toBe(true);
39
+ expect(isGistURL('gist.github.com/abc123')).toBe(true);
40
+ expect(isGistURL('http://gist.github.com/user/abc')).toBe(true);
41
+ });
42
+ it('should reject non-Gist URLs', () => {
43
+ expect(isGistURL('https://github.com/user/repo')).toBe(false);
44
+ expect(isGistURL('abc123def456')).toBe(false);
45
+ expect(isGistURL('')).toBe(false);
46
+ });
47
+ it('should be case insensitive', () => {
48
+ expect(isGistURL('https://GIST.GITHUB.COM/user/abc')).toBe(true);
49
+ });
50
+ });
51
+ describe('fetchGist', () => {
52
+ beforeEach(() => {
53
+ mockFetch.mockClear();
54
+ });
55
+ it('should fetch Gist successfully', async () => {
56
+ const mockGistData = {
57
+ id: 'abc123',
58
+ description: 'Test Gist',
59
+ public: true,
60
+ files: {
61
+ 'index.html': {
62
+ filename: 'index.html',
63
+ type: 'text/html',
64
+ raw_url: 'https://gist.githubusercontent.com/...',
65
+ size: 100,
66
+ content: '<div>Hello</div>',
67
+ },
68
+ },
69
+ };
70
+ mockFetch.mockResolvedValueOnce({
71
+ ok: true,
72
+ status: 200,
73
+ json: async () => mockGistData,
74
+ });
75
+ const result = await fetchGist('abc123');
76
+ expect(result).toEqual(mockGistData);
77
+ expect(mockFetch).toHaveBeenCalledWith('https://api.github.com/gists/abc123', expect.objectContaining({
78
+ headers: expect.objectContaining({
79
+ Accept: 'application/vnd.github.v3+json',
80
+ }),
81
+ }));
82
+ });
83
+ it('should throw error on 404', async () => {
84
+ mockFetch.mockResolvedValueOnce({
85
+ ok: false,
86
+ status: 404,
87
+ statusText: 'Not Found',
88
+ });
89
+ await expect(fetchGist('nonexistent')).rejects.toThrow('Gist not found (404)');
90
+ });
91
+ it('should throw error on rate limit (403)', async () => {
92
+ mockFetch.mockResolvedValueOnce({
93
+ ok: false,
94
+ status: 403,
95
+ statusText: 'Forbidden',
96
+ });
97
+ await expect(fetchGist('abc123')).rejects.toThrow('GitHub API rate limit exceeded (403)');
98
+ });
99
+ it('should throw error on other HTTP errors', async () => {
100
+ mockFetch.mockResolvedValueOnce({
101
+ ok: false,
102
+ status: 500,
103
+ statusText: 'Internal Server Error',
104
+ });
105
+ await expect(fetchGist('abc123')).rejects.toThrow('GitHub API error: 500');
106
+ });
107
+ it('should throw error on network failure', async () => {
108
+ mockFetch.mockRejectedValueOnce(new Error('Network error'));
109
+ await expect(fetchGist('abc123')).rejects.toThrow('Network error');
110
+ });
111
+ });
112
+ describe('extractGistCode', () => {
113
+ it('should extract single HTML file', () => {
114
+ const gistData = {
115
+ id: 'abc',
116
+ description: '',
117
+ public: true,
118
+ files: {
119
+ 'index.html': {
120
+ filename: 'index.html',
121
+ type: 'text/html',
122
+ raw_url: '',
123
+ size: 100,
124
+ content: '<div>Hello World</div>',
125
+ },
126
+ },
127
+ };
128
+ const result = extractGistCode(gistData);
129
+ expect(result.html).toBe('<div>Hello World</div>');
130
+ expect(result.css).toBe('');
131
+ expect(result.js).toBe('');
132
+ expect(result.fileWarnings).toEqual([]);
133
+ });
134
+ it('should extract HTML, CSS, and JS files', () => {
135
+ const gistData = {
136
+ id: 'abc',
137
+ description: '',
138
+ public: true,
139
+ files: {
140
+ 'index.html': {
141
+ filename: 'index.html',
142
+ type: 'text/html',
143
+ raw_url: '',
144
+ size: 100,
145
+ content: '<div id="app"></div>',
146
+ },
147
+ 'style.css': {
148
+ filename: 'style.css',
149
+ type: 'text/css',
150
+ raw_url: '',
151
+ size: 50,
152
+ content: '#app { color: red; }',
153
+ },
154
+ 'script.js': {
155
+ filename: 'script.js',
156
+ type: 'application/javascript',
157
+ raw_url: '',
158
+ size: 75,
159
+ content: 'console.log("Hello");',
160
+ },
161
+ },
162
+ };
163
+ const result = extractGistCode(gistData);
164
+ expect(result.html).toBe('<div id="app"></div>');
165
+ expect(result.css).toBe('#app { color: red; }');
166
+ expect(result.js).toBe('console.log("Hello");');
167
+ expect(result.fileWarnings).toEqual([]);
168
+ });
169
+ it('should handle multiple files of same type', () => {
170
+ const gistData = {
171
+ id: 'abc',
172
+ description: '',
173
+ public: true,
174
+ files: {
175
+ 'page1.html': {
176
+ filename: 'page1.html',
177
+ type: 'text/html',
178
+ raw_url: '',
179
+ size: 100,
180
+ content: '<h1>Page 1</h1>',
181
+ },
182
+ 'page2.html': {
183
+ filename: 'page2.html',
184
+ type: 'text/html',
185
+ raw_url: '',
186
+ size: 100,
187
+ content: '<h1>Page 2</h1>',
188
+ },
189
+ },
190
+ };
191
+ const result = extractGistCode(gistData);
192
+ expect(result.html).toContain('Page 1');
193
+ expect(result.html).toContain('Page 2');
194
+ expect(result.fileWarnings.some(w => w.includes('Multiple HTML files'))).toBe(true);
195
+ });
196
+ it('should handle TypeScript and JSX files', () => {
197
+ const gistData = {
198
+ id: 'abc',
199
+ description: '',
200
+ public: true,
201
+ files: {
202
+ 'app.tsx': {
203
+ filename: 'app.tsx',
204
+ type: 'text/tsx',
205
+ raw_url: '',
206
+ size: 100,
207
+ content: 'const App = () => <div>Hello</div>;',
208
+ },
209
+ 'utils.ts': {
210
+ filename: 'utils.ts',
211
+ type: 'text/typescript',
212
+ raw_url: '',
213
+ size: 50,
214
+ content: 'export const add = (a, b) => a + b;',
215
+ },
216
+ },
217
+ };
218
+ const result = extractGistCode(gistData);
219
+ expect(result.js).toContain('const App');
220
+ expect(result.js).toContain('export const add');
221
+ });
222
+ it('should skip unsupported file types', () => {
223
+ const gistData = {
224
+ id: 'abc',
225
+ description: '',
226
+ public: true,
227
+ files: {
228
+ 'README.md': {
229
+ filename: 'README.md',
230
+ type: 'text/markdown',
231
+ raw_url: '',
232
+ size: 100,
233
+ content: '# Readme',
234
+ },
235
+ 'data.json': {
236
+ filename: 'data.json',
237
+ type: 'application/json',
238
+ raw_url: '',
239
+ size: 50,
240
+ content: '{"key": "value"}',
241
+ },
242
+ },
243
+ };
244
+ const result = extractGistCode(gistData);
245
+ expect(result.html).toBe('');
246
+ expect(result.css).toBe('');
247
+ expect(result.js).toBe('');
248
+ expect(result.fileWarnings.some(w => w.includes('Skipped file'))).toBe(true);
249
+ });
250
+ it('should warn about files without content', () => {
251
+ const gistData = {
252
+ id: 'abc',
253
+ description: '',
254
+ public: true,
255
+ files: {
256
+ 'empty.html': {
257
+ filename: 'empty.html',
258
+ type: 'text/html',
259
+ raw_url: '',
260
+ size: 0,
261
+ },
262
+ },
263
+ };
264
+ const result = extractGistCode(gistData);
265
+ expect(result.fileWarnings.some(w => w.includes('no content'))).toBe(true);
266
+ });
267
+ it('should handle empty Gist', () => {
268
+ const gistData = {
269
+ id: 'abc',
270
+ description: '',
271
+ public: true,
272
+ files: {},
273
+ };
274
+ const result = extractGistCode(gistData);
275
+ expect(result.html).toBe('');
276
+ expect(result.css).toBe('');
277
+ expect(result.js).toBe('');
278
+ expect(result.fileWarnings.some(w => w.includes('no files'))).toBe(true);
279
+ });
280
+ it('should use language field as fallback', () => {
281
+ const gistData = {
282
+ id: 'abc',
283
+ description: '',
284
+ public: true,
285
+ files: {
286
+ 'custom-name': {
287
+ filename: 'custom-name',
288
+ type: 'text/plain',
289
+ language: 'JavaScript',
290
+ raw_url: '',
291
+ size: 50,
292
+ content: 'console.log("test");',
293
+ },
294
+ },
295
+ };
296
+ const result = extractGistCode(gistData);
297
+ expect(result.js).toBe('console.log("test");');
298
+ });
299
+ });
300
+ describe('convertFromGist', () => {
301
+ beforeEach(() => {
302
+ mockFetch.mockClear();
303
+ });
304
+ afterEach(() => {
305
+ vi.clearAllMocks();
306
+ });
307
+ it('should convert Gist from URL', async () => {
308
+ const mockGistData = {
309
+ id: 'abc123',
310
+ description: 'Test',
311
+ public: true,
312
+ files: {
313
+ 'index.html': {
314
+ filename: 'index.html',
315
+ type: 'text/html',
316
+ raw_url: '',
317
+ size: 100,
318
+ content: '<div>Hello</div>',
319
+ },
320
+ 'style.css': {
321
+ filename: 'style.css',
322
+ type: 'text/css',
323
+ raw_url: '',
324
+ size: 50,
325
+ content: '.demo { color: blue; }',
326
+ },
327
+ },
328
+ };
329
+ mockFetch.mockResolvedValueOnce({
330
+ ok: true,
331
+ status: 200,
332
+ json: async () => mockGistData,
333
+ });
334
+ const result = await convertFromGist('https://gist.github.com/user/abc123');
335
+ expect(result.code.html).toContain('Hello');
336
+ expect(result.code.css).toContain('demo');
337
+ expect(result.format).toBe('gist');
338
+ expect(result.converter).toBe('gist-converter@0.1.0');
339
+ expect(result.sanitized).toBe(true);
340
+ });
341
+ it('should convert Gist from ID', async () => {
342
+ const mockGistData = {
343
+ id: 'abc123def456789012345678',
344
+ description: 'Test',
345
+ public: true,
346
+ files: {
347
+ 'script.js': {
348
+ filename: 'script.js',
349
+ type: 'application/javascript',
350
+ raw_url: '',
351
+ size: 100,
352
+ content: 'console.log("test");',
353
+ },
354
+ },
355
+ };
356
+ mockFetch.mockResolvedValueOnce({
357
+ ok: true,
358
+ status: 200,
359
+ json: async () => mockGistData,
360
+ });
361
+ const result = await convertFromGist('abc123def456789012345678');
362
+ expect(result.code.js).toContain('console.log');
363
+ expect(result.sanitized).toBe(true);
364
+ });
365
+ it('should throw on invalid input', async () => {
366
+ await expect(convertFromGist('')).rejects.toThrow('Invalid Gist input');
367
+ await expect(convertFromGist('not-a-gist')).rejects.toThrow('Invalid Gist input');
368
+ });
369
+ it('should throw on fetch failure', async () => {
370
+ mockFetch.mockResolvedValueOnce({
371
+ ok: false,
372
+ status: 404,
373
+ statusText: 'Not Found',
374
+ });
375
+ await expect(convertFromGist('abc123def456789012345678')).rejects.toThrow('Failed to fetch Gist');
376
+ });
377
+ it('should sanitize malicious content', async () => {
378
+ const mockGistData = {
379
+ id: 'abc',
380
+ description: '',
381
+ public: true,
382
+ files: {
383
+ 'index.html': {
384
+ filename: 'index.html',
385
+ type: 'text/html',
386
+ raw_url: '',
387
+ size: 100,
388
+ content: '<div>Safe</div><script>alert("xss")</script>',
389
+ },
390
+ },
391
+ };
392
+ mockFetch.mockResolvedValueOnce({
393
+ ok: true,
394
+ status: 200,
395
+ json: async () => mockGistData,
396
+ });
397
+ const result = await convertFromGist('abc123def456789012345678');
398
+ expect(result.code.html).not.toContain('script');
399
+ expect(result.code.html).not.toContain('alert');
400
+ expect(result.sanitized).toBe(true);
401
+ });
402
+ it('should allow disabling sanitization', async () => {
403
+ const mockGistData = {
404
+ id: 'abc',
405
+ description: '',
406
+ public: true,
407
+ files: {
408
+ 'index.html': {
409
+ filename: 'index.html',
410
+ type: 'text/html',
411
+ raw_url: '',
412
+ size: 100,
413
+ content: '<div>Content</div>',
414
+ },
415
+ },
416
+ };
417
+ mockFetch.mockResolvedValueOnce({
418
+ ok: true,
419
+ status: 200,
420
+ json: async () => mockGistData,
421
+ });
422
+ const result = await convertFromGist('abc123def456789012345678', {
423
+ sanitize: false,
424
+ });
425
+ expect(result.sanitized).toBe(false);
426
+ });
427
+ it('should propagate warnings from file extraction', async () => {
428
+ const mockGistData = {
429
+ id: 'abc',
430
+ description: '',
431
+ public: true,
432
+ files: {
433
+ 'page1.html': {
434
+ filename: 'page1.html',
435
+ type: 'text/html',
436
+ raw_url: '',
437
+ size: 100,
438
+ content: '<h1>Page 1</h1>',
439
+ },
440
+ 'page2.html': {
441
+ filename: 'page2.html',
442
+ type: 'text/html',
443
+ raw_url: '',
444
+ size: 100,
445
+ content: '<h1>Page 2</h1>',
446
+ },
447
+ },
448
+ };
449
+ mockFetch.mockResolvedValueOnce({
450
+ ok: true,
451
+ status: 200,
452
+ json: async () => mockGistData,
453
+ });
454
+ const result = await convertFromGist('abc123def456789012345678');
455
+ expect(result.warnings.some(w => w.includes('Multiple HTML files'))).toBe(true);
456
+ });
457
+ });
458
+ //# sourceMappingURL=gist-converter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gist-converter.test.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/converters/gist-converter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=html-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-parser.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/__tests__/converters/html-parser.test.ts"],"names":[],"mappings":""}