Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions browser/components/Report/Error/Cell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -301,3 +301,28 @@ export function CellEnumError(props: { error: errorTypes.CellEnumError }) {
</Text>
)
}

export function CellJsonSchemaError(props: {
error: errorTypes.CellJsonSchemaError
}) {
const { t } = useTranslation()
const { error } = props

return (
<Text>
{t("Value of the cell")}{" "}
<Code fz="lg" fw="bold">
{error.cell}
</Code>{" "}
{t("in field")}{" "}
<Code fz="lg" fw="bold">
{error.fieldName}
</Code>{" "}
{t("of row")}{" "}
<Code fz="lg" fw="bold">
{error.rowNumber}
</Code>{" "}
{t("does not match the")} JSON schema
</Text>
)
}
3 changes: 3 additions & 0 deletions browser/components/Report/Error/Error.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
CellEnumError,
CellExclusiveMaximumError,
CellExclusiveMinimumError,
CellJsonSchemaError,
CellMaxLengthError,
CellMaximumError,
CellMinLengthError,
Expand Down Expand Up @@ -65,5 +66,7 @@ export function Error(props: {
return <CellUniqueError error={error} />
case "cell/enum":
return <CellEnumError error={error} />
case "cell/jsonSchema":
return <CellJsonSchemaError error={error} />
}
}
5 changes: 5 additions & 0 deletions core/field/types/Geojson.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ export interface GeojsonField extends BaseField<GeojsonConstraints> {
* GeoJSON-specific constraints
*/
export interface GeojsonConstraints extends BaseConstraints {
/**
* JSON Schema object for validating the object structure and properties
*/
jsonSchema?: Record<string, any>

/**
* Restrict values to a specified set of GeoJSON objects
* Serialized as strings or GeoJSON object literals
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"spec": "vitest run",
"test": "pnpm lint && pnpm type && pnpm spec",
"test:win": "pnpm spec",
"type": "tsc --noEmit && pnpm -F browser type && pnpm -F cloud type",
"type": "tsc --noEmit && pnpm -F browser type",
"version:ci": "pnpm --include-workspace-root -r exec pnpm version --no-git-tag-version"
},
"devDependencies": {
Expand Down
6 changes: 6 additions & 0 deletions table/error/Cell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export type CellError =
| CellPatternError
| CellUniqueError
| CellEnumError
| CellJsonSchemaError

export interface BaseCellError extends BaseTableError {
fieldName: string
Expand Down Expand Up @@ -73,3 +74,8 @@ export interface CellEnumError extends BaseCellError {
type: "cell/enum"
enum: string[]
}

export interface CellJsonSchemaError extends BaseCellError {
type: "cell/jsonSchema"
jsonSchema: Record<string, any>
}
9 changes: 0 additions & 9 deletions table/field/parse.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import type { Expr } from "nodejs-polars"
import { DataType } from "nodejs-polars"
import type { FieldMapping } from "./Mapping.ts"
import { parseArrayField } from "./types/array.ts"
import { parseBooleanField } from "./types/boolean.ts"
import { parseDateField } from "./types/date.ts"
import { parseDatetimeField } from "./types/datetime.ts"
import { parseDurationField } from "./types/duration.ts"
import { parseGeojsonField } from "./types/geojson.ts"
import { parseGeopointField } from "./types/geopoint.ts"
import { parseIntegerField } from "./types/integer.ts"
import { parseListField } from "./types/list.ts"
import { parseNumberField } from "./types/number.ts"
import { parseObjectField } from "./types/object.ts"
import { parseStringField } from "./types/string.ts"
import { parseTimeField } from "./types/time.ts"
import { parseYearField } from "./types/year.ts"
Expand All @@ -22,8 +19,6 @@ export function parseField(mapping: FieldMapping, fieldExpr: Expr) {

const field = mapping.target
switch (field.type) {
case "array":
return parseArrayField(field, fieldExpr)
case "boolean":
return parseBooleanField(field, fieldExpr)
case "date":
Expand All @@ -32,8 +27,6 @@ export function parseField(mapping: FieldMapping, fieldExpr: Expr) {
return parseDatetimeField(field, fieldExpr)
case "duration":
return parseDurationField(field, fieldExpr)
case "geojson":
return parseGeojsonField(field, fieldExpr)
case "geopoint":
return parseGeopointField(field, fieldExpr)
case "integer":
Expand All @@ -42,8 +35,6 @@ export function parseField(mapping: FieldMapping, fieldExpr: Expr) {
return parseListField(field, fieldExpr)
case "number":
return parseNumberField(field, fieldExpr)
case "object":
return parseObjectField(field, fieldExpr)
case "string":
return parseStringField(field, fieldExpr)
case "time":
Expand Down
9 changes: 0 additions & 9 deletions table/field/stringify.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
import type { Field } from "@dpkit/core"
import type { Expr } from "nodejs-polars"
import { stringifyArrayField } from "./types/array.ts"
import { stringifyBooleanField } from "./types/boolean.ts"
import { stringifyDateField } from "./types/date.ts"
import { stringifyDatetimeField } from "./types/datetime.ts"
import { stringifyDurationField } from "./types/duration.ts"
import { stringifyGeojsonField } from "./types/geojson.ts"
import { stringifyGeopointField } from "./types/geopoint.ts"
import { stringifyIntegerField } from "./types/integer.ts"
import { stringifyListField } from "./types/list.ts"
import { stringifyNumberField } from "./types/number.ts"
import { stringifyObjectField } from "./types/object.ts"
import { stringifyStringField } from "./types/string.ts"
import { stringifyTimeField } from "./types/time.ts"
import { stringifyYearField } from "./types/year.ts"
import { stringifyYearmonthField } from "./types/yearmonth.ts"

export function stringifyField(field: Field, fieldExpr: Expr) {
switch (field.type) {
case "array":
return stringifyArrayField(field, fieldExpr)
case "boolean":
return stringifyBooleanField(field, fieldExpr)
case "date":
Expand All @@ -28,8 +23,6 @@ export function stringifyField(field: Field, fieldExpr: Expr) {
return stringifyDatetimeField(field, fieldExpr)
case "duration":
return stringifyDurationField(field, fieldExpr)
case "geojson":
return stringifyGeojsonField(field, fieldExpr)
case "geopoint":
return stringifyGeopointField(field, fieldExpr)
case "integer":
Expand All @@ -38,8 +31,6 @@ export function stringifyField(field: Field, fieldExpr: Expr) {
return stringifyListField(field, fieldExpr)
case "number":
return stringifyNumberField(field, fieldExpr)
case "object":
return stringifyObjectField(field, fieldExpr)
case "string":
return stringifyStringField(field, fieldExpr)
case "time":
Expand Down
Loading