Skip to content

Commit

Permalink
[Chromewebstore] Extension size & last updated (#10613)
Browse files Browse the repository at this point in the history
* Bump webextension-store-meta

* Add extension last updated

* Add extension size

* Run linter

* Rename last updated badge
  • Loading branch information
aiden2480 authored Oct 21, 2024
1 parent 04f4fbd commit 4e4e3f8
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 5 deletions.
9 changes: 5 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
41 changes: 41 additions & 0 deletions services/chrome-web-store/chrome-web-store-last-updated.service.js
Original file line number Diff line number Diff line change
@@ -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),
}
}
}
18 changes: 18 additions & 0 deletions services/chrome-web-store/chrome-web-store-last-updated.tester.js
Original file line number Diff line number Diff line change
@@ -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 changes: 35 additions & 0 deletions services/chrome-web-store/chrome-web-store-size.service.js
Original file line number Diff line number Diff line change
@@ -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 changes: 13 additions & 0 deletions services/chrome-web-store/chrome-web-store-size.tester.js
Original file line number Diff line number Diff line change
@@ -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' })

0 comments on commit 4e4e3f8

Please sign in to comment.