Merge pull request #1915 from omnivore-app/allow-scoping-searches-to-site

Allow scoping searches to site:
This commit is contained in:
Hongbo Wu 2023-03-17 09:59:21 +08:00 committed by GitHub
commit 86ae533b66
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 603 additions and 680 deletions

View file

@ -0,0 +1,5 @@
module.exports = {
service: {
localSchemaFile: './src/generated/schema.graphql',
},
}

View file

@ -54,6 +54,7 @@
"dompurify": "^2.0.17",
"dot-case": "^3.0.4",
"dotenv": "^8.2.0",
"elastic-ts": "^0.9.0",
"express": "^4.17.1",
"express-http-context": "^1.2.4",
"express-rate-limit": "^6.3.0",

View file

@ -1,13 +1,7 @@
import {
ArticleSavingRequestStatus,
Page,
PageContext,
PageSearchArgs,
PageType,
ParamSet,
SearchBody,
SearchResponse,
} from './types'
import { ResponseError } from '@elastic/elasticsearch/lib/errors'
import { BuiltQuery, ESBuilder, esBuilder } from 'elastic-ts'
import { EntityType } from '../datalayer/pubsub'
import { BulkActionType } from '../generated/graphql'
import {
DateFilter,
FieldFilter,
@ -21,173 +15,167 @@ import {
SortOrder,
} from '../utils/search'
import { client, INDEX_ALIAS } from './index'
import { EntityType } from '../datalayer/pubsub'
import { ResponseError } from '@elastic/elasticsearch/lib/errors'
import { BulkActionType } from '../generated/graphql'
import {
ArticleSavingRequestStatus,
Page,
PageContext,
PageSearchArgs,
PageType,
ParamSet,
SearchResponse,
} from './types'
const appendQuery = (body: SearchBody, query: string): void => {
body.query.bool.should.push({
multi_match: {
const appendQuery = (builder: ESBuilder, query: string): ESBuilder => {
return builder
.orQuery('multi_match', {
query,
fields: ['title', 'content', 'author', 'description', 'siteName'],
operator: 'and',
type: 'cross_fields',
},
})
body.query.bool.minimum_should_match = 1
})
.queryMinimumShouldMatch(1)
}
const appendTypeFilter = (body: SearchBody, filter: PageType): void => {
body.query.bool.must.push({
term: {
pageType: filter,
},
})
const appendTypeFilter = (builder: ESBuilder, filter: PageType): ESBuilder => {
return builder.query('term', { pageType: filter })
}
const appendReadFilter = (body: SearchBody, filter: ReadFilter): void => {
const appendReadFilter = (
builder: ESBuilder,
filter: ReadFilter
): ESBuilder => {
switch (filter) {
case ReadFilter.UNREAD:
body.query.bool.must.push({
range: {
readingProgressPercent: {
lt: 98,
},
return builder.query('range', {
readingProgressPercent: {
lt: 98,
},
})
break
case ReadFilter.READ:
body.query.bool.must.push({
range: {
readingProgressPercent: {
gte: 98,
},
return builder.query('range', {
readingProgressPercent: {
gte: 98,
},
})
}
return builder
}
const appendInFilter = (body: SearchBody, filter: InFilter): void => {
const appendInFilter = (builder: ESBuilder, filter: InFilter): ESBuilder => {
switch (filter) {
case InFilter.ARCHIVE:
body.query.bool.must.push({
exists: {
field: 'archivedAt',
},
})
break
return builder.query('exists', { field: 'archivedAt' })
case InFilter.INBOX:
body.query.bool.must_not.push({
exists: {
field: 'archivedAt',
},
})
return builder.notQuery('exists', { field: 'archivedAt' })
}
return builder
}
const appendHasFilters = (body: SearchBody, filters: HasFilter[]): void => {
const appendHasFilters = (
builder: ESBuilder,
filters: HasFilter[]
): ESBuilder => {
filters.forEach((filter) => {
switch (filter) {
case HasFilter.HIGHLIGHTS:
body.query.bool.must.push({
nested: {
path: 'highlights',
query: {
exists: {
field: 'highlights',
},
builder = builder.query('nested', {
path: 'highlights',
query: {
exists: {
field: 'highlights',
},
},
})
break
case HasFilter.SHARED_AT:
body.query.bool.must.push({
exists: {
field: 'sharedAt',
},
})
builder = builder.query('exists', { field: 'sharedAt' })
break
}
})
return builder
}
const appendExcludeLabelFilter = (
body: SearchBody,
builder: ESBuilder,
filters: LabelFilter[]
): void => {
): ESBuilder => {
const labels = filters.map((filter) => filter.labels).flat()
body.query.bool.must_not.push({
nested: {
path: 'labels',
query: {
terms: {
'labels.name': labels,
},
return builder.notQuery('nested', {
path: 'labels',
query: {
terms: {
'labels.name': labels,
},
},
})
}
const appendIncludeLabelFilter = (
body: SearchBody,
builder: ESBuilder,
filters: LabelFilter[]
): void => {
): ESBuilder => {
filters.forEach((filter) => {
body.query.bool.must.push({
nested: {
path: 'labels',
query: {
terms: {
'labels.name': filter.labels,
},
builder = builder.query('nested', {
path: 'labels',
query: {
terms: {
'labels.name': filter.labels,
},
},
})
})
return builder
}
const appendDateFilters = (body: SearchBody, filters: DateFilter[]): void => {
const appendDateFilters = (
builder: ESBuilder,
filters: DateFilter[]
): ESBuilder => {
filters.forEach((filter) => {
body.query.bool.must.push({
range: {
[filter.field]: {
gt: filter.startDate,
lt: filter.endDate,
},
builder = builder.query('range', {
[filter.field]: {
gt: filter.startDate?.toISOString(),
lt: filter.endDate?.toISOString(),
},
})
})
return builder
}
const appendTermFilters = (body: SearchBody, filters: FieldFilter[]): void => {
const appendTermFilters = (
builder: ESBuilder,
filters: FieldFilter[]
): ESBuilder => {
filters.forEach((filter) => {
body.query.bool.must.push({
term: {
[filter.field]: filter.value,
},
builder = builder.query('term', {
[filter.field]: filter.value,
})
})
return builder
}
const appendMatchFilters = (body: SearchBody, filters: FieldFilter[]): void => {
const appendMatchFilters = (
builder: ESBuilder,
filters: FieldFilter[]
): ESBuilder => {
filters.forEach((filter) => {
body.query.bool.must.push({
match: {
[filter.field]: filter.value,
},
builder = builder.query('match', {
[filter.field]: filter.value,
})
})
return builder
}
const appendIdsFilter = (body: SearchBody, ids: string[]): void => {
body.query.bool.must.push({
terms: {
_id: ids,
},
const appendIdsFilter = (builder: ESBuilder, ids: string[]): ESBuilder => {
return builder.query('terms', {
_id: ids,
})
}
const appendRecommendedBy = (body: SearchBody, recommendedBy: string): void => {
const appendRecommendedBy = (
builder: ESBuilder,
recommendedBy: string
): ESBuilder => {
const query =
recommendedBy === '*'
? {
@ -200,28 +188,49 @@ const appendRecommendedBy = (body: SearchBody, recommendedBy: string): void => {
'recommendations.name': recommendedBy,
},
}
body.query.bool.must.push({
nested: {
path: 'recommendations',
query,
},
return builder.query('nested', {
path: 'recommendations',
query,
})
}
const appendNoFilters = (body: SearchBody, noFilters: NoFilter[]): void => {
const appendNoFilters = (
builder: ESBuilder,
noFilters: NoFilter[]
): ESBuilder => {
noFilters.forEach((filter) => {
body.query.bool.must_not.push({
nested: {
path: filter.field,
query: {
exists: {
field: filter.field,
},
builder = builder.notQuery('nested', {
path: filter.field,
query: {
exists: {
field: filter.field,
},
},
})
})
return builder
}
const appendSiteNameFilter = (
builder: ESBuilder,
siteName: string
): ESBuilder => {
return builder.query('bool', {
should: [
{
match: {
siteName,
},
},
{
wildcard: {
// siteName is a domain name, so we need to wildcard the end
url: `*${siteName}*`,
},
},
],
minimum_should_match: 1,
})
}
export const createPage = async (
@ -404,6 +413,7 @@ export const searchPages = async (
ids,
includeContent,
noFilters,
siteName,
} = args
// default order is descending
const sortOrder = sort?.order || SortOrder.DESCENDING
@ -415,101 +425,76 @@ export const searchPages = async (
const excludeLabels = labelFilters?.filter(
(filter) => filter.type === LabelFilterType.EXCLUDE
)
const body: SearchBody = {
query: {
bool: {
must: [
{
term: {
userId,
},
},
],
should: [],
must_not: [],
},
},
sort: [
{
[sortField]: {
order: sortOrder,
},
},
],
from,
size,
_source: {
// start building the query
let builder = esBuilder()
.query('term', { userId })
.sort(sortField, sortOrder)
.from(from)
.size(size)
.rawOption('_source', {
excludes: includeContent ? [] : ['originalHtml', 'content'],
},
}
})
// append filters
if (query) {
appendQuery(body, query)
builder = appendQuery(builder, query)
}
if (typeFilter) {
appendTypeFilter(body, typeFilter)
builder = appendTypeFilter(builder, typeFilter)
}
if (inFilter !== InFilter.ALL) {
appendInFilter(body, inFilter)
builder = appendInFilter(builder, inFilter)
}
if (readFilter !== ReadFilter.ALL) {
appendReadFilter(body, readFilter)
builder = appendReadFilter(builder, readFilter)
}
if (hasFilters && hasFilters.length > 0) {
appendHasFilters(body, hasFilters)
builder = appendHasFilters(builder, hasFilters)
}
if (includeLabels && includeLabels.length > 0) {
appendIncludeLabelFilter(body, includeLabels)
builder = appendIncludeLabelFilter(builder, includeLabels)
}
if (excludeLabels && excludeLabels.length > 0) {
appendExcludeLabelFilter(body, excludeLabels)
builder = appendExcludeLabelFilter(builder, excludeLabels)
}
if (dateFilters && dateFilters.length > 0) {
appendDateFilters(body, dateFilters)
builder = appendDateFilters(builder, dateFilters)
}
if (termFilters) {
appendTermFilters(body, termFilters)
builder = appendTermFilters(builder, termFilters)
}
if (matchFilters) {
appendMatchFilters(body, matchFilters)
builder = appendMatchFilters(builder, matchFilters)
}
if (ids && ids.length > 0) {
appendIdsFilter(body, ids)
builder = appendIdsFilter(builder, ids)
}
if (args.recommendedBy) {
appendRecommendedBy(body, args.recommendedBy)
builder = appendRecommendedBy(builder, args.recommendedBy)
}
if (!args.includePending) {
body.query.bool.must_not.push({
term: {
state: ArticleSavingRequestStatus.Processing,
},
builder = builder.notQuery('term', {
state: ArticleSavingRequestStatus.Processing,
})
}
if (!args.includeDeleted) {
body.query.bool.must_not.push({
term: {
state: ArticleSavingRequestStatus.Deleted,
},
builder = builder.notQuery('term', {
state: ArticleSavingRequestStatus.Deleted,
})
}
if (noFilters) {
appendNoFilters(body, noFilters)
builder = appendNoFilters(builder, noFilters)
}
if (siteName) {
builder = appendSiteNameFilter(builder, siteName)
}
// build the query
const body = builder.build()
console.log('searching pages in elastic', JSON.stringify(body))
const response = await client.search<SearchResponse<Page>, SearchBody>({
console.debug('searching pages in elastic', JSON.stringify(body))
const response = await client.search<SearchResponse<Page>, BuiltQuery>({
index: INDEX_ALIAS,
body,
})
if (response.body.hits.total.value === 0) {
return [[], 0]
}
@ -523,6 +508,11 @@ export const searchPages = async (
response.body.hits.total.value,
]
} catch (e) {
if (e instanceof ResponseError) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
console.error('failed to search pages in elastic', e.meta.body.error)
return undefined
}
console.error('failed to search pages in elastic', e)
return undefined
}
@ -666,8 +656,7 @@ export const searchAsYouType = async (
export const updatePagesAsync = async (
userId: string,
action: BulkActionType,
args?: PageSearchArgs
action: BulkActionType
): Promise<string | null> => {
// default action is archive
let must_not = [
@ -677,7 +666,7 @@ export const updatePagesAsync = async (
},
},
]
let params: Record<string, any> = { archivedAt: new Date() }
let params: Record<string, unknown> = { archivedAt: new Date() }
if (action === BulkActionType.Delete) {
must_not = []
params = { state: ArticleSavingRequestStatus.Deleted }

View file

@ -12,122 +12,6 @@ import {
SortParams,
} from '../utils/search'
export interface SearchBody {
query: {
bool: {
must: (
| {
term: {
[K: string]: string
}
}
| { exists: { field: string } }
| {
range: {
readingProgressPercent: { gte: number } | { lt: number }
}
}
| {
range: {
[K: string]: { gt: Date | undefined } | { lt: Date | undefined }
}
}
| {
nested: {
path: 'labels'
query: {
terms: {
'labels.name': string[]
}
}
}
}
| {
nested: {
path: 'highlights'
query: {
exists: {
field: 'highlights'
}
}
}
}
| {
nested: {
path: 'recommendations'
query: {
exists?: {
field: string
}
term?: {
'recommendations.name': string
}
}
}
}
| {
match: {
[K: string]: string
}
}
| {
terms: {
[K: string]: string[]
}
}
)[]
should: {
multi_match: {
query: string
fields: string[]
operator: 'and' | 'or'
type:
| 'best_fields'
| 'most_fields'
| 'cross_fields'
| 'phrase'
| 'phrase_prefix'
}
}[]
minimum_should_match?: number
must_not: (
| { term: { state: ArticleSavingRequestStatus } }
| {
exists: {
field: string
}
}
| {
nested: {
path: 'labels'
query: {
terms: {
'labels.name': string[]
}
}
}
}
| {
nested: {
path: string
query: {
exists: {
field: string
}
}
}
}
)[]
}
}
sort: [Record<string, { order: string }>]
from: number
size: number
_source: {
excludes: string[]
}
}
// Complete definition of the Search response
export interface ShardsResponse {
total: number
@ -162,7 +46,7 @@ export interface SearchResponse<T> {
_explanation?: Explanation
fields?: never
highlight?: never
inner_hits?: any
inner_hits?: unknown
matched_queries?: string[]
sort?: string[]
}>
@ -332,4 +216,5 @@ export interface PageSearchArgs {
recommendedBy?: string
includeContent?: boolean
noFilters?: NoFilter[]
siteName?: string
}

View file

@ -37,6 +37,7 @@ export interface SearchFilter {
ids: string[]
recommendedBy?: string
noFilters: NoFilter[]
siteName?: string
}
export enum LabelFilterType {
@ -335,6 +336,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
'recommendedBy',
'no',
'mode',
'site',
],
tokenize: true,
})
@ -428,6 +430,9 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
case 'mode':
// mode is ignored and used only by the frontend
break
case 'site':
result.siteName = keyword.value
break
}
}
}

View file

@ -1,31 +1,10 @@
import { createTestUser, deleteTestUser } from '../db'
import {
createTestElasticPage,
generateFakeUuid,
graphqlRequest,
request,
} from '../util'
import * as chai from 'chai'
import { expect } from 'chai'
import 'mocha'
import { User } from '../../src/entity/user'
import chaiString from 'chai-string'
import {
BulkActionType,
SyncUpdatedItemEdge,
UpdateReason,
UploadFileStatus,
} from '../../src/generated/graphql'
import {
ArticleSavingRequestStatus,
Highlight,
Page,
PageContext,
PageType,
} from '../../src/elastic/types'
import { UploadFile } from '../../src/entity/upload_file'
import 'mocha'
import { createPubSubClient } from '../../src/datalayer/pubsub'
import { getRepository } from '../../src/entity/utils'
import { refreshIndex } from '../../src/elastic'
import { addHighlightToPage } from '../../src/elastic/highlights'
import {
createPage,
deletePage,
@ -33,9 +12,30 @@ import {
getPageById,
updatePage,
} from '../../src/elastic/pages'
import { addHighlightToPage } from '../../src/elastic/highlights'
import { refreshIndex } from '../../src/elastic'
import {
ArticleSavingRequestStatus,
Highlight,
Page,
PageContext,
PageType,
} from '../../src/elastic/types'
import { SearchHistory } from '../../src/entity/search_history'
import { UploadFile } from '../../src/entity/upload_file'
import { User } from '../../src/entity/user'
import { getRepository } from '../../src/entity/utils'
import {
BulkActionType,
SyncUpdatedItemEdge,
UpdateReason,
UploadFileStatus,
} from '../../src/generated/graphql'
import { createTestUser, deleteTestUser } from '../db'
import {
createTestElasticPage,
generateFakeUuid,
graphqlRequest,
request,
} from '../util'
chai.use(chaiString)
@ -847,6 +847,7 @@ describe('Article API', () => {
url: url,
savedAt: new Date(),
state: ArticleSavingRequestStatus.Succeeded,
siteName: 'Example',
}
page.id = (await createPage(page, ctx))!
pages.push(page)
@ -984,6 +985,18 @@ describe('Article API', () => {
expect(res.body.data.search.pageInfo.totalCount).to.eq(0)
})
})
context('when site:${site_name} is in the query', () => {
before(async () => {
keyword = "'search api' site:example"
})
it('returns items from the site', async () => {
const res = await graphqlRequest(query, authToken).expect(200)
expect(res.body.data.search.pageInfo.totalCount).to.eq(5)
})
})
})
describe('TypeaheadSearch API', () => {

View file

@ -7,5 +7,5 @@
"outDir": "dist"
},
"include": ["src", "test"],
"exclude": ["./src/generated", "./test"]
"exclude": ["./src/generated"]
}

View file

@ -652,7 +652,8 @@ async function retrieveHtml(page, logRecord) {
document.getElementById('px-block-form-wrapper')) {
return 'IS_BLOCKED'
}
if (create_time) {
// check if create_time is defined
if (typeof create_time !== 'undefined' && create_time) {
// create_time is a global variable set by WeChat when rendering the page
const date = new Date(create_time * 1000);
const dateNode = document.createElement('div');

View file

@ -1935,7 +1935,10 @@ Readability.prototype = {
// get site name
metadata.siteName = jsonld.siteName ||
values["og:site_name"] || null;
values["og:site_name"] ||
values["twitter:site"] ||
values["site_name"] ||
values["twitter:domain"];
// get website icon
const siteIcon = this._doc.querySelector(
@ -3006,6 +3009,15 @@ Readability.prototype = {
metadata.excerpt = paragraphs[0].textContent.trim();
}
}
if (!metadata.siteName) {
// Fallback to hostname
try {
const host = new URL(this._baseURI).hostname;
metadata.siteName = host.replace(/^www\./, "");
} catch (e) {
// Ignore
}
}
var textContent = articleContent.textContent;
return {

View file

@ -14,58 +14,10 @@
<td valign="top" style="width: 250px">
<ul>
<li>danwang<br />
<a href="./test-pages/danwang/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/danwang/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/danwang/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>omnivore_getting_started<br />
<a href="./test-pages/omnivore_getting_started/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/omnivore_getting_started/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/omnivore_getting_started/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nymag<br />
<a href="./test-pages/nymag/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nymag/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nymag/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>zhihu<br />
<a href="./test-pages/zhihu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/zhihu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/zhihu/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>computerenhance.com<br />
<a href="./test-pages/computerenhance.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/computerenhance.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/computerenhance.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>substack-michaelshellenberger<br />
<a href="./test-pages/substack-michaelshellenberger/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/substack-michaelshellenberger/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/substack-michaelshellenberger/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>stratechery<br />
<a href="./test-pages/stratechery/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/stratechery/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/stratechery/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>cnbc<br />
<a href="./test-pages/cnbc/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/cnbc/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/cnbc/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>elidourado<br />
<a href="./test-pages/elidourado/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/elidourado/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/elidourado/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>people<br />
<a href="./test-pages/people/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/people/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/people/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>financialpost-fishing-for-chips<br />
@ -74,70 +26,22 @@
<a href="./test-pages/financialpost-fishing-for-chips/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>cavesocial<br />
<a href="./test-pages/cavesocial/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/cavesocial/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/cavesocial/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>channelnewsasia02<br />
<a href="./test-pages/channelnewsasia02/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/channelnewsasia02/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/channelnewsasia02/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>newsletters<br />
<a href="./test-pages/newsletters/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/newsletters/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/newsletters/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>ft.com<br />
<a href="./test-pages/ft.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ft.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ft.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>spakhm<br />
<a href="./test-pages/spakhm/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/spakhm/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/spakhm/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes-podcasts<br />
<a href="./test-pages/nytimes-podcasts/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes-podcasts/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes-podcasts/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>china.substack<br />
<a href="./test-pages/china.substack/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/china.substack/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/china.substack/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>community.musictribe.com<br />
<a href="./test-pages/community.musictribe.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/community.musictribe.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/community.musictribe.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>berthub-2<br />
<a href="./test-pages/berthub-2/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/berthub-2/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/berthub-2/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>samcurry<br />
<a href="./test-pages/samcurry/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/samcurry/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/samcurry/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>ahhhhfs.com<br />
<a href="./test-pages/ahhhhfs.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ahhhhfs.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ahhhhfs.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>variety<br />
<a href="./test-pages/variety/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/variety/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/variety/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>infoproc<br />
<a href="./test-pages/infoproc/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/infoproc/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/infoproc/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>energias-renovables.com<br />
<a href="./test-pages/energias-renovables.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/energias-renovables.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/energias-renovables.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>computer.rip<br />
@ -146,124 +50,34 @@
<a href="./test-pages/computer.rip/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>news.utexas<br />
<a href="./test-pages/news.utexas/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/news.utexas/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/news.utexas/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>mathoverflow<br />
<a href="./test-pages/mathoverflow/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/mathoverflow/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/mathoverflow/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>electrek<br />
<a href="./test-pages/electrek/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/electrek/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/electrek/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>variety<br />
<a href="./test-pages/variety/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/variety/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/variety/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>sciencedirect<br />
<a href="./test-pages/sciencedirect/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/sciencedirect/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/sciencedirect/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>jon.bo<br />
<a href="./test-pages/jon.bo/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/jon.bo/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/jon.bo/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>jacobbrazeal<br />
<a href="./test-pages/jacobbrazeal/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/jacobbrazeal/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/jacobbrazeal/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>brookings.edu<br />
<a href="./test-pages/brookings.edu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/brookings.edu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/brookings.edu/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>getting_started_with_omnivore<br />
<a href="./test-pages/getting_started_with_omnivore/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/getting_started_with_omnivore/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/getting_started_with_omnivore/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>berthub<br />
<a href="./test-pages/berthub/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/berthub/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/berthub/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>josephg<br />
<a href="./test-pages/josephg/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/josephg/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/josephg/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>gflownet<br />
<a href="./test-pages/gflownet/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/gflownet/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/gflownet/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>gdcvault<br />
<a href="./test-pages/gdcvault/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/gdcvault/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/gdcvault/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>instyle<br />
<a href="./test-pages/instyle/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/instyle/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/instyle/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>slowboring<br />
<a href="./test-pages/slowboring/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/slowboring/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/slowboring/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>bookofhook.blogspot.com<br />
<a href="./test-pages/bookofhook.blogspot.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/bookofhook.blogspot.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/bookofhook.blogspot.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>dailymail<br />
<a href="./test-pages/dailymail/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/dailymail/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/dailymail/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>fiercepharma<br />
<a href="./test-pages/fiercepharma/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/fiercepharma/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/fiercepharma/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes<br />
<a href="./test-pages/nytimes/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>wechat<br />
<a href="./test-pages/wechat/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/wechat/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/wechat/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>milkroad<br />
<a href="./test-pages/milkroad/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/milkroad/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/milkroad/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>robinwieruch.de<br />
<a href="./test-pages/robinwieruch.de/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/robinwieruch.de/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/robinwieruch.de/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>github-blog<br />
<a href="./test-pages/github-blog/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/github-blog/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/github-blog/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>johnhcochrane.blogspot<br />
<a href="./test-pages/johnhcochrane.blogspot/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/johnhcochrane.blogspot/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/johnhcochrane.blogspot/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>berthub-2<br />
<a href="./test-pages/berthub-2/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/berthub-2/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/berthub-2/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>jsomers<br />
@ -272,16 +86,22 @@
<a href="./test-pages/jsomers/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>medium<br />
<a href="./test-pages/medium/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/medium/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/medium/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>bitfieldconsulting<br />
<a href="./test-pages/bitfieldconsulting/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/bitfieldconsulting/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/bitfieldconsulting/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>erik-engheim<br />
<a href="./test-pages/erik-engheim/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/erik-engheim/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/erik-engheim/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>dailymail<br />
<a href="./test-pages/dailymail/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/dailymail/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/dailymail/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>vanityfair<br />
<a href="./test-pages/vanityfair/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/vanityfair/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/vanityfair/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>habr.com<br />
@ -290,10 +110,46 @@
<a href="./test-pages/habr.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>fast-company<br />
<a href="./test-pages/fast-company/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/fast-company/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/fast-company/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>slowboring<br />
<a href="./test-pages/slowboring/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/slowboring/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/slowboring/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes-podcasts<br />
<a href="./test-pages/nytimes-podcasts/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes-podcasts/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes-podcasts/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>rootsofprogress<br />
<a href="./test-pages/rootsofprogress/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/rootsofprogress/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/rootsofprogress/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>spakhm<br />
<a href="./test-pages/spakhm/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/spakhm/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/spakhm/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>sydney.com<br />
<a href="./test-pages/sydney.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/sydney.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/sydney.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>ahhhhfs.com<br />
<a href="./test-pages/ahhhhfs.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ahhhhfs.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ahhhhfs.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>erik-engheim<br />
<a href="./test-pages/erik-engheim/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/erik-engheim/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/erik-engheim/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>youtube-embed<br />
@ -302,34 +158,22 @@
<a href="./test-pages/youtube-embed/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>ottawacitizen.com<br />
<a href="./test-pages/ottawacitizen.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ottawacitizen.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ottawacitizen.com/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>jacobbrazeal<br />
<a href="./test-pages/jacobbrazeal/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/jacobbrazeal/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/jacobbrazeal/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>danluu<br />
<a href="./test-pages/danluu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/danluu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/danluu/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>omnivore_getting_started<br />
<a href="./test-pages/omnivore_getting_started/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/omnivore_getting_started/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/omnivore_getting_started/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>substack-email<br />
<a href="./test-pages/substack-email/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/substack-email/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/substack-email/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>moxie.org<br />
<a href="./test-pages/moxie.org/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/moxie.org/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/moxie.org/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>vanityfair<br />
<a href="./test-pages/vanityfair/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/vanityfair/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/vanityfair/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>city-journal<br />
<a href="./test-pages/city-journal/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/city-journal/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/city-journal/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>stackoverflow<br />
@ -344,52 +188,58 @@
<a href="./test-pages/blog.jetbrains.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>bitfieldconsulting<br />
<a href="./test-pages/bitfieldconsulting/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/bitfieldconsulting/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/bitfieldconsulting/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>elidourado<br />
<a href="./test-pages/elidourado/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/elidourado/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/elidourado/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>techcrunch<br />
<a href="./test-pages/techcrunch/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/techcrunch/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/techcrunch/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>milkroad<br />
<a href="./test-pages/milkroad/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/milkroad/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/milkroad/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>rootsofprogress<br />
<a href="./test-pages/rootsofprogress/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/rootsofprogress/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/rootsofprogress/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>computerenhance.com<br />
<a href="./test-pages/computerenhance.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/computerenhance.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/computerenhance.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>channelnewsasia<br />
<a href="./test-pages/channelnewsasia/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/channelnewsasia/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/channelnewsasia/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>gflownet<br />
<a href="./test-pages/gflownet/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/gflownet/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/gflownet/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>jon.bo<br />
<a href="./test-pages/jon.bo/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/jon.bo/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/jon.bo/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>electrek<br />
<a href="./test-pages/electrek/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/electrek/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/electrek/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>aboveavalon<br />
<a href="./test-pages/aboveavalon/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/aboveavalon/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/aboveavalon/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>gdcvault<br />
<a href="./test-pages/gdcvault/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/gdcvault/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/gdcvault/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>city-journal<br />
<a href="./test-pages/city-journal/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/city-journal/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/city-journal/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>fiercepharma<br />
<a href="./test-pages/fiercepharma/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/fiercepharma/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/fiercepharma/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>energias-renovables.com<br />
<a href="./test-pages/energias-renovables.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/energias-renovables.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/energias-renovables.com/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>moxie.org<br />
<a href="./test-pages/moxie.org/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/moxie.org/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/moxie.org/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>ottawacitizen.com<br />
<a href="./test-pages/ottawacitizen.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ottawacitizen.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ottawacitizen.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>biospace<br />
@ -398,46 +248,28 @@
<a href="./test-pages/biospace/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>guardian<br />
<a href="./test-pages/guardian/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/guardian/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/guardian/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>substack-email<br />
<a href="./test-pages/substack-email/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/substack-email/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/substack-email/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>thevaluable.dev<br />
<a href="./test-pages/thevaluable.dev/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/thevaluable.dev/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/thevaluable.dev/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>instyle<br />
<a href="./test-pages/instyle/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/instyle/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/instyle/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>mathoverflow<br />
<a href="./test-pages/mathoverflow/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/mathoverflow/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/mathoverflow/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>danluu<br />
<a href="./test-pages/danluu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/danluu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/danluu/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes.com<br />
<a href="./test-pages/nytimes.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>people<br />
<a href="./test-pages/people/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/people/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/people/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>garymarcus<br />
<a href="./test-pages/garymarcus/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/garymarcus/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/garymarcus/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>ft.com<br />
<a href="./test-pages/ft.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/ft.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/ft.com/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>zhihu<br />
<a href="./test-pages/zhihu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/zhihu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/zhihu/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>yuyue.com<br />
@ -446,28 +278,196 @@
<a href="./test-pages/yuyue.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>techcrunch<br />
<a href="./test-pages/techcrunch/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/techcrunch/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/techcrunch/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>robinwieruch.de<br />
<a href="./test-pages/robinwieruch.de/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/robinwieruch.de/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/robinwieruch.de/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>debugger.medium<br />
<a href="./test-pages/debugger.medium/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/debugger.medium/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/debugger.medium/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>channelnewsasia02<br />
<a href="./test-pages/channelnewsasia02/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/channelnewsasia02/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/channelnewsasia02/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>bookofhook.blogspot.com<br />
<a href="./test-pages/bookofhook.blogspot.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/bookofhook.blogspot.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/bookofhook.blogspot.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>brookings.edu<br />
<a href="./test-pages/brookings.edu/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/brookings.edu/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/brookings.edu/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>github-blog<br />
<a href="./test-pages/github-blog/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/github-blog/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/github-blog/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>sydney.com<br />
<a href="./test-pages/sydney.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/sydney.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/sydney.com/distiller.html" target="iframe_b">[dom-distiller]</a>
<li>channelnewsasia<br />
<a href="./test-pages/channelnewsasia/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/channelnewsasia/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/channelnewsasia/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>china.substack<br />
<a href="./test-pages/china.substack/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/china.substack/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/china.substack/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>medium<br />
<a href="./test-pages/medium/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/medium/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/medium/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>community.musictribe.com<br />
<a href="./test-pages/community.musictribe.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/community.musictribe.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/community.musictribe.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>thevaluable.dev<br />
<a href="./test-pages/thevaluable.dev/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/thevaluable.dev/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/thevaluable.dev/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>cnbc<br />
<a href="./test-pages/cnbc/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/cnbc/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/cnbc/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes.com<br />
<a href="./test-pages/nytimes.com/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes.com/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes.com/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>guardian<br />
<a href="./test-pages/guardian/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/guardian/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/guardian/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>stratechery<br />
<a href="./test-pages/stratechery/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/stratechery/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/stratechery/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>wechat<br />
<a href="./test-pages/wechat/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/wechat/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/wechat/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>infoproc<br />
<a href="./test-pages/infoproc/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/infoproc/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/infoproc/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>aboveavalon<br />
<a href="./test-pages/aboveavalon/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/aboveavalon/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/aboveavalon/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nymag<br />
<a href="./test-pages/nymag/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nymag/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nymag/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>substack-michaelshellenberger<br />
<a href="./test-pages/substack-michaelshellenberger/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/substack-michaelshellenberger/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/substack-michaelshellenberger/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>sciencedirect<br />
<a href="./test-pages/sciencedirect/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/sciencedirect/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/sciencedirect/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>news.utexas<br />
<a href="./test-pages/news.utexas/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/news.utexas/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/news.utexas/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>getting_started_with_omnivore<br />
<a href="./test-pages/getting_started_with_omnivore/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/getting_started_with_omnivore/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/getting_started_with_omnivore/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>danwang<br />
<a href="./test-pages/danwang/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/danwang/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/danwang/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>berthub<br />
<a href="./test-pages/berthub/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/berthub/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/berthub/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>fast-company<br />
<a href="./test-pages/fast-company/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/fast-company/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/fast-company/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>newsletters<br />
<a href="./test-pages/newsletters/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/newsletters/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/newsletters/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>nytimes<br />
<a href="./test-pages/nytimes/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/nytimes/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/nytimes/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>cavesocial<br />
<a href="./test-pages/cavesocial/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/cavesocial/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/cavesocial/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>samcurry<br />
<a href="./test-pages/samcurry/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/samcurry/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/samcurry/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>josephg<br />
<a href="./test-pages/josephg/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/josephg/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/josephg/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>garymarcus<br />
<a href="./test-pages/garymarcus/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/garymarcus/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/garymarcus/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
<li>johnhcochrane.blogspot<br />
<a href="./test-pages/johnhcochrane.blogspot/source.html" target="iframe_b">[source]</a>
<a href="./test-pages/johnhcochrane.blogspot/expected.html" target="iframe_b">[readability]</a>
<a href="./test-pages/johnhcochrane.blogspot/distiller.html" target="iframe_b">[dom-distiller]</a>
</li>
</ul>

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "All BNT162b2 vaccine data on this page is sourced from this World Health Organization document.",
"siteName": null,
"siteName": "fakehost",
"publishedDate": null,
"readerable": true
}

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": "ltr",
"excerpt": "Productivity is one of my pet topics, because it's always dogged me a bit, especially early in my career.  I'd pull long days and nights and...",
"siteName": null,
"siteName": "fakehost",
"previewImage": "https://lh3.googleusercontent.com/blogger_img_proxy/ABLy4EzWkihPRCY9pIfp0Kyte3jlABLfSMcK5dlFeOQ7OGHfoy_CEMNzvNgmyBoyd1ahGWWJ0UXGSSvUXxouVeOK5l9Fxqlpe5YQQfgFg7-ikDZ0EaToXHZFrA_EmV8V5tKR4bd1HProtJ8=w1200-h630-p-k-no-nu",
"publishedDate": "2001-03-01T08:00:00.000Z",
"readerable": true

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "This page displays a discussion entry.",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "http://fakehost/test/public/core_file/ec/5d/02/f6baf292a4e76c51e82e87d5cb98ad61.ico?c=5097",
"previewImage": "https://community.musictribe.com/",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "To start: yes, long time no see. Well, COVID-19 has been like that. Some days I feel accomplished if I successfully check my email. I finally managed to clear out a backlog of an entire handfull of things that needed thoughtful responses, though, and so here I am, screaming into the void instead of at anyone in particular.",
"siteName": null,
"siteName": "fakehost",
"publishedDate": "2020-11-28T00:00:00.000Z",
"readerable": true
}

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "this is an archive of an old article by John Carmack which seems to\n have disappeared off of the internet",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "data:;base64,=",
"publishedDate": null,
"language": "English",

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "This talk is a detailed walkthrough of the game engine modifications needed to make The Last of Us Remastered run at 60 fps on PlayStation 4. Topics covered will include the fiber-based job system Naughty Dog adopted for the game, the overall...",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "http://fakehost/img/favicon.ico",
"previewImage": "https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdc2015/Images/GDC15_Vault-thumb_v1.png",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "What follows is a high-level overview of this work, for more details refer to our paper. Given a reward \n \n \n \n R\n \n \n (\n \n \n x\n \n \n )\n \n \n \n R(x)\n \n and a deterministic episodic environment where episodes end with a ``generate \n \n \n \n x\n \n \n \n x\n \n '' action, how do we generate diverse and high-reward \n \n \n \n x\n \n \n \n x\n \n s?\n We propose to use Flow Networks to model discrete \n \n \n \n p\n \n \n (\n \n \n x\n \n \n )\n \n \n ∝\n \n \n R\n \n \n (\n \n \n x\n \n \n )\n \n \n \n p(x) \\propto R(x)\n \n from which we can sample sequentially (like episodic RL, rather than iteratively as MCMC methods would). We show that our method, GFlowNet, is very useful on a combinatorial domain, drug molecule synthesis, because unlike RL methods it generates diverse \n \n \n \n x\n \n \n \n x\n \n s by design.",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "",
"publishedDate": null,
"readerable": true

View file

@ -3,7 +3,7 @@
"byline": "View my complete profile",
"dir": null,
"excerpt": "Theodore A. Postol is professor emeritus of Science, Technology, and International Security at the Massachusetts Institute of Technolog...",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "https://infoproc.blogspot.com/favicon.ico",
"previewImage": "https://lh3.googleusercontent.com/blogger_img_proxy/ABLy4EwrOqWiqDKUTjOKgPfAJkAH9M0VlZ8ystq9wP0nHvpdfqFpWeootDAtR3o6ZhVbEHf76IEUuztQuEVauUdXxB_jbiK4qOsTNVH3qqz0TtrglbYoOw=w1200-h630-n-k-no-nu",
"publishedDate": "2022-05-18T16:00:00.000Z",

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "Part 1: Who should get the vaccine first? Sell to the highest bidder. The disease and recession go away faster.",
"siteName": null,
"siteName": "fakehost",
"previewImage": "https://lh6.googleusercontent.com/proxy/QfszXavmpOM6v0Er22-RrJg7cyNBPk6alnXmZ3MQnqDQ7GWeiytIaO_eIQTeh75iNlsbjFqSoqOytExYaUdlwJyJaj7fb5CEdu2DVI6OsMJvWLGyhA=w1200-h630-p-k-no-nu",
"publishedDate": "2020-12-07T08:00:00.000Z",
"readerable": true

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "The newsletter that makes you smarter about web3",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "https://media.beehiiv.net/uploads/publication/logo/654e9594-184c-4884-8e02-e6e58a3a6871/thumb_Untitled__1000_x_1000_px___2_.png",
"previewImage": "https://media.beehiiv.net/uploads/asset/file/30564/Screenshot_2022-04-08_115750.png",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": "The New York Times",
"dir": null,
"excerpt": "The Sept. 27, 2022 episode of “The Ezra Klein Show”",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "/vi-assets/static-assets/favicon-d2483f10ef688e6f89e23806b9700298.ico",
"previewImage": "https://static01.nyt.com/newsgraphics/images/icons/defaultPromoCrop.png",
"publishedDate": "2022-09-27T16:25:17.221Z",

View file

@ -3,7 +3,7 @@
"byline": "Kate Conger",
"dir": null,
"excerpt": "The social media company went public in 2013. But Elon Musk is taking it private as part of his acquisition of the firm. Heres what that means.",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "http://fakehost/vi-assets/static-assets/favicon-d2483f10ef688e6f89e23806b9700298.ico",
"previewImage": "https://static01.nyt.com/images/2022/10/29/business/00jpTWITTER-PRIVATE2-print/00MUSK-TWITTER-facebookJumbo.jpg",
"publishedDate": "2022-10-28T09:00:25.000Z",

View file

@ -3,7 +3,7 @@
"byline": "Ernesto Londoño, Letícia Casado",
"dir": null,
"excerpt": "Critics see the recent behavior of Brazils president — polarizing in the best of times — as an unnerving sign of a flailing leader. His strategy, if there is one, is difficult to discern.",
"siteName": null,
"siteName": "fakehost",
"previewImage": "https://static01.nyt.com/images/2021/03/31/world/31brazil/31brazil-facebookJumbo.jpg",
"publishedDate": "2021-03-31T23:26:15.000Z",
"readerable": true

View file

@ -3,7 +3,7 @@
"byline": "Robin Wieruch",
"dir": null,
"excerpt": "A tutorial on how to fetch data in React with Hooks from third-party APIs. You will use state and effect hooks for the data request from a real API ...",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "http://fakehost/favicon-32x32.png?v=9db82c76a9aaf54925ac42d41f3d384c",
"previewImage": "https://www.robinwieruch.de/static/9b13b3546c675d6f1a1e565f5185cab6/9842e/banner.jpg",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "The “Weak Garden of Eden” model for the origin and dispersal of modern humans (Harpendinget al., 1993) posits that modern humans spread into separate …",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/13/images/favSD.ico",
"previewImage": "https://ars.els-cdn.com/content/image/1-s2.0-S0047248420X00121-cov150h.gif",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": "Andrew Bulkeley",
"dir": null,
"excerpt": "Hello 20\n Percent,",
"siteName": null,
"siteName": "fakehost",
"publishedDate": "2001-01-13T16:00:00.000Z",
"readerable": true
}

View file

@ -3,7 +3,7 @@
"byline": "Michael Shellenberger",
"dir": null,
"excerpt": "For decades, people have claimed that homelessness is just a\n housing problem. Sure, many also have substance use and mental\n illness issues. But if we just give homeless people their own\n own studio apartments, and decriminalize public camping,\n drugs, and shoplifting, the problem will go away, many\n claimed.",
"siteName": null,
"siteName": "fakehost",
"publishedDate": "2001-05-25T16:00:00.000Z",
"language": "English",
"readerable": true

View file

@ -3,7 +3,7 @@
"byline": "author-circle",
"dir": null,
"excerpt": "Explore our list of the best walks in Sydney where youll find stunning coastal views, historical sites, magnificent beaches and fascinating wildlife.",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "/sites/sydney/files/favicon-16x16.png",
"previewImage": "https://www.sydney.com/sites/sydney/files/styles/open_graph/public/2020-06/Sydney%20Harbour%20from%20Bradleys%20Head%2C%20Mosman.jpg?itok=fJkitzF5",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": "Noclip - Video Game Documentaries",
"dir": null,
"excerpt": "The Story of Celeste's Development",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "",
"previewImage": "https://i.ytimg.com/vi/c3mbELVqAmo/hqdefault.jpg",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": null,
"dir": null,
"excerpt": "一句话,用整体性学习,即把新旧知识链起来成网,而不是分...",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "https://mdn.alipayobjects.com/huamei_0prmtq/afts/img/A*sRUdR543RjcAAAAAAAAAAAAADvuFAQ/original",
"previewImage": "https://cdn.nlark.com/yuque/0/2022/png/22724648/1671339142303-ce7c7caa-57b6-473b-8fb3-bfaf59a79d3b.png",
"publishedDate": null,

View file

@ -3,7 +3,7 @@
"byline": "匿名用户",
"dir": null,
"excerpt": "二手房,流程",
"siteName": null,
"siteName": "fakehost",
"siteIcon": "https://static.zhihu.com/heifetz/assets/apple-touch-icon-152.81060cab.png",
"publishedDate": "2016-06-28T07:03:00.000Z",
"language": "English",

View file

@ -5996,6 +5996,11 @@
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
"@sindresorhus/is@^4.0.0":
version "4.6.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3":
version "1.8.3"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
@ -13507,6 +13512,13 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
elastic-ts@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/elastic-ts/-/elastic-ts-0.9.0.tgz#919b7646cd31d753235f3f9a336f7f26c5e3654d"
integrity sha512-w9Xj/67ygllZG1RS1uMnmWLMfvTEE8zUMyn9zYiEOIgt8RFLKu5X5qCT1N2eYo6IQNTCX5DUdlIw87ii36Udtg==
dependencies:
"@sindresorhus/is" "^4.0.0"
electron-to-chromium@^1.3.811:
version "1.3.816"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz#ab6488b126de92670a6459fe3e746050e0c6276f"