diff --git a/demos/full-stack_framework/package-lock.json b/demos/full-stack_framework/package-lock.json index 12457a1..c260085 100644 --- a/demos/full-stack_framework/package-lock.json +++ b/demos/full-stack_framework/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "sequelize": "^6.28.0", - "socio": "^1.0.1", + "socio": "^1.3.1", "sqlite3": "^5.1.4", "svelte-french-toast": "^1.0.3", "ws": "^8.11.0" @@ -1424,9 +1424,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -2289,9 +2289,9 @@ } }, "node_modules/socio": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/socio/-/socio-1.0.5.tgz", - "integrity": "sha512-3zB05Bjwhe5/o8cqHnylydWoD5YZB/tPwe77mfSF1D+nJQZbylew64M7I9PzgIMV/mrio87EHp43U26eDxNG4w==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/socio/-/socio-1.3.4.tgz", + "integrity": "sha512-RyuoYC5nBLA/6ZwiuyKHuB7dj4WDXvxMdwblyYM2zgLRN8Z576duxzAr5SUNElOzmCJdIC84yQNVgGbBpAd/FA==", "dependencies": { "base64-js": "^1.5.1", "recursive-diff": "^1.0.9", diff --git a/demos/full-stack_framework/package.json b/demos/full-stack_framework/package.json index 58fcf3c..b72d467 100644 --- a/demos/full-stack_framework/package.json +++ b/demos/full-stack_framework/package.json @@ -23,7 +23,7 @@ "type": "module", "dependencies": { "sequelize": "^6.28.0", - "socio": "^1.0.1", + "socio": "^1.3.1", "sqlite3": "^5.1.4", "svelte-french-toast": "^1.0.3", "ws": "^8.11.0" diff --git a/demos/full-stack_framework/src/hooks.server.ts b/demos/full-stack_framework/src/hooks.server.ts index 94cfdb5..a1a7054 100644 --- a/demos/full-stack_framework/src/hooks.server.ts +++ b/demos/full-stack_framework/src/hooks.server.ts @@ -2,51 +2,51 @@ import { log, info, done, soft_error } from 'socio/dist/logging'; import { SocioServer } from 'socio/dist/core'; import { SocioSecurity } from 'socio/dist/secure'; -import {perMessageDeflate} from 'socio/dist/utils'; //for auto compressing WS messages. Carefully read documentation before using this! Possible memory leaks! +import { perMessageDeflate } from 'socio/dist/utils'; //for auto compressing WS messages. Carefully read documentation before using this! Possible memory leaks! import { SaveFilesToDiskPath } from 'socio/dist/fs-utils'; //DB stuff import { Sequelize } from 'sequelize'; //types -import type { QueryFunction, QueryFuncParams } from 'socio/dist/core'; import type { PropValue, id, PropAssigner, SocioFiles } from 'socio/dist/types'; import type { SocioSession } from 'socio/dist/core-session'; -try{ +try { info('Starting SocioServer...'); //constants - const Query = await InitDB_GetQueryFunc(); + const db_interface = await SetUpDBInterface(); //load in the secure_private_key with dotenv or smth. Dont hardcode like this const socsec = new SocioSecurity({ secure_private_key: 'skk#$U#Y$7643GJHKGDHJH#$K#$HLI#H$KBKDBDFKU34534', logging: { verbose: false } }); - const socserv = new SocioServer({ port: 3000, perMessageDeflate }, { DB_query_function: Query, logging: { verbose: true, hard_crash:false }, socio_security: socsec }); + const socserv = new SocioServer({ port: 3000 }, { db: db_interface, logging: { verbose: true, hard_crash: false }, socio_security: socsec }); - const validate_color_prop: PropAssigner = (curr_val: PropValue, new_val: PropValue) => { - if (typeof new_val != 'string' || new_val.length != 7) return false; - if (!new_val.match(/^#[0-9a-f]{6}/mi)) return false; - return socserv.SetPropVal('color', new_val); - } - socserv.RegisterProp('color', '#ffffff', validate_color_prop); + socserv.RegisterProp('color', '#ffffff', { + // assigner is optional and has a default to just accept whatever new value comes in. + assigner: (curr_val: PropValue, new_val: PropValue) => { + if (typeof new_val != 'string' || new_val.length != 7) return false; + if (!new_val.match(/^#[0-9a-f]{6}/mi)) return false; + return socserv.SetPropVal('color', new_val); + } + }); socserv.RegisterProp('num', 0); socserv.RegisterLifecycleHookHandler('file_upload', (client: SocioSession, files: SocioFiles) => { return SaveFilesToDiskPath(['.', 'upload_files'], files).result; }); } -catch (e:any) {soft_error(e)} +catch (e: any) { soft_error(e) } -async function InitDB_GetQueryFunc() { +async function SetUpDBInterface() { const sequelize = new Sequelize('sqlite::memory:'); await sequelize.query('CREATE TABLE Users(userid INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(50), num INTEGER NOT NULL DEFAULT 0);', { logging: false }); await sequelize.query('INSERT INTO Users (name, num) VALUES("Jane", 42);', { logging: false }); await sequelize.query('INSERT INTO Users (name, num) VALUES("John", 69);', { logging: false }); - const QueryWrap = async (client: SocioSession, id: id, sql: string, params: object | null = null) => { - //@ts-expect-error - return (await sequelize.query(sql, { logging: false, raw: true, replacements: params }))[0] as Promise; - } - - return QueryWrap as QueryFunction; + return { + Query: async (client: SocioSession, id: id, sql: string, params: any) => { + return (await sequelize.query(sql, { logging: false, raw: true, replacements: params }))?.at(0) as Promise; + } + }; } \ No newline at end of file diff --git a/demos/full-stack_framework/src/routes/+page.svelte b/demos/full-stack_framework/src/routes/+page.svelte index e7c0a24..8169d06 100644 --- a/demos/full-stack_framework/src/routes/+page.svelte +++ b/demos/full-stack_framework/src/routes/+page.svelte @@ -1,9 +1,8 @@