[Chromewebstore] Extension size & last updated (#10613)

* Bump webextension-store-meta

* Add extension last updated

* Add extension size

* Run linter

* Rename last updated badge
This commit is contained in:
Aiden Gardner
2024-10-21 19:22:43 +11:00
committed by GitHub
parent 04f4fbd156
commit 4e4e3f82c6
6 changed files with 113 additions and 5 deletions

9
package-lock.json generated
View File

@@ -55,7 +55,7 @@
"smol-toml": "1.3.0",
"svg-path-bbox": "^2.1.0",
"svgpath": "^2.6.0",
"webextension-store-meta": "^1.2.3",
"webextension-store-meta": "^1.2.4",
"xpath": "~0.0.34"
},
"devDependencies": {
@@ -29801,9 +29801,10 @@
}
},
"node_modules/webextension-store-meta": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/webextension-store-meta/-/webextension-store-meta-1.2.3.tgz",
"integrity": "sha512-CpIiG/zCwdUBce6O4E4q/9EHC3p5/JxtD+cYWVPZCTjKbuSasfbLzFV5i+QPXEVoChW6jcg6OWdgSDtDfvCHIA==",
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/webextension-store-meta/-/webextension-store-meta-1.2.4.tgz",
"integrity": "sha512-cyFEPs277pjm3FgLbfAzRxr7LkVKw5fzQmO/wcXN7i7/03nnMcB24OjVyot+ZT0OWknLsHs5ef6jlWzoK9A2tA==",
"license": "MIT",
"dependencies": {
"domhandler": "^4.0.0",
"htmlparser2": "^6.1.0",

View File

@@ -67,7 +67,7 @@
"smol-toml": "1.3.0",
"svg-path-bbox": "^2.1.0",
"svgpath": "^2.6.0",
"webextension-store-meta": "^1.2.3",
"webextension-store-meta": "^1.2.4",
"xpath": "~0.0.34"
},
"scripts": {

View File

@@ -0,0 +1,41 @@
import { age } from '../color-formatters.js'
import { formatDate } from '../text-formatters.js'
import { NotFound, pathParams } from '../index.js'
import BaseChromeWebStoreService from './chrome-web-store-base.js'
export default class ChromeWebStoreLastUpdated extends BaseChromeWebStoreService {
static category = 'activity'
static route = { base: 'chrome-web-store/last-updated', pattern: ':storeId' }
static openApi = {
'/chrome-web-store/last-updated/{storeId}': {
get: {
summary: 'Chrome Web Store Last Updated',
parameters: pathParams({
name: 'storeId',
example: 'nccfelhkfpbnefflolffkclhenplhiab',
}),
},
},
}
static defaultBadgeData = {
label: 'last updated',
}
async handle({ storeId }) {
const chromeWebStore = await this.fetch({ storeId })
const lastUpdated = chromeWebStore.lastUpdated()
if (lastUpdated == null) {
throw new NotFound({ prettyMessage: 'not found' })
}
const lastUpdatedDate = Date.parse(lastUpdated)
return {
message: formatDate(lastUpdatedDate),
color: age(lastUpdatedDate),
}
}
}

View File

@@ -0,0 +1,18 @@
import { isFormattedDate } from '../test-validators.js'
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('Last updated')
.get('/nccfelhkfpbnefflolffkclhenplhiab.json')
.expectBadge({
label: 'last updated',
message: isFormattedDate,
})
t.create('Last updated (not found)')
.get('/invalid-name-of-addon.json')
.expectBadge({
label: 'last updated',
message: 'not found',
})

View File

@@ -0,0 +1,35 @@
import { NotFound, pathParams } from '../index.js'
import BaseChromeWebStoreService from './chrome-web-store-base.js'
export default class ChromeWebStoreSize extends BaseChromeWebStoreService {
static category = 'size'
static route = { base: 'chrome-web-store/size', pattern: ':storeId' }
static openApi = {
'/chrome-web-store/size/{storeId}': {
get: {
summary: 'Chrome Web Store Size',
parameters: pathParams({
name: 'storeId',
example: 'nccfelhkfpbnefflolffkclhenplhiab',
}),
},
},
}
static defaultBadgeData = {
label: 'extension size',
color: 'blue',
}
async handle({ storeId }) {
const chromeWebStore = await this.fetch({ storeId })
const size = chromeWebStore.size()
if (size == null) {
throw new NotFound({ prettyMessage: 'not found' })
}
return { message: size }
}
}

View File

@@ -0,0 +1,13 @@
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
const isFileSize = /^\d+(\.\d+)?(MiB|KiB)$/
t.create('Size').get('/nccfelhkfpbnefflolffkclhenplhiab.json').expectBadge({
label: 'extension size',
message: isFileSize,
})
t.create('Size (not found)')
.get('/invalid-name-of-addon.json')
.expectBadge({ label: 'extension size', message: 'not found' })