Skip to content

Commit

Permalink
rr0 mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
Javarome committed Mar 15, 2024
1 parent c7936bb commit c2c206c
Show file tree
Hide file tree
Showing 32 changed files with 75 additions and 58 deletions.
9 changes: 5 additions & 4 deletions time/datasource/CaseSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import { RR0SsgContext } from "../../RR0SsgContext"
*/
export interface CaseSource<S> {
/**
* @param author The datasource author to mention as a source.
* @param copyright The datasource name/copyright to mention as a source.
* @protected
* @member {string[]} authors The datasource authors to mention as a source.
*/
readonly authors: string[]
/**
* @member {string} authors The datasource name to mention as a source.
*/
readonly author: string
readonly copyright: string

/**
Expand Down
4 changes: 3 additions & 1 deletion time/datasource/ChronologyReplacer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,10 @@ export class ChronologyReplacer implements DomReplacement<HtmlRR0SsgContext, HTM
if (this.save) {
const csvContents = new CsvMapper().reduce(context, sourceCases, fetchTime)
const specialChars = /[ -?!&*#.:;=°',]/g
const authorsStr = datasource.authors.map(
author => StringUtil.removeAccents(author).replace(specialChars, "")).join("-")
const fileName = path.join(path.dirname(context.inputFile.name),
StringUtil.removeAccents(datasource.author).replace(specialChars, "") + "_"
authorsStr + "_"
+ StringUtil.removeAccents(datasource.copyright).replace(specialChars, "") + ".csv")
fs.writeFileSync(fileName, csvContents, {encoding: "utf-8"})
}
Expand Down
3 changes: 2 additions & 1 deletion time/datasource/DatasourceTestCase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ export class DatasourceTestCase<S> {
if (sources?.length > 0) {
const source = sources[0]
const publicationStr = source.publication ? `, ${source.publication.time}` : ""
const sourceStr = ` <span class="source">${datasource.author}: <a href="${nativeCase.url.href.replaceAll(
const authorStr = datasource.authors.join(", ")
const sourceStr = ` <span class="source">${authorStr}: <a href="${nativeCase.url.href.replaceAll(
"&",
"&amp;")}">cas n°&nbsp;${caseNumber}</a>, <i>${datasource.copyright}</i>${publicationStr}</span>`
expect(item.innerHTML).toBe(
Expand Down
2 changes: 1 addition & 1 deletion time/datasource/acufo/AcufoDatasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface QueryParameters {
}

export class AcufoDatasource extends HttpSource implements CaseSource<AcufoCase> {
readonly author = "Gross, Patrick"
readonly authors = ["Gross, Patrick"]
readonly copyright = "ACUFO/ALSACAT (Les ovnis vus de près)"

constructor(readonly baseUrl = "https://ufologie.patrickgross.org", readonly searchPath = "alsacat") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { BaseOvniFranceCase } from "./BaseOvniFranceCase"
export class BaseOvniFranceCaseSummaryMapper implements CaseMapper<RR0SsgContext, BaseOvniFranceCase, BaseOvniFranceCaseSummary> {

constructor(
readonly baseUrl: string, readonly copyright: string, readonly author: string
readonly baseUrl: string, readonly copyright: string, readonly authors: string
) {
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { chambonSurVoueize23 } from "../../../org/eu/fr/region/naq/23/chambon/Ch

function expectedSource(datasource: BaseOvniFranceHttpDatasource, dataDate: Date, caseNumber: number) {
const url = new URL(datasource.searchPath + "?typlist=20&page=0&numobs=" + caseNumber, datasource.baseUrl)
return new OnlineSource(url, "cas n° " + caseNumber, [datasource.author],
return new OnlineSource(url, "cas n° " + caseNumber, datasource.authors,
{publisher: datasource.copyright, time: dataDate.toLocaleString()})
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ export class BaseOvniFranceCaseSummaryRR0Mapper implements CaseMapper<HtmlRR0Ssg

constructor(
protected depService: DepartmentService, protected cityService: CityService,
readonly baseUrl: string, readonly copyright: string, readonly author: string
readonly baseUrl: string, readonly copyright: string, readonly authors: string[]
) {
}

map(context: HtmlRR0SsgContext, sourceCase: BaseOvniFranceCaseSummary, sourceTime: Date): RR0CaseSummary {
const caseSource = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber, [this.author],
const caseSource = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber, this.authors,
{publisher: this.copyright, time: sourceTime.toLocaleString()})
const depCode = sourceCase.depCode
const dep = this.depService.get(depCode, undefined)
Expand Down
2 changes: 1 addition & 1 deletion time/datasource/baseovnifrance/BaseOvniFranceCsv.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ ${case1.caseNumber},http://baseovnifrance.free.fr/listgen.php?typlist=20&page=0&
const data = fs.readFileSync("time/1/9/7/7/03/05_03_24_1709676761.txt", {encoding: "latin1"})
const csvMapper = new BaseOvniFranceCaseSummaryMapper(baseOvniFranceDatasource.baseUrl,
baseOvniFranceDatasource.searchPath,
baseOvniFranceDatasource.author)
baseOvniFranceDatasource.authors)
const cases = exportMapper.read(context, data)
.map(csvCase => csvMapper.map(context, csvCase, dataDate))
.sort(baseOvniFranceSortComparator)
Expand Down
5 changes: 4 additions & 1 deletion time/datasource/baseovnifrance/BaseOvniFranceDatasource.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { BaseOvniFranceCaseSummary } from "./BaseOvniFranceCaseSummary"
import { CaseSource } from "../CaseSource"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class BaseOvniFranceDatasource implements CaseSource<BaseOvniFranceCaseSummary> {
readonly author = "Chastan, Luc"
readonly authors = ["Chastan, Luc"]
readonly copyright = "Base OVNI France"

abstract getAll(context: RR0SsgContext): Promise<BaseOvniFranceCaseSummary[]>
}
2 changes: 1 addition & 1 deletion time/datasource/baseovnifrance/BaseOvniFranceRR0Mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const baseOvniFranceDatasource = new BaseOvniFranceHttpDatasource()

export const baseOvniFranceRR0Mapper = new BaseOvniFranceCaseSummaryRR0Mapper(
departmentService, cityService,
baseOvniFranceDatasource.baseUrl, baseOvniFranceDatasource.copyright, baseOvniFranceDatasource.author
baseOvniFranceDatasource.baseUrl, baseOvniFranceDatasource.copyright, baseOvniFranceDatasource.authors
)

export const baseOvniFranceRR0Mapping: RR0CaseMapping<BaseOvniFranceCaseSummary> = {
Expand Down
4 changes: 2 additions & 2 deletions time/datasource/fufora/FuforaCaseSummaryRR0Mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ export class FuforaCaseSummaryRR0Mapper implements CaseMapper<HtmlRR0SsgContext,

constructor(
protected cityService: CityService,
readonly baseUrl: string, readonly copyright: string, readonly author: string
readonly baseUrl: string, readonly copyright: string, readonly authors: string[]
) {
}

map(context: HtmlRR0SsgContext, sourceCase: FuforaCaseSummary, sourceTime: Date): RR0CaseSummary {
const source = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber, [this.author],
const source = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber, this.authors,
{publisher: this.copyright, time: sourceTime.toLocaleString()})
const cityName = sourceCase.city || sourceCase.sightingPlace
const city = this.cityService.find(context, cityName, undefined)
Expand Down
5 changes: 4 additions & 1 deletion time/datasource/fufora/FuforaDatasource.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { FuforaCaseSummary } from "./FuforaCaseSummary"
import { CaseSource } from "../CaseSource"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class FuforaDatasource implements CaseSource<FuforaCaseSummary> {
readonly author = "FUFORA"
readonly authors = ["FUFORA"]
readonly copyright = "Base de données observationnelle"

abstract getAll(context: RR0SsgContext): Promise<FuforaCaseSummary[]>
}
2 changes: 1 addition & 1 deletion time/datasource/fufora/FuforaRR0Mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const fuforaDatasource = new FuforaHttpDatasource()

export const fuforaRR0Mapper = new FuforaCaseSummaryRR0Mapper(cityService, fuforaDatasource.baseUrl,
fuforaDatasource.copyright,
fuforaDatasource.author)
fuforaDatasource.authors)

export const fuforaRR0Mapping = {datasource: fuforaDatasource, mapper: fuforaRR0Mapper}

Expand Down
2 changes: 1 addition & 1 deletion time/datasource/geipan/GeipanCaseSummaryMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { CountryCode } from "../../../org/country/CountryCode"
*/
export class GeipanCaseSummaryMapper implements CaseMapper<RR0SsgContext, GeipanCase, GeipanCaseSummary> {

constructor(readonly baseUrl: string, readonly copyright: string, readonly author: string) {
constructor(readonly baseUrl: string, readonly copyright: string, readonly authors: string[]) {
}

map(context: RR0SsgContext, csvCase: GeipanCase, sourceTime: Date): GeipanCaseSummary {
Expand Down
4 changes: 2 additions & 2 deletions time/datasource/geipan/GeipanCaseSummaryRR0Mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export class GeipanCaseSummaryRR0Mapper implements CaseMapper<HtmlRR0SsgContext,
constructor(
protected cityService: CityService, protected departmentService: DepartmentService,
protected regionService: RegionService,
readonly baseUrl: string, readonly copyright: string, readonly author: string
readonly baseUrl: string, readonly copyright: string, readonly authors: string[]
) {
}

Expand Down Expand Up @@ -47,7 +47,7 @@ export class GeipanCaseSummaryRR0Mapper implements CaseMapper<HtmlRR0SsgContext,

map(context: HtmlRR0SsgContext, sourceCase: GeipanCaseSummary, sourceTime: Date): RR0CaseSummary {
const caseSource = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber,
[this.author],
this.authors,
{publisher: this.copyright, time: sourceTime.toLocaleString()})
const place = this.getPlace(context, sourceCase)
return {
Expand Down
2 changes: 1 addition & 1 deletion time/datasource/geipan/GeipanCsv.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ describe("GEIPAN", () => {
const exportMapper = new CsvMapper<GeipanCase>(";")
const data = fs.readFileSync("time/datasource/geipan/export_cas_pub_20210219111412.csv", {encoding: "latin1"})
const csvMapper = new GeipanCaseSummaryMapper(geipanHttpDatasource.baseUrl, geipanHttpDatasource.searchPath,
geipanHttpDatasource.author)
geipanHttpDatasource.authors)
const cases = exportMapper.read(context, data).map(csvCase => csvMapper.map(context, csvCase, dataDate))
expect(cases.length).toEqual(2768)
const expected1 = geipanTestCaseSummaries[0]
Expand Down
10 changes: 8 additions & 2 deletions time/datasource/geipan/GeipanDatasource.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
export abstract class GeipanDatasource {
readonly author = "GEIPAN"
import { CaseSource } from "../CaseSource"
import { GeipanCaseSummary } from "./GeipanCaseSummary"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class GeipanDatasource implements CaseSource<GeipanCaseSummary> {
readonly authors = ["GEIPAN"]
readonly copyright = "Catalogue de cas"

abstract getAll(context: RR0SsgContext): Promise<GeipanCaseSummary[]>
}
2 changes: 1 addition & 1 deletion time/datasource/geipan/GeipanFileDatasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class GeipanFileDatasource extends GeipanDatasource implements CaseSource
const exportMapper = new CsvMapper<GeipanCase>(";")
const file = SsgFile.read(context, this.fileName, "latin1")
const csvMapper = new GeipanCaseSummaryMapper(geipanHttpDatasource.baseUrl, geipanHttpDatasource.searchPath,
geipanHttpDatasource.author)
geipanHttpDatasource.authors)
return exportMapper.read(context, file.contents).map(csvCase => csvMapper.map(context, csvCase, file.lastModified))
}
}
3 changes: 1 addition & 2 deletions time/datasource/geipan/GeipanHttpDatasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { GeipanCaseSummary } from "./GeipanCaseSummary"
import { TimeContext } from "../../TimeContext"
import { ObjectUtil } from "../../../util/ObjectUtil"
import assert from "assert"
import { CaseSource } from "../CaseSource"
import {
GeipanCaseClassification,
GeipanCaseClassification_calc,
Expand Down Expand Up @@ -38,7 +37,7 @@ interface QueryParameters {
field_agregation_index_value: string
}

export class GeipanHttpDatasource extends GeipanDatasource implements CaseSource<GeipanCaseSummary> {
export class GeipanHttpDatasource extends GeipanDatasource {
protected static readonly dateFormat = /(.+?)\s*\(([\d-AB]+)\)\s+(\d+)(?:.(\d+)(?:.(\d+))?)?/
protected readonly http = new HttpSource()

Expand Down
5 changes: 3 additions & 2 deletions time/datasource/geipan/GeipanRR0Mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import { GeipanCaseSummary } from "./GeipanCaseSummary"
import { GeipanCaseSummaryRR0Mapper } from "./GeipanCaseSummaryRR0Mapper"
import { departmentService } from "../../../org/country/region/department/DepartmentService"
import { GeipanFileDatasource } from "./GeipanFileDatasource"
import { regionService } from "../../../org/country/region/RegionService"

export const geipanHttpDatasource = new GeipanHttpDatasource("https://geipan.fr", "fr/recherche/cas")
export const geipanFileDatasource = new GeipanFileDatasource("time/datasource/geipan/export_cas_pub_20210219111412.csv")

export const geipanRR0Mapper = new GeipanCaseSummaryRR0Mapper(
cityService, departmentService,
geipanHttpDatasource.baseUrl, geipanHttpDatasource.copyright, geipanHttpDatasource.author
cityService, departmentService, regionService,
geipanHttpDatasource.baseUrl, geipanHttpDatasource.copyright, geipanHttpDatasource.authors
)

export const geipanRR0Mapping = {datasource: geipanFileDatasource, mapper: geipanRR0Mapper}
Expand Down
7 changes: 5 additions & 2 deletions time/datasource/nuforc/NuforcDatasource.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { NuforcCaseSummary } from "./NuforcCaseSummary"
import { CaseSource } from "../CaseSource"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class NuforcHttpDatasource implements CaseSource<NuforcCaseSummary> {
readonly author = "NUFORC"
export abstract class NuforcDatasource implements CaseSource<NuforcCaseSummary> {
readonly authors = ["NUFORC"]
readonly copyright = "Online Database"

abstract getAll(context: RR0SsgContext): Promise<NuforcCaseSummary[]>
}
1 change: 1 addition & 0 deletions time/datasource/nuforc/NuforcHttpDatasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import assert from "assert"
import { TimeContext } from "../../TimeContext"
import { NuforcCountry } from "./NuforcCountry"
import { NuforcShape } from "./NuforcShape"
import { NuforcDatasource } from "./NuforcDatasource"

interface QueryParameters {
id: string
Expand Down
2 changes: 1 addition & 1 deletion time/datasource/nuforc/NuforcRR0Mapper.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { bonneyLake } from "../../../org/us/region/wa/pierce/bonneylake/BonneyLa

function expectedSource(datasource: NuforcHttpDatasource, dataDate: Date, caseNumber: number) {
const url = new URL("sighting/?id=" + caseNumber, datasource.baseUrl)
return new OnlineSource(url, "cas n° " + caseNumber, [datasource.author],
return new OnlineSource(url, "cas n° " + caseNumber, datasource.authors,
{publisher: datasource.copyright, time: dataDate.toLocaleString()})
}

Expand Down
8 changes: 3 additions & 5 deletions time/datasource/nuforc/NuforcRR0Mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { NuforcCaseSummary } from "./NuforcCaseSummary"
import { HtmlRR0SsgContext } from "../../../RR0SsgContext"
import { OnlineSource } from "../../../source/OnlineSource"
import { CityService } from "../../../org/country/region/department/city/CityService"
import { NamedPlace, RR0CaseSummary } from "../../RR0CaseSummary"
import assert from "assert"
import { CountryService } from "../../../org/country/CountryService"
import { australia } from "../../../org/au/Australia"
Expand All @@ -23,6 +22,7 @@ import { uk } from "../../../org/uk/Uk"
import { colombia } from "../../../org/co/Colombia"
import { NuforcShape } from "./NuforcShape"
import { germany } from "../../../org/eu/de/Germany"
import { NamedPlace, RR0CaseSummary } from "../rr0/RR0CaseSummary"

export class NuforcRR0Mapper implements CaseMapper<HtmlRR0SsgContext, NuforcCaseSummary, RR0CaseSummary> {

Expand Down Expand Up @@ -52,8 +52,7 @@ export class NuforcRR0Mapper implements CaseMapper<HtmlRR0SsgContext, NuforcCase

constructor(
protected cityService: CityService, protected countryService: CountryService,
readonly baseUrl: string,
readonly copyright: string, readonly author: string
readonly baseUrl: string, readonly copyright: string, readonly authors: string[]
) {
}

Expand Down Expand Up @@ -84,8 +83,7 @@ export class NuforcRR0Mapper implements CaseMapper<HtmlRR0SsgContext, NuforcCase

map(context: HtmlRR0SsgContext, sourceCase: NuforcCaseSummary, sourceTime: Date): RR0CaseSummary {
const caseSource = new OnlineSource(sourceCase.url, "cas n° " + sourceCase.caseNumber,
[this.author],
{publisher: this.copyright, time: sourceTime.toLocaleString()})
this.authors, {publisher: this.copyright, time: sourceTime.toLocaleString()})
assert.ok(sourceCase.country, `NUFORC country code is ${sourceCase.country}`)
const countryCode = NuforcRR0Mapper.countryMap[sourceCase.country]
assert.ok(countryCode, `Could not find RR0 country to map from NUFORC code ${countryCode}`)
Expand Down
4 changes: 2 additions & 2 deletions time/datasource/nuforc/NuforcRR0Mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { NuforcCaseSummary } from "./NuforcCaseSummary"

export const nuforcDatasource = new NuforcHttpDatasource()

export const nuforcRR0Mapper = new NuforcRR0Mapper(cityService, countryService, nuforcDatasource.baseUrl,
nuforcDatasource.copyright, nuforcDatasource.author)
export const nuforcRR0Mapper = new NuforcRR0Mapper(cityService, countryService,
nuforcDatasource.baseUrl, nuforcDatasource.copyright, nuforcDatasource.authors)

export const nuforcRR0Mapping = {datasource: nuforcDatasource, mapper: nuforcRR0Mapper}

Expand Down
6 changes: 2 additions & 4 deletions time/datasource/rr0/RR0CaseSummaryMapper.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { CaseMapper } from "../CaseMapper"
import { HtmlRR0SsgContext } from "../../../RR0SsgContext"
import { RR0CaseSummary } from "../../RR0CaseSummary"
import { RR0CaseSummary } from "./RR0CaseSummary"

export class RR0CaseSummaryMapper implements CaseMapper<HtmlRR0SsgContext, RR0CaseSummary, RR0CaseSummary> {

constructor(
readonly baseUrl: string, readonly copyright: string, readonly author: string
) {
constructor(readonly baseUrl: string, readonly copyright: string, readonly authors: string[]) {
}

map(context: HtmlRR0SsgContext, sourceCase: RR0CaseSummary, sourceTime: Date): RR0CaseSummary {
Expand Down
6 changes: 4 additions & 2 deletions time/datasource/rr0/RR0Datasource.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { CaseSource } from "../CaseSource"
import { RR0CaseSummary } from "../../RR0CaseSummary"
import { RR0CaseSummary } from "./RR0CaseSummary"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class RR0Datasource implements CaseSource<RR0CaseSummary> {
readonly author = "Jérôme Beau"
readonly authors = ["Jérôme Beau"]
readonly copyright = "RR0"

abstract getAll(context: RR0SsgContext): Promise<RR0CaseSummary[]>
}
4 changes: 2 additions & 2 deletions time/datasource/rr0/RR0HttpDatasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export class RR0HttpDatasource extends RR0Datasource {
const sourceContent = sourceId.querySelector(".source-contents")
const title = this.getDescription(sourceContent)
sourceId.remove()
sources.push(new Source(title))
sources.push(new Source(title, this.authors))
}
return sources
}
Expand Down Expand Up @@ -115,7 +115,7 @@ export class RR0HttpDatasource extends RR0Datasource {
return {name, place}
}

protected getDescription(el: HTMLElement): string {
protected getDescription(el: Element): string {
const notes = el.querySelectorAll(".note-id")
for (const note of notes) {
const noteContents = note.querySelector(".note-contents")
Expand Down
7 changes: 2 additions & 5 deletions time/datasource/rr0/RR0Mapping.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { RR0HttpDatasource } from "./Rr0HttpDatasource"
import { cityService } from "../../../org/Cities"
import { RR0CaseSummary } from "./RR0CaseSummary"
import { RR0CaseSummaryMapper } from "./RR0CaseSummaryMapper"
import { RR0HttpDatasource } from "./RR0HttpDatasource"

export const rr0Datasource = new RR0HttpDatasource()

export const rr0Mapper = new RR0CaseSummaryMapper(cityService, rr0Datasource.baseUrl,
rr0Datasource.copyright,
rr0Datasource.author)
export const rr0Mapper = new RR0CaseSummaryMapper(rr0Datasource.baseUrl, rr0Datasource.copyright, rr0Datasource.authors)

export const rr0Mapping = {datasource: rr0Datasource, mapper: rr0Mapper}

Expand Down
5 changes: 4 additions & 1 deletion time/datasource/urecat/UrecatDatasource.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { UrecatCase } from "./UrecatCase"
import { CaseSource } from "../CaseSource"
import { RR0SsgContext } from "../../../RR0SsgContext"

export abstract class UrecatDatasource implements CaseSource<UrecatCase> {
readonly author = "Gross, Patrick"
readonly authors = ["Gross, Patrick"]
readonly copyright = "URECAT (Les ovnis vus de près)"

abstract getAll(context: RR0SsgContext): Promise<UrecatCase[]>
}
Loading

0 comments on commit c2c206c

Please sign in to comment.