diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 401a6a70..84d702c1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,10 +8,13 @@ title: "[PKG]: [BUG DESCRIPTION]" Packages affected: +- [ ] sdk +- [ ] etl +- [ ] widget +- [ ] http-client +- [ ] http-server +- [ ] spa (explorer) - [ ] OWL/SHACL definitions -- [ ] ts-sdk -- [ ] ts-etl -- [ ] spa ### Expected behavior diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index 4b25fa00..333ba9ea 100644 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -8,10 +8,13 @@ title: "[DOCS]: [DESCRIPTION]" Packages related to documentation request: +- [ ] sdk +- [ ] etl +- [ ] widget +- [ ] http-client +- [ ] http-server +- [ ] spa (explorer) - [ ] OWL/SHACL definitions -- [ ] ts-sdk -- [ ] ts-etl -- [ ] spa ### Description diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 4a7869ee..9c9cd955 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,10 +8,13 @@ title: "[PKG]: [FEATURE NAME]" Packages to improve: +- [ ] sdk +- [ ] etl +- [ ] widget +- [ ] http-client +- [ ] http-server +- [ ] spa (explorer) - [ ] OWL/SHACL definitions -- [ ] ts-sdk -- [ ] ts-etl -- [ ] spa ### Description diff --git a/.github/workflows/ts-etl-tests.yaml b/.github/workflows/etl-tests.yaml similarity index 96% rename from .github/workflows/ts-etl-tests.yaml rename to .github/workflows/etl-tests.yaml index 16ae83b2..608eab9c 100644 --- a/.github/workflows/ts-etl-tests.yaml +++ b/.github/workflows/etl-tests.yaml @@ -1,4 +1,4 @@ -name: Test ts-etl +name: Test @docmaps/etl on: push: @@ -7,7 +7,7 @@ on: workflow_call: env: - PKG_DIR: "packages/ts-etl" + PKG_DIR: "packages/etl" jobs: nodejs_test: diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml index 9057245c..3b30c11d 100644 --- a/.github/workflows/gh-pages.yaml +++ b/.github/workflows/gh-pages.yaml @@ -53,7 +53,7 @@ jobs: run_install: false - name: Setup Pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v4 - name: Install dependencies run: | @@ -61,7 +61,7 @@ jobs: - name: Generate docs run: | - cd packages/ts-sdk ; + cd packages/sdk ; pnpm docs:generate; - name: Build SPA @@ -85,4 +85,4 @@ jobs: path: './docs' - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ddb8f784..ea7d2478 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -17,20 +17,21 @@ env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} jobs: - test-ts-sdk: - uses: ./.github/workflows/ts-sdk-tests.yaml - test-ts-http-server: + test-sdk: + uses: ./.github/workflows/sdk-tests.yaml + test-http-server: uses: ./.github/workflows/http-server-tests.yaml - test-ts-etl: - uses: ./.github/workflows/ts-etl-tests.yaml + test-etl: + uses: ./.github/workflows/etl-tests.yaml test-example: uses: ./.github/workflows/example-tests.yaml test-specification: uses: ./.github/workflows/specification-tests.yaml nodejs_release: needs: - - test-ts-sdk - - test-ts-etl + - test-sdk + - test-etl + - test-http-server - test-specification - test-example diff --git a/.github/workflows/ts-sdk-tests.yaml b/.github/workflows/sdk-tests.yaml similarity index 96% rename from .github/workflows/ts-sdk-tests.yaml rename to .github/workflows/sdk-tests.yaml index c1af6a8c..e6a92f42 100644 --- a/.github/workflows/ts-sdk-tests.yaml +++ b/.github/workflows/sdk-tests.yaml @@ -1,4 +1,4 @@ -name: Test ts-sdk +name: Test @docmaps/sdk on: push: @@ -7,7 +7,7 @@ on: workflow_call: env: - PKG_DIR: "packages/ts-sdk" + PKG_DIR: "packages/sdk" jobs: nodejs_test: diff --git a/.nvmrc b/.nvmrc index d509f248..89e0c3db 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.14 \ No newline at end of file +20.10 \ No newline at end of file diff --git a/README.md b/README.md index 0034d94a..9aaa33ac 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ More info: https://docmaps.knowledgefutures.org ## About This Repo -This repo contains JSONLD contexts and framing for Docmaps. +This repo contains the Typescript-based libraries for use with Node.js. -It also contains the Typescript-based libraries (initially, just `packages/ts-sdk`) for use with Node.js. +It also contains JSONLD contexts and RDF-native framing tools and SHACL shapes for Docmaps. ### Monorepo usage @@ -21,7 +21,7 @@ cross-package behavior, such as release automation. automatically generate semvers based on commit history for each package in the repository. Multiple tags are generated for a single commit if it updates multiple packages. -**Cross-dependencies and typescript:** Several packages depend on `ts-sdk`, and will refer to +**Cross-dependencies and typescript:** Several packages depend on `@docmaps/sdk`, and will refer to the `dist` directory within that package for their source code when making local changes. For that reason, you may need to run `pnpm run build:deps` in a package, or `pnpm run -r build` to build all packages, if you are making local changes to uptream dependencies within this @@ -46,7 +46,11 @@ Latest @context: https://w3id.org/docmaps/context.jsonld ## Packages -### [ts-sdk](/packages/ts-sdk) +### [sdk](/packages/sdk) + +> DEPRECATION NOTICE: the NPM package `docmaps-sdk` has been moved to `@docmaps/sdk`. +> (the source code still lives here.) +> Update your installs and imports accordingly. This package contains a library of JSON-parsing and string-parsing codecs based on `io-ts`, and associated Typescript types. These types can be used without `io-ts`, but @@ -59,7 +63,7 @@ along with the types/interfaces in type namespace. This package is a Node server that serves docmaps. It is the Typescript reference implementation of Docmaps Project RFC#001 API Server Interoperability Protocol. -### [ts-etl](/packages/ts-etl) +### [etl](/packages/etl) This package contains a CLI tool based on `commander.js` for generating docmaps. Currently, it supports generating a docmap for a given DOI if that DOI is indexed on Crossref, and diff --git a/packages/ts-etl/.eslintrc.cjs b/packages/etl/.eslintrc.cjs similarity index 100% rename from packages/ts-etl/.eslintrc.cjs rename to packages/etl/.eslintrc.cjs diff --git a/packages/ts-etl/.prettierrc.cjs b/packages/etl/.prettierrc.cjs similarity index 100% rename from packages/ts-etl/.prettierrc.cjs rename to packages/etl/.prettierrc.cjs diff --git a/packages/ts-etl/CONTRIBUTING.md b/packages/etl/CONTRIBUTING.md similarity index 100% rename from packages/ts-etl/CONTRIBUTING.md rename to packages/etl/CONTRIBUTING.md diff --git a/packages/ts-etl/README.md b/packages/etl/README.md similarity index 98% rename from packages/ts-etl/README.md rename to packages/etl/README.md index 8ebce275..2394ba09 100644 --- a/packages/ts-etl/README.md +++ b/packages/etl/README.md @@ -26,7 +26,7 @@ pnpm docmaps-etl item --source crossref-api 10.5194/angeo-40-247-2022 # or npm d ## Implementation -This tool and library are written using the [`docmaps-sdk` package](/packages/ts-sdk) +This tool and library are written using the [`docmaps-sdk` package](/packages/sdk) in this repository, as well as the [`crossref-openapi-client-ts`](https://github.com/Docmaps-Project/crossref-openapi-client-ts) also maintained by Knowledge Futures, Inc. As seen in `src/crossref.ts`[src/crossref.ts], Codecs from the SDK are processed using functional paradigms provided conveniently by diff --git a/packages/ts-etl/package.json b/packages/etl/package.json similarity index 95% rename from packages/ts-etl/package.json rename to packages/etl/package.json index d04cdb88..b518af25 100644 --- a/packages/ts-etl/package.json +++ b/packages/etl/package.json @@ -31,14 +31,14 @@ "@commander-js/extra-typings": "^11.0.0", "commander": "^11.0.0", "crossref-openapi-client-ts": "^1.3.0", - "docmaps-sdk": "workspace:^0.0.0", + "@docmaps/sdk": "workspace:^0.0.0", "fp-ts": "^2.14.0", "tsx": "^4.0.0", "typescript-collections": "^1.3.3" }, "devDependencies": { "@docmaps/build-configs": "workspace:^", - "@types/node": "^18.16.2", + "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "ava": "^5.2.0", diff --git a/packages/ts-etl/src/cli.ts b/packages/etl/src/cli.ts similarity index 100% rename from packages/ts-etl/src/cli.ts rename to packages/etl/src/cli.ts diff --git a/packages/ts-etl/src/command.ts b/packages/etl/src/command.ts similarity index 98% rename from packages/ts-etl/src/command.ts rename to packages/etl/src/command.ts index b7b3d2f5..88dc7456 100644 --- a/packages/ts-etl/src/command.ts +++ b/packages/etl/src/command.ts @@ -1,6 +1,6 @@ import type { CrossrefClient } from 'crossref-openapi-client-ts' import { Command, Option } from '@commander-js/extra-typings' -import { Publisher, PublisherT } from 'docmaps-sdk' +import { Publisher, PublisherT } from '@docmaps/sdk' import { isLeft, right } from 'fp-ts/lib/Either' import { process as proc } from './processor' diff --git a/packages/ts-etl/src/index.ts b/packages/etl/src/index.ts similarity index 100% rename from packages/ts-etl/src/index.ts rename to packages/etl/src/index.ts diff --git a/packages/ts-etl/src/plugins/crossref/api.ts b/packages/etl/src/plugins/crossref/api.ts similarity index 98% rename from packages/ts-etl/src/plugins/crossref/api.ts rename to packages/etl/src/plugins/crossref/api.ts index ea6adef0..48cafb5f 100644 --- a/packages/ts-etl/src/plugins/crossref/api.ts +++ b/packages/etl/src/plugins/crossref/api.ts @@ -3,7 +3,7 @@ import * as E from 'fp-ts/lib/Either' import type { Plugin } from '../../types' import { pipe } from 'fp-ts/lib/function' import * as TE from 'fp-ts/lib/TaskEither' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import { relatedDoisForWork, decodeActionForWork } from './functions' import { mapLeftToUnknownError } from '../../utils' diff --git a/packages/ts-etl/src/plugins/crossref/functions.ts b/packages/etl/src/plugins/crossref/functions.ts similarity index 98% rename from packages/ts-etl/src/plugins/crossref/functions.ts rename to packages/etl/src/plugins/crossref/functions.ts index 27a0e563..4b97cdc6 100644 --- a/packages/ts-etl/src/plugins/crossref/functions.ts +++ b/packages/etl/src/plugins/crossref/functions.ts @@ -2,7 +2,7 @@ import { Work, DatemorphISOString } from 'crossref-openapi-client-ts' import * as E from 'fp-ts/lib/Either' import * as A from 'fp-ts/lib/Array' import { pipe } from 'fp-ts/lib/function' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import { mapLeftToUnknownError, nameForAuthor } from '../../utils' import { Eq } from 'fp-ts/lib/string' diff --git a/packages/ts-etl/src/plugins/crossref/index.ts b/packages/etl/src/plugins/crossref/index.ts similarity index 100% rename from packages/ts-etl/src/plugins/crossref/index.ts rename to packages/etl/src/plugins/crossref/index.ts diff --git a/packages/ts-etl/src/processor.ts b/packages/etl/src/processor.ts similarity index 99% rename from packages/ts-etl/src/processor.ts rename to packages/etl/src/processor.ts index 05471a37..db7744f6 100644 --- a/packages/ts-etl/src/processor.ts +++ b/packages/etl/src/processor.ts @@ -1,4 +1,4 @@ -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import type { Plugin, RecursiveStepDataChain } from './types' import * as TE from 'fp-ts/lib/TaskEither' import * as A from 'fp-ts/lib/Array' diff --git a/packages/ts-etl/src/types.ts b/packages/etl/src/types.ts similarity index 96% rename from packages/ts-etl/src/types.ts rename to packages/etl/src/types.ts index 646f0631..9dd6782c 100644 --- a/packages/ts-etl/src/types.ts +++ b/packages/etl/src/types.ts @@ -1,5 +1,5 @@ import type * as E from 'fp-ts/Either' -import type D from 'docmaps-sdk' +import type D from '@docmaps/sdk' import type * as TE from 'fp-ts/lib/TaskEither' export type ErrorOrDocmap = E.Either diff --git a/packages/ts-etl/src/utils/index.ts b/packages/etl/src/utils/index.ts similarity index 99% rename from packages/ts-etl/src/utils/index.ts rename to packages/etl/src/utils/index.ts index c9cf6fae..70cb0341 100644 --- a/packages/ts-etl/src/utils/index.ts +++ b/packages/etl/src/utils/index.ts @@ -1,4 +1,4 @@ -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import * as E from 'fp-ts/lib/Either' import { pipe } from 'fp-ts/lib/function' import type { ErrorOrDocmap } from '../types' diff --git a/packages/ts-etl/test/integration/crossref.test.ts b/packages/etl/test/integration/crossref.test.ts similarity index 99% rename from packages/ts-etl/test/integration/crossref.test.ts rename to packages/etl/test/integration/crossref.test.ts index 8e97d84a..69848843 100644 --- a/packages/ts-etl/test/integration/crossref.test.ts +++ b/packages/etl/test/integration/crossref.test.ts @@ -1,5 +1,5 @@ import test from 'ava' -import type { DocmapT } from 'docmaps-sdk' +import type { DocmapT } from '@docmaps/sdk' import { MakeCli } from '../../src/command' type cmdResult = { diff --git a/packages/ts-etl/test/unit/__fixtures__/abstract.ts b/packages/etl/test/unit/__fixtures__/abstract.ts similarity index 98% rename from packages/ts-etl/test/unit/__fixtures__/abstract.ts rename to packages/etl/test/unit/__fixtures__/abstract.ts index 843c9608..2949627b 100644 --- a/packages/ts-etl/test/unit/__fixtures__/abstract.ts +++ b/packages/etl/test/unit/__fixtures__/abstract.ts @@ -1,7 +1,7 @@ import type { InductiveStepResult, Plugin } from '../../../src/types' import { mock, instance } from 'ts-mockito' -import type * as D from 'docmaps-sdk' +import type * as D from '@docmaps/sdk' import * as TE from 'fp-ts/lib/TaskEither' import { MANUSCRIPT_DOI } from './crossref' diff --git a/packages/ts-etl/test/unit/__fixtures__/crossref.ts b/packages/etl/test/unit/__fixtures__/crossref.ts similarity index 100% rename from packages/ts-etl/test/unit/__fixtures__/crossref.ts rename to packages/etl/test/unit/__fixtures__/crossref.ts diff --git a/packages/ts-etl/test/unit/__fixtures__/index.ts b/packages/etl/test/unit/__fixtures__/index.ts similarity index 100% rename from packages/ts-etl/test/unit/__fixtures__/index.ts rename to packages/etl/test/unit/__fixtures__/index.ts diff --git a/packages/ts-etl/test/unit/command.test.ts b/packages/etl/test/unit/command.test.ts similarity index 100% rename from packages/ts-etl/test/unit/command.test.ts rename to packages/etl/test/unit/command.test.ts diff --git a/packages/ts-etl/test/unit/crossref/api.test.ts b/packages/etl/test/unit/crossref/api.test.ts similarity index 100% rename from packages/ts-etl/test/unit/crossref/api.test.ts rename to packages/etl/test/unit/crossref/api.test.ts diff --git a/packages/ts-etl/test/unit/crossref/functions.test.ts b/packages/etl/test/unit/crossref/functions.test.ts similarity index 98% rename from packages/ts-etl/test/unit/crossref/functions.test.ts rename to packages/etl/test/unit/crossref/functions.test.ts index c8865740..c0d88a53 100644 --- a/packages/ts-etl/test/unit/crossref/functions.test.ts +++ b/packages/etl/test/unit/crossref/functions.test.ts @@ -3,7 +3,7 @@ import * as cm from '../__fixtures__/crossref' import * as E from 'fp-ts/lib/Either' import { inspect } from 'util' import * as F from '../../../src/plugins/crossref/functions' -import type { ActionT } from 'docmaps-sdk' +import type { ActionT } from '@docmaps/sdk' function rightOrInspectError( t: ExecutionContext, diff --git a/packages/ts-etl/test/unit/processor.test.ts b/packages/etl/test/unit/processor.test.ts similarity index 99% rename from packages/ts-etl/test/unit/processor.test.ts rename to packages/etl/test/unit/processor.test.ts index 4125b78c..49051038 100644 --- a/packages/ts-etl/test/unit/processor.test.ts +++ b/packages/etl/test/unit/processor.test.ts @@ -5,7 +5,7 @@ import * as TE from 'fp-ts/lib/TaskEither' import { stepsForIdRecursive } from '../../src/processor' import { whenThenRight } from './utils' import * as am from './__fixtures__/abstract' -import type * as D from 'docmaps-sdk' +import type * as D from '@docmaps/sdk' import { when } from 'ts-mockito' const nothing = [] as D.ThingT[] diff --git a/packages/ts-etl/test/unit/utils.ts b/packages/etl/test/unit/utils.ts similarity index 100% rename from packages/ts-etl/test/unit/utils.ts rename to packages/etl/test/unit/utils.ts diff --git a/packages/ts-etl/tsconfig.json b/packages/etl/tsconfig.json similarity index 100% rename from packages/ts-etl/tsconfig.json rename to packages/etl/tsconfig.json diff --git a/packages/example/package.json b/packages/example/package.json index 0df495df..f7c72e53 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -14,14 +14,14 @@ "author": "", "license": "ISC", "dependencies": { - "docmaps-sdk": "workspace:^0.0.0", + "@docmaps/sdk": "workspace:^0.0.0", "fp-ts": "^2.16.0", "io-ts": "^2.2.20", "tsx": "^4.0.0" }, "devDependencies": { "@docmaps/build-configs": "workspace:^", - "@types/node": "^18.16.2", + "@types/node": "^20.0.0", "typescript": "^5.2.2" } } diff --git a/packages/example/src/index.ts b/packages/example/src/index.ts index d0678df7..bd281666 100644 --- a/packages/example/src/index.ts +++ b/packages/example/src/index.ts @@ -1,4 +1,4 @@ -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import * as E from 'fp-ts/lib/Either' import * as A from 'fp-ts/lib/Array' import {pipe} from 'fp-ts/lib/function' @@ -38,7 +38,7 @@ const program = pipe( // note the use of `any` here, which is because the `actor` field // currently doesn't have any obligatory fields. This leaks the // type safety slightly by assuming there is a `name`. Improvements - // to the `docmaps-sdk` based on narrower specification or even more + // to the `@docmaps/sdk` based on narrower specification or even more // involved parsing in the consumer library (like this script) can // provide further safety. A.map((p) => (p.actor as any).name) diff --git a/packages/http-client/package.json b/packages/http-client/package.json index 4acb6e84..8c57df5e 100644 --- a/packages/http-client/package.json +++ b/packages/http-client/package.json @@ -23,11 +23,11 @@ ], "dependencies": { "@ts-rest/core": "^3.30.2", - "docmaps-sdk": "workspace:^0.0.0" + "@docmaps/sdk": "workspace:^0.0.0" }, "devDependencies": { "@docmaps/build-configs": "workspace:^", - "@types/node": "^18.16.2", + "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "eslint": "^8.39.0", diff --git a/packages/http-client/src/contract.ts b/packages/http-client/src/contract.ts index 24b10d72..748ebdca 100644 --- a/packages/http-client/src/contract.ts +++ b/packages/http-client/src/contract.ts @@ -1,5 +1,5 @@ import { initContract } from '@ts-rest/core' -import { DocmapT } from 'docmaps-sdk' +import { DocmapT } from '@docmaps/sdk' import { ApiInfo, ErrorBody } from './types' const c = initContract() diff --git a/packages/http-server/Dockerfile b/packages/http-server/Dockerfile index 3699c2ec..fe86ba06 100644 --- a/packages/http-server/Dockerfile +++ b/packages/http-server/Dockerfile @@ -66,7 +66,7 @@ COPY --from=build /app/packages/http-server/dist /app/packages/http-server/dist # Copy built sub-dependencies from this same package COPY --from=build /app/packages/http-client/dist /app/packages/http-server/node_modules/@docmaps/http-client/dist -COPY --from=build /app/packages/ts-sdk/dist /app/packages/http-server/node_modules/docmaps-sdk/dist +COPY --from=build /app/packages/sdk/dist /app/packages/http-server/node_modules/@docmaps/sdk/dist WORKDIR /app/packages/http-server # Use production node environment by default. diff --git a/packages/http-server/package.json b/packages/http-server/package.json index 0979f5af..6771c3c8 100644 --- a/packages/http-server/package.json +++ b/packages/http-server/package.json @@ -38,7 +38,7 @@ "@zazuko/rdf-vocabularies": "^2023.1.19", "commander": "^11.0.0", "cors": "^2.8.5", - "docmaps-sdk": "workspace:^0.0.0", + "@docmaps/sdk": "workspace:^0.0.0", "express": "^4.18.2", "fetch-sparql-endpoint": "^4.0.0", "fp-ts": "^2.14.0", @@ -57,7 +57,7 @@ "@types/express": "^4.17.17", "@types/isomorphic-fetch": "^0.0.39", "@types/n3": "^1.16.0", - "@types/node": "^18.16.2", + "@types/node": "^20.0.0", "@types/rdfjs__data-model": "^2.0.4", "@types/rdfjs__namespace": "^2.0.5", "@typescript-eslint/eslint-plugin": "^6.0.0", diff --git a/packages/http-server/src/adapter/sparql_adapter.ts b/packages/http-server/src/adapter/sparql_adapter.ts index 429d8d73..858df932 100644 --- a/packages/http-server/src/adapter/sparql_adapter.ts +++ b/packages/http-server/src/adapter/sparql_adapter.ts @@ -1,7 +1,7 @@ import type * as RDF from '@rdfjs/types' import { CONSTRUCT, Construct, Describe } from '@tpluscode/sparql-builder' import { VALUES } from '@tpluscode/sparql-builder/expressions' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import * as TE from 'fp-ts/lib/TaskEither' import * as T from 'fp-ts/lib/Task' import * as E from 'fp-ts/lib/Either' diff --git a/packages/http-server/src/api.ts b/packages/http-server/src/api.ts index f14d1a81..0b574fbf 100644 --- a/packages/http-server/src/api.ts +++ b/packages/http-server/src/api.ts @@ -1,6 +1,6 @@ import type { ApiInfo, BackendAdapter, ThingSpec } from './types' import * as TE from 'fp-ts/TaskEither' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' /** ApiInstance - a concrete class that handles sourcing data and composing answers * diff --git a/packages/http-server/src/types.ts b/packages/http-server/src/types.ts index aac1cc84..da36370a 100644 --- a/packages/http-server/src/types.ts +++ b/packages/http-server/src/types.ts @@ -1,4 +1,4 @@ -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import * as TE from 'fp-ts/TaskEither' // TODO: use io-ts? this is only decodable by consumers... diff --git a/packages/http-server/test/integration/httpserver.test.ts b/packages/http-server/test/integration/httpserver.test.ts index 4244d55e..ddd22caf 100644 --- a/packages/http-server/test/integration/httpserver.test.ts +++ b/packages/http-server/test/integration/httpserver.test.ts @@ -1,5 +1,5 @@ import test from 'ava' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import { inspect } from 'util' import { API_VERSION } from '../../src' import { MakeHttpClient } from '@docmaps/http-client' diff --git a/packages/http-server/test/unit/api.test.ts b/packages/http-server/test/unit/api.test.ts index b4ba4f9a..f9e35e17 100644 --- a/packages/http-server/test/unit/api.test.ts +++ b/packages/http-server/test/unit/api.test.ts @@ -2,7 +2,7 @@ import test from 'ava' import { SparqlAdapter } from '../../src/adapter' import { ApiInstance } from '../../src/api' import * as TE from 'fp-ts/lib/TaskEither' -import * as D from 'docmaps-sdk' +import * as D from '@docmaps/sdk' import { deepEqual, mock, instance, when } from 'ts-mockito' import { ThingSpec } from '../../src/types' @@ -72,7 +72,7 @@ test('docmap_by_id: consults the adapter', async (t) => { ).get_docmap_by_id(dm_content.id)() // TODO awkward use of `await .. ()`, is there a more natural way? - // The alternative is all that `rightAnd` business in docmaps-sdk + // The alternative is all that `rightAnd` business in @docmaps/sdk t.deepEqual(res, await TE.of(dm_content)()) }) @@ -101,6 +101,6 @@ test('docmap_for: consults the adapter', async (t) => { ).get_docmap_for_thing(spec)() // TODO awkward use of `await .. ()`, is there a more natural way? - // The alternative is all that `rightAnd` business in docmaps-sdk + // The alternative is all that `rightAnd` business in @docmaps/sdk t.deepEqual(res, await TE.of(dm_content)()) }) diff --git a/packages/ts-sdk/.eslintrc.cjs b/packages/sdk/.eslintrc.cjs similarity index 100% rename from packages/ts-sdk/.eslintrc.cjs rename to packages/sdk/.eslintrc.cjs diff --git a/packages/ts-sdk/.gitignore b/packages/sdk/.gitignore similarity index 100% rename from packages/ts-sdk/.gitignore rename to packages/sdk/.gitignore diff --git a/packages/ts-sdk/.prettierrc.cjs b/packages/sdk/.prettierrc.cjs similarity index 100% rename from packages/ts-sdk/.prettierrc.cjs rename to packages/sdk/.prettierrc.cjs diff --git a/packages/ts-sdk/CONTRIBUTING.md b/packages/sdk/CONTRIBUTING.md similarity index 98% rename from packages/ts-sdk/CONTRIBUTING.md rename to packages/sdk/CONTRIBUTING.md index b4048560..901b7a40 100644 --- a/packages/ts-sdk/CONTRIBUTING.md +++ b/packages/sdk/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to docmaps ts-sdk +# Contributing to @docmaps/sdk We welcome contributions from anyone interested in improving [Project Name]! Before you get started, please read through the guidelines below to ensure that your contributions are effective and useful. diff --git a/packages/ts-sdk/README.md b/packages/sdk/README.md similarity index 94% rename from packages/ts-sdk/README.md rename to packages/sdk/README.md index 15290773..e5a9c5a0 100644 --- a/packages/ts-sdk/README.md +++ b/packages/sdk/README.md @@ -1,3 +1,7 @@ +> DEPRECATION NOTICE: the NPM package `docmaps-sdk` has been moved to `@docmaps/sdk`. +> (the source code still lives here.) +> Update your installs and imports accordingly. + # Typescript SDK for Docmaps This typescript library is designed to provide core, highly-general docmaps @@ -24,7 +28,7 @@ Any codec can be used directly with a JSON string or `any`/`unknown` object to t create the instantiation of the Typescript type. `io-ts` is designed to work with [`fp-ts`](https://github.com/gcanti/fp-ts), so you get an instance of Either which must be deconstructed by case to determine whether the input was valid. See examples of this -in the [`typed_graph`](https://github.com/Docmaps-Project/docmaps/blob/main/packages/ts-sdk/src/typed_graph.ts), +in the [`typed_graph`](https://github.com/Docmaps-Project/docmaps/blob/main/packages/sdk/src/typed_graph.ts), where we use `isLeft` to check if the decode failed. **For examples of usage of `fp-ts` pipelines with our `io-ts` codecs, review the @@ -59,7 +63,7 @@ For Code of Conduct, see the repository-wide [CODE_OF_CONDUCT.md](https://github.com/Docmaps-Project/docmaps/blob/main/CODE_OF_CONDUCT.md). For info about local development of this repository, see -[CONTRIBUTING.md](https://github.com/Docmaps-Project/docmaps/blob/main/packages/ts-sdk/CONTRIBUTING.md). +[CONTRIBUTING.md](https://github.com/Docmaps-Project/docmaps/blob/main/packages/sdk/CONTRIBUTING.md). ## Releases diff --git a/packages/ts-sdk/package.json b/packages/sdk/package.json similarity index 97% rename from packages/ts-sdk/package.json rename to packages/sdk/package.json index 7062ee75..378ed124 100644 --- a/packages/ts-sdk/package.json +++ b/packages/sdk/package.json @@ -1,8 +1,8 @@ { - "name": "docmaps-sdk", + "name": "@docmaps/sdk", "version": "0.0.0", "repository": "git@github.com:docmaps-project/docmaps.git", - "homepage": "https://github.com/Docmaps-Project/docmaps/tree/main/packages/ts-sdk", + "homepage": "https://github.com/Docmaps-Project/docmaps/tree/main/packages/sdk", "description": "", "type": "module", "main": "dist/index.js", diff --git a/packages/ts-sdk/src/debuggable.ts b/packages/sdk/src/debuggable.ts similarity index 100% rename from packages/ts-sdk/src/debuggable.ts rename to packages/sdk/src/debuggable.ts diff --git a/packages/ts-sdk/src/functions.ts b/packages/sdk/src/functions.ts similarity index 100% rename from packages/ts-sdk/src/functions.ts rename to packages/sdk/src/functions.ts diff --git a/packages/ts-sdk/src/index.ts b/packages/sdk/src/index.ts similarity index 100% rename from packages/ts-sdk/src/index.ts rename to packages/sdk/src/index.ts diff --git a/packages/ts-sdk/src/test/__fixtures__/from_root_examples.ts b/packages/sdk/src/test/__fixtures__/from_root_examples.ts similarity index 100% rename from packages/ts-sdk/src/test/__fixtures__/from_root_examples.ts rename to packages/sdk/src/test/__fixtures__/from_root_examples.ts diff --git a/packages/ts-sdk/src/test/__fixtures__/index.ts b/packages/sdk/src/test/__fixtures__/index.ts similarity index 100% rename from packages/ts-sdk/src/test/__fixtures__/index.ts rename to packages/sdk/src/test/__fixtures__/index.ts diff --git a/packages/ts-sdk/src/test/__fixtures__/small_quadstore.ts b/packages/sdk/src/test/__fixtures__/small_quadstore.ts similarity index 100% rename from packages/ts-sdk/src/test/__fixtures__/small_quadstore.ts rename to packages/sdk/src/test/__fixtures__/small_quadstore.ts diff --git a/packages/ts-sdk/src/test/functions.test.ts b/packages/sdk/src/test/functions.test.ts similarity index 100% rename from packages/ts-sdk/src/test/functions.test.ts rename to packages/sdk/src/test/functions.test.ts diff --git a/packages/ts-sdk/src/test/typed_graph.test.ts b/packages/sdk/src/test/typed_graph.test.ts similarity index 100% rename from packages/ts-sdk/src/test/typed_graph.test.ts rename to packages/sdk/src/test/typed_graph.test.ts diff --git a/packages/ts-sdk/src/test/types.test.ts b/packages/sdk/src/test/types.test.ts similarity index 100% rename from packages/ts-sdk/src/test/types.test.ts rename to packages/sdk/src/test/types.test.ts diff --git a/packages/ts-sdk/src/test/util.test.ts b/packages/sdk/src/test/util.test.ts similarity index 100% rename from packages/ts-sdk/src/test/util.test.ts rename to packages/sdk/src/test/util.test.ts diff --git a/packages/ts-sdk/src/test/utils.ts b/packages/sdk/src/test/utils.ts similarity index 100% rename from packages/ts-sdk/src/test/utils.ts rename to packages/sdk/src/test/utils.ts diff --git a/packages/ts-sdk/src/typed_graph.ts b/packages/sdk/src/typed_graph.ts similarity index 100% rename from packages/ts-sdk/src/typed_graph.ts rename to packages/sdk/src/typed_graph.ts diff --git a/packages/ts-sdk/src/types.ts b/packages/sdk/src/types.ts similarity index 95% rename from packages/ts-sdk/src/types.ts rename to packages/sdk/src/types.ts index 1c40420c..3496caf9 100644 --- a/packages/ts-sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -38,7 +38,7 @@ export const ContextUpsert = { * A `foaf:onlineAccount`, the online identity of some Agent (person, org, etc). * * @example - * import { OnlineAccountT, OnlineAccount } from 'docmaps-sdk'; + * import { OnlineAccountT, OnlineAccount } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const A: Validation = OnlineAccount.decode({ @@ -63,7 +63,7 @@ export const OnlineAccount = t.intersection([ * The publisher of a docmap * * @example - * import { PublisherT, Publisher } from 'docmaps-sdk'; + * import { PublisherT, Publisher } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const A: Validation = Publisher.decode({ @@ -100,7 +100,7 @@ export const Publisher = t.intersection([ * A fabio:Manifestation, which may be included in an Output. * * @example - * import { ManifestationT, Manifestation } from 'docmaps-sdk'; + * import { ManifestationT, Manifestation } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const A: Validation = Manifestation.decode({ @@ -133,7 +133,7 @@ export const Manifestation = t.intersection([ * but currently only a Person. * * @example - * import { ActorT, Actor } from 'docmaps-sdk'; + * import { ActorT, Actor } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const B: Validation = Actor.decode({ @@ -158,7 +158,7 @@ export const Actor = t.union([ * A pro:RoleInTime ; How a participant participated in an action * * @example - * import { RoleInTimeT, RoleInTime } from 'docmaps-sdk'; + * import { RoleInTimeT, RoleInTime } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = RoleInTime.decode({ @@ -204,7 +204,7 @@ export const ThingType = arrayOrOneOf([ * An output or input. * * @example - * import { ThingT, Thing } from 'docmaps-sdk'; + * import { ThingT, Thing } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = Thing.decode({ @@ -241,7 +241,7 @@ export const Thing = t.intersection([ * An action taken in a step. * * @example - * import { ActionT, Action } from 'docmaps-sdk'; + * import { ActionT, Action } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = Action.decode({ @@ -291,7 +291,7 @@ const Status = t.string * A claim about a document acquiring a status that is asserted by a certain step * * @example - * import { AssertionT, Assertion } from 'docmaps-sdk'; + * import { AssertionT, Assertion } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = Assertion.decode({ @@ -322,7 +322,7 @@ export const Assertion = t.intersection([ * set of actions may appear in a step with a different content hash). * * @example - * import { StepT, Step } from 'docmaps-sdk'; + * import { StepT, Step } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = Step.decode({ @@ -384,7 +384,7 @@ export const Step = t.intersection([ /** * @example - * import { DocmapT, Docmap } from 'docmaps-sdk'; + * import { DocmapT, Docmap } from '@docmaps/sdk'; * import { Validation } from 'io-ts'; * * const C: Validation = Docmap.decode({ diff --git a/packages/ts-sdk/src/util.ts b/packages/sdk/src/util.ts similarity index 100% rename from packages/ts-sdk/src/util.ts rename to packages/sdk/src/util.ts diff --git a/packages/ts-sdk/tsconfig.json b/packages/sdk/tsconfig.json similarity index 100% rename from packages/ts-sdk/tsconfig.json rename to packages/sdk/tsconfig.json diff --git a/packages/spa/package.json b/packages/spa/package.json index 9a24d7b1..351d4bec 100644 --- a/packages/spa/package.json +++ b/packages/spa/package.json @@ -19,7 +19,7 @@ "rollup": "^4.0.0", "rollup-plugin-css-only": "^4.3.0", "rollup-plugin-livereload": "^2.0.5", - "rollup-plugin-polyfill-node": "^0.12.0", + "rollup-plugin-polyfill-node": "^0.13.0", "rollup-plugin-svelte": "^7.1.5", "svelte": "^4.0.0", "typescript": "^5.2.2" @@ -28,7 +28,7 @@ "@docmaps/etl": "workspace:^0.1.2", "@docmaps/widget": "workspace:^0.0.0", "@spider-ui/global-event-registry": "^0.2.7", - "docmaps-sdk": "workspace:^0.0.0", + "@docmaps/sdk": "workspace:^0.0.0", "fp-ts": "^2.16.0", "prismjs": "^1.29.0", "sirv-cli": "^2.0.2", diff --git a/packages/spa/src/App.svelte b/packages/spa/src/App.svelte index c72acbc9..e51893c2 100644 --- a/packages/spa/src/App.svelte +++ b/packages/spa/src/App.svelte @@ -9,24 +9,27 @@ import { onMount } from 'svelte'; let requestedDoi; - let textInputDoi = ''; + let searchInput = ''; + let providingPlaintextDocmap = false; let json = undefined; + let docmap; let key = 0; // Key is used to make sure Svelte re-renders the tab content from scratch whenever the active tab changes let activeTabName = 'Widget'; - function parseQueryString() { + // If a DOI is specified in the URL, use that. + function getDoiToDisplay() { const params = new URLSearchParams(window.location.search); const doi = params.get('doi'); if (doi) { requestedDoi = doi; - fetchData(doi); } + fetchData(requestedDoi); } onMount(() => { - parseQueryString(); + getDoiToDisplay(); }); const handleClick = tabName => { @@ -48,7 +51,7 @@ function handleKeyup(event) { if (event.key === 'Enter') { - fetchData(textInputDoi); + fetchData(searchInput); } } @@ -67,6 +70,15 @@ ); } + function displayWidgetWithDocmapLiteral() { + json = JSON.parse(searchInput); + if (Array.isArray(json)) { + json = json[0]; + } + docmap = json; + showContent = true; + key += 1; + } async function configureForDoiString(doi, handleJson, handleError) { const result = await ItemCmd( @@ -94,48 +106,86 @@ } } + function reset() { + searchInput = ''; + docmap = undefined; + requestedDoi = undefined; + json = undefined; + showContent = false; + activeTabName = 'Widget'; + } + + const toggleInputMethod = () => { + providingPlaintextDocmap = !providingPlaintextDocmap; + // Clear everything + reset(); + }; + // Reactive statements $: tabs = [ - { name: 'Widget', component: Widget, props: { doi: requestedDoi } }, - { name: 'Crossref Demo', component: CrossrefDemo, props: { json } }, + { + name: 'Widget', + component: Widget, + show: true, // Always show the widget + props: { doi: requestedDoi, docmap }, + }, + { + name: 'Crossref Demo', + component: CrossrefDemo, + show: !providingPlaintextDocmap, // Only show the crossref demo when we're not providing a docmap via plaintext + props: { json }, + }, ]; $: if (typeof requestedDoi !== 'undefined' && requestedDoi) { const newUrl = new URL(window.location); newUrl.searchParams.set('doi', requestedDoi); window.history.replaceState({}, '', newUrl); - } else if (requestedDoi === '') { - const newUrl = new URL(window.location); - newUrl.searchParams.delete('doi'); - window.history.replaceState({}, '', newUrl); }

Docmap Explorer

- + {#if providingPlaintextDocmap} - or + + + +
+ Use search instead + + {:else} + + + + or + + +
+ Provide a docmap as text instead - - + {/if}
{#if showContent} -

Showing results for: {requestedDoi}

+ {#if !providingPlaintextDocmap} +

Showing results for: {requestedDoi}

+ {/if}
{#each tabs as tab, index} - handleClick(tab.name)} role='tab' - tabindex={index}> - {tab.name} - + {#if tab.show} + handleClick(tab.name)} + role='tab' tabindex={index}> + {tab.name} + + {/if} {/each}
@@ -143,7 +193,6 @@
{#each tabs as tab} {#if tab.name === activeTabName} - {/if} {/each} @@ -174,12 +223,10 @@ flex-wrap: wrap; padding-left: 0; margin-bottom: 0; - margin-top: 40px; list-style: none; border-bottom: 1px solid #dee2e6; } - .tab { border: 1px solid transparent; border-top-left-radius: 0.25rem; @@ -204,11 +251,29 @@ border-top: 0; } - .tab:hover { background-color: #ddd; } + + .toggle-input { + color: blue; + cursor: pointer; + font-size: 0.9em; + margin-left: 10px; + text-decoration: underline; + text-decoration-color: blue; + } + + textarea { + width: 100%; + min-height: 150px; + margin-top: 10px; + padding: 10px; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + } + @media (min-width: 640px) { main { max-width: none; diff --git a/packages/spa/src/CrossrefDemo.svelte b/packages/spa/src/CrossrefDemo.svelte index 5691087f..82e05885 100644 --- a/packages/spa/src/CrossrefDemo.svelte +++ b/packages/spa/src/CrossrefDemo.svelte @@ -9,7 +9,9 @@ export let key; -
-

Docmap derived from CrossRef

- -
+{#key key} +
+

Docmap derived from CrossRef

+ +
+{/key} \ No newline at end of file diff --git a/packages/spa/src/Widget.svelte b/packages/spa/src/Widget.svelte index 3ce9e62c..2a26d175 100644 --- a/packages/spa/src/Widget.svelte +++ b/packages/spa/src/Widget.svelte @@ -3,20 +3,30 @@ export let doi; export let key; + export let docmap; + + customElements.whenDefined('docmaps-widget') // wait for the custom docmaps-widget element to be defined + .then(() => { + const widgetElement = document.getElementById('docmaps-widget-target'); + widgetElement.docmap = docmap; + }); {#key key} - {#if doi} -
-

Docmaps widget

+
+

Docmaps widget

+ + {#if doi}

Docmap fetched from the Docmaps staging server.

-
- {/if} + {:else if docmap} +

From plaintext docmap

+ + {/if} +
{/key}