@jpmorganchase/mosaic-source-figma 0.1.0-beta.94 → 0.1.0-beta.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +18 -0
- package/dist/index.js +93 -24
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/utils/thumbnailCache.d.ts +15 -0
- package/dist/utils/thumbnailCache.js +86 -0
- package/dist/utils/thumbnailCache.js.map +1 -0
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -60,6 +60,16 @@ export declare const schema: z.ZodObject<{
|
|
|
60
60
|
generateThumbnail: string;
|
|
61
61
|
}>;
|
|
62
62
|
requestTimeout: z.ZodDefault<z.ZodNumber>;
|
|
63
|
+
cache: z.ZodOptional<z.ZodObject<{
|
|
64
|
+
ttl: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
dir: z.ZodOptional<z.ZodString>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
ttl: number;
|
|
68
|
+
dir?: string | undefined;
|
|
69
|
+
}, {
|
|
70
|
+
ttl?: number | undefined;
|
|
71
|
+
dir?: string | undefined;
|
|
72
|
+
}>>;
|
|
63
73
|
}, "strip", z.ZodTypeAny, {
|
|
64
74
|
endpoints: {
|
|
65
75
|
getFile: string;
|
|
@@ -87,6 +97,10 @@ export declare const schema: z.ZodObject<{
|
|
|
87
97
|
proxyEndpoint?: string | undefined;
|
|
88
98
|
noProxy?: RegExp | undefined;
|
|
89
99
|
requestHeaders?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
100
|
+
cache?: {
|
|
101
|
+
ttl: number;
|
|
102
|
+
dir?: string | undefined;
|
|
103
|
+
} | undefined;
|
|
90
104
|
}, {
|
|
91
105
|
endpoints: {
|
|
92
106
|
getFile: string;
|
|
@@ -114,6 +128,10 @@ export declare const schema: z.ZodObject<{
|
|
|
114
128
|
noProxy?: any;
|
|
115
129
|
requestHeaders?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
116
130
|
requestTimeout?: number | undefined;
|
|
131
|
+
cache?: {
|
|
132
|
+
ttl?: number | undefined;
|
|
133
|
+
dir?: string | undefined;
|
|
134
|
+
} | undefined;
|
|
117
135
|
}>;
|
|
118
136
|
export type FigmaSourceOptions = z.infer<typeof schema>;
|
|
119
137
|
declare const FigmaSource: Source<FigmaSourceOptions, FigmaPage>;
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { switchMap } from 'rxjs';
|
|
1
|
+
import { switchMap, of } from 'rxjs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import deepmerge from 'deepmerge';
|
|
4
|
+
import path from 'path';
|
|
4
5
|
import { validateMosaicSchema } from '@jpmorganchase/mosaic-schemas';
|
|
5
6
|
import { createHttpSource, httpSourceCreatorSchema } from '@jpmorganchase/mosaic-source-http';
|
|
7
|
+
import { ThumbnailCache } from './utils/thumbnailCache.js';
|
|
6
8
|
const baseSchema = httpSourceCreatorSchema.omit({
|
|
7
|
-
endpoints: true,
|
|
8
|
-
transformerOptions: true
|
|
9
|
+
endpoints: true,
|
|
10
|
+
transformerOptions: true
|
|
9
11
|
});
|
|
10
12
|
export const schema = baseSchema.merge(z.object({
|
|
11
13
|
prefixDir: z.string(),
|
|
@@ -20,7 +22,13 @@ export const schema = baseSchema.merge(z.object({
|
|
|
20
22
|
getProject: z.string().url(),
|
|
21
23
|
generateThumbnail: z.string().url()
|
|
22
24
|
}),
|
|
23
|
-
requestTimeout: z.number().default(5000)
|
|
25
|
+
requestTimeout: z.number().default(5000),
|
|
26
|
+
cache: z
|
|
27
|
+
.object({
|
|
28
|
+
ttl: z.number().default(24 * 60 * 60 * 1000),
|
|
29
|
+
dir: z.string().optional()
|
|
30
|
+
})
|
|
31
|
+
.optional()
|
|
24
32
|
}));
|
|
25
33
|
const createFigmaPage = (pageData, prefixDir) => {
|
|
26
34
|
const { data: { name, description, patternId } = {} } = pageData;
|
|
@@ -37,7 +45,13 @@ const createFigmaPage = (pageData, prefixDir) => {
|
|
|
37
45
|
const FigmaSource = {
|
|
38
46
|
create(options, sourceConfig) {
|
|
39
47
|
const parsedOptions = validateMosaicSchema(schema, options);
|
|
40
|
-
const { endpoints, projects, figmaToken, prefixDir, ...rest } = parsedOptions;
|
|
48
|
+
const { endpoints, projects, figmaToken, prefixDir, cache, ...rest } = parsedOptions;
|
|
49
|
+
const thumbnailCache = cache
|
|
50
|
+
? new ThumbnailCache({
|
|
51
|
+
cacheDir: cache.dir || path.join(process.cwd(), '.tmp', '.cache', 'figma-thumbnails'),
|
|
52
|
+
ttl: cache.ttl
|
|
53
|
+
})
|
|
54
|
+
: null;
|
|
41
55
|
const projectEndpoints = {};
|
|
42
56
|
const projectById = {};
|
|
43
57
|
projects.forEach(project => {
|
|
@@ -67,7 +81,7 @@ const FigmaSource = {
|
|
|
67
81
|
};
|
|
68
82
|
const getPatternPrefix = (metadata) => projectById[metadata?.data?.projectId].patternPrefix ?? null;
|
|
69
83
|
const projectFilesTransformer = (response, _prefixDir, index, transformerOptions) => {
|
|
70
|
-
const { document: { sharedPluginData = {} } = {} } = response;
|
|
84
|
+
const { document: { sharedPluginData = {} } = {}, lastModified } = response;
|
|
71
85
|
const sourceProvidedMetadata = transformerOptions[index].meta ?? {};
|
|
72
86
|
const patternPrefix = getPatternPrefix(sourceProvidedMetadata);
|
|
73
87
|
return Object.keys(sharedPluginData).reduce((figmaPagesResult, patternId) => {
|
|
@@ -79,6 +93,7 @@ const FigmaSource = {
|
|
|
79
93
|
tags,
|
|
80
94
|
data: {
|
|
81
95
|
patternId,
|
|
96
|
+
lastModified,
|
|
82
97
|
...patternData
|
|
83
98
|
}
|
|
84
99
|
};
|
|
@@ -88,21 +103,6 @@ const FigmaSource = {
|
|
|
88
103
|
return figmaPagesResult;
|
|
89
104
|
}, []);
|
|
90
105
|
};
|
|
91
|
-
const generateThumbnailTransformer = (response, _prefixDir, index, transformerOptions) => {
|
|
92
|
-
const fileId = transformerOptions.fileIds[index];
|
|
93
|
-
if (response.err) {
|
|
94
|
-
console.error(`Figma returned ${response.err} for ${fileId} thumbnail generation `);
|
|
95
|
-
return transformerOptions.pages;
|
|
96
|
-
}
|
|
97
|
-
const thumbnailNodes = Object.keys(response.images);
|
|
98
|
-
thumbnailNodes.forEach(thumbnailNodeId => {
|
|
99
|
-
const pageForNode = transformerOptions.pages.find(page => page.data.fileId === fileId && page.data.nodeId === thumbnailNodeId);
|
|
100
|
-
if (pageForNode) {
|
|
101
|
-
pageForNode.data.contentUrl = response.images[thumbnailNodeId];
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
return transformerOptions.pages;
|
|
105
|
-
};
|
|
106
106
|
const projects$ = createHttpSource({
|
|
107
107
|
endpoints: Object.values(projectEndpoints),
|
|
108
108
|
prefixDir,
|
|
@@ -131,6 +131,11 @@ const FigmaSource = {
|
|
|
131
131
|
});
|
|
132
132
|
}));
|
|
133
133
|
const figmaPagesWithThumbnails$ = figmaPages$.pipe(switchMap(figmaPages => {
|
|
134
|
+
figmaPages.forEach(page => {
|
|
135
|
+
if (page.data && !page.data.contentUrl) {
|
|
136
|
+
page.data.contentUrl = undefined;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
134
139
|
const thumbnailNodes = figmaPages.reduce((thumbnailNodeMap, page) => {
|
|
135
140
|
const { fileId } = page.data;
|
|
136
141
|
if (thumbnailNodeMap[fileId]) {
|
|
@@ -141,10 +146,74 @@ const FigmaSource = {
|
|
|
141
146
|
}
|
|
142
147
|
return thumbnailNodeMap;
|
|
143
148
|
}, {});
|
|
144
|
-
const
|
|
149
|
+
const fileMetadata = figmaPages.reduce((metadataMap, page) => {
|
|
150
|
+
const { fileId } = page.data;
|
|
151
|
+
if (!metadataMap[fileId]) {
|
|
152
|
+
metadataMap[fileId] = {
|
|
153
|
+
lastModified: page.data.lastModified || new Date().toISOString()
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return metadataMap;
|
|
157
|
+
}, {});
|
|
158
|
+
const filesToFetch = [];
|
|
159
|
+
const fileIds = Object.keys(thumbnailNodes);
|
|
160
|
+
if (thumbnailCache) {
|
|
161
|
+
for (const fileId of fileIds) {
|
|
162
|
+
const fileLastModified = fileMetadata[fileId]?.lastModified;
|
|
163
|
+
const cachedThumbnails = thumbnailCache.getThumbnails(fileId, fileLastModified);
|
|
164
|
+
if (cachedThumbnails) {
|
|
165
|
+
console.log(`[Figma-Source] Using cached thumbnail files for ${fileId} (lastModified: ${fileLastModified})`);
|
|
166
|
+
for (const page of figmaPages) {
|
|
167
|
+
if (page.data.fileId === fileId &&
|
|
168
|
+
cachedThumbnails[page.data.nodeId] &&
|
|
169
|
+
cachedThumbnails[page.data.nodeId] !== null) {
|
|
170
|
+
page.data.contentUrl = cachedThumbnails[page.data.nodeId];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
filesToFetch.push(fileId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
filesToFetch.push(...fileIds);
|
|
181
|
+
}
|
|
182
|
+
if (filesToFetch.length === 0) {
|
|
183
|
+
return of(figmaPages);
|
|
184
|
+
}
|
|
185
|
+
const thumbnailRequestUrls = filesToFetch.map(fileId => {
|
|
145
186
|
const generateThumbnailUrl = endpoints.generateThumbnail.replace(':project_id', fileId);
|
|
146
187
|
return generateThumbnailUrl.replace(':node_id', thumbnailNodes[fileId].join(','));
|
|
147
188
|
});
|
|
189
|
+
const cachedThumbnailTransformer = (response, _prefixDir, index, transformerOptions) => {
|
|
190
|
+
const fileId = transformerOptions.fileIds[index];
|
|
191
|
+
if (response.err) {
|
|
192
|
+
console.error(`[Figma-Source] Figma returned ${response.err} for ${fileId} thumbnail generation`);
|
|
193
|
+
}
|
|
194
|
+
if (thumbnailCache && !response.err && response.images) {
|
|
195
|
+
const validThumbnails = {};
|
|
196
|
+
for (const nodeId in response.images) {
|
|
197
|
+
if (response.images[nodeId] && response.images[nodeId] !== null) {
|
|
198
|
+
validThumbnails[nodeId] = response.images[nodeId];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (Object.keys(validThumbnails).length > 0) {
|
|
202
|
+
const fileLastModified = fileMetadata[fileId]?.lastModified;
|
|
203
|
+
thumbnailCache.storeThumbnails(fileId, validThumbnails, fileLastModified);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (response.images) {
|
|
207
|
+
const thumbnailNodes = Object.keys(response.images);
|
|
208
|
+
thumbnailNodes.forEach(thumbnailNodeId => {
|
|
209
|
+
const pageForNode = transformerOptions.pages.find(page => page.data.fileId === fileId && page.data.nodeId === thumbnailNodeId);
|
|
210
|
+
if (pageForNode && response.images[thumbnailNodeId]) {
|
|
211
|
+
pageForNode.data.contentUrl = response.images[thumbnailNodeId];
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return transformerOptions.pages;
|
|
216
|
+
};
|
|
148
217
|
return createHttpSource({
|
|
149
218
|
endpoints: thumbnailRequestUrls,
|
|
150
219
|
prefixDir,
|
|
@@ -154,8 +223,8 @@ const FigmaSource = {
|
|
|
154
223
|
'X-FIGMA-TOKEN': figmaToken,
|
|
155
224
|
...rest.requestHeaders
|
|
156
225
|
},
|
|
157
|
-
transformer:
|
|
158
|
-
transformerOptions: { fileIds:
|
|
226
|
+
transformer: cachedThumbnailTransformer,
|
|
227
|
+
transformerOptions: { fileIds: filesToFetch, pages: figmaPages }
|
|
159
228
|
});
|
|
160
229
|
}));
|
|
161
230
|
return figmaPagesWithThumbnails$;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A cache for Figma thumbnail URLs to reduce API calls and avoid rate limits
|
|
3
|
+
*/
|
|
4
|
+
export declare class ThumbnailCache {
|
|
5
|
+
private cacheDir;
|
|
6
|
+
private ttl;
|
|
7
|
+
constructor(options: {
|
|
8
|
+
cacheDir: string;
|
|
9
|
+
ttl: number;
|
|
10
|
+
});
|
|
11
|
+
private getCacheFilePath;
|
|
12
|
+
private isCacheValidWithModificationCheck;
|
|
13
|
+
getThumbnails(fileId: string, fileLastModified?: string): Record<string, string> | null;
|
|
14
|
+
storeThumbnails(fileId: string, thumbnails: Record<string, string>, fileLastModified?: string): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs, { existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* A cache for Figma thumbnail URLs to reduce API calls and avoid rate limits
|
|
5
|
+
*/
|
|
6
|
+
export class ThumbnailCache {
|
|
7
|
+
cacheDir;
|
|
8
|
+
ttl;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.cacheDir = options.cacheDir;
|
|
11
|
+
this.ttl = options.ttl;
|
|
12
|
+
if (!existsSync(this.cacheDir)) {
|
|
13
|
+
mkdirSync(this.cacheDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
getCacheFilePath(fileId) {
|
|
17
|
+
return path.join(this.cacheDir, `thumbnail-${fileId}.json`);
|
|
18
|
+
}
|
|
19
|
+
isCacheValidWithModificationCheck(cacheFilePath, currentFileLastModified) {
|
|
20
|
+
try {
|
|
21
|
+
if (!fs.existsSync(cacheFilePath)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const cacheContent = fs.readFileSync(cacheFilePath, 'utf8');
|
|
25
|
+
const cacheEntry = JSON.parse(cacheContent);
|
|
26
|
+
const ageInMs = Date.now() - cacheEntry.cachedAt;
|
|
27
|
+
if (ageInMs >= this.ttl) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (currentFileLastModified) {
|
|
31
|
+
const currentModTime = new Date(currentFileLastModified).getTime();
|
|
32
|
+
const cachedModTime = new Date(cacheEntry.fileLastModified).getTime();
|
|
33
|
+
if (currentModTime > cachedModTime) {
|
|
34
|
+
console.log(`[Figma-Source] File was modified after cache (file: ${currentFileLastModified}, cache: ${cacheEntry.fileLastModified})`);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error(`[Figma-Source] Error reading cache for modification check: ${error}`);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getThumbnails(fileId, fileLastModified) {
|
|
46
|
+
const cacheFilePath = this.getCacheFilePath(fileId);
|
|
47
|
+
if (!this.isCacheValidWithModificationCheck(cacheFilePath, fileLastModified)) {
|
|
48
|
+
if (existsSync(cacheFilePath)) {
|
|
49
|
+
try {
|
|
50
|
+
const reason = fileLastModified ? 'file modification or TTL expiry' : 'TTL expiry';
|
|
51
|
+
fs.unlinkSync(cacheFilePath);
|
|
52
|
+
console.log(`[Figma-Source] Removed invalid cache file: thumbnail-${fileId}.json (reason: ${reason})`);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error(`[Figma-Source] Error removing invalid cache file: ${error}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const cacheContent = fs.readFileSync(cacheFilePath, 'utf8');
|
|
62
|
+
const cacheEntry = JSON.parse(cacheContent);
|
|
63
|
+
return cacheEntry.thumbnails;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(`[Figma-Source] Error reading thumbnail cache: ${error}`);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
storeThumbnails(fileId, thumbnails, fileLastModified) {
|
|
71
|
+
const cacheFilePath = this.getCacheFilePath(fileId);
|
|
72
|
+
const cacheEntry = {
|
|
73
|
+
thumbnails,
|
|
74
|
+
fileLastModified: fileLastModified || new Date().toISOString(),
|
|
75
|
+
cachedAt: Date.now()
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
fs.writeFileSync(cacheFilePath, JSON.stringify(cacheEntry));
|
|
79
|
+
console.log(`[Figma-Source] Cached ${Object.keys(thumbnails).length} thumbnails for file ${fileId} (lastModified: ${cacheEntry.fileLastModified})`);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error(`[Figma-Source] Error writing thumbnail cache: ${error}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=thumbnailCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnailCache.js","sourceRoot":"","sources":["../../src/utils/thumbnailCache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jpmorganchase/mosaic-source-figma",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.95",
|
|
4
4
|
"author": "",
|
|
5
5
|
"description": "Mosaic Figma source for core file system",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"url": "git@github.com:jpmorganchase/mosaic.git"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@jpmorganchase/mosaic-
|
|
35
|
-
"@jpmorganchase/mosaic-
|
|
36
|
-
"@jpmorganchase/mosaic-types": "^0.1.0-beta.
|
|
34
|
+
"@jpmorganchase/mosaic-schemas": "^0.1.0-beta.95",
|
|
35
|
+
"@jpmorganchase/mosaic-source-http": "^0.1.0-beta.95",
|
|
36
|
+
"@jpmorganchase/mosaic-types": "^0.1.0-beta.95",
|
|
37
37
|
"deepmerge": "^4.2.2",
|
|
38
38
|
"rxjs": "^7.5.5",
|
|
39
39
|
"zod": "^3.22.3"
|
|
@@ -41,4 +41,4 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"msw": "^2.0.0"
|
|
43
43
|
}
|
|
44
|
-
}
|
|
44
|
+
}
|