@pinepaper.studio/mcp-server 1.2.2 → 1.3.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 (73) hide show
  1. package/README.md +109 -2
  2. package/dist/assets/asset-manager.d.ts +75 -0
  3. package/dist/assets/asset-manager.d.ts.map +1 -0
  4. package/dist/assets/asset-manager.js +156 -0
  5. package/dist/assets/asset-manager.js.map +1 -0
  6. package/dist/assets/index.d.ts +12 -0
  7. package/dist/assets/index.d.ts.map +1 -0
  8. package/dist/assets/index.js +12 -0
  9. package/dist/assets/index.js.map +1 -0
  10. package/dist/assets/repositories/fontawesome.d.ts +43 -0
  11. package/dist/assets/repositories/fontawesome.d.ts.map +1 -0
  12. package/dist/assets/repositories/fontawesome.js +163 -0
  13. package/dist/assets/repositories/fontawesome.js.map +1 -0
  14. package/dist/assets/repositories/iconify.d.ts +44 -0
  15. package/dist/assets/repositories/iconify.d.ts.map +1 -0
  16. package/dist/assets/repositories/iconify.js +208 -0
  17. package/dist/assets/repositories/iconify.js.map +1 -0
  18. package/dist/assets/repositories/openclipart.d.ts +41 -0
  19. package/dist/assets/repositories/openclipart.d.ts.map +1 -0
  20. package/dist/assets/repositories/openclipart.js +138 -0
  21. package/dist/assets/repositories/openclipart.js.map +1 -0
  22. package/dist/assets/repositories/svgrepo.d.ts +61 -0
  23. package/dist/assets/repositories/svgrepo.d.ts.map +1 -0
  24. package/dist/assets/repositories/svgrepo.js +276 -0
  25. package/dist/assets/repositories/svgrepo.js.map +1 -0
  26. package/dist/assets/types.d.ts +85 -0
  27. package/dist/assets/types.d.ts.map +1 -0
  28. package/dist/assets/types.js +7 -0
  29. package/dist/assets/types.js.map +1 -0
  30. package/dist/execution/canvas-state.d.ts +65 -0
  31. package/dist/execution/canvas-state.d.ts.map +1 -0
  32. package/dist/execution/canvas-state.js +165 -0
  33. package/dist/execution/canvas-state.js.map +1 -0
  34. package/dist/execution/index.d.ts +8 -0
  35. package/dist/execution/index.d.ts.map +1 -0
  36. package/dist/execution/index.js +8 -0
  37. package/dist/execution/index.js.map +1 -0
  38. package/dist/metrics/index.d.ts +8 -0
  39. package/dist/metrics/index.d.ts.map +1 -0
  40. package/dist/metrics/index.js +8 -0
  41. package/dist/metrics/index.js.map +1 -0
  42. package/dist/metrics/performance-tracker.d.ts +96 -0
  43. package/dist/metrics/performance-tracker.d.ts.map +1 -0
  44. package/dist/metrics/performance-tracker.js +270 -0
  45. package/dist/metrics/performance-tracker.js.map +1 -0
  46. package/dist/metrics/types.d.ts +86 -0
  47. package/dist/metrics/types.d.ts.map +1 -0
  48. package/dist/metrics/types.js +7 -0
  49. package/dist/metrics/types.js.map +1 -0
  50. package/dist/tools/definitions.d.ts.map +1 -1
  51. package/dist/tools/definitions.js +476 -0
  52. package/dist/tools/definitions.js.map +1 -1
  53. package/dist/tools/handlers.d.ts.map +1 -1
  54. package/dist/tools/handlers.js +301 -37
  55. package/dist/tools/handlers.js.map +1 -1
  56. package/dist/tools/p5-compat/index.d.ts +8 -0
  57. package/dist/tools/p5-compat/index.d.ts.map +1 -0
  58. package/dist/tools/p5-compat/index.js +8 -0
  59. package/dist/tools/p5-compat/index.js.map +1 -0
  60. package/dist/tools/p5-compat/p5-helpers.d.ts +25 -0
  61. package/dist/tools/p5-compat/p5-helpers.d.ts.map +1 -0
  62. package/dist/tools/p5-compat/p5-helpers.js +399 -0
  63. package/dist/tools/p5-compat/p5-helpers.js.map +1 -0
  64. package/dist/types/code-generator.d.ts +4 -0
  65. package/dist/types/code-generator.d.ts.map +1 -1
  66. package/dist/types/code-generator.js +8 -0
  67. package/dist/types/code-generator.js.map +1 -1
  68. package/dist/types/schemas.d.ts +77 -0
  69. package/dist/types/schemas.d.ts.map +1 -1
  70. package/dist/types/schemas.js +34 -0
  71. package/dist/types/schemas.js.map +1 -1
  72. package/manifest.json +18 -2
  73. package/package.json +1 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Iconify Asset Repository Adapter
