chore: fmt

This commit is contained in:
orion 2023-12-16 15:13:37 -06:00
parent 07306d60a0
commit f8e31d1d67
Signed by: orion
GPG Key ID: 6D4165AE4C928719
9 changed files with 208 additions and 150 deletions

BIN
bun.lockb

Binary file not shown.

27
bun/fmt.js Normal file
View File

@ -0,0 +1,27 @@
/** @type {(parser: string, ps: string[]) => 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))

16
jsconfig.json Normal file
View File

@ -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"]
}

View File

@ -10,10 +10,16 @@
"better-sqlite3": "^9.2.2", "better-sqlite3": "^9.2.2",
"github-release-notes": "^0.17.1", "github-release-notes": "^0.17.1",
"paluh-litps": "^0.1.4", "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": { "scripts": {
"pretest": "paluh-litps compile --file README.md; mv README.purs test/README.purs", "pretest": "paluh-litps compile --file README.md; mv README.purs test/README.purs",
"test": "spago test" "test": "spago test",
"fmt": "bun bun/fmt.js"
} }
} }

View File

@ -6,94 +6,104 @@
// Putting this import into `PostgreSQL/Value.js` caused is a problem // Putting this import into `PostgreSQL/Value.js` caused is a problem
// for the web bundlers etc. // for the web bundlers etc.
import pg from 'pg'; import pg from 'pg'
// pg does strange thing converting DATE // pg does strange thing converting DATE
// value to js Date, so we have // value to js Date, so we have
// to prevent this craziness // 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) { 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) { return function (onError, onSuccess) {
var p = pool.connect().then(function(client) { var q = dbHandle
onSuccess(config.right({ .query({
client: client, text: sql,
done: function() { values: values,
return client.release(); rowMode: 'array',
} })
})); .then(function (result) {
}).catch(function(err) { onSuccess(config.right(result))
var pgError = config.nullableLeft(err); })
if (pgError) { .catch(function (err) {
onSuccess(pgError); var pgError = config.nullableLeft(err)
} else { if (pgError) {
onError(err); onSuccess(pgError)
} } else {
}); onError(err)
}
})
return function (cancelError, cancelerError, cancelerSuccess) { return function (cancelError, cancelerError, cancelerSuccess) {
p.cancel(); q.cancel()
cancelerSuccess(); 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();
};
};
};
};
};
};
export const ffiSQLState = function (error) { export const ffiSQLState = function (error) {
return error.code || null; return error.code || null
}; }
export const ffiErrorDetail = function (error) { export const ffiErrorDetail = function (error) {
return { return {
error: error, error: error,
severity: error.severity || '', severity: error.severity || '',
code: error.code || '', code: error.code || '',
message: error.message || '', message: error.message || '',
detail: error.detail || '', detail: error.detail || '',
hint: error.hint || '', hint: error.hint || '',
position: error.position || '', position: error.position || '',
internalPosition: error.internalPosition || '', internalPosition: error.internalPosition || '',
internalQuery: error.internalQuery || '', internalQuery: error.internalQuery || '',
where_: error.where || '', where_: error.where || '',
schema: error.schema || '', schema: error.schema || '',
table: error.table || '', table: error.table || '',
column: error.column || '', column: error.column || '',
dataType: error.dataType || '', dataType: error.dataType || '',
constraint: error.constraint || '', constraint: error.constraint || '',
file: error.file || '', file: error.file || '',
line: error.line || '', line: error.line || '',
routine: error.routine || '' routine: error.routine || '',
}; }
}; }

View File

@ -1,26 +1,25 @@
import pg from 'pg'; import pg from 'pg'
export const ffiNew = function(config) { export const ffiNew = function (config) {
return function() { return function () {
return new pg.Pool(config); return new pg.Pool(config)
}; }
}; }
export const totalCount = function (pool) {
return function () {
return pool.totalCount
}
}
export const totalCount = function(pool) { export const idleCount = function (pool) {
return function() { return function () {
return pool.totalCount; return pool.idleCount
}; }
}; }
export const idleCount = function(pool) { export const waitingCount = function (pool) {
return function() { return function () {
return pool.idleCount; return pool.waitingCount
}; }
}; }
export const waitingCount = function(pool) {
return function() {
return pool.waitingCount;
};
};

View File

@ -1,24 +1,24 @@
/* global Buffer, exports, require */ /* global Buffer, exports, require */
/* jshint -W097 */ /* jshint -W097 */
export const null_ = null; export const null_ = null
export const instantToString = function(i) { export const instantToString = function (i) {
return new Date(i).toUTCString(); return new Date(i).toUTCString()
}; }
export const instantFromString = function(Left) { export const instantFromString = function (Left) {
return function(Right) { return function (Right) {
return function(s) { return function (s) {
try { try {
return Right(Date.parse(s)); return Right(Date.parse(s))
} catch(e) { } catch (e) {
return Left("Date string parsing failed: \"" + s + "\", with: " + e); return Left('Date string parsing failed: "' + s + '", with: ' + e)
} }
}; }
}; }
}; }
export const unsafeIsBuffer = function(x) { export const unsafeIsBuffer = function (x) {
return x instanceof Buffer; return x instanceof Buffer
}; }

View File

