From e3c312b7081ebac99a052839f55598845c00ce67 Mon Sep 17 00:00:00 2001 From: Oskar Dudycz Date: Thu, 12 Sep 2024 12:22:59 +0200 Subject: [PATCH] Added sample typed client --- samples/simple-ts/package-lock.json | 76 ++++++++++++++------------- samples/simple-ts/package.json | 6 ++- samples/simple-ts/src/pongo.config.ts | 11 ++++ samples/simple-ts/src/typedClient.ts | 39 ++++++++++++++ samples/simple-ts/tsup.config.ts | 7 ++- 5 files changed, 99 insertions(+), 40 deletions(-) create mode 100644 samples/simple-ts/src/pongo.config.ts create mode 100644 samples/simple-ts/src/typedClient.ts diff --git a/samples/simple-ts/package-lock.json b/samples/simple-ts/package-lock.json index c5a1b30..88b0dd8 100644 --- a/samples/simple-ts/package-lock.json +++ b/samples/simple-ts/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@event-driven-io/pongo": "0.12.4" + "@event-driven-io/pongo": "0.14.4" }, "devDependencies": { "@types/node": "^20.11.30", @@ -474,34 +474,36 @@ } }, "node_modules/@event-driven-io/dumbo": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@event-driven-io/dumbo/-/dumbo-0.8.0.tgz", - "integrity": "sha512-lJBXSunTaMlTZWYJzXOnWeR4OLwC+hWUYazgGKNlM93j2Iq6MDS6ZI47/cvG0+DD6RSMp/esg8Wx59ZnQPvESA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@event-driven-io/dumbo/-/dumbo-0.10.0.tgz", + "integrity": "sha512-c0yXK+AWatyAliq9Xw5aircWOeHduAIDl5yWm173XFoYSPhI7a5kK+fMfnFz39bFZ6UiDJ3JrUWhKFve0eJsnA==", "peer": true, "peerDependencies": { "@types/pg": "^8.11.6", - "@types/pg-connection-string": "^2.0.0", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", "pg": "^8.12.0", "pg-connection-string": "^2.6.4", - "uuid": "^9.0.1" + "uuid": "^10.0.0" } }, "node_modules/@event-driven-io/pongo": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/@event-driven-io/pongo/-/pongo-0.12.4.tgz", - "integrity": "sha512-tNR03MHUvPw/A/WwnvfSE1/Yjr+8N42aiEBEQ68P+E0osI50YTbkbrwAAOHwOXm/sUn/holshdd3WgthKZavGA==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@event-driven-io/pongo/-/pongo-0.14.4.tgz", + "integrity": "sha512-VVX3Esm/9kyZWCbMLOvxlnDM6qiJaIm/u9Hajt0FZqvtJAboLyIfjqodCNg/g69qx6XF6wURhw1xJoA0O9lhFg==", "dependencies": { - "@types/pg-connection-string": "^2.0.0", "pg-connection-string": "^2.6.4" }, + "bin": { + "pongo": "dist/cli.js" + }, "peerDependencies": { - "@event-driven-io/dumbo": "0.8.0", + "@event-driven-io/dumbo": "0.10.0", "@types/mongodb": "^4.0.7", "@types/pg": "^8.11.6", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", + "commander": "^12.1.0", "pg": "^8.12.0", - "uuid": "^9.0.1" + "uuid": "^10.0.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -958,9 +960,9 @@ } }, "node_modules/@types/pg": { - "version": "8.11.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", - "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "version": "8.11.9", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.9.tgz", + "integrity": "sha512-M4mYeJZRBD9lCBCGa72F44uKSV9eJrAFfjlPJagdA6pgIr2OPJULFB7nqnZzOdqXG0qzHlgtZKzTdIgbmHitSg==", "peer": true, "dependencies": { "@types/node": "*", @@ -968,15 +970,6 @@ "pg-types": "^4.0.1" } }, - "node_modules/@types/pg-connection-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/pg-connection-string/-/pg-connection-string-2.0.0.tgz", - "integrity": "sha512-J1ZxH9dN0zSwnJpAlbvRlEtwYD/SYmyLMVF4DF0qfTHv0sH0HEg9WK/B24doWGjgcT8InomL0znJwcYHy3lNUw==", - "deprecated": "This is a stub types definition for pg-connection-string (https://github.com/iceddev/pg-connection-string). pg-connection-string provides its own type definitions, so you don't need @types/pg-connection-string installed!", - "dependencies": { - "pg-connection-string": "*" - } - }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", @@ -984,9 +977,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", "peer": true }, "node_modules/@types/webidl-conversions": { @@ -1447,12 +1440,12 @@ "dev": true }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "peer": true, "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/concat-map": { @@ -3525,6 +3518,15 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3780,9 +3782,9 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/samples/simple-ts/package.json b/samples/simple-ts/package.json index 23553f8..47dbc3f 100644 --- a/samples/simple-ts/package.json +++ b/samples/simple-ts/package.json @@ -10,6 +10,7 @@ "build:ts:watch": "tsc --watch", "start": "tsx ./src/index.ts", "start:shim": "tsx ./src/shim.ts", + "start:typed": "tsx ./src/typedClient.ts", "lint": "npm run lint:eslint && npm run lint:prettier", "lint:prettier": "prettier --check \"**/**/!(*.d).{ts,json,md}\"", "lint:eslint": "eslint '**/*.ts'", @@ -23,7 +24,8 @@ "test:watch": "run-p test:unit:watch test:int:watch test:e2e:watch", "test:unit:watch": "glob -d -c \"node --import tsx --test --watch\" **/*.unit.spec.ts", "test:int:watch": "glob -d -c \"node --import tsx --test --watch\" **/*.int.spec.ts", - "test:e2e:watch": "glob -d -c \"node --import tsx --test --watch\" **/*.e2e.spec.ts" + "test:e2e:watch": "glob -d -c \"node --import tsx --test --watch\" **/*.e2e.spec.ts", + "migrate": "pongo migrate run --config ./dist/pongo.config.js --connectionString postgresql://postgres:postgres@localhost:5432/postgres" }, "repository": { "type": "git", @@ -60,6 +62,6 @@ "dist" ], "dependencies": { - "@event-driven-io/pongo": "0.12.4" + "@event-driven-io/pongo": "0.14.4" } } diff --git a/samples/simple-ts/src/pongo.config.ts b/samples/simple-ts/src/pongo.config.ts new file mode 100644 index 0000000..dc3b285 --- /dev/null +++ b/samples/simple-ts/src/pongo.config.ts @@ -0,0 +1,11 @@ +import { pongoSchema } from '@event-driven-io/pongo'; + +export type User = { _id?: string; name: string; age: number }; + +export default { + schema: pongoSchema.client({ + database: pongoSchema.db({ + users: pongoSchema.collection('users'), + }), + }), +}; diff --git a/samples/simple-ts/src/typedClient.ts b/samples/simple-ts/src/typedClient.ts new file mode 100644 index 0000000..e8b058b --- /dev/null +++ b/samples/simple-ts/src/typedClient.ts @@ -0,0 +1,39 @@ +import { pongoClient } from '@event-driven-io/pongo'; +import { v4 as uuid } from 'uuid'; +import config from './pongo.config'; + +const connectionString = + 'postgresql://postgres:postgres@localhost:5432/postgres'; + +const pongo = pongoClient(connectionString, { + schema: { definition: config.schema, autoMigration: 'CreateOrUpdate' }, +}); +const pongoDb = pongo.database; + +const users = pongoDb.users; +const roger = { name: 'Roger', age: 30 }; +const anita = { name: 'Anita', age: 25 }; +const cruella = { _id: uuid(), name: 'Cruella', age: 40 }; + +// Inserting +await users.insertOne(roger); +await users.insertOne(cruella); + +const { insertedId } = await users.insertOne(anita); +const anitaId = insertedId!; + +// Updating +await users.updateOne({ _id: anitaId }, { $set: { age: 31 } }); + +// Deleting +await users.deleteOne({ _id: cruella._id }); + +// Finding by Id +const anitaFromDb = await users.findOne({ _id: anitaId }); +console.log(JSON.stringify(anitaFromDb)); + +// Finding more +const usersFromDB = await users.find({ age: { $lt: 40 } }); +console.log(JSON.stringify(usersFromDB)); + +await pongo.close(); diff --git a/samples/simple-ts/tsup.config.ts b/samples/simple-ts/tsup.config.ts index af09f1f..e54c9d4 100644 --- a/samples/simple-ts/tsup.config.ts +++ b/samples/simple-ts/tsup.config.ts @@ -10,7 +10,12 @@ export default defineConfig({ skipNodeModulesBundle: true, target: 'esnext', outDir: 'dist', //env === 'production' ? 'dist' : 'lib', - entry: ['src/index.ts'], + entry: [ + 'src/index.ts', + 'src/pongo.config.ts', + 'src/typedClient.ts', + 'src/shim.ts', + ], sourcemap: true, tsconfig: 'tsconfig.json', // workaround for https://github.com/egoist/tsup/issues/571#issuecomment-1760052931 });