velocious 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.github/dependabot.yml +1 -1
  2. package/README.md +7 -1
  3. package/bin/velocious.mjs +2 -2
  4. package/index.mjs +1 -21
  5. package/package.json +3 -1
  6. package/peak_flow.yml +1 -1
  7. package/spec/cli/commands/db/create-spec.mjs +1 -1
  8. package/spec/database/connection/drivers/mysql/query-parser-spec.mjs +6 -5
  9. package/spec/database/drivers/mysql/connection-spec.mjs +2 -3
  10. package/spec/dummy/index.mjs +6 -4
  11. package/spec/dummy/src/config/configuration.example.mjs +5 -3
  12. package/spec/dummy/src/config/configuration.peakflow.mjs +5 -3
  13. package/spec/dummy/src/models/task.mjs +2 -2
  14. package/spec/http-server/client-spec.mjs +5 -0
  15. package/src/application.mjs +5 -0
  16. package/src/cli/base-command.mjs +1 -1
  17. package/src/cli/commands/db/migrate.mjs +52 -5
  18. package/src/cli/commands/destroy/migration.mjs +1 -1
  19. package/src/cli/commands/generate/migration.mjs +1 -1
  20. package/src/cli/commands/generate/model.mjs +36 -0
  21. package/src/cli/commands/init.mjs +1 -1
  22. package/src/cli/commands/server.mjs +15 -0
  23. package/src/cli/index.mjs +1 -0
  24. package/src/configuration-resolver.mjs +2 -2
  25. package/src/configuration.mjs +35 -19
  26. package/src/controller.mjs +1 -1
  27. package/src/database/drivers/base.mjs +41 -0
  28. package/src/database/drivers/sqlite/base.mjs +36 -0
  29. package/src/database/drivers/sqlite/index.native.mjs +54 -0
  30. package/src/database/drivers/sqlite/index.web.mjs +45 -0
  31. package/src/database/drivers/sqlite/query.web.mjs +9 -0
  32. package/src/database/drivers/sqlite/table.mjs +9 -0
  33. package/src/database/migrate-from-require-context.mjs +62 -0
  34. package/src/database/migration/index.mjs +1 -1
  35. package/src/database/migrator.mjs +73 -0
  36. package/src/database/pool/async-tracked-multi-connection.mjs +81 -0
  37. package/src/database/pool/base.mjs +60 -0
  38. package/src/database/pool/single-multi-use.mjs +40 -0
  39. package/src/database/query/create-database-base.mjs +3 -1
  40. package/src/database/query/insert-base.mjs +4 -0
  41. package/src/database/query-parser/options.mjs +2 -2
  42. package/src/database/record/index.mjs +2 -2
  43. package/src/http-server/worker-handler/index.mjs +2 -1
  44. package/src/http-server/worker-handler/worker-thread.mjs +0 -1
  45. package/src/routes/app-routes.mjs +10 -0
  46. package/src/routes/resolver.mjs +1 -1
  47. package/src/templates/configuration.mjs +6 -4
  48. package/src/templates/generate-migration.mjs +2 -2
  49. package/src/templates/generate-model.mjs +4 -0
  50. package/src/templates/routes.mjs +1 -1
  51. package/src/database/drivers/index.mjs +0 -5
  52. package/src/database/drivers/sqlite/sql/create-database.mjs +0 -4
  53. package/src/database/drivers/sqlite-expo/index.mjs +0 -100
  54. package/src/database/index.mjs +0 -15
  55. package/src/database/migrator/index.mjs +0 -15
  56. package/src/database/pool/index.mjs +0 -112
  57. /package/src/database/drivers/{sqlite-expo/query.mjs → sqlite/query.native.mjs} +0 -0
