From f8e31d1d6734a621d21316a94d2ff38eb883acd4 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Sat, 16 Dec 2023 15:13:37 -0600 Subject: [PATCH] chore: fmt --- bun.lockb | Bin 255100 -> 256258 bytes bun/fmt.js | 27 +++++ jsconfig.json | 16 +++ package.json | 10 +- src/Database/PostgreSQL/Aff.js | 168 ++++++++++++++++--------------- src/Database/PostgreSQL/Pool.js | 43 ++++---- src/Database/PostgreSQL/Value.js | 32 +++--- test/Config.purs | 14 +-- test/Main.purs | 48 ++++----- 9 files changed, 208 insertions(+), 150 deletions(-) create mode 100644 bun/fmt.js create mode 100644 jsconfig.json diff --git a/bun.lockb b/bun.lockb index 88bb237944f6a997af38a43be585fb8eb54b73f3..f8b0f2d04f9855c38067aef5248d5367d878b6c9 100755 GIT binary patch delta 46864 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 import("bun").Subprocess} */ +const prettier = (parser, ps) => + Bun.spawn(['bun', 'x', 'prettier', '--write', '--parser', parser, ...ps], { + stdout: 'inherit', + stderr: 'inherit', + }) + +const procs = [ + prettier('babel', ['./src/**/*.js', './bun/**/*.js', './.prettierrc.cjs']), + prettier('json', ['./package.json', './jsconfig.json']), + Bun.spawn( + [ + 'bun', + 'x', + 'purs-tidy', + 'format-in-place', + 'src/**/*.purs', + 'test/**/*.purs', + ], + { + stdout: 'inherit', + stderr: 'inherit', + }, + ), +] + +await Promise.all(procs.map(p => p.exited)) diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..f48b93c --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "types": ["bun-types"], + "lib": ["esnext"], + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "jsx": "react", + "allowJs": true, + "checkJs": true, + "noEmit": true, + "strict": true + }, + "include": ["src/**/*.js", "bun/**/*.js"] +} diff --git a/package.json b/package.json index 603a4ee..9e072b3 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,16 @@ "better-sqlite3": "^9.2.2", "github-release-notes": "^0.17.1", "paluh-litps": "^0.1.4", - "spago": "next" + "spago": "next", + "bun-types": "1.0.11", + "purs-tidy": "^0.10.0" + }, + "peerDependencies": { + "typescript": "^5.0.0" }, "scripts": { "pretest": "paluh-litps compile --file README.md; mv README.purs test/README.purs", - "test": "spago test" + "test": "spago test", + "fmt": "bun bun/fmt.js" } } diff --git a/src/Database/PostgreSQL/Aff.js b/src/Database/PostgreSQL/Aff.js index 7a361f5..b169180 100644 --- a/src/Database/PostgreSQL/Aff.js +++ b/src/Database/PostgreSQL/Aff.js @@ -6,94 +6,104 @@ // Putting this import into `PostgreSQL/Value.js` caused is a problem // for the web bundlers etc. -import pg from 'pg'; +import pg from 'pg' // pg does strange thing converting DATE // value to js Date, so we have // to prevent this craziness -pg.types.setTypeParser(1082 /* DATE_OID */, function(dateString) { return dateString; }); +pg.types.setTypeParser(1082 /* DATE_OID */, function (dateString) { + return dateString +}) export const ffiConnect = function (config) { - return function (pool) { + return function (pool) { + return function (onError, onSuccess) { + var p = pool + .connect() + .then(function (client) { + onSuccess( + config.right({ + client: client, + done: function () { + return client.release() + }, + }), + ) + }) + .catch(function (err) { + var pgError = config.nullableLeft(err) + if (pgError) { + onSuccess(pgError) + } else { + onError(err) + } + }) + + return function (cancelError, cancelerError, cancelerSuccess) { + p.cancel() + cancelerSuccess() + } + } + } +} + +export const ffiUnsafeQuery = function (config) { + // Either `Pool` or `Client` instance + return function (dbHandle) { + return function (sql) { + return function (values) { return function (onError, onSuccess) { - var p = pool.connect().then(function(client) { - onSuccess(config.right({ - client: client, - done: function() { - return client.release(); - } - })); - }).catch(function(err) { - var pgError = config.nullableLeft(err); - if (pgError) { - onSuccess(pgError); - } else { - onError(err); - } - }); + var q = dbHandle + .query({ + text: sql, + values: values, + rowMode: 'array', + }) + .then(function (result) { + onSuccess(config.right(result)) + }) + .catch(function (err) { + var pgError = config.nullableLeft(err) + if (pgError) { + onSuccess(pgError) + } else { + onError(err) + } + }) - return function (cancelError, cancelerError, cancelerSuccess) { - p.cancel(); - cancelerSuccess(); - }; - }; - }; -}; - -export const ffiUnsafeQuery = function(config) { - // Either `Pool` or `Client` instance - return function(dbHandle) { - return function(sql) { - return function(values) { - return function(onError, onSuccess) { - var q = dbHandle.query({ - text: sql, - values: values, - rowMode: 'array', - }).then(function(result) { - onSuccess(config.right(result)); - }).catch(function(err) { - var pgError = config.nullableLeft(err); - if (pgError) { - onSuccess(pgError); - } else { - onError(err); - } - }); - - return function (cancelError, cancelerError, cancelerSuccess) { - q.cancel(); - cancelerSuccess(); - }; - }; - }; - }; - }; -}; + return function (cancelError, cancelerError, cancelerSuccess) { + q.cancel() + cancelerSuccess() + } + } + } + } + } +} export const ffiSQLState = function (error) { - return error.code || null; -}; + return error.code || null +} export const ffiErrorDetail = function (error) { - return { - error: error, - severity: error.severity || '', - code: error.code || '', - message: error.message || '', - detail: error.detail || '', - hint: error.hint || '', - position: error.position || '', - internalPosition: error.internalPosition || '', - internalQuery: error.internalQuery || '', - where_: error.where || '', - schema: error.schema || '', - table: error.table || '', - column: error.column || '', - dataType: error.dataType || '', - constraint: error.constraint || '', - file: error.file || '', - line: error.line || '', - routine: error.routine || '' - }; -}; + return { + error: error, + severity: error.severity || '', + code: error.code || '', + message: error.message || '', + detail: error.detail || '', + hint: error.hint || '', + position: error.position || '', + internalPosition: error.internalPosition || '', + internalQuery: error.internalQuery || '', + where_: error.where || '', + schema: error.schema || '', + table: error.table || '', + column: error.column || '', + dataType: error.dataType || '', + constraint: error.constraint || '', + file: error.file || '', + line: error.line || '', + routine: error.routine || '', + } +} diff --git a/src/Database/PostgreSQL/Pool.js b/src/Database/PostgreSQL/Pool.js index feb6dac..33d22d3 100644 --- a/src/Database/PostgreSQL/Pool.js +++ b/src/Database/PostgreSQL/Pool.js @@ -1,26 +1,25 @@ -import pg from 'pg'; +import pg from 'pg' -export const ffiNew = function(config) { - return function() { - return new pg.Pool(config); - }; -}; +export const ffiNew = function (config) { + return function () { + return new pg.Pool(config) + } +} +export const totalCount = function (pool) { + return function () { + return pool.totalCount + } +} -export const totalCount = function(pool) { - return function() { - return pool.totalCount; - }; -}; +export const idleCount = function (pool) { + return function () { + return pool.idleCount + } +} -export const idleCount = function(pool) { - return function() { - return pool.idleCount; - }; -}; - -export const waitingCount = function(pool) { - return function() { - return pool.waitingCount; - }; -}; +export const waitingCount = function (pool) { + return function () { + return pool.waitingCount + } +} diff --git a/src/Database/PostgreSQL/Value.js b/src/Database/PostgreSQL/Value.js index 10ef252..857c4ec 100644 --- a/src/Database/PostgreSQL/Value.js +++ b/src/Database/PostgreSQL/Value.js @@ -1,24 +1,24 @@ /* global Buffer, exports, require */ /* jshint -W097 */ -export const null_ = null; +export const null_ = null -export const instantToString = function(i) { - return new Date(i).toUTCString(); -}; +export const instantToString = function (i) { + return new Date(i).toUTCString() +} -export const instantFromString = function(Left) { - return function(Right) { - return function(s) { +export const instantFromString = function (Left) { + return function (Right) { + return function (s) { try { - return Right(Date.parse(s)); - } catch(e) { - return Left("Date string parsing failed: \"" + s + "\", with: " + e); + return Right(Date.parse(s)) + } catch (e) { + return Left('Date string parsing failed: "' + s + '", with: ' + e) } - }; - }; -}; + } + } +} -export const unsafeIsBuffer = function(x) { - return x instanceof Buffer; -}; +export const unsafeIsBuffer = function (x) { + return x instanceof Buffer +} diff --git a/test/Config.purs b/test/Config.purs index fd918f5..4424700 100644 --- a/test/Config.purs +++ b/test/Config.purs @@ -21,10 +21,10 @@ import Polyform.Batteries.Int (validator) as Int import Polyform.Validator (runValidator) import Type.Row (type (+)) -validator ∷ - ∀ err m. - Monad m ⇒ - Env.Validator m (IntExpected + MissingValue + err) Env.Env Configuration +validator + ∷ ∀ err m + . Monad m + ⇒ Env.Validator m (IntExpected + MissingValue + err) Env.Env Configuration validator = { database: _, host: _, idleTimeoutMillis: _, max: _, password: _, port: _, user: _ } <$> Env.required "PG_DB" identity @@ -41,6 +41,6 @@ load = do env ← liftEffect $ getEnv <#> (Object.toUnfoldable ∷ _ → Array _) >>> Map.fromFoldable runValidator validator env >>= un V >>> case _ of - Left _ → do - throwError $ error "Configuration error. Please verify your environment and .env file." - Right p → pure p + Left _ → do + throwError $ error "Configuration error. Please verify your environment and .env file." + Right p → pure p diff --git a/test/Main.purs b/test/Main.purs index 497804f..7a8063d 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -54,10 +54,10 @@ withClientTransaction = PG.withClientTransaction runExceptT pgEqual :: forall a. Eq a => Show a => a -> a -> AppM Unit pgEqual a b = lift $ equal a b -withRollback ∷ - Client → - AppM Unit → - AppM Unit +withRollback + ∷ Client + → AppM Unit + → AppM Unit withRollback client action = begin *> action *> rollback where conn = fromClient client @@ -66,27 +66,27 @@ withRollback client action = begin *> action *> rollback rollback = execute conn (Query "ROLLBACK TRANSACTION") Row0 -test ∷ - Connection → - String → - AppM Unit → - TestSuite +test + ∷ Connection + → String + → AppM Unit + → TestSuite test (Connection (Left _)) name action = Test.Unit.test name $ checkPGErrors $ action test (Connection (Right client)) name action = Test.Unit.test name $ checkPGErrors $ withRollback client action -transactionTest ∷ - String → - AppM Unit → - TestSuite +transactionTest + ∷ String + → AppM Unit + → TestSuite transactionTest name action = Test.Unit.test name $ checkPGErrors $ action checkPGErrors :: AppM Unit -> Aff Unit checkPGErrors action = do runExceptT action >>= case _ of - Left pgError -> Test.Unit.failure ("Unexpected PostgreSQL error occured:" <> unsafeStringify pgError) - Right _ -> pure unit + Left pgError -> Test.Unit.failure ("Unexpected PostgreSQL error occured:" <> unsafeStringify pgError) + Right _ -> pure unit now ∷ Effect Instant now = unsafePartial $ (fromJust <<< toInstant) <$> JSDate.now @@ -341,7 +341,7 @@ main = do ( \(Row1 t) -> (unwrap $ unInstant t) >= (before - before % 1000.0) && after - >= (unwrap $ unInstant t) + >= (unwrap $ unInstant t) ) added test handle "handling decimal value" @@ -475,22 +475,22 @@ main = do testPool <- liftEffect $ Pool.new (cannotConnectConfig config) runExceptT (withClient testPool doNothing) >>= case _ of - Left (ClientError _ cause) -> equal cause "ECONNREFUSED" - _ -> Test.Unit.failure "foo" + Left (ClientError _ cause) -> equal cause "ECONNREFUSED" + _ -> Test.Unit.failure "foo" Test.Unit.test "no such database" do testPool <- liftEffect $ Pool.new (noSuchDatabaseConfig config) runExceptT (withClient testPool doNothing) >>= case _ of - Left (ProgrammingError { code }) -> equal code "3D000" - _ -> Test.Unit.failure "PostgreSQL error was expected" + Left (ProgrammingError { code }) -> equal code "3D000" + _ -> Test.Unit.failure "PostgreSQL error was expected" Test.Unit.test "get pool configuration from postgres uri" do equal (parseURI validUriToPoolConfigs.uri) (Just validUriToPoolConfigs.poolConfig) equal (parseURI notValidConnUri) Nothing -validUriToPoolConfigs :: - { uri :: PGConnectionURI - , poolConfig :: Configuration - } +validUriToPoolConfigs + :: { uri :: PGConnectionURI + , poolConfig :: Configuration + } validUriToPoolConfigs = { uri: "postgres://urllgqrivcyako:c52275a95b7f177e2850c49de9bfa8bedc457ce860ccca664cb15db973554969@ec2-79-124-25-231.eu-west-1.compute.amazonaws.com:5432/e7cecg4nirunpo" , poolConfig: