motion-canvas-cache 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +367 -0
- package/dist/Cache.d.ts +156 -0
- package/dist/Cache.d.ts.map +1 -0
- package/dist/CacheUtils.d.ts +20 -0
- package/dist/CacheUtils.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +572 -0
- package/dist/index.js.map +1 -0
- package/dist/vite-plugin/plugin.d.ts +7 -0
- package/dist/vite-plugin/plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +164 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
function motionCanvasCachePlugin(options = {}) {
|
|
5
|
+
const { cachePath = 'motion-canvas-cache', maxFileSize = 50, // 50MB default
|
|
6
|
+
} = options;
|
|
7
|
+
return {
|
|
8
|
+
name: 'motion-canvas-cache:file-storage',
|
|
9
|
+
configureServer(server) {
|
|
10
|
+
// Ensure cache directory exists
|
|
11
|
+
if (!fs.existsSync(cachePath)) {
|
|
12
|
+
fs.mkdirSync(cachePath, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
// WebSocket handler for file uploads
|
|
15
|
+
server.ws.on('cache:upload-file', async (message, client) => {
|
|
16
|
+
try {
|
|
17
|
+
const { data, mimeType, cacheKey, metadata } = message;
|
|
18
|
+
// Validate file size
|
|
19
|
+
const base64Data = data.slice(data.indexOf(',') + 1);
|
|
20
|
+
const bufferData = Buffer.from(base64Data, 'base64');
|
|
21
|
+
const fileSizeMB = bufferData.length / (1024 * 1024);
|
|
22
|
+
if (fileSizeMB > maxFileSize) {
|
|
23
|
+
client.send('cache:upload-error', {
|
|
24
|
+
error: `File too large: ${fileSizeMB.toFixed(2)}MB (max: ${maxFileSize}MB)`,
|
|
25
|
+
cacheKey,
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Generate file extension from mime type
|
|
30
|
+
const extension = getExtensionFromMimeType(mimeType);
|
|
31
|
+
// Create file path using cache key as filename
|
|
32
|
+
const fileName = `${cacheKey}.${extension}`;
|
|
33
|
+
const filePath = path.join(cachePath, fileName);
|
|
34
|
+
// Write file
|
|
35
|
+
await writeFile(filePath, bufferData);
|
|
36
|
+
// Create metadata file
|
|
37
|
+
const metadataPath = path.join(cachePath, `${cacheKey}.meta.json`);
|
|
38
|
+
const metadataContent = {
|
|
39
|
+
cacheKey,
|
|
40
|
+
mimeType,
|
|
41
|
+
fileSize: bufferData.length,
|
|
42
|
+
fileName,
|
|
43
|
+
createdAt: new Date().toISOString(),
|
|
44
|
+
...metadata,
|
|
45
|
+
};
|
|
46
|
+
await fs.promises.writeFile(metadataPath, JSON.stringify(metadataContent, null, 2));
|
|
47
|
+
// Send success response
|
|
48
|
+
client.send('cache:upload-success', {
|
|
49
|
+
cacheKey,
|
|
50
|
+
filePath: '/' + filePath,
|
|
51
|
+
metadata: metadataContent,
|
|
52
|
+
size: bufferData.length,
|
|
53
|
+
});
|
|
54
|
+
console.log(`File cached: ${filePath} (${fileSizeMB.toFixed(2)}MB)`);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('File upload error:', error);
|
|
58
|
+
client.send('cache:upload-error', {
|
|
59
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
60
|
+
cacheKey: message.cacheKey,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// WebSocket handler for checking if plugin is available
|
|
65
|
+
server.ws.on('cache:check-available', (message, client) => {
|
|
66
|
+
client.send('cache:available', {});
|
|
67
|
+
});
|
|
68
|
+
// WebSocket handler for checking if file exists
|
|
69
|
+
server.ws.on('cache:check-file', async (message, client) => {
|
|
70
|
+
try {
|
|
71
|
+
const { cacheKey } = message;
|
|
72
|
+
const metadataPath = path.join(cachePath, `${cacheKey}.meta.json`);
|
|
73
|
+
// First check if metadata exists
|
|
74
|
+
if (fs.existsSync(metadataPath)) {
|
|
75
|
+
const metadata = JSON.parse(await fs.promises.readFile(metadataPath, 'utf8'));
|
|
76
|
+
// Then check if the actual file exists
|
|
77
|
+
const fileName = metadata.fileName || `${cacheKey}.bin`;
|
|
78
|
+
const filePath = path.join(cachePath, fileName);
|
|
79
|
+
if (fs.existsSync(filePath)) {
|
|
80
|
+
client.send('cache:file-exists', {
|
|
81
|
+
cacheKey,
|
|
82
|
+
filePath: '/' + filePath,
|
|
83
|
+
metadata,
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// File not found
|
|
89
|
+
client.send('cache:file-not-found', { cacheKey });
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error('File check error:', error);
|
|
93
|
+
client.send('cache:file-not-found', {
|
|
94
|
+
cacheKey: message.cacheKey,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// Optional cleanup endpoint
|
|
99
|
+
server.middlewares.use('/__cache-cleanup', async (req, res) => {
|
|
100
|
+
try {
|
|
101
|
+
if (!fs.existsSync(cachePath)) {
|
|
102
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
103
|
+
res.end(JSON.stringify({ message: 'Cache directory does not exist' }));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const files = await fs.promises.readdir(cachePath);
|
|
107
|
+
for (const file of files) {
|
|
108
|
+
await fs.promises.unlink(path.join(cachePath, file));
|
|
109
|
+
}
|
|
110
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
111
|
+
res.end(JSON.stringify({
|
|
112
|
+
message: 'Cache cleared',
|
|
113
|
+
filesDeleted: files.length,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
118
|
+
res.end(JSON.stringify({
|
|
119
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function getExtensionFromMimeType(mimeType) {
|
|
127
|
+
const extensions = {
|
|
128
|
+
// Audio
|
|
129
|
+
'audio/mpeg': 'mp3',
|
|
130
|
+
'audio/mp3': 'mp3',
|
|
131
|
+
'audio/wav': 'wav',
|
|
132
|
+
'audio/ogg': 'ogg',
|
|
133
|
+
'audio/webm': 'webm',
|
|
134
|
+
// Video
|
|
135
|
+
'video/mp4': 'mp4',
|
|
136
|
+
'video/webm': 'webm',
|
|
137
|
+
'video/ogg': 'ogv',
|
|
138
|
+
// Images
|
|
139
|
+
'image/png': 'png',
|
|
140
|
+
'image/jpeg': 'jpg',
|
|
141
|
+
'image/gif': 'gif',
|
|
142
|
+
'image/svg+xml': 'svg',
|
|
143
|
+
'image/webp': 'webp',
|
|
144
|
+
// Documents
|
|
145
|
+
'application/pdf': 'pdf',
|
|
146
|
+
'application/json': 'json',
|
|
147
|
+
'text/plain': 'txt',
|
|
148
|
+
'text/html': 'html',
|
|
149
|
+
'text/css': 'css',
|
|
150
|
+
'application/javascript': 'js',
|
|
151
|
+
};
|
|
152
|
+
return extensions[mimeType] || 'bin';
|
|
153
|
+
}
|
|
154
|
+
function writeFile(filePath, buffer) {
|
|
155
|
+
return new Promise((resolve, reject) => {
|
|
156
|
+
fs.createWriteStream(filePath)
|
|
157
|
+
.on('finish', resolve)
|
|
158
|
+
.on('error', reject)
|
|
159
|
+
.end(buffer);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { motionCanvasCachePlugin };
|
|
164
|
+
//# sourceMappingURL=vite-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sources":["../src/vite-plugin/plugin.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "motion-canvas-cache",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A generic file caching library for Motion Canvas projects with in-memory and server-side caching via Vite HMR",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./vite-plugin": "./dist/vite-plugin.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"clean": "rm -rf dist",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"bundle": "rollup -c rollup.config.mjs",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest",
|
|
18
|
+
"test:ui": "vitest --ui",
|
|
19
|
+
"prettier:fix": "prettier --write \"src/**/*.ts\"",
|
|
20
|
+
"lint": "eslint src/**/*.ts",
|
|
21
|
+
"eslint:fix": "eslint src/**/*.ts --fix",
|
|
22
|
+
"prepublishOnly": "npm run clean && npm run bundle"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"motion-canvas",
|
|
26
|
+
"cache",
|
|
27
|
+
"caching",
|
|
28
|
+
"vite",
|
|
29
|
+
"hmr",
|
|
30
|
+
"file-cache"
|
|
31
|
+
],
|
|
32
|
+
"author": "Patrick Rathje",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"vite": "^5.0.0"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"dist/**/*"
|
|
39
|
+
],
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"path-browserify": "^1.0.1"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@rollup/plugin-commonjs": "^28.0.6",
|
|
45
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
46
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
47
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
48
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
49
|
+
"@types/node": "^24.1.0",
|
|
50
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
51
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
52
|
+
"@vitest/ui": "^4.0.16",
|
|
53
|
+
"eslint": "^8.0.0",
|
|
54
|
+
"eslint-plugin-tsdoc": "^0.4.0",
|
|
55
|
+
"happy-dom": "^20.1.0",
|
|
56
|
+
"prettier": "^2.8.4",
|
|
57
|
+
"prettier-plugin-organize-imports": "^4.2.0",
|
|
58
|
+
"rollup": "^4.50.0",
|
|
59
|
+
"rollup-plugin-dts": "^6.2.3",
|
|
60
|
+
"tsc-alias": "^1.8.16",
|
|
61
|
+
"tslib": "^2.8.1",
|
|
62
|
+
"typescript": "^5.0.0",
|
|
63
|
+
"vite": "^5.0.0",
|
|
64
|
+
"vitest": "^4.0.16"
|
|
65
|
+
}
|
|
66
|
+
}
|