3
+ *
4
+ * Fetches SVG icons from iconify.design
5
+ * Repository info: 200,000+ icons from various icon sets with different licenses
6
+ */
7
+ import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
8
+ /**
9
+ * Iconify adapter
10
+ *
11
+ * Uses the Iconify API to search and download icons from multiple icon sets
12
+ */
13
+ export declare class IconifyAdapter implements AssetRepository {
14
+ name: string;
15
+ private apiUrl;
16
+ /**
17
+ * Search for icons on Iconify
18
+ *
19
+ * @param query Search term
20
+ * @param limit Maximum results to return
21
+ */
22
+ search(query: string, limit: number): Promise<AssetResult[]>;
23
+ /**
24
+ * Download SVG content
25
+ *
26
+ * @param assetId Asset ID from search results (format: iconify_collection_icon-name)
27
+ */
28
+ download(assetId: string): Promise<string>;
29
+ /**
30
+ * Get asset metadata
31
+ *
32
+ * @param assetId Asset ID
33
+ */
34
+ getMetadata(assetId: string): Promise<AssetMetadata>;
35
+ /**
36
+ * Parse license from collection info
37
+ */
38
+ private parseLicense;
39
+ }
40
+ /**
41
+ * Create Iconify adapter instance
42
+ */
43
+ export declare function createIconifyAdapter(): AssetRepository;
44
+ //# sourceMappingURL=iconify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAsBxF;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmDlE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C1D;;OAEG;IACH,OAAO,CAAC,YAAY;CA+DrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Iconify Asset Repository Adapter
3
+ *
4
+ * Fetches SVG icons from iconify.design
5
+ * Repository info: 200,000+ icons from various icon sets with different licenses
6
+ */
7
+ /**
8
+ * Iconify adapter
9
+ *
10
+ * Uses the Iconify API to search and download icons from multiple icon sets
11
+ */
12
+ export class IconifyAdapter {
13
+ name = 'iconify';
14
+ apiUrl = 'https://api.iconify.design';
15
+ /**
16
+ * Search for icons on Iconify
17
+ *
18
+ * @param query Search term
19
+ * @param limit Maximum results to return
20
+ */
21
+ async search(query, limit) {
22
+ try {
23
+ // Iconify search endpoint
24
+ const searchUrl = `${this.apiUrl}/search?query=${encodeURIComponent(query)}&limit=${limit}`;
25
+ const response = await fetch(searchUrl, {
26
+ headers: {
27
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
28
+ },
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Iconify search failed: ${response.status} ${response.statusText}`);
32
+ }
33
+ const data = (await response.json());
34
+ if (!data.icons || !Array.isArray(data.icons)) {
35
+ return [];
36
+ }
37
+ // Convert to AssetResult format
38
+ const results = [];
39
+ for (const iconName of data.icons.slice(0, limit)) {
40
+ // Icon name format: "collection:icon-name"
41
+ const [collection, name] = iconName.split(':');
42
+ // Get collection info for license
43
+ const collectionInfo = data.collections?.[collection];
44
+ const license = this.parseLicense(collectionInfo);
45
+ results.push({
46
+ id: `iconify_${iconName.replace(':', '_')}`,
47
+ repository: 'iconify',
48
+ title: name?.replace(/-/g, ' ') || iconName,
49
+ description: `${name} icon from ${collectionInfo?.name || collection}`,
50
+ previewUrl: `https://api.iconify.design/${iconName}.svg`,
51
+ downloadUrl: `https://api.iconify.design/${iconName}.svg`,
52
+ license,
53
+ tags: [query, collection],
54
+ });
55
+ }
56
+ return results;
57
+ }
58
+ catch (error) {
59
+ console.error('[IconifyAdapter] Search error:', error);
60
+ return [];
61
+ }
62
+ }
63
+ /**
64
+ * Download SVG content
65
+ *
66
+ * @param assetId Asset ID from search results (format: iconify_collection_icon-name)
67
+ */
68
+ async download(assetId) {
69
+ try {
70
+ // Convert asset ID back to icon name
71
+ const iconName = assetId
72
+ .replace('iconify_', '')
73
+ .replace('_', ':'); // Replace first underscore with colon
74
+ // Download SVG from Iconify API
75
+ const svgUrl = `${this.apiUrl}/${iconName}.svg`;
76
+ const response = await fetch(svgUrl, {
77
+ headers: {
78
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
79
+ },
80
+ });
81
+ if (!response.ok) {
82
+ throw new Error(`Failed to download icon: ${response.status}`);
83
+ }
84
+ const svg = await response.text();
85
+ // Validate SVG
86
+ if (!svg.trim().startsWith('<svg') && !svg.includes('<svg')) {
87
+ throw new Error('Downloaded content is not valid SVG');
88
+ }
89
+ return svg;
90
+ }
91
+ catch (error) {
92
+ console.error('[IconifyAdapter] Download error:', error);
93
+ throw error;
94
+ }
95
+ }
96
+ /**
97
+ * Get asset metadata
98
+ *
99
+ * @param assetId Asset ID
100
+ */
101
+ async getMetadata(assetId) {
102
+ try {
103
+ const iconName = assetId.replace('iconify_', '').replace('_', ':');
104
+ const [collection] = iconName.split(':');
105
+ // Fetch collection info
106
+ const collectionUrl = `${this.apiUrl}/collection?prefix=${collection}`;
107
+ const response = await fetch(collectionUrl, {
108
+ headers: {
109
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
110
+ },
111
+ });
112
+ if (response.ok) {
113
+ const data = await response.json();
114
+ const license = this.parseLicense(data);
115
+ return {
116
+ id: assetId,
117
+ repository: this.name,
118
+ title: iconName,
119
+ license,
120
+ downloadedAt: Date.now(),
121
+ };
122
+ }
123
+ }
124
+ catch (error) {
125
+ console.error('[IconifyAdapter] Metadata error:', error);
126
+ }
127
+ // Fallback metadata
128
+ return {
129
+ id: assetId,
130
+ repository: this.name,
131
+ title: assetId.replace('iconify_', ''),
132
+ license: {
133
+ type: 'Mixed',
134
+ name: 'Various Licenses (check collection)',
135
+ requiresAttribution: true,
136
+ allowsCommercial: false,
137
+ },
138
+ downloadedAt: Date.now(),
139
+ };
140
+ }
141
+ /**
142
+ * Parse license from collection info
143
+ */
144
+ parseLicense(collectionInfo) {
145
+ if (!collectionInfo?.license) {
146
+ return {
147
+ type: 'Mixed',
148
+ name: 'Various Licenses',
149
+ requiresAttribution: true,
150
+ allowsCommercial: false,
151
+ };
152
+ }
153
+ const license = collectionInfo.license;
154
+ const spdx = license.spdx || license.title || '';
155
+ // Map common licenses
156
+ if (spdx.includes('MIT')) {
157
+ return {
158
+ type: 'MIT',
159
+ name: 'MIT License',
160
+ requiresAttribution: true,
161
+ allowsCommercial: true,
162
+ url: license.url || 'https://opensource.org/licenses/MIT',
163
+ };
164
+ }
165
+ if (spdx.includes('Apache')) {
166
+ return {
167
+ type: 'Apache-2.0',
168
+ name: 'Apache License 2.0',
169
+ requiresAttribution: true,
170
+ allowsCommercial: true,
171
+ url: license.url || 'https://www.apache.org/licenses/LICENSE-2.0',
172
+ };
173
+ }
174
+ if (spdx.includes('CC0')) {
175
+ return {
176
+ type: 'CC0',
177
+ name: 'Public Domain (CC0)',
178
+ requiresAttribution: false,
179
+ allowsCommercial: true,
180
+ url: license.url || 'https://creativecommons.org/publicdomain/zero/1.0/',
181
+ };
182
+ }
183
+ if (spdx.includes('CC-BY')) {
184
+ return {
185
+ type: 'CC-BY-4.0',
186
+ name: 'Creative Commons Attribution',
187
+ requiresAttribution: true,
188
+ allowsCommercial: true,
189
+ url: license.url || 'https://creativecommons.org/licenses/by/4.0/',
190
+ };
191
+ }
192
+ // Generic license
193
+ return {
194
+ type: spdx || 'Unknown',
195
+ name: license.title || 'Check Collection License',
196
+ requiresAttribution: true,
197
+ allowsCommercial: false,
198
+ url: license.url,
199
+ };
200
+ }
201
+ }
202
+ /**
203
+ * Create Iconify adapter instance
204
+ */
205
+ export function createIconifyAdapter() {
206
+ return new IconifyAdapter();
207
+ }
208
+ //# sourceMappingURL=iconify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * OpenClipart Asset Repository Adapter
3
+ *
4
+ * Fetches SVG assets from openclipart.org
5
+ * Repository info: 150,000+ public domain clipart (CC0 license)
6
+ */
7
+ import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
8
+ /**
9
+ * OpenClipart adapter
10
+ *
11
+ * Uses the OpenClipart API to search and download public domain SVG clipart
12
+ */
13
+ export declare class OpenClipartAdapter implements AssetRepository {
14
+ name: string;
15
+ private baseUrl;
16
+ private apiUrl;
17
+ /**
18
+ * Search for assets on OpenClipart
19
+ *
20
+ * @param query Search term
21
+ * @param limit Maximum results to return
22
+ */
23
+ search(query: string, limit: number): Promise<AssetResult[]>;
24
+ /**
25
+ * Download SVG content
26
+ *
27
+ * @param assetId Asset ID from search results
28
+ */
29
+ download(assetId: string): Promise<string>;
30
+ /**
31
+ * Get asset metadata
32
+ *
33
+ * @param assetId Asset ID
34
+ */
35
+ getMetadata(assetId: string): Promise<AssetMetadata>;
36
+ }
37
+ /**
38
+ * Create OpenClipart adapter instance
39
+ */
40
+ export declare function createOpenClipartAdapter(): AssetRepository;
41
+ //# sourceMappingURL=openclipart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclipart.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/openclipart.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAwBxF;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAiB;IAErB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAyC;IAEvD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4ClE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwDhD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAe3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * OpenClipart Asset Repository Adapter
3
+ *
4
+ * Fetches SVG assets from openclipart.org
5
+ * Repository info: 150,000+ public domain clipart (CC0 license)
6
+ */
7
+ /**
8
+ * OpenClipart adapter
9
+ *
10
+ * Uses the OpenClipart API to search and download public domain SVG clipart
11
+ */
12
+ export class OpenClipartAdapter {
13
+ name = 'openclipart';
14
+ baseUrl = 'https://openclipart.org';
15
+ apiUrl = 'https://openclipart.org/search/json';
16
+ /**
17
+ * Search for assets on OpenClipart
18
+ *
19
+ * @param query Search term
20
+ * @param limit Maximum results to return
21
+ */
22
+ async search(query, limit) {
23
+ try {
24
+ // OpenClipart API endpoint
25
+ const searchUrl = `${this.apiUrl}?query=${encodeURIComponent(query)}&amount=${limit}`;
26
+ const response = await fetch(searchUrl, {
27
+ headers: {
28
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
29
+ },
30
+ });
31
+ if (!response.ok) {
32
+ throw new Error(`OpenClipart search failed: ${response.status} ${response.statusText}`);
33
+ }
34
+ const data = (await response.json());
35
+ if (!data.payload || !Array.isArray(data.payload)) {
36
+ return [];
37
+ }
38
+ // Convert to AssetResult format
39
+ return data.payload.slice(0, limit).map((item) => ({
40
+ id: `openclipart_${item.id}`,
41
+ repository: 'openclipart',
42
+ title: item.title || 'Untitled',
43
+ description: item.description || `${item.title} from OpenClipart`,
44
+ previewUrl: item.png_thumb?.url || item.svg?.url || '',
45
+ downloadUrl: item.svg?.url || '',
46
+ license: {
47
+ type: 'CC0',
48
+ name: 'Public Domain (CC0)',
49
+ requiresAttribution: false,
50
+ allowsCommercial: true,
51
+ url: 'https://creativecommons.org/publicdomain/zero/1.0/',
52
+ },
53
+ tags: item.tags || [query],
54
+ }));
55
+ }
56
+ catch (error) {
57
+ console.error('[OpenClipartAdapter] Search error:', error);
58
+ return [];
59
+ }
60
+ }
61
+ /**
62
+ * Download SVG content
63
+ *
64
+ * @param assetId Asset ID from search results
65
+ */
66
+ async download(assetId) {
67
+ try {
68
+ // For OpenClipart, the download URL should be stored with the asset
69
+ // If we need to fetch it, we'd query the API again
70
+ const clipartId = assetId.replace('openclipart_', '');
71
+ // Fetch the detail page to get download URL
72
+ const detailUrl = `${this.baseUrl}/detail/${clipartId}`;
73
+ const response = await fetch(detailUrl, {
74
+ headers: {
75
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
76
+ },
77
+ });
78
+ if (!response.ok) {
79
+ throw new Error(`Failed to fetch detail page: ${response.status}`);
80
+ }
81
+ const html = await response.text();
82
+ // Extract SVG download URL from page
83
+ const svgUrlMatch = html.match(/href="([^"]*\.svg)"/i);
84
+ if (!svgUrlMatch) {
85
+ throw new Error('Could not find SVG download URL');
86
+ }
87
+ const svgUrl = svgUrlMatch[1].startsWith('http')
88
+ ? svgUrlMatch[1]
89
+ : `${this.baseUrl}${svgUrlMatch[1]}`;
90
+ // Download the SVG
91
+ const svgResponse = await fetch(svgUrl, {
92
+ headers: {
93
+ 'User-Agent': 'PinePaper-MCP-Server/1.2.2',
94
+ },
95
+ });
96
+ if (!svgResponse.ok) {
97
+ throw new Error(`Failed to download SVG: ${svgResponse.status}`);
98
+ }
99
+ const svg = await svgResponse.text();
100
+ // Validate SVG
101
+ if (!svg.trim().startsWith('<svg') && !svg.includes('<svg')) {
102
+ throw new Error('Downloaded content is not valid SVG');
103
+ }
104
+ return svg;
105
+ }
106
+ catch (error) {
107
+ console.error('[OpenClipartAdapter] Download error:', error);
108
+ throw error;
109
+ }
110
+ }
111
+ /**
112
+ * Get asset metadata
113
+ *
114
+ * @param assetId Asset ID
115
+ */
116
+ async getMetadata(assetId) {
117
+ return {
118
+ id: assetId,
119
+ repository: this.name,
120
+ title: assetId.replace('openclipart_', ''),
121
+ license: {
122
+ type: 'CC0',
123
+ name: 'Public Domain (CC0)',
124
+ requiresAttribution: false,
125
+ allowsCommercial: true,
126
+ url: 'https://creativecommons.org/publicdomain/zero/1.0/',
127
+ },
128
+ downloadedAt: Date.now(),
129
+ };
130
+ }
131
+ }
132
+ /**
133
+ * Create OpenClipart adapter instance
134
+ */
135
+ export function createOpenClipartAdapter() {
136
+ return new OpenClipartAdapter();
137
+ }
138
+ //# sourceMappingURL=openclipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclipart.js","sourceRoot":"","sources":["../../../src/assets/repositories/openclipart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * SVGRepo Asset Repository Adapter
3
+ *
4
+ * Fetches SVG assets from svgrepo.com
5
+ * Repository info: 500,000+ free SVG icons with various licenses
6
+ */
7
+ import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
8
+ /**
9
+ * SVGRepo adapter - Real implementation
10
+ *
11
+ * Searches and downloads SVG assets from svgrepo.com
12
+ */
13
+ export declare class SVGRepoAdapter implements AssetRepository {
14
+ name: string;
15
+ private baseUrl;
16
+ private searchUrl;
17
+ /**
18
+ * Search for assets on SVGRepo
19
+ *
20
+ * @param query Search term (e.g., "rocket", "heart")
21
+ * @param limit Maximum results to return
22
+ */
23
+ search(query: string, limit: number): Promise<AssetResult[]>;
24
+ /**
25
+ * Download SVG content
26
+ *
27
+ * @param assetId Asset ID from search results (format: svgrepo_12345_slug)
28
+ */
29
+ download(assetId: string): Promise<string>;
30
+ /**
31
+ * Get asset metadata
32
+ *
33
+ * @param assetId Asset ID
34
+ */
35
+ getMetadata(assetId: string): Promise<AssetMetadata>;
36
+ /**
37
+ * Parse search results from HTML
38
+ */
39
+ private parseSearchResults;
40
+ /**
41
+ * Parse license information from page HTML
42
+ */
43
+ private parseLicenseFromPage;
44
+ /**
45
+ * Extract download URL from asset page
46
+ */
47
+ private extractDownloadUrl;
48
+ /**
49
+ * Convert asset URL to asset ID
50
+ */
51
+ private urlToAssetId;
52
+ /**
53
+ * Convert asset ID back to URL
54
+ */
55
+ private assetIdToUrl;
56
+ }
57
+ /**
58
+ * Create SVGRepo adapter instance
59
+ */
60
+ export declare function createSVGRepoAdapter(): AssetRepository;
61
+ //# sourceMappingURL=svgrepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svgrepo.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/svgrepo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAWxF;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAqC;IAEtD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwClE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkDhD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA+C1D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}