[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:
9
package-lock.json
generated
9
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
})
|
||||
35
services/chrome-web-store/chrome-web-store-size.service.js
Normal file
35
services/chrome-web-store/chrome-web-store-size.service.js
Normal 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 }
|
||||
}
|
||||
}
|
||||
13
services/chrome-web-store/chrome-web-store-size.tester.js
Normal file
13
services/chrome-web-store/chrome-web-store-size.tester.js
Normal 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' })
|
||||
Reference in New Issue
Block a user