* Selfhosting Twemoji * ちっ * うざっ * あ * add test Co-authored-by: mei23 <m@m544.net>
This commit is contained in:
		
							parent
							
								
									1143606bc8
								
							
						
					
					
						commit
						5cf07fc50f
					
				
					 5 changed files with 66 additions and 2 deletions
				
			
		|  | @ -38,6 +38,7 @@ | ||||||
| 		"lodash": "^4.17.21" | 		"lodash": "^4.17.21" | ||||||
| 	}, | 	}, | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
|  | 		"@discordapp/twemoji": "13.1.0", | ||||||
| 		"@elastic/elasticsearch": "7.11.0", | 		"@elastic/elasticsearch": "7.11.0", | ||||||
| 		"@koa/cors": "3.1.0", | 		"@koa/cors": "3.1.0", | ||||||
| 		"@koa/multer": "3.0.0", | 		"@koa/multer": "3.0.0", | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| export const twemojiSvgBase = 'https://twemoji.maxcdn.com/v/latest/svg'; | export const twemojiSvgBase = '/twemoji'; | ||||||
|  |  | ||||||
|  | @ -101,6 +101,22 @@ router.get('/apple-touch-icon.png', async ctx => { | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | router.get('/twemoji/(.*)', async ctx => { | ||||||
|  | 	const path = ctx.path.replace('/twemoji/', ''); | ||||||
|  | 
 | ||||||
|  | 	if (!path.match(/^[0-9a-f-]+\.svg$/)) { | ||||||
|  | 		ctx.status = 404; | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	ctx.set('Content-Security-Policy', `default-src 'none'; style-src 'unsafe-inline'`); | ||||||
|  | 
 | ||||||
|  | 	await send(ctx as any, path, { | ||||||
|  | 		root: `${_dirname}/../../../node_modules/@discordapp/twemoji/dist/svg/`, | ||||||
|  | 		maxage: ms('30 days'), | ||||||
|  | 	}); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
| // ServiceWorker
 | // ServiceWorker
 | ||||||
| router.get('/sw.js', async ctx => { | router.get('/sw.js', async ctx => { | ||||||
| 	await send(ctx as any, `/sw.${config.version}.js`, { | 	await send(ctx as any, `/sw.${config.version}.js`, { | ||||||
|  |  | ||||||
|  | @ -91,6 +91,18 @@ describe('Fetch resource', () => { | ||||||
| 			assert.strictEqual(res.status, 200); | 			assert.strictEqual(res.status, 200); | ||||||
| 			assert.strictEqual(res.type, 'image/png'); | 			assert.strictEqual(res.type, 'image/png'); | ||||||
| 		})); | 		})); | ||||||
|  | 
 | ||||||
|  | 		it('GET twemoji svg', async(async () => { | ||||||
|  | 			const res = await simpleGet('/twemoji/2764.svg'); | ||||||
|  | 			assert.strictEqual(res.status, 200); | ||||||
|  | 			assert.strictEqual(res.type, 'image/svg+xml'); | ||||||
|  | 		})); | ||||||
|  | 
 | ||||||
|  | 		it('GET twemoji svg with hyphen', async(async () => { | ||||||
|  | 			const res = await simpleGet('/twemoji/2764-fe0f-200d-1f525.svg'); | ||||||
|  | 			assert.strictEqual(res.status, 200); | ||||||
|  | 			assert.strictEqual(res.type, 'image/svg+xml'); | ||||||
|  | 		})); | ||||||
| 	}); | 	}); | ||||||
| 
 | 
 | ||||||
| 	describe('/@:username', () => { | 	describe('/@:username', () => { | ||||||
|  |  | ||||||
							
								
								
									
										37
									
								
								yarn.lock
									
										
									
									
									
								
							
							
						
						
									
										37
									
								
								yarn.lock
									
										
									
									
									
								
							|  | @ -108,6 +108,16 @@ | ||||||
|     ky "^0.25.1" |     ky "^0.25.1" | ||||||
|     ky-universal "^0.8.2" |     ky-universal "^0.8.2" | ||||||
| 
 | 
 | ||||||
|  | "@discordapp/twemoji@13.1.0": | ||||||
|  |   version "13.1.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/@discordapp/twemoji/-/twemoji-13.1.0.tgz#6b25f3958fa8fd68692248c87776bc737fd009a9" | ||||||
|  |   integrity sha512-KEw/te+ylD2MHutzigafyptv0kdTU05Dbgxr9Y5J9IAQw8PbFz16nKtlPnJtA23BLp9fZQeNXzUmegkRi7fpDA== | ||||||
|  |   dependencies: | ||||||
|  |     fs-extra "^8.0.1" | ||||||
|  |     jsonfile "^5.0.0" | ||||||
|  |     twemoji-parser "13.1.0" | ||||||
|  |     universalify "^0.1.2" | ||||||
|  | 
 | ||||||
| "@discoveryjs/json-ext@^0.5.0": | "@discoveryjs/json-ext@^0.5.0": | ||||||
|   version "0.5.2" |   version "0.5.2" | ||||||
|   resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" |   resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" | ||||||
|  | @ -4904,6 +4914,15 @@ fs-constants@^1.0.0: | ||||||
|   resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" |   resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" | ||||||
|   integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== |   integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== | ||||||
| 
 | 
 | ||||||
|  | fs-extra@^8.0.1: | ||||||
|  |   version "8.1.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" | ||||||
|  |   integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== | ||||||
|  |   dependencies: | ||||||
|  |     graceful-fs "^4.2.0" | ||||||
|  |     jsonfile "^4.0.0" | ||||||
|  |     universalify "^0.1.0" | ||||||
|  | 
 | ||||||
| fs-extra@^9.1.0: | fs-extra@^9.1.0: | ||||||
|   version "9.1.0" |   version "9.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" |   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" | ||||||
|  | @ -6399,6 +6418,22 @@ json5@^2.1.2, json5@^2.1.3: | ||||||
|   dependencies: |   dependencies: | ||||||
|     minimist "^1.2.5" |     minimist "^1.2.5" | ||||||
| 
 | 
 | ||||||
|  | jsonfile@^4.0.0: | ||||||
|  |   version "4.0.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" | ||||||
|  |   integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= | ||||||
|  |   optionalDependencies: | ||||||
|  |     graceful-fs "^4.1.6" | ||||||
|  | 
 | ||||||
|  | jsonfile@^5.0.0: | ||||||
|  |   version "5.0.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-5.0.0.tgz#e6b718f73da420d612823996fdf14a03f6ff6922" | ||||||
|  |   integrity sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w== | ||||||
|  |   dependencies: | ||||||
|  |     universalify "^0.1.2" | ||||||
|  |   optionalDependencies: | ||||||
|  |     graceful-fs "^4.1.6" | ||||||
|  | 
 | ||||||
| jsonfile@^6.0.1: | jsonfile@^6.0.1: | ||||||
|   version "6.1.0" |   version "6.1.0" | ||||||
|   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" |   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" | ||||||
|  | @ -11211,7 +11246,7 @@ unique-stream@^2.0.2: | ||||||
|     json-stable-stringify-without-jsonify "^1.0.1" |     json-stable-stringify-without-jsonify "^1.0.1" | ||||||
|     through2-filter "^3.0.0" |     through2-filter "^3.0.0" | ||||||
| 
 | 
 | ||||||
| universalify@^0.1.2: | universalify@^0.1.0, universalify@^0.1.2: | ||||||
|   version "0.1.2" |   version "0.1.2" | ||||||
|   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" |   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" | ||||||
|   integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== |   integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue