Skip to content

Commit

Permalink
feat: export dataset factories
Browse files Browse the repository at this point in the history
  • Loading branch information
tpluscode committed Aug 27, 2024
1 parent 80cea6b commit 7784017
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/long-apples-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@zazuko/env": minor
---

Export interfaces of dataset factories
10 changes: 7 additions & 3 deletions packages/env/lib/DatasetFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@ import type { Quad } from '@rdfjs/types'
import type { Environment } from '@rdfjs/environment/Environment.js'
import { FormatsFactory } from '@rdfjs/formats/Factory.js'
import DatasetCore from '@rdfjs/dataset/DatasetCore.js'
import type { DatasetCtor } from './Dataset.js'
import type { Dataset, DatasetCtor } from './Dataset.js'

export interface FactoryMethod<D extends DatasetCore> {
(quads?: Iterable<Quad>): D
Class: DatasetCtor<D>
}

export default <D extends DatasetCore>(createConstructor: (env: Environment<FormatsFactory>) => DatasetCtor<D>) => class DatasetFactory {
export interface DatasetFactory<D extends DatasetCore = Dataset> {
dataset: FactoryMethod<D>
}

export default <D extends DatasetCore>(createConstructor: (env: Environment<FormatsFactory>) => DatasetCtor<D>) => class implements DatasetFactory<D> {
public dataset!: FactoryMethod<D>

init(this: Environment<FormatsFactory | DatasetFactory>) {
init(this: Environment<FormatsFactory | DatasetFactory<D>>) {
const Dataset = createConstructor(this)

this.dataset = ((quads: Iterable<Quad> = []) => {
Expand Down
9 changes: 7 additions & 2 deletions packages/env/lib/DatasetFactoryExt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import toStream from 'rdf-dataset-ext/toStream.js'
import fromStream from 'rdf-dataset-ext/fromStream.js'
import toCanonical from 'rdf-dataset-ext/toCanonical.js'
import type { DatasetCtor } from './Dataset.js'
import type { Dataset } from './DatasetExt.js'
import DatasetFactory, { FactoryMethod as BaseFactoryMethod } from './DatasetFactory.js'

export interface FactoryMethod<D extends DatasetCore> extends BaseFactoryMethod<D> {
Expand All @@ -15,10 +16,14 @@ export interface FactoryMethod<D extends DatasetCore> extends BaseFactoryMethod<
fromStream: (stream: Readable) => Promise<D>
}

export default <D extends DatasetCore>(createConstructor: (env: Environment<FormatsFactory>) => DatasetCtor<D>) => class DatasetFactoryExt extends DatasetFactory(createConstructor) {
export interface DatasetFactoryExt<D extends DatasetCore = Dataset> {
dataset: FactoryMethod<D>
}

export default <D extends DatasetCore>(createConstructor: (env: Environment<FormatsFactory>) => DatasetCtor<D>) => class extends DatasetFactory(createConstructor) implements DatasetFactoryExt<D> {
public declare dataset: FactoryMethod<D>

init(this: Environment<FormatsFactory | DatasetFactoryExt>) {
init(this: Environment<FormatsFactory | DatasetFactoryExt<D>>) {
super.init()

this.dataset.toCanonical = toCanonical
Expand Down

0 comments on commit 7784017

Please sign in to comment.