diff --git a/package.json b/package.json index 12ca378..380f48b 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@antelopejs/interface-api-util": "^0.1.1", "@antelopejs/interface-core": "^0.0.5", "@antelopejs/interface-database": "^0.1.3", - "@antelopejs/interface-database-decorators": "^0.1.3", + "@antelopejs/interface-database-decorators": "^0.1.4", "@biomejs/biome": "2.3.2", "@types/chai": "^4.3.20", "@types/mocha": "^10.0.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56d6dee..5f59edb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ importers: specifier: ^0.1.3 version: 0.1.3(@antelopejs/interface-core@0.0.5) '@antelopejs/interface-database-decorators': - specifier: ^0.1.3 - version: 0.1.3(@antelopejs/interface-api@0.0.5(@antelopejs/interface-core@0.0.5))(@antelopejs/interface-core@0.0.5)(@antelopejs/interface-database@0.1.3(@antelopejs/interface-core@0.0.5)) + specifier: ^0.1.4 + version: 0.1.4(@antelopejs/interface-api@0.0.5(@antelopejs/interface-core@0.0.5))(@antelopejs/interface-core@0.0.5)(@antelopejs/interface-database@0.1.3(@antelopejs/interface-core@0.0.5)) '@biomejs/biome': specifier: 2.3.2 version: 2.3.2 @@ -73,8 +73,8 @@ packages: '@antelopejs/interface-core@0.0.5': resolution: {integrity: sha512-4H6hpFfiK2+DE8vL2mEtPbq1WNch9lt40QNr9KjBrOAtnuq/zMfIlzhbEsda39m+FVkMWXfUYoVolRogVKCLIQ==} - '@antelopejs/interface-database-decorators@0.1.3': - resolution: {integrity: sha512-yPSP7cYh/7nhj1y2bOWvJ1idErWqI4EsYppVg3XOy7KEaZ+RvKodwFYDle0dqsFp9UNtR8p3m0bg0YasZrAayA==} + '@antelopejs/interface-database-decorators@0.1.4': + resolution: {integrity: sha512-jjy0ZGH7sBcuPQpsa6jdsYCzg1WzmrA/QS0nqSdrBWsHVOBVEVXgFG1LJLduEgb8WcJrN75rVZUiYebgT6cSag==} peerDependencies: '@antelopejs/interface-api': '>=0.0.3 <1.0.0' '@antelopejs/interface-core': '>=0.0.3 <1.0.0' @@ -359,8 +359,8 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -1337,8 +1337,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -1385,8 +1385,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -1421,7 +1421,7 @@ snapshots: dependencies: reflect-metadata: 0.2.2 - '@antelopejs/interface-database-decorators@0.1.3(@antelopejs/interface-api@0.0.5(@antelopejs/interface-core@0.0.5))(@antelopejs/interface-core@0.0.5)(@antelopejs/interface-database@0.1.3(@antelopejs/interface-core@0.0.5))': + '@antelopejs/interface-database-decorators@0.1.4(@antelopejs/interface-api@0.0.5(@antelopejs/interface-core@0.0.5))(@antelopejs/interface-core@0.0.5)(@antelopejs/interface-database@0.1.3(@antelopejs/interface-core@0.0.5))': dependencies: '@antelopejs/interface-api': 0.0.5(@antelopejs/interface-core@0.0.5) '@antelopejs/interface-core': 0.0.5 @@ -1688,7 +1688,7 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 - acorn@8.16.0: {} + acorn@8.17.0: {} agent-base@7.1.4: {} @@ -1836,7 +1836,7 @@ snapshots: scule: 1.3.0 semver: 7.7.4 std-env: 3.10.0 - yaml: 2.8.3 + yaml: 2.9.0 transitivePeerDependencies: - magicast @@ -2219,10 +2219,10 @@ snapshots: mlly@1.8.2: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.3 + ufo: 1.6.4 mongodb-connection-string-url@3.0.2: dependencies: @@ -2297,7 +2297,7 @@ snapshots: pathe: 2.0.3 pkg-types: 1.3.1 tinyexec: 0.3.2 - ufo: 1.6.3 + ufo: 1.6.4 nypm@0.6.5: dependencies: @@ -2309,7 +2309,7 @@ snapshots: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.3 + ufo: 1.6.4 ohash@1.1.6: {} @@ -2665,7 +2665,7 @@ snapshots: typescript@5.9.3: {} - ufo@1.6.3: {} + ufo@1.6.4: {} undici-types@6.21.0: {} @@ -2704,7 +2704,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@21.1.1: {} diff --git a/src/tests/components/access_control.test.ts b/src/tests/components/access_control.test.ts index b1cb2b3..57d00cb 100644 --- a/src/tests/components/access_control.test.ts +++ b/src/tests/components/access_control.test.ts @@ -13,6 +13,7 @@ import { import type { SchemaInstance } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -38,10 +39,16 @@ class User extends Table { declare _id: string; @Index() + @Field("string") declare email: string; + @Field("string") declare password: string; + + @Field("string") declare name: string; + + @Field("number") declare age: number; } class UserModel extends BasicDataModel(User, userTableName) {} diff --git a/src/tests/components/computed.test.ts b/src/tests/components/computed.test.ts index df642b8..0a54f85 100644 --- a/src/tests/components/computed.test.ts +++ b/src/tests/components/computed.test.ts @@ -19,10 +19,12 @@ import { import { Schema, type ValueProxy } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, RegisterTable, + Relation, Table, } from "@antelopejs/interface-database-decorators"; import { expect } from "chai"; @@ -44,6 +46,8 @@ const schemaName = "default"; @RegisterTable(groupTableName, schemaName) class Group extends Table { declare _id: string; + + @Field("string") declare name: string; } class GroupModel extends BasicDataModel(Group, groupTableName) {} @@ -51,8 +55,13 @@ class GroupModel extends BasicDataModel(Group, groupTableName) {} @RegisterTable(deviceTableName, schemaName) class Device extends Table { declare _id: string; + @Index() + @Field("string") + @Relation({ to: () => Group }) declare group_id: string; + + @Field("string") declare label: string; } class DeviceModel extends BasicDataModel(Device, deviceTableName) {} diff --git a/src/tests/components/foreign_joined.test.ts b/src/tests/components/foreign_joined.test.ts index cc4a75f..3c0f9ea 100644 --- a/src/tests/components/foreign_joined.test.ts +++ b/src/tests/components/foreign_joined.test.ts @@ -18,9 +18,11 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Model, RegisterSchema, RegisterTable, + Relation, Table, } from "@antelopejs/interface-database-decorators"; import { expect } from "chai"; @@ -43,6 +45,8 @@ const schemaName = "default"; @RegisterTable(authorTableName, schemaName) class Author extends Table { declare _id: string; + + @Field("string") declare name: string; } class AuthorModel extends BasicDataModel(Author, authorTableName) {} @@ -52,7 +56,12 @@ class AuthorModel extends BasicDataModel(Author, authorTableName) {} @RegisterTable(bookTableName, schemaName) class Book extends Table { declare _id: string; + + @Field("string") + @Relation({ to: () => Author }) declare authorId: string; + + @Field("string") declare title: string; } class BookModel extends BasicDataModel(Book, bookTableName) {} @@ -62,6 +71,9 @@ class BookModel extends BasicDataModel(Book, bookTableName) {} @RegisterTable(shelfTableName, schemaName) class Shelf extends Table { declare _id: string; + + @Field("string") + @Relation({ to: () => Book }) declare book: string; // stores a Book._id } class ShelfModel extends BasicDataModel(Shelf, shelfTableName) {} diff --git a/src/tests/components/joined.test.ts b/src/tests/components/joined.test.ts index a7d5529..cb7a5d8 100644 --- a/src/tests/components/joined.test.ts +++ b/src/tests/components/joined.test.ts @@ -17,9 +17,11 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Model, RegisterSchema, RegisterTable, + Relation, Table, } from "@antelopejs/interface-database-decorators"; import { expect } from "chai"; @@ -41,7 +43,11 @@ const schemaName = "default"; @RegisterTable(authorTableName, schemaName) class Author extends Table { declare _id: string; + + @Field("string") declare name: string; + + @Field("string") declare email: string; } class AuthorModel extends BasicDataModel(Author, authorTableName) {} @@ -49,8 +55,15 @@ class AuthorModel extends BasicDataModel(Author, authorTableName) {} @RegisterTable(bookTableName, schemaName) class Book extends Table { declare _id: string; + + @Field("string") + @Relation({ to: () => Author }) declare authorId: string; + + @Field("string") declare title: string; + + @Field("number") declare price: number; } class BookModel extends BasicDataModel(Book, bookTableName) {} diff --git a/src/tests/components/listable.test.ts b/src/tests/components/listable.test.ts index 64f275a..2150889 100644 --- a/src/tests/components/listable.test.ts +++ b/src/tests/components/listable.test.ts @@ -15,6 +15,7 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -41,13 +42,25 @@ class Product extends Table { declare _id: string; @Index() + @Field("string") declare reference: string; + @Field("string") declare name: string; + + @Field("string") declare description: string; + + @Field("number") declare price: number; + + @Field("date") declare addedAt: Date; + + @Field("string") declare internalNotes: string; + + @Field("string") declare metadata: string; } class ProductModel extends BasicDataModel(Product, productTableName) {} diff --git a/src/tests/components/mandatory.test.ts b/src/tests/components/mandatory.test.ts index 00dc1e3..fc91cf3 100644 --- a/src/tests/components/mandatory.test.ts +++ b/src/tests/components/mandatory.test.ts @@ -14,6 +14,7 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -41,12 +42,22 @@ class Order extends Table { declare _id: string; @Index() + @Field("string") declare internalReference: string; + @Field("string") declare customerName: string; + + @Field("string") declare customerEmail: string; + + @Field("number") declare totalAmount: number; + + @Field("string") declare status: string; + + @Field("string") declare notes: string; } class OrderModel extends BasicDataModel(Order, orderTableName) {} diff --git a/src/tests/components/modifier_key.test.ts b/src/tests/components/modifier_key.test.ts index e15b26e..1d202fd 100644 --- a/src/tests/components/modifier_key.test.ts +++ b/src/tests/components/modifier_key.test.ts @@ -16,11 +16,13 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, LocalizationModifier, Localized, Model, RegisterSchema, RegisterTable, + Relation, Table, } from "@antelopejs/interface-database-decorators"; import { expect } from "chai"; @@ -42,7 +44,11 @@ const locale = "en"; @RegisterTable(authorTableName, schemaName) class Author extends Table { declare _id: string; + + @Field("string") declare name: string; + + @Field("string") declare email: string; } class AuthorModel extends BasicDataModel(Author, authorTableName) {} @@ -50,6 +56,9 @@ class AuthorModel extends BasicDataModel(Author, authorTableName) {} @RegisterTable(postTableName, schemaName) class Post extends Table.with(LocalizationModifier) { declare _id: string; + + @Field("string") + @Relation({ to: () => Author }) declare authorId: string | null; @Localized() diff --git a/src/tests/components/per_action_access.test.ts b/src/tests/components/per_action_access.test.ts index 0f171d4..fa29fec 100644 --- a/src/tests/components/per_action_access.test.ts +++ b/src/tests/components/per_action_access.test.ts @@ -13,6 +13,7 @@ import { } from "@antelopejs/interface-data-api/metadata"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -39,10 +40,16 @@ class User extends Table { declare _id: string; @Index() + @Field("string") declare email: string; + @Field("string") declare name: string; + + @Field("string") declare role: string; + + @Field("number") declare age: number; } class UserModel extends BasicDataModel(User, userTableName) {} diff --git a/src/tests/components/validator.test.ts b/src/tests/components/validator.test.ts index 79aa466..2807647 100644 --- a/src/tests/components/validator.test.ts +++ b/src/tests/components/validator.test.ts @@ -13,6 +13,7 @@ import { } from "@antelopejs/interface-data-api/metadata"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -38,13 +39,25 @@ class Product extends Table { declare _id: string; @Index() + @Field("string") declare sku: string; + @Field("string") declare name: string; + + @Field("number") declare price: number; + + @Field("string") declare email: string; + + @Field("date") declare birthDate: Date; + + @Field("string") declare status: string; + + @Field(["string"]) declare tags: string[]; } class ProductModel extends BasicDataModel(Product, productTableName) {} diff --git a/src/tests/index/routes.test.ts b/src/tests/index/routes.test.ts index d588de3..4201f67 100644 --- a/src/tests/index/routes.test.ts +++ b/src/tests/index/routes.test.ts @@ -14,6 +14,7 @@ import { import { Schema } from "@antelopejs/interface-database"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, @@ -42,10 +43,16 @@ class User extends Table { declare _id: string; @Index() + @Field("string") declare email: string; + @Field("string") declare password: string; + + @Field("string") declare name: string; + + @Field("number") declare age: number; } class UserModel extends BasicDataModel(User, userTableName) {} diff --git a/src/tests/integration.test.ts b/src/tests/integration.test.ts index 70676ef..79d9b78 100644 --- a/src/tests/integration.test.ts +++ b/src/tests/integration.test.ts @@ -16,10 +16,12 @@ import { } from "@antelopejs/interface-data-api/metadata"; import { BasicDataModel, + Field, Index, Model, RegisterSchema, RegisterTable, + Relation, Table, } from "@antelopejs/interface-database-decorators"; import { expect } from "chai"; @@ -47,18 +49,40 @@ class Customer extends Table { declare _id: string; @Index() + @Field("string") declare email: string; + @Field("string") declare firstName: string; + + @Field("string") declare lastName: string; + + @Field("string") declare phone: string; + + @Field("string") declare address: string; + + @Field("string") declare city: string; + + @Field("string") declare postalCode: string; + + @Field("string") declare country: string; + + @Field("date") declare registrationDate: Date; + + @Field("boolean") declare isActive: boolean; + + @Field("number") declare loyaltyPoints: number; + + @Field(["string"]) declare preferences: string[]; } @@ -67,19 +91,43 @@ class Product extends Table { declare _id: string; @Index() + @Field("string") declare sku: string; + @Field("string") declare name: string; + + @Field("string") declare description: string; + + @Field("number") declare price: number; + + @Field("number") declare costPrice: number; + + @Field("number") declare stockQuantity: number; + + @Field("string") declare category: string; + + @Field("string") declare brand: string; + + @Field(["string"]) declare tags: string[]; + + @Field(["string"]) declare images: string[]; + + @Field("boolean") declare isActive: boolean; + + @Field("date") declare createdAt: Date; + + @Field("date") declare updatedAt: Date; } @@ -88,22 +136,48 @@ class Order extends Table { declare _id: string; @Index() + @Field("string") declare orderNumber: string; @Index() + @Field("string") + @Relation({ to: () => Customer }) declare customerId: string; + @Field("string") declare status: string; + + @Field("number") declare totalAmount: number; + + @Field("number") declare shippingCost: number; + + @Field("number") declare taxAmount: number; + + @Field("number") declare discountAmount: number; + + @Field("number") declare finalAmount: number; + + @Field("string") declare shippingAddress: string; + + @Field("string") declare billingAddress: string; + + @Field("string") declare paymentMethod: string; + + @Field("string") declare notes: string; + + @Field("date") declare createdAt: Date; + + @Field("date") declare updatedAt: Date; } @@ -112,15 +186,28 @@ class OrderItem extends Table { declare _id: string; @Index() + @Field("string") + @Relation({ to: () => Order }) declare orderId: string; @Index() + @Field("string") + @Relation({ to: () => Product }) declare productId: string; + @Field("number") declare quantity: number; + + @Field("number") declare unitPrice: number; + + @Field("number") declare totalPrice: number; + + @Field("number") declare finalPrice: number; + + @Field("number") declare discount: number; }