mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Merge pull request #1915 from omnivore-app/allow-scoping-searches-to-site
Allow scoping searches to site:
This commit is contained in:
commit
86ae533b66
32 changed files with 603 additions and 680 deletions
5
packages/api/apollo.config.js
Normal file
5
packages/api/apollo.config.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
service: {
|
||||
localSchemaFile: './src/generated/schema.graphql',
|
||||
},
|
||||
}
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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', () => {
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@
|
|||
"outDir": "dist"
|
||||
},
|
||||
"include": ["src", "test"],
|
||||
"exclude": ["./src/generated", "./test"]
|
||||
"exclude": ["./src/generated"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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. Here’s 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",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"byline": "Ernesto Londoño, Letícia Casado",
|
||||
"dir": null,
|
||||
"excerpt": "Critics see the recent behavior of Brazil’s 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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"byline": "author-circle",
|
||||
"dir": null,
|
||||
"excerpt": "Explore our list of the best walks in Sydney where you’ll 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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
12
yarn.lock
12
yarn.lock
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue