From 850c91dfefd6b5d5e1b76eddb746754aa3561a98 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 10:52:10 +0100 Subject: [PATCH 01/31] Write descriptor.$schema on save --- core/dialect/save.spec.ts | 15 +++++++++++++-- core/dialect/save.ts | 6 ++++++ core/package/save.ts | 8 +++++++- core/resource/save.ts | 8 +++++++- core/schema/save.spec.ts | 15 +++++++++++++-- core/schema/save.ts | 6 ++++++ 6 files changed, 52 insertions(+), 6 deletions(-) diff --git a/core/dialect/save.spec.ts b/core/dialect/save.spec.ts index f82bce78..ace4c99f 100644 --- a/core/dialect/save.spec.ts +++ b/core/dialect/save.spec.ts @@ -45,10 +45,21 @@ describe("saveDialect", () => { const content = await fs.readFile(testPath, "utf-8") const parsedContent = JSON.parse(content) - expect(parsedContent).toEqual(testDialect) + // Remove $schema property for test comparison + const { $schema, ...dialectWithoutSchema } = parsedContent + expect(dialectWithoutSchema).toEqual(testDialect) + expect($schema).toBe( + "https://datapackage.org/profiles/2.0/tabledialect.json", + ) + + // Create expected format with $schema for comparison + const expectedWithSchema = { + ...testDialect, + $schema: "https://datapackage.org/profiles/2.0/tabledialect.json", + } // Verify the pretty formatting - const expectedFormat = JSON.stringify(testDialect, null, 2) + const expectedFormat = JSON.stringify(expectedWithSchema, null, 2) expect(content).toEqual(expectedFormat) }) }) diff --git a/core/dialect/save.ts b/core/dialect/save.ts index 5f1f1e6d..30150a40 100644 --- a/core/dialect/save.ts +++ b/core/dialect/save.ts @@ -13,5 +13,11 @@ export async function saveDialect(props: { const { dialect, path } = props const descriptor = denormalizeDialect({ dialect }) + + descriptor.$schema = + descriptor.$schema ?? descriptor.profile ?? CURRENT_PROFILE + await saveDescriptor({ descriptor, path }) } + +const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/tabledialect.json" diff --git a/core/package/save.ts b/core/package/save.ts index 3fa8c388..03c99181 100644 --- a/core/package/save.ts +++ b/core/package/save.ts @@ -11,8 +11,14 @@ export async function savePackageDescriptor(props: { path: string }) { const { datapackage, path } = props - const basepath = getBasepath({ path }) + const basepath = getBasepath({ path }) const descriptor = denormalizePackage({ datapackage, basepath }) + + descriptor.$schema = + descriptor.$schema ?? descriptor.profile ?? CURRENT_PROFILE + await saveDescriptor({ descriptor, path: props.path }) } + +const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/datapackage.json" diff --git a/core/resource/save.ts b/core/resource/save.ts index bcf089a3..dc550dfb 100644 --- a/core/resource/save.ts +++ b/core/resource/save.ts @@ -11,8 +11,14 @@ export async function saveResourceDescriptor(props: { path: string }) { const { resource, path } = props - const basepath = getBasepath({ path }) + const basepath = getBasepath({ path }) const descriptor = denormalizeResource({ resource, basepath }) + + descriptor.$schema = + descriptor.$schema ?? descriptor.profile ?? CURRENT_PROFILE + await saveDescriptor({ descriptor, path }) } + +const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/dataresource.json" diff --git a/core/schema/save.spec.ts b/core/schema/save.spec.ts index d0839e70..bf54b9dc 100644 --- a/core/schema/save.spec.ts +++ b/core/schema/save.spec.ts @@ -52,9 +52,20 @@ describe("saveSchema", () => { const content = await fs.readFile(testPath, "utf-8") const parsedContent = JSON.parse(content) - expect(parsedContent).toEqual(testSchema) - const expectedFormat = JSON.stringify(testSchema, null, 2) + // Remove $schema property for test comparison + const { $schema, ...schemaWithoutSchema } = parsedContent + expect(schemaWithoutSchema).toEqual(testSchema) + expect($schema).toBe( + "https://datapackage.org/profiles/2.0/tableschema.json", + ) + + // Create expected format with $schema for comparison + const expectedWithSchema = { + ...testSchema, + $schema: "https://datapackage.org/profiles/2.0/tableschema.json", + } + const expectedFormat = JSON.stringify(expectedWithSchema, null, 2) expect(content).toEqual(expectedFormat) }) }) diff --git a/core/schema/save.ts b/core/schema/save.ts index 9ab7a90a..2be593cd 100644 --- a/core/schema/save.ts +++ b/core/schema/save.ts @@ -13,5 +13,11 @@ export async function saveSchema(props: { const { schema, path } = props const descriptor = denormalizeSchema({ schema }) + + descriptor.$schema = + descriptor.$schema ?? descriptor.profile ?? CURRENT_PROFILE + await saveDescriptor({ descriptor, path }) } + +const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/tableschema.json" From 5a39e42dd6ddb5ca64e12ef856759cc15b8ad9de Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 11:29:10 +0100 Subject: [PATCH 02/31] Rebased Descriptor from any to unknown properties --- core/dialect/assert.spec.ts | 10 +++++----- core/dialect/validate.spec.ts | 5 ++--- core/dialect/validate.ts | 7 +++++-- core/general/descriptor/Descriptor.ts | 2 +- core/package.json | 3 ++- core/package/assert.spec.ts | 10 +++++----- core/package/validate.spec.ts | 5 ++--- core/package/validate.ts | 12 +++++++++--- core/resource/assert.spec.ts | 10 +++++----- core/resource/process/denormalize.ts | 2 +- core/resource/validate.spec.ts | 5 ++--- core/resource/validate.ts | 12 +++++++++--- core/schema/assert.spec.ts | 10 +++++----- core/schema/process/denormalize.ts | 2 +- core/schema/process/normalize.ts | 17 ++++++++++++----- core/schema/validate.spec.ts | 5 ++--- core/schema/validate.ts | 9 ++++++--- pnpm-lock.yaml | 8 ++++++++ 18 files changed, 82 insertions(+), 52 deletions(-) diff --git a/core/dialect/assert.spec.ts b/core/dialect/assert.spec.ts index de17fa9f..0df44347 100644 --- a/core/dialect/assert.spec.ts +++ b/core/dialect/assert.spec.ts @@ -5,18 +5,18 @@ import { assertDialect } from "./assert.js" describe("assertDialect", () => { it("returns typed dialect when valid", async () => { - const validDialect: Dialect = { + const descriptor = { delimiter: ";", header: true, skipInitialSpace: true, } - const result = await assertDialect({ - descriptor: validDialect, + const dialect = await assertDialect({ + descriptor, }) - expectTypeOf(result).toEqualTypeOf() - expect(result).toEqual(validDialect) + expectTypeOf(dialect).toEqualTypeOf() + expect(dialect).toEqual(descriptor) }) it("throws ValidationError when dialect is invalid", async () => { diff --git a/core/dialect/validate.spec.ts b/core/dialect/validate.spec.ts index 4c0aad1c..1a2e2b41 100644 --- a/core/dialect/validate.spec.ts +++ b/core/dialect/validate.spec.ts @@ -1,15 +1,14 @@ import { describe, expect, it } from "vitest" -import type { Dialect } from "./Dialect.js" import { validateDialect } from "./validate.js" describe("validateDialect", () => { it("returns valid result for valid dialect", async () => { - const validDialect: Dialect = { + const descriptor = { delimiter: ";", } const result = await validateDialect({ - descriptor: validDialect, + descriptor, }) expect(result.valid).toBe(true) diff --git a/core/dialect/validate.ts b/core/dialect/validate.ts index aac5fa93..d9437ea5 100644 --- a/core/dialect/validate.ts +++ b/core/dialect/validate.ts @@ -12,9 +12,12 @@ export async function validateDialect(props: { const { descriptor } = props let dialect: Dialect | undefined = undefined - const $dialect = props.descriptor.$dialect ?? DEFAULT_PROFILE - const profile = await loadProfile({ path: $dialect }) + const $schema = + typeof props.descriptor.$schema === "string" + ? props.descriptor.$schema + : DEFAULT_PROFILE + const profile = await loadProfile({ path: $schema }) const { valid, errors } = await validateDescriptor({ ...props, profile }) if (valid) { diff --git a/core/general/descriptor/Descriptor.ts b/core/general/descriptor/Descriptor.ts index 762e1e4d..6d9d61a4 100644 --- a/core/general/descriptor/Descriptor.ts +++ b/core/general/descriptor/Descriptor.ts @@ -1 +1 @@ -export type Descriptor = Record +export type Descriptor = Record diff --git a/core/package.json b/core/package.json index ed605ece..eb72bec5 100644 --- a/core/package.json +++ b/core/package.json @@ -22,6 +22,7 @@ "dependencies": { "ajv": "^8.17.1", "github-slugger": "^2.0.0", - "quick-lru": "^7.0.1" + "quick-lru": "^7.0.1", + "tiny-invariant": "^1.3.3" } } diff --git a/core/package/assert.spec.ts b/core/package/assert.spec.ts index 4f7cc852..cfdcce8f 100644 --- a/core/package/assert.spec.ts +++ b/core/package/assert.spec.ts @@ -5,7 +5,7 @@ import { assertPackage } from "./assert.js" describe("assertPackage", () => { it("returns typed package when valid", async () => { - const validPackage: Package = { + const descriptor = { name: "example-package", resources: [ { @@ -15,12 +15,12 @@ describe("assertPackage", () => { ], } - const result = await assertPackage({ - descriptor: validPackage, + const datapackage = await assertPackage({ + descriptor, }) - expectTypeOf(result).toEqualTypeOf() - expect(result).toEqual(validPackage) + expectTypeOf(datapackage).toEqualTypeOf() + expect(datapackage).toEqual(descriptor) }) it("throws AssertionError when package is invalid", async () => { diff --git a/core/package/validate.spec.ts b/core/package/validate.spec.ts index 4dcae852..569302fb 100644 --- a/core/package/validate.spec.ts +++ b/core/package/validate.spec.ts @@ -1,10 +1,9 @@ import { describe, expect, it } from "vitest" -import type { Package } from "./Package.js" import { validatePackageDescriptor } from "./validate.js" describe("validatePackageDescriptor", () => { it("returns valid result for valid package", async () => { - const validPackage: Package = { + const descriptor = { name: "example-package", resources: [ { @@ -15,7 +14,7 @@ describe("validatePackageDescriptor", () => { } const result = await validatePackageDescriptor({ - descriptor: validPackage, + descriptor, }) expect(result.valid).toBe(true) diff --git a/core/package/validate.ts b/core/package/validate.ts index 9096799a..5b1892a5 100644 --- a/core/package/validate.ts +++ b/core/package/validate.ts @@ -13,14 +13,20 @@ export async function validatePackageDescriptor(props: { const { descriptor, basepath } = props let datapackage: Package | undefined = undefined - const $schema = descriptor.$schema ?? DEFAULT_PROFILE - const profile = await loadProfile({ path: $schema }) + const $schema = + typeof props.descriptor.$schema === "string" + ? props.descriptor.$schema + : DEFAULT_PROFILE + const profile = await loadProfile({ path: $schema }) const { valid, errors } = await validateDescriptor({ ...props, profile }) if (valid) { // Validation + normalization = we can cast it - datapackage = normalizePackage({ descriptor, basepath }) as Package + datapackage = normalizePackage({ + descriptor, + basepath, + }) as unknown as Package } return { valid, errors, datapackage } diff --git a/core/resource/assert.spec.ts b/core/resource/assert.spec.ts index ad190791..93cef425 100644 --- a/core/resource/assert.spec.ts +++ b/core/resource/assert.spec.ts @@ -5,19 +5,19 @@ import { assertResource } from "./assert.js" describe("assertResource", () => { it("returns typed resource when valid", async () => { - const validResource: Resource = { + const descriptor = { name: "example-resource", path: "data.csv", format: "csv", encoding: "utf-8", } - const result = await assertResource({ - descriptor: validResource, + const resource = await assertResource({ + descriptor, }) - expectTypeOf(result).toEqualTypeOf() - expect(result).toEqual(validResource) + expectTypeOf(resource).toEqualTypeOf() + expect(resource).toEqual(descriptor) }) it("throws AssertionError when resource is invalid", async () => { diff --git a/core/resource/process/denormalize.ts b/core/resource/process/denormalize.ts index 20f1e1a5..5f5412c0 100644 --- a/core/resource/process/denormalize.ts +++ b/core/resource/process/denormalize.ts @@ -14,7 +14,7 @@ export function denormalizeResource(props: { // TODO: denormalizeDialect // TODO: denormalizeSchema - return resource as Descriptor + return resource as unknown as Descriptor } function denormalizePaths(props: { resource: Resource; basepath?: string }) { diff --git a/core/resource/validate.spec.ts b/core/resource/validate.spec.ts index daeaf359..8cc7df3c 100644 --- a/core/resource/validate.spec.ts +++ b/core/resource/validate.spec.ts @@ -1,10 +1,9 @@ import { describe, expect, it } from "vitest" -import type { Resource } from "./Resource.js" import { validateResourceDescriptor } from "./validate.js" describe("validateResourceDescriptor", () => { it("returns valid result for valid resource", async () => { - const validResource: Resource = { + const descriptor = { name: "example-resource", path: "data.csv", format: "csv", @@ -12,7 +11,7 @@ describe("validateResourceDescriptor", () => { } const result = await validateResourceDescriptor({ - descriptor: validResource, + descriptor, }) expect(result.valid).toBe(true) diff --git a/core/resource/validate.ts b/core/resource/validate.ts index 6701c8c3..e0e24c11 100644 --- a/core/resource/validate.ts +++ b/core/resource/validate.ts @@ -13,14 +13,20 @@ export async function validateResourceDescriptor(props: { const { descriptor, basepath } = props let resource: Resource | undefined = undefined - const $schema = props.descriptor.$schema ?? DEFAULT_PROFILE - const profile = await loadProfile({ path: $schema }) + const $schema = + typeof props.descriptor.$schema === "string" + ? props.descriptor.$schema + : DEFAULT_PROFILE + const profile = await loadProfile({ path: $schema }) const { valid, errors } = await validateDescriptor({ descriptor, profile }) if (valid) { // Validation + normalization = we can cast it - resource = normalizeResource({ descriptor, basepath }) as Resource + resource = normalizeResource({ + descriptor, + basepath, + }) as unknown as Resource } return { valid, errors, resource } diff --git a/core/schema/assert.spec.ts b/core/schema/assert.spec.ts index c91c813b..c7056f2e 100644 --- a/core/schema/assert.spec.ts +++ b/core/schema/assert.spec.ts @@ -5,7 +5,7 @@ import { assertSchema } from "./assert.js" describe("assertSchema", () => { it("returns typed schema when valid", async () => { - const validSchema: Schema = { + const descriptor = { fields: [ { name: "id", @@ -19,12 +19,12 @@ describe("assertSchema", () => { primaryKey: ["id"], } - const result = await assertSchema({ - descriptor: validSchema, + const schema = await assertSchema({ + descriptor, }) - expectTypeOf(result).toEqualTypeOf() - expect(result).toEqual(validSchema) + expectTypeOf(schema).toEqualTypeOf() + expect(schema).toEqual(descriptor) }) it("throws ValidationError when schema is invalid", async () => { diff --git a/core/schema/process/denormalize.ts b/core/schema/process/denormalize.ts index c24b3f77..93b89c7f 100644 --- a/core/schema/process/denormalize.ts +++ b/core/schema/process/denormalize.ts @@ -3,5 +3,5 @@ import type { Schema } from "../Schema.js" export function denormalizeSchema(props: { schema: Schema }) { const schema = globalThis.structuredClone(props.schema) - return schema as Descriptor + return schema as unknown as Descriptor } diff --git a/core/schema/process/normalize.ts b/core/schema/process/normalize.ts index 66273b0c..85020f6e 100644 --- a/core/schema/process/normalize.ts +++ b/core/schema/process/normalize.ts @@ -1,3 +1,4 @@ +import invariant from "tiny-invariant" import type { Descriptor } from "../../general/index.js" export function normalizeSchema(props: { descriptor: Descriptor }) { @@ -19,6 +20,11 @@ function normalizeFields(props: { descriptor: Descriptor }) { return } + invariant( + Array.isArray(fields), + "Fields being an array is guaranteed by the validation", + ) + for (const field of fields) { normalizeFieldFormat({ field }) normalizeFieldMissingValues({ field }) @@ -28,7 +34,7 @@ function normalizeFields(props: { descriptor: Descriptor }) { } } -function normalizeFieldFormat(props: { field: any }) { +function normalizeFieldFormat(props: { field: Descriptor }) { const { field } = props const format = field.format @@ -43,7 +49,7 @@ function normalizeFieldFormat(props: { field: any }) { } } -function normalizeFieldMissingValues(props: { field: any }) { +function normalizeFieldMissingValues(props: { field: Descriptor }) { const { field } = props const missingValues = field.missingValues @@ -57,7 +63,7 @@ function normalizeFieldMissingValues(props: { field: any }) { } } -function normalizeFieldCategories(props: { field: any }) { +function normalizeFieldCategories(props: { field: Descriptor }) { const { field } = props const categories = field.categories @@ -71,7 +77,7 @@ function normalizeFieldCategories(props: { field: any }) { } } -function normalizeFieldCategoriesOrdered(props: { field: any }) { +function normalizeFieldCategoriesOrdered(props: { field: Descriptor }) { const { field } = props const categoriesOrdered = field.categoriesOrdered @@ -87,7 +93,7 @@ function normalizeFieldCategoriesOrdered(props: { field: any }) { } } -function normalizeFieldJsonschema(props: { field: any }) { +function normalizeFieldJsonschema(props: { field: Descriptor }) { const { field } = props const jsonschema = field.jsonschema @@ -148,6 +154,7 @@ function normalizeUniqueKeys(props: { descriptor: Descriptor }) { if (!Array.isArray(uniqueKeys)) { descriptor.uniqueKeys = undefined console.warn(`Ignoring v2.0 incompatible uniqueKeys: ${uniqueKeys}`) + return } for (const uniqueKey of uniqueKeys) { diff --git a/core/schema/validate.spec.ts b/core/schema/validate.spec.ts index def49d74..2b1fa471 100644 --- a/core/schema/validate.spec.ts +++ b/core/schema/validate.spec.ts @@ -1,10 +1,9 @@ import { describe, expect, it } from "vitest" -import type { Schema } from "./Schema.js" import { validateSchema } from "./validate.js" describe("validateSchema", () => { it("returns empty array for valid schema", async () => { - const validSchema: Schema = { + const descriptor = { fields: [ { name: "id", @@ -18,7 +17,7 @@ describe("validateSchema", () => { } const result = await validateSchema({ - descriptor: validSchema, + descriptor, }) expect(result.valid).toBe(true) diff --git a/core/schema/validate.ts b/core/schema/validate.ts index 12210f88..a089279f 100644 --- a/core/schema/validate.ts +++ b/core/schema/validate.ts @@ -12,14 +12,17 @@ export async function validateSchema(props: { const { descriptor } = props let schema: Schema | undefined = undefined - const $schema = props.descriptor.$schema ?? DEFAULT_PROFILE - const profile = await loadProfile({ path: $schema }) + const $schema = + typeof props.descriptor.$schema === "string" + ? props.descriptor.$schema + : DEFAULT_PROFILE + const profile = await loadProfile({ path: $schema }) const { valid, errors } = await validateDescriptor({ ...props, profile }) if (valid) { // Validation + normalization = we can cast it - schema = normalizeSchema({ descriptor }) as Schema + schema = normalizeSchema({ descriptor }) as unknown as Schema } return { valid, errors, schema } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 512955b8..996365f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,6 +72,9 @@ importers: quick-lru: specifier: ^7.0.1 version: 7.0.1 + tiny-invariant: + specifier: ^1.3.3 + version: 1.3.3 csv: {} @@ -2974,6 +2977,9 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -6861,6 +6867,8 @@ snapshots: tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} From eb36f547eda144d7f1e8a6e5fabd6223268a9c37 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 11:40:22 +0100 Subject: [PATCH 03/31] Fixed linting --- renovate.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 5db72dd6..22a99432 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,4 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended" - ] + "extends": ["config:recommended"] } From 1217fe9715a84260125655021dcc0d80b5bf98aa Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 13:26:03 +0100 Subject: [PATCH 04/31] Improved package documentation --- CONTRIBUTING.md | 2 + ckan/OVERVIEW.md | 2 + ckan/typedoc.json | 5 ++ core/OVERVIEW.md | 2 + core/typedoc.json | 1 + docs/astro.config.ts | 55 ++++++++++++++++++++-- docs/content/docs/overview/contributing.md | 1 + docs/content/docs/overview/installation.md | 2 + dpkit/OVERVIEW.md | 2 + dpkit/README.md | 3 ++ dpkit/typedoc.json | 1 + file/OVERVIEW.md | 2 + file/typedoc.json | 1 + github/OVERVIEW.md | 2 + github/typedoc.json | 5 ++ zenodo/OVERVIEW.md | 2 + zenodo/typedoc.json | 5 ++ zip/OVERVIEW.md | 2 + zip/typedoc.json | 5 ++ 19 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 ckan/OVERVIEW.md create mode 100644 ckan/typedoc.json create mode 100644 core/OVERVIEW.md create mode 120000 docs/content/docs/overview/contributing.md create mode 100644 dpkit/OVERVIEW.md create mode 100644 dpkit/README.md create mode 100644 file/OVERVIEW.md create mode 100644 github/OVERVIEW.md create mode 100644 github/typedoc.json create mode 100644 zenodo/OVERVIEW.md create mode 100644 zenodo/typedoc.json create mode 100644 zip/OVERVIEW.md create mode 100644 zip/typedoc.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c00b6b83..f95f4c80 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,7 @@ --- title: Contributing +sidebar: + order: 2 --- # Contributing to dpkit diff --git a/ckan/OVERVIEW.md b/ckan/OVERVIEW.md new file mode 100644 index 00000000..8e30ce82 --- /dev/null +++ b/ckan/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/ckan + diff --git a/ckan/typedoc.json b/ckan/typedoc.json new file mode 100644 index 00000000..fc33b815 --- /dev/null +++ b/ckan/typedoc.json @@ -0,0 +1,5 @@ +{ + "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], + "skipErrorChecking": true +} diff --git a/core/OVERVIEW.md b/core/OVERVIEW.md new file mode 100644 index 00000000..49c0b908 --- /dev/null +++ b/core/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/core + diff --git a/core/typedoc.json b/core/typedoc.json index f8e49f3a..fc33b815 100644 --- a/core/typedoc.json +++ b/core/typedoc.json @@ -1,4 +1,5 @@ { "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], "skipErrorChecking": true } diff --git a/docs/astro.config.ts b/docs/astro.config.ts index 5b8aee34..3bfa9f1a 100644 --- a/docs/astro.config.ts +++ b/docs/astro.config.ts @@ -3,6 +3,16 @@ import { defineConfig } from "astro/config" import starlightScrollToTop from "starlight-scroll-to-top" import starlightTypeDoc, { typeDocSidebarGroup } from "starlight-typedoc" +const PACKAGES = { + dpkit: "../dpkit", + "@dpkit/ckan": "../ckan", + "@dpkit/core": "../core", + "@dpkit/github": "../github", + "@dpkit/file": "../file", + "@dpkit/zenodo": "../zenodo", + "@dpkit/zip": "../zip", +} + export default defineConfig({ site: "https://dpkit.datist.io", srcDir: ".", @@ -35,9 +45,9 @@ export default defineConfig({ plugins: [ starlightScrollToTop(), starlightTypeDoc({ - entryPoints: ["../dpkit", "../core", "../file", "../zip"], + entryPoints: generatePackageEntrypoints(), tsconfig: "../tsconfig.json", - typeDoc: { entryPointStrategy: "packages" }, + typeDoc: { entryPointStrategy: "packages", router: "structure" }, output: "packages", sidebar: { label: "Packages", @@ -48,7 +58,11 @@ export default defineConfig({ sidebar: [ { label: "Overview", autogenerate: { directory: "overview" } }, { label: "Guides", autogenerate: { directory: "guides" } }, - typeDocSidebarGroup, + { + label: "Packages", + collapsed: true, + items: generatePackageSidebars(), + }, ], head: [ { @@ -63,3 +77,38 @@ export default defineConfig({ }), ], }) + +function generatePackageEntrypoints() { + return Object.values(PACKAGES) +} + +function generatePackageSidebars() { + return Object.entries(PACKAGES).map(([name, path]) => + generatePackageSidebar({ name }), + ) +} + +function generatePackageSidebar(props: { name: string }) { + const name = props.name + const slug = name.replace("@", "_") + + return { + label: name, + collapsed: true, + items: [ + { + label: "Overview", + slug: `packages/${slug}/overview`, + }, + { + label: "Changelog", + slug: `packages/${slug}/changelog`, + }, + { + label: "API Reference", + autogenerate: { directory: `packages/${slug}/index` }, + //collapsed: true, + }, + ], + } +} diff --git a/docs/content/docs/overview/contributing.md b/docs/content/docs/overview/contributing.md new file mode 120000 index 00000000..069558fa --- /dev/null +++ b/docs/content/docs/overview/contributing.md @@ -0,0 +1 @@ +../../../../CONTRIBUTING.md \ No newline at end of file diff --git a/docs/content/docs/overview/installation.md b/docs/content/docs/overview/installation.md index 5ee638e3..cea48f49 100644 --- a/docs/content/docs/overview/installation.md +++ b/docs/content/docs/overview/installation.md @@ -1,5 +1,7 @@ --- title: Installation +sidebar: + order: 1 --- ## Prerequisites diff --git a/dpkit/OVERVIEW.md b/dpkit/OVERVIEW.md new file mode 100644 index 00000000..a2b1cdc9 --- /dev/null +++ b/dpkit/OVERVIEW.md @@ -0,0 +1,2 @@ +# dpkit + diff --git a/dpkit/README.md b/dpkit/README.md new file mode 100644 index 00000000..80bd23c4 --- /dev/null +++ b/dpkit/README.md @@ -0,0 +1,3 @@ +# dpkit + +Data Package implementation in TypeScript. Data Package is a standard consisting of a set of simple yet extensible specifications to describe datasets, data files and tabular data. It is a data definition language (DDL) and data API that facilitates findability, accessibility, interoperability, and reusability (FAIR) of data. For more information, please visit the [documentation portal](https://dpkit.datist.io). diff --git a/dpkit/typedoc.json b/dpkit/typedoc.json index f8e49f3a..fc33b815 100644 --- a/dpkit/typedoc.json +++ b/dpkit/typedoc.json @@ -1,4 +1,5 @@ { "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], "skipErrorChecking": true } diff --git a/file/OVERVIEW.md b/file/OVERVIEW.md new file mode 100644 index 00000000..ebcdb89d --- /dev/null +++ b/file/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/file + diff --git a/file/typedoc.json b/file/typedoc.json index f8e49f3a..fc33b815 100644 --- a/file/typedoc.json +++ b/file/typedoc.json @@ -1,4 +1,5 @@ { "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], "skipErrorChecking": true } diff --git a/github/OVERVIEW.md b/github/OVERVIEW.md new file mode 100644 index 00000000..82e6e6da --- /dev/null +++ b/github/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/github + diff --git a/github/typedoc.json b/github/typedoc.json new file mode 100644 index 00000000..fc33b815 --- /dev/null +++ b/github/typedoc.json @@ -0,0 +1,5 @@ +{ + "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], + "skipErrorChecking": true +} diff --git a/zenodo/OVERVIEW.md b/zenodo/OVERVIEW.md new file mode 100644 index 00000000..c3db5d41 --- /dev/null +++ b/zenodo/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/zenodo + diff --git a/zenodo/typedoc.json b/zenodo/typedoc.json new file mode 100644 index 00000000..fc33b815 --- /dev/null +++ b/zenodo/typedoc.json @@ -0,0 +1,5 @@ +{ + "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], + "skipErrorChecking": true +} diff --git a/zip/OVERVIEW.md b/zip/OVERVIEW.md new file mode 100644 index 00000000..a704ff69 --- /dev/null +++ b/zip/OVERVIEW.md @@ -0,0 +1,2 @@ +# @dpkit/zip + diff --git a/zip/typedoc.json b/zip/typedoc.json new file mode 100644 index 00000000..fc33b815 --- /dev/null +++ b/zip/typedoc.json @@ -0,0 +1,5 @@ +{ + "entryPoints": ["index.ts"], + "projectDocuments": ["CHANGELOG.md", "OVERVIEW.md"], + "skipErrorChecking": true +} From 50b6a30f6aa0c49e414d9e98e753fd9e70f7a4ba Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 14:38:45 +0100 Subject: [PATCH 05/31] Added dp/datist links --- docs/astro.config.ts | 5 ++++- docs/components/Header/SocialIcons.astro | 27 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 docs/components/Header/SocialIcons.astro diff --git a/docs/astro.config.ts b/docs/astro.config.ts index 3bfa9f1a..eed3fd6e 100644 --- a/docs/astro.config.ts +++ b/docs/astro.config.ts @@ -1,7 +1,7 @@ import starlight from "@astrojs/starlight" import { defineConfig } from "astro/config" import starlightScrollToTop from "starlight-scroll-to-top" -import starlightTypeDoc, { typeDocSidebarGroup } from "starlight-typedoc" +import starlightTypeDoc from "starlight-typedoc" const PACKAGES = { dpkit: "../dpkit", @@ -23,6 +23,9 @@ export default defineConfig({ description: "Data Package is a standard consisting of a set of simple yet extensible specifications to describe datasets, data files and tabular data. It is a data definition language (DDL) and data API that facilitates findability, accessibility, interoperability, and reusability (FAIR) of data.", customCss: ["/assets/styles.css"], + components: { + SocialIcons: "./components/Header/SocialIcons.astro", + }, logo: { light: "/assets/logo-light.svg", dark: "/assets/logo-dark.svg", diff --git a/docs/components/Header/SocialIcons.astro b/docs/components/Header/SocialIcons.astro new file mode 100644 index 00000000..1cf20d3c --- /dev/null +++ b/docs/components/Header/SocialIcons.astro @@ -0,0 +1,27 @@ +--- +import Default from "@astrojs/starlight/components/SocialIcons.astro" +import type { Props } from "@astrojs/starlight/props" +--- + + + + + Datist + + + + Data Package (v2) + + + + From afe82e11764f31e82b2d9595ce439b1636a1909a Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 15:20:00 +0100 Subject: [PATCH 06/31] Updated dpkit logo --- docs/assets/logo-dark.png | Bin 0 -> 6745 bytes docs/assets/logo-dark.svg | 140 ------------------------------------- docs/assets/logo-light.png | Bin 0 -> 13019 bytes docs/assets/logo-light.svg | 26 ------- docs/assets/styles.css | 12 ++-- docs/astro.config.ts | 8 +-- docs/public/favicon.ico | Bin 15406 -> 0 bytes docs/public/favicon.png | Bin 0 -> 3072 bytes 8 files changed, 10 insertions(+), 176 deletions(-) create mode 100644 docs/assets/logo-dark.png delete mode 100644 docs/assets/logo-dark.svg create mode 100644 docs/assets/logo-light.png delete mode 100644 docs/assets/logo-light.svg delete mode 100644 docs/public/favicon.ico create mode 100644 docs/public/favicon.png diff --git a/docs/assets/logo-dark.png b/docs/assets/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a34897a298863afcaf93afe4f53154675452fb51 GIT binary patch literal 6745 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/logo-light.png b/docs/assets/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..0aee1841f4fac47b200f8ffde58f379422371aba GIT binary patch literal 13019 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 Bw$1 - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/styles.css b/docs/assets/styles.css index 55a51fa4..754569b6 100644 --- a/docs/assets/styles.css +++ b/docs/assets/styles.css @@ -6,15 +6,15 @@ :root[data-theme="light"] { --purple-hsl: 209, 85%, 65%; - --sl-color-text-accent: #6fa7da; - --sl-color-banner-bg: #6fa7da; - /* --sl-color-bg-inline-code: #6fa7da; */ + --sl-color-text-accent: #228be6; + --sl-color-banner-bg: #228be6; + /* --sl-color-bg-inline-code: #228be6; */ } :root[data-theme="dark"] { - --sl-color-text-accent: #6fa7da; - --sl-color-banner-bg: #6fa7da; - /* --sl-color-bg-inline-code: #6fa7da; */ + --sl-color-text-accent: #228be6; + --sl-color-banner-bg: #228be6; + /* --sl-color-bg-inline-code: #228be6; */ } /* Scrollbar */ diff --git a/docs/astro.config.ts b/docs/astro.config.ts index eed3fd6e..7fce7288 100644 --- a/docs/astro.config.ts +++ b/docs/astro.config.ts @@ -27,9 +27,9 @@ export default defineConfig({ SocialIcons: "./components/Header/SocialIcons.astro", }, logo: { - light: "/assets/logo-light.svg", - dark: "/assets/logo-dark.svg", - alt: "Data Package Logo", + light: "/assets/logo-light.png", + dark: "/assets/logo-dark.png", + alt: "DPKit Logo", replacesTitle: true, }, social: [ @@ -39,7 +39,7 @@ export default defineConfig({ href: "https://github.com/datisthq/dpkit", }, ], - favicon: "favicon.ico", + favicon: "favicon.png", editLink: { baseUrl: "https://github.com/datisthq/dpkit/edit/main/", }, diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico deleted file mode 100644 index 125945cda67fa12b589c3b88d1c2999f5ca492dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 gs{bcoafp?*?d+{#CscikA&Cuh#d Date: Mon, 26 May 2025 15:31:28 +0100 Subject: [PATCH 07/31] Added funding --- docs/content/docs/overview/funding.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 docs/content/docs/overview/funding.md diff --git a/docs/content/docs/overview/funding.md b/docs/content/docs/overview/funding.md new file mode 100644 index 00000000..fdea7321 --- /dev/null +++ b/docs/content/docs/overview/funding.md @@ -0,0 +1,14 @@ +--- +title: Funding +--- + +This project is funded through [NGI Zero Commons Fund](https://nlnet.nl/commonsfund/), a fund established by [NLnet](https://nlnet.nl) with financial support from the European Commission's [Next Generation Internet](https://ngi.eu) program. Learn more at the [NLnet project page](https://nlnet.nl/project/DataPackage-TS/). + + From 2e5631a895d2a32fe017c03d7ebf8860fee93b37 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 26 May 2025 15:59:35 +0100 Subject: [PATCH 08/31] Recovered homepage and about --- docs/assets/about.png | Bin 0 -> 2381 bytes docs/assets/hero.png | Bin 1470 -> 3072 bytes docs/astro.config.ts | 2 +- docs/components/About/About.astro | 9 ++-- docs/components/About/datist.png | Bin 1470 -> 0 bytes docs/content/docs/index.mdx | 78 ++++++++++++++++++++++++++++-- 6 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 docs/assets/about.png delete mode 100644 docs/components/About/datist.png diff --git a/docs/assets/about.png b/docs/assets/about.png new file mode 100644 index 0000000000000000000000000000000000000000..7be21fc39eab1369b4482b04774f50cc2533ff15 GIT binary patch literal 2381 zcmZ`*dpy(YAOCK{GIN{c8>!R~h7BztMMH>Uj_b@^vnaRC<%swlLdd1eC30NigczMd zrWO+w`E?O94o9}*TB037_FJ#>&+qrg?|D6+=l#6jpZDjF=dbsZb>7)d7NLp&06^CM z48auupnl?evjj|hZnEiJVvx9Cczt=yCNFrv8qqa1C!DEcmG!AqV(f+aCHc>LyqPzqczT_J?e$3ckiJ-Ha>l+=j3;- znRr`r#Wf)F6xm@=CwnvtRb#>gy}l+RecSODnE^xxpo-F%_md#g=UUd!lRY7dX?+fdQ-H=Q+wJgv|Q>9!9=qN`Sb1qij^3=#K z?i!PuaLPWn)NEm*ka@1KDi3v2PPwRr7OHNJ%T`(Z_EC@R z>#K?VI8@{Nh&=2BF)9dDZ+&@qejsy1A;B~=Ys`yIc1cgX7+oKlx%{4gmf>+Nxk2h^ z^ZhTltcq*NO#+&$iedKHI(O>k-a5bL!I(HvWKow$7($+%&w1ZF)2z}*pXzGa+NvHn zo;0aeQ%8R?;Sg{jlp+We#Y^`(;_f$f8#G~;H6`GxUalv2lSM$%ZHeiaHk`$iAacxrG)2qOud zpj`%}HW$kNMTvnm@5}yM#l^)Qiy{GZ4gJ9mW4w<^_?U2}=@D%GV`9xK!8|dt`*Y)(sU*d+x6Xq!eMQv=C#JTt`<7jL$Dc3@GnaX}W+6#{K!PP{;0 z6WVsN7@FhLg_*jTxa$6Q1k0rO+CMHAH~kK#J0b6UiX;s8bOyaO!P@5NWkCCnlHS-# zGeb80haiE33i(=Ak9=;K#PgC-)9o9A;G$h{3>UyoUE&Q;{Zm@Ilz&S7rr1mB64m?`xC8Ku4GlTV{y2dk#Qj&b2IeZKuPG=$Da#Nytt#FHwbxxJ{0+4KUi0l z&<)MzKyo^@(;m#2k<=Kom9c+T$k1V@*LBatOSUsZ+Fy5svj5ytl4_aG-Fco;kZ3K1 zAulaob@KKk@Nw@GK^mA?KP~Z882&BDiB8(5o5Ts}OL@bu0MLOdld9*OX;_vR^QJ zyW07xnWHU+Ox_HPjmFih$@UF7?rfLaNKP_#W*gl$YkC4oIb?rHeR4}@@#kNkvyv0_ z?fG3AQ9Ta_5?V8L3?0!p{=-8tP?b!$?H+^K%!)|;vPe12w31aQA6>`V7rkBh@ZfrM zI5flZFrUxx=y~{Cx)zB@P6-cqnawC|%X03hE7T+rgJ-l!#34xqBDupoOFg6c{9@mk zj=DC2*n5BOY=Shsj+JJOYQA?${fJ@J=5V9m>3oLi6CaKGL{|q6BosCuSv7< zqy_oYg3SV>gT(+CVU0}mvB&grMs7H~nTe^H$uT{wsTmdvbfi!H&%mXKAZkd${~w6r SpZM_`0qkv@3C-4&fBgp)>^d6& literal 0 HcmV?d00001 diff --git a/docs/assets/hero.png b/docs/assets/hero.png index 0ab0a6078348b7bf7427695c820e2acda0d4760b..88a2c1f98c750049bed39c252b8c76fff073d018 100644 GIT binary patch delta 3042 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 diff --git a/docs/astro.config.ts b/docs/astro.config.ts index 7fce7288..662cef19 100644 --- a/docs/astro.config.ts +++ b/docs/astro.config.ts @@ -29,7 +29,7 @@ export default defineConfig({ logo: { light: "/assets/logo-light.png", dark: "/assets/logo-dark.png", - alt: "DPKit Logo", + alt: "DPkit Logo", replacesTitle: true, }, social: [ diff --git a/docs/components/About/About.astro b/docs/components/About/About.astro index bbb064f8..4981344e 100644 --- a/docs/components/About/About.astro +++ b/docs/components/About/About.astro @@ -1,15 +1,15 @@ --- import { Image } from "astro:assets" -import datist from "./datist.png" +import logo from "../../assets/about.png" ---
Brought to you by -
Datist
- We are bringing technological innovation and consultancy services to open data field. - Learn about Datist. +
Datist
+

We are bringing technological innovation and consultancy
services to open data field. + Learn about Datist