@@ -1,100 +0,0 @@
1
- import Base from "../base.mjs"
2
- import CreateDatabase from "../sqlite/sql/create-database.mjs"
3
- import CreateTable from "../sqlite/sql/create-table.mjs"
4
- import Delete from "../sqlite/sql/delete.mjs"
5
- import {digg} from "diggerize"
6
- import Insert from "../sqlite/sql/insert.mjs"
7
- import Options from "../sqlite/options.mjs"
8
- import query from "./query.mjs"
9
- import QueryParser from "../sqlite/query-parser.mjs"
10
- import * as SQLite from "expo-sqlite"
11
- import Update from "../sqlite/sql/update.mjs"
12
-
13
- export default class VelociousDatabaseDriversMysql extends Base{
14
- async connect() {
15
- const connection = await SQLite.openDatabaseAsync(digg(this.connectArgs(), "name"))
16
-
17
- this.connection = connection
18
- }
19
-
20
- disconnect() {
21
- this.connection.end()
22
- }
23
-
24
- connectArgs() {
25
- const args = this.getArgs()
26
- const connectArgs = []
27
- const forward = ["database", "host", "password"]
28
-
29
- for (const forwardValue of forward) {
30
- if (forwardValue in args) connectArgs[forwardValue] = digg(args, forwardValue)
31
- }
32
-
33
- if ("username" in args) connectArgs["user"] = args["username"]
34
-
35
- return connectArgs
36
- }
37
-
38
- async close() {
39
- await this.connection.end()
40
- this.connection = undefined
41
- }
42
-
43
- createDatabaseSql(databaseName, args) {
44
- const createArgs = Object.assign({databaseName, driver: this}, args)
45
- const createDatabase = new CreateDatabase(createArgs)
46
-
47
- return createDatabase.toSql()
48
- }
49
-
50
- createTableSql(tableData) {
51
- const createArgs = Object.assign({tableData, driver: this})
52
- const createTable = new CreateTable(createArgs)
53
-
54
- return createTable.toSql()
55
- }
56
-
57
- async query(sql) {
58
- return await query(this.connection, sql)
59
- }
60
-
61
- queryToSql(query) {
62
- return new QueryParser({query}).toSql()
63
- }
64
-
65
- quote(string) {
66
- if (!this.connection) throw new Error("Can't escape before connected")
67
-
68
- return this.connection.escape(string)
69
- }
70
-
71
- quoteColumn(string) {
72
- return `\`${string}\``
73
- }
74
-
75
- deleteSql({tableName, conditions}) {
76
- const deleteInstruction = new Delete({conditions, driver: this, tableName})
77
-
78
- return deleteInstruction.toSql()
79
- }
80
-
81
- insertSql({tableName, data}) {
82
- const insert = new Insert({driver: this, tableName, data})
83
-
84
- return insert.toSql()
85
- }
86
-
87
- options() {
88
- if (!this._options) {
89
- this._options = new Options({driver: this})
90
- }
91
-
92
- return this._options
93
- }
94
-
95
- updateSql({conditions, data, tableName}) {
96
- const update = new Update({conditions, data, driver: this, tableName})
97
-
98
- return update.toSql()
99
- }
100
- }
@@ -1,15 +0,0 @@
1
- import Drivers from "./drivers/index.mjs"
2
- import Handler from "./handler.mjs"
3
- import Migration from "./migration/index.mjs"
4
- import Migrator from "./migrator/index.mjs"
5
- import Query from "./query/index.mjs"
6
- import Record from "./record/index.mjs"
7
-
8
- export default {
9
- Drivers,
10
- Handler,
11
- Migration,
12
- Migrator,
13
- Query,
14
- Record
15
- }
@@ -1,15 +0,0 @@
1
- export default class VelociousDatabaseMigrator {
2
- constructor({path}) {
3
- if (!path) throw new Error("No 'path' given")
4
-
5
- this.path = path
6
- }
7
-
8
- migrateUp() {
9
- throw new Error("stub")
10
- }
11
-
12
- migrateDown() {
13
- throw new Error("stub")
14
- }
15
- }
@@ -1,112 +0,0 @@
1
- import {AsyncLocalStorage} from "node:async_hooks"
2
- import Configuration from "../../configuration.mjs"
3
- import {digg} from "diggerize"
4
-
5
- const asyncLocalStorage = new AsyncLocalStorage()
6
- let idSeq = 0
7
-
8
- class VelociousDatabasePool {
9
- static current() {
10
- if (!global.velociousDatabasePool) global.velociousDatabasePool = new VelociousDatabasePool()
11
-
12
- return global.velociousDatabasePool
13
- }
14
-
15
- constructor(args = {}) {
16
- this.configuration = args.configuration || Configuration.current()
17
- this.connections = []
18
- this.connectionsInUse = {}
19
- }
20
-
21
- checkin = (connection) => {
22
- const id = connection.getIdSeq()
23
-
24
- if (id in this.connectionsInUse) {
25
- delete this.connectionsInUse[id]
26
- }
27
-
28
- connection.setIdSeq(undefined)
29
-
30
- this.connections.push(connection)
31
- }
32
-
33
- async checkout() {
34
- let connection = this.connections.shift()
35
-
36
- if (!connection) {
37
- connection = await this.spawnConnection()
38
- }
39
-
40
- if (connection.getIdSeq() !== undefined) throw new Error(`Connection already has an ID-seq - is it in use? ${connection.getIdSeq()}`)
41
-
42
- const id = idSeq++
43
-
44
- connection.setIdSeq(id)
45
- this.connectionsInUse[id] = connection
46
-
47
- return connection
48
- }
49
-
50
- getConfiguration = () => digg(this, "configuration", "database", "default", "master")
51
-
52
- setCurrent() {
53
- global.velociousDatabasePool = this
54
- }
55
-
56
- async spawnConnection() {
57
- const defaultConfig = this.getConfiguration()
58
- const connection = await this.spawnConnectionWithConfiguration(defaultConfig)
59
-
60
- return connection
61
- }
62
-
63
- async spawnConnectionWithConfiguration(config) {
64
- const driverPath = `../drivers/${digg(config, "type")}/index.mjs`
65
- const DriverClassImport = await import(driverPath)
66
- const DriverClass = DriverClassImport.default
67
- const connection = new DriverClass(config)
68
-
69
- await connection.connect()
70
-
71
- return connection
72
- }
73
-
74
- async withConnection(callback) {
75
- const connection = await this.checkout()
76
- const id = connection.getIdSeq()
77
-
78
- await asyncLocalStorage.run(id, async () => {
79
- try {
80
- await callback()
81
- } finally {
82
- this.checkin(connection)
83
- }
84
- })
85
- }
86
-
87
- getCurrentConnection() {
88
- const id = asyncLocalStorage.getStore()
89
-
90
- if (id === undefined) {
91
- throw new Error("ID hasn't been set for this async context")
92
- }
93
-
94
- if (!(id in this.connectionsInUse)) {
95
- throw new Error(`Connection ${id} doesn't exist any more - has it been checked in again?`)
96
- }
97
-
98
- return this.connectionsInUse[id]
99
- }
100
- }
101
-
102
- const forwardMethods = ["createTableSql", "deleteSql", "insertSql", "query", "quote", "updateSql"]
103
-
104
- for (const forwardMethod of forwardMethods) {
105
- VelociousDatabasePool.prototype[forwardMethod] = function(...args) {
106
- const connection = this.getCurrentConnection()
107
-
108
- return connection[forwardMethod](...args)
109
- }
110
- }
111
-
112
- export default VelociousDatabasePool