diff --git a/.changeset/mighty-days-poke.md b/.changeset/mighty-days-poke.md new file mode 100644 index 00000000..acc5ba5e --- /dev/null +++ b/.changeset/mighty-days-poke.md @@ -0,0 +1,8 @@ +--- +"@graphprotocol/hypergraph-react": minor +"@graphprotocol/hypergraph": minor +"@graphprotocol/hypergraph-cli": minor +--- + +rename Type.Checkbox to Type.Boolean + \ No newline at end of file diff --git a/apps/events/src/schema.ts b/apps/events/src/schema.ts index a751eadb..8c0d13af 100644 --- a/apps/events/src/schema.ts +++ b/apps/events/src/schema.ts @@ -6,13 +6,13 @@ export class User extends Entity.Class('User')({ export class Todo extends Entity.Class('Todo')({ name: Type.Text, - completed: Type.Checkbox, + completed: Type.Boolean, assignees: Type.Relation(User), }) {} export class Todo2 extends Entity.Class('Todo2')({ name: Type.Text, - checked: Type.Checkbox, + checked: Type.Boolean, assignees: Type.Relation(User), due: Type.Date, amount: Type.Number, diff --git a/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx b/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx index e0f4885a..b0fcd64e 100644 --- a/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx +++ b/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx @@ -19,7 +19,7 @@ class RelationTypeOption extends Schema.Class('/hypergraph/t const typeOptions: Array = [ TypeOption.make({ id: 'DefaultEntityText', name: 'Text' }), TypeOption.make({ id: 'DefaultEntityNumber', name: 'Number' }), - TypeOption.make({ id: 'DefaultEntityCheckbox', name: 'Checkbox' }), + TypeOption.make({ id: 'DefaultEntityBoolean', name: 'Boolean' }), TypeOption.make({ id: 'DefaultEntityDate', name: 'Date' }), TypeOption.make({ id: 'DefaultEntityUrl', name: 'Url' }), TypeOption.make({ id: 'DefaultEntityPoint', name: 'Point' }), diff --git a/docs/docs/filtering-query-results.md b/docs/docs/filtering-query-results.md index a53b88ed..dd9f8e55 100644 --- a/docs/docs/filtering-query-results.md +++ b/docs/docs/filtering-query-results.md @@ -9,7 +9,7 @@ Note: Filtering is not yet supported for public data. ```tsx export class Event extends Entity.Class("Event")({ name: Type.Text, - cancelled: Type.Checkbox, + cancelled: Type.Boolean, }) {} // inside the React component @@ -23,7 +23,7 @@ const { data } = useQuery(Event, { The filter API supports different filters for different property types and offers a logical `or` and `not` operator. ```tsx -// checkbox filter +// boolean filter { is: true/false, // exact match exists: true/false, // filter by existence of the property @@ -132,7 +132,7 @@ const { data } = useQuery(Person, { // schema export class Todo extends Entity.Class('Todo')({ name: Type.Text, - checked: Type.Checkbox, + checked: Type.Boolean, assignees: Type.Relation(User), }) ``` @@ -175,7 +175,7 @@ const { data } = useQuery(Person, { // schema export class Todo extends Entity.Class('Todo')({ name: Type.Text, - checked: Type.Checkbox, + checked: Type.Boolean, assignees: Type.Relation(User, { entity: { assignedAt: Type.DateTime, diff --git a/docs/docs/schema.md b/docs/docs/schema.md index 120e0c00..a3971d7c 100644 --- a/docs/docs/schema.md +++ b/docs/docs/schema.md @@ -38,7 +38,7 @@ export class Event extends Entity.Class('Event')({ - `Type.Text` (string) - `Type.Number` (number) - `Type.Date` (date) -- `Type.Checkbox` (boolean) +- `Type.Boolean` (boolean) - `Type.Point` (serialized to a string with a comma separated list of numbers) - `Type.Relation` (relation to another Type) @@ -51,7 +51,7 @@ export class Company extends Entity.Class('Company')({ name: Type.Text, employees: Type.Number, founded: Type.Date, - active: Type.Checkbox, + active: Type.Boolean, location: Type.Point, }) {} ``` diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 51463995..9515b91c 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -43,24 +43,24 @@ const config = { content: '536FEAE3B63DD658', }, }, - { - tagName: 'link', - attributes: { - rel: 'icon', - type: 'image/png', - href: '/img/HypergraphLogoDark.png', - media: '(prefers-color-scheme: light)', + { + tagName: 'link', + attributes: { + rel: 'icon', + type: 'image/png', + href: '/img/HypergraphLogoDark.png', + media: '(prefers-color-scheme: light)', + }, }, - }, - { - tagName: 'link', - attributes: { - rel: 'icon', - type: 'image/png', - href: '/img/HypergraphLogo.png', - media: '(prefers-color-scheme: dark)', + { + tagName: 'link', + attributes: { + rel: 'icon', + type: 'image/png', + href: '/img/HypergraphLogo.png', + media: '(prefers-color-scheme: dark)', + }, }, - }, ], plugins: [ diff --git a/docs/legacy-files/archived/schema-graph-based.md b/docs/legacy-files/archived/schema-graph-based.md index 75adcc31..df6b9c31 100644 --- a/docs/legacy-files/archived/schema-graph-based.md +++ b/docs/legacy-files/archived/schema-graph-based.md @@ -277,7 +277,7 @@ import * as S from "effect/Schema"; export const type = { Text: S.String, Number: S.Number, - Checkbox: S.Boolean, + Boolean: S.Boolean, }; ``` @@ -288,7 +288,7 @@ export const schema: Schema = { attributes: { name: type.Text, age: type.Number, - isActive: type.Checkbox, + isActive: type.Boolean, email: type.Text, }, types: { diff --git a/packages/hypergraph-react/src/internal/use-create-entity-public.ts b/packages/hypergraph-react/src/internal/use-create-entity-public.ts index fda8edd4..e4a39413 100644 --- a/packages/hypergraph-react/src/internal/use-create-entity-public.ts +++ b/packages/hypergraph-react/src/internal/use-create-entity-public.ts @@ -40,7 +40,7 @@ export function useCreateEntityPublic( throw new Error(`Value for ${key} is undefined`); } let serializedValue: string = data[key]; - if (TypeUtils.isCheckboxOrOptionalCheckboxType(fields[key])) { + if (TypeUtils.isBooleanOrOptionalBooleanType(fields[key])) { serializedValue = Graph.serializeCheckbox(data[key]); } else if (TypeUtils.isDateOrOptionalDateType(fields[key])) { serializedValue = Graph.serializeDate(data[key]); diff --git a/packages/hypergraph-react/src/internal/use-query-public.tsx b/packages/hypergraph-react/src/internal/use-query-public.tsx index 4cad8f53..c8a4018e 100644 --- a/packages/hypergraph-react/src/internal/use-query-public.tsx +++ b/packages/hypergraph-react/src/internal/use-query-public.tsx @@ -153,7 +153,7 @@ const convertPropertyValue = ( key: string, type: Entity.AnyNoContext, ) => { - if (TypeUtils.isCheckboxOrOptionalCheckboxType(type.fields[key]) && property.value !== undefined) { + if (TypeUtils.isBooleanOrOptionalBooleanType(type.fields[key]) && property.value !== undefined) { return Boolean(property.value); } if (TypeUtils.isPointOrOptionalPointType(type.fields[key]) && property.value !== undefined) { diff --git a/packages/hypergraph-react/src/prepare-publish.ts b/packages/hypergraph-react/src/prepare-publish.ts index fc99d663..97e26fe6 100644 --- a/packages/hypergraph-react/src/prepare-publish.ts +++ b/packages/hypergraph-react/src/prepare-publish.ts @@ -75,7 +75,7 @@ export const preparePublish = async ({ throw new Error(`Value for ${key} is undefined`); } let serializedValue: string = entity[key]; - if (TypeUtils.isCheckboxOrOptionalCheckboxType(fields[key])) { + if (TypeUtils.isBooleanOrOptionalBooleanType(fields[key])) { serializedValue = Graph.serializeCheckbox(entity[key]); } else if (TypeUtils.isDateOrOptionalDateType(fields[key])) { serializedValue = Graph.serializeDate(entity[key]); @@ -118,7 +118,7 @@ export const preparePublish = async ({ throw new Error(`Value for ${key} is undefined`); } let serializedValue: string = entity[key]; - if (TypeUtils.isCheckboxOrOptionalCheckboxType(fields[key])) { + if (TypeUtils.isBooleanOrOptionalBooleanType(fields[key])) { serializedValue = Graph.serializeCheckbox(entity[key]); } else if (TypeUtils.isDateOrOptionalDateType(fields[key])) { serializedValue = Graph.serializeDate(entity[key]); diff --git a/packages/hypergraph-react/test/prepare-publish.test.ts b/packages/hypergraph-react/test/prepare-publish.test.ts index 6a378cbd..a0dccf1b 100644 --- a/packages/hypergraph-react/test/prepare-publish.test.ts +++ b/packages/hypergraph-react/test/prepare-publish.test.ts @@ -24,7 +24,7 @@ describe('preparePublish', () => { name: Type.Text, age: Type.Number, email: Type.optional(Type.Text), - isActive: Type.Checkbox, + isActive: Type.Boolean, birthDate: Type.Date, location: Type.Point, }) {} @@ -38,7 +38,7 @@ describe('preparePublish', () => { class OptionalFieldsEntity extends Entity.Class('OptionalFieldsEntity')({ name: Type.Text, // required field optionalNumber: Type.optional(Type.Number), - optionalCheckbox: Type.optional(Type.Checkbox), + optionalBoolean: Type.optional(Type.Boolean), optionalDate: Type.optional(Type.Date), optionalPoint: Type.optional(Type.Point), }) {} @@ -82,7 +82,7 @@ describe('preparePublish', () => { properties: { name: Id.Id('2a8b9c7d-4e5f-6a7b-8c9d-0e1f2a3b4c5d'), optionalNumber: Id.Id('eaf9f4f8-5647-4228-aff5-8725368fc87c'), - optionalCheckbox: Id.Id('2742d8b6-3059-4adb-b439-fdfcd588dccb'), + optionalBoolean: Id.Id('2742d8b6-3059-4adb-b439-fdfcd588dccb'), optionalDate: Id.Id('9b53690f-ea6d-4bd8-b4d3-9ea01e7f837f'), optionalPoint: Id.Id('0c1d2e3f-4a5b-4c7d-8e9f-0a1b2c3d4e5f'), }, @@ -405,7 +405,7 @@ describe('preparePublish', () => { type: 'OptionalFieldsEntity', name: 'Test Entity', optionalNumber: 42.5, - optionalCheckbox: true, + optionalBoolean: true, optionalDate: new Date('2024-01-15'), optionalPoint: [12.34, 56.78], __schema: OptionalFieldsEntity, @@ -428,7 +428,7 @@ describe('preparePublish', () => { type: 'OptionalFieldsEntity', name: 'Test Entity', optionalNumber: 25, - // optionalCheckbox is undefined + // optionalBoolean is undefined optionalDate: new Date('2024-02-20'), // optionalPoint is undefined __schema: OptionalFieldsEntity, @@ -492,7 +492,7 @@ describe('preparePublish', () => { } }); - it('should handle optional Checkbox field variations', async () => { + it('should handle optional Boolean field variations', async () => { const testCases = [ { value: true, description: 'true' }, { value: false, description: 'false' }, @@ -504,7 +504,7 @@ describe('preparePublish', () => { id: 'e68aa940-8452-48de-8523-292ba3771f81', type: 'OptionalFieldsEntity', name: `Test ${testCase.description}`, - optionalCheckbox: testCase.value, + optionalBoolean: testCase.value, __schema: OptionalFieldsEntity, } as Entity.Entity; @@ -605,7 +605,7 @@ describe('preparePublish', () => { type: 'OptionalFieldsEntity', name: 'Existing Entity', optionalNumber: 100, // New field - optionalCheckbox: true, // New field + optionalBoolean: true, // New field optionalDate: new Date('2024-03-15'), // New field optionalPoint: [45.0, 90.0], // New field __schema: OptionalFieldsEntity, @@ -671,7 +671,7 @@ describe('preparePublish', () => { type: 'OptionalFieldsEntity', name: 'Existing Entity', optionalNumber: 125, // Changed from 75 - // optionalCheckbox: undefined (not present, will remain undefined) + // optionalBoolean: undefined (not present, will remain undefined) optionalDate: new Date('2023-01-01'), // Same as existing (no change) optionalPoint: [12.5, 25.0], // New field __schema: OptionalFieldsEntity, diff --git a/packages/hypergraph/src/entity/types.ts b/packages/hypergraph/src/entity/types.ts index 546a493a..ee662e56 100644 --- a/packages/hypergraph/src/entity/types.ts +++ b/packages/hypergraph/src/entity/types.ts @@ -47,7 +47,7 @@ export type DocumentContent = { relations?: Record; }; -export type EntityCheckboxFilter = { +export type EntityBooleanFilter = { is: boolean; }; diff --git a/packages/hypergraph/src/mapping/Mapping.ts b/packages/hypergraph/src/mapping/Mapping.ts index eaac3f51..f769505e 100644 --- a/packages/hypergraph/src/mapping/Mapping.ts +++ b/packages/hypergraph/src/mapping/Mapping.ts @@ -94,7 +94,7 @@ export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; /** * @since 0.2.0 */ -export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'Checkbox', 'Date', 'Point'); +export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point'); /** * @since 0.2.0 */ @@ -749,7 +749,7 @@ export class RelationValueTypeDoesNotExistError extends Data.TaggedError( */ export function mapSchemaDataTypeToGRC20PropDataType(dataType: SchemaDataType): CreatePropertyParams['dataType'] { switch (true) { - case dataType === 'Checkbox': { + case dataType === 'Boolean': { return 'CHECKBOX'; } case dataType === 'Date': { diff --git a/packages/hypergraph/src/type-utils/type-utils.ts b/packages/hypergraph/src/type-utils/type-utils.ts index fdb1a6b4..c61cb20a 100644 --- a/packages/hypergraph/src/type-utils/type-utils.ts +++ b/packages/hypergraph/src/type-utils/type-utils.ts @@ -25,11 +25,11 @@ export const isDateOrOptionalDateType = (type: any) => { }; // biome-ignore lint/suspicious/noExplicitAny: TODO -export const isCheckboxOrOptionalCheckboxType = (type: any) => { +export const isBooleanOrOptionalBooleanType = (type: any) => { if (type.ast && type.ast._tag === 'PropertySignatureDeclaration' && type.ast.isOptional) { - return type.from === Type.Checkbox; + return type.from === Type.Boolean; } - return type === Type.Checkbox; + return type === Type.Boolean; }; // biome-ignore lint/suspicious/noExplicitAny: TODO diff --git a/packages/hypergraph/src/type/type.ts b/packages/hypergraph/src/type/type.ts index d354d5cb..56b7b63d 100644 --- a/packages/hypergraph/src/type/type.ts +++ b/packages/hypergraph/src/type/type.ts @@ -5,7 +5,8 @@ import type { AnyNoContext, EntityWithRelation } from '../entity/types.js'; export const Text = Schema.String; // biome-ignore lint/suspicious/noShadowRestrictedNames: is part of a namespaces module and therefor ok export const Number = Schema.Number; -export const Checkbox = Schema.Boolean; +// biome-ignore lint/suspicious/noShadowRestrictedNames: is part of a namespaces module and therefor ok +export const Boolean = Schema.Boolean; // biome-ignore lint/suspicious/noShadowRestrictedNames: is part of a namespaces module and therefor ok export const Date = Schema.Date; export const Point = Schema.transform(Schema.String, Schema.Array(Number), { diff --git a/packages/hypergraph/test/entity/findMany.test.ts b/packages/hypergraph/test/entity/findMany.test.ts index f685aa54..cb90e5d2 100644 --- a/packages/hypergraph/test/entity/findMany.test.ts +++ b/packages/hypergraph/test/entity/findMany.test.ts @@ -11,7 +11,7 @@ describe('findMany with filters', () => { class Person extends Entity.Class('Person')({ name: Type.Text, age: Type.Number, - isActive: Type.Checkbox, + isActive: Type.Boolean, }) {} class Product extends Entity.Class('Product')({ diff --git a/packages/hypergraph/test/mapping/Mapping.test.ts b/packages/hypergraph/test/mapping/Mapping.test.ts index ca15460b..28ec6885 100644 --- a/packages/hypergraph/test/mapping/Mapping.test.ts +++ b/packages/hypergraph/test/mapping/Mapping.test.ts @@ -12,7 +12,7 @@ import { describe('Mapping', () => { describe('mapSchemaDataTypeToGRC20PropDataType', () => { it('should be able to map the schema dataType to the correct GRC-20 dataType', () => { - expect(mapSchemaDataTypeToGRC20PropDataType('Checkbox')).toEqual('CHECKBOX'); + expect(mapSchemaDataTypeToGRC20PropDataType('Boolean')).toEqual('CHECKBOX'); expect(mapSchemaDataTypeToGRC20PropDataType('Number')).toEqual('NUMBER'); expect(mapSchemaDataTypeToGRC20PropDataType('Date')).toEqual('TIME'); expect(mapSchemaDataTypeToGRC20PropDataType('Point')).toEqual('POINT');