@ -21,10 +21,10 @@ import Polyform.Batteries.Int (validator) as Int
import Polyform.Validator (runValidator) import Polyform.Validator (runValidator)
import Type.Row (type (+)) import Type.Row (type (+))
validator validator
err m. err m
Monad m . Monad m
Env.Validator m (IntExpected + MissingValue + err) Env.Env Configuration Env.Validator m (IntExpected + MissingValue + err) Env.Env Configuration
validator = validator =
{ database: _, host: _, idleTimeoutMillis: _, max: _, password: _, port: _, user: _ } { database: _, host: _, idleTimeoutMillis: _, max: _, password: _, port: _, user: _ }
<$> Env.required "PG_DB" identity <$> Env.required "PG_DB" identity
@ -41,6 +41,6 @@ load = do
env liftEffect $ getEnv <#> (Object.toUnfoldable _ Array _) >>> Map.fromFoldable env liftEffect $ getEnv <#> (Object.toUnfoldable _ Array _) >>> Map.fromFoldable
runValidator validator env >>= un V runValidator validator env >>= un V
>>> case _ of >>> case _ of
Left _ do Left _ do
throwError $ error "Configuration error. Please verify your environment and .env file." throwError $ error "Configuration error. Please verify your environment and .env file."
Right p pure p Right p pure p

View File

@ -54,10 +54,10 @@ withClientTransaction = PG.withClientTransaction runExceptT
pgEqual :: forall a. Eq a => Show a => a -> a -> AppM Unit pgEqual :: forall a. Eq a => Show a => a -> a -> AppM Unit
pgEqual a b = lift $ equal a b pgEqual a b = lift $ equal a b
withRollback withRollback
Client Client
AppM Unit AppM Unit
AppM Unit AppM Unit
withRollback client action = begin *> action *> rollback withRollback client action = begin *> action *> rollback
where where
conn = fromClient client conn = fromClient client
@ -66,27 +66,27 @@ withRollback client action = begin *> action *> rollback
rollback = execute conn (Query "ROLLBACK TRANSACTION") Row0 rollback = execute conn (Query "ROLLBACK TRANSACTION") Row0
test test
Connection Connection
String String
AppM Unit AppM Unit
TestSuite TestSuite
test (Connection (Left _)) name action = Test.Unit.test name $ checkPGErrors $ action 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 test (Connection (Right client)) name action = Test.Unit.test name $ checkPGErrors $ withRollback client action
transactionTest transactionTest
String String
AppM Unit AppM Unit
TestSuite TestSuite
transactionTest name action = Test.Unit.test name $ checkPGErrors $ action transactionTest name action = Test.Unit.test name $ checkPGErrors $ action
checkPGErrors :: AppM Unit -> Aff Unit checkPGErrors :: AppM Unit -> Aff Unit
checkPGErrors action = do checkPGErrors action = do
runExceptT action runExceptT action
>>= case _ of >>= case _ of
Left pgError -> Test.Unit.failure ("Unexpected PostgreSQL error occured:" <> unsafeStringify pgError) Left pgError -> Test.Unit.failure ("Unexpected PostgreSQL error occured:" <> unsafeStringify pgError)
Right _ -> pure unit Right _ -> pure unit
now Effect Instant now Effect Instant
now = unsafePartial $ (fromJust <<< toInstant) <$> JSDate.now now = unsafePartial $ (fromJust <<< toInstant) <$> JSDate.now
@ -341,7 +341,7 @@ main = do
( \(Row1 t) -> ( \(Row1 t) ->
(unwrap $ unInstant t) >= (before - before % 1000.0) (unwrap $ unInstant t) >= (before - before % 1000.0)
&& after && after
>= (unwrap $ unInstant t) >= (unwrap $ unInstant t)
) )
added added
test handle "handling decimal value" test handle "handling decimal value"
@ -475,22 +475,22 @@ main = do
testPool <- liftEffect $ Pool.new (cannotConnectConfig config) testPool <- liftEffect $ Pool.new (cannotConnectConfig config)
runExceptT (withClient testPool doNothing) runExceptT (withClient testPool doNothing)
>>= case _ of >>= case _ of
Left (ClientError _ cause) -> equal cause "ECONNREFUSED" Left (ClientError _ cause) -> equal cause "ECONNREFUSED"
_ -> Test.Unit.failure "foo" _ -> Test.Unit.failure "foo"
Test.Unit.test "no such database" do Test.Unit.test "no such database" do
testPool <- liftEffect $ Pool.new (noSuchDatabaseConfig config) testPool <- liftEffect $ Pool.new (noSuchDatabaseConfig config)
runExceptT (withClient testPool doNothing) runExceptT (withClient testPool doNothing)
>>= case _ of >>= case _ of
Left (ProgrammingError { code }) -> equal code "3D000" Left (ProgrammingError { code }) -> equal code "3D000"
_ -> Test.Unit.failure "PostgreSQL error was expected" _ -> Test.Unit.failure "PostgreSQL error was expected"
Test.Unit.test "get pool configuration from postgres uri" do Test.Unit.test "get pool configuration from postgres uri" do
equal (parseURI validUriToPoolConfigs.uri) (Just validUriToPoolConfigs.poolConfig) equal (parseURI validUriToPoolConfigs.uri) (Just validUriToPoolConfigs.poolConfig)
equal (parseURI notValidConnUri) Nothing equal (parseURI notValidConnUri) Nothing
validUriToPoolConfigs :: validUriToPoolConfigs
{ uri :: PGConnectionURI :: { uri :: PGConnectionURI
, poolConfig :: Configuration , poolConfig :: Configuration
} }
validUriToPoolConfigs = validUriToPoolConfigs =
{ uri: "postgres://urllgqrivcyako:c52275a95b7f177e2850c49de9bfa8bedc457ce860ccca664cb15db973554969@ec2-79-124-25-231.eu-west-1.compute.amazonaws.com:5432/e7cecg4nirunpo" { uri: "postgres://urllgqrivcyako:c52275a95b7f177e2850c49de9bfa8bedc457ce860ccca664cb15db973554969@ec2-79-124-25-231.eu-west-1.compute.amazonaws.com:5432/e7cecg4nirunpo"
, poolConfig: , poolConfig: