godot-sqlite-kysely
Version:
Kysely dialect for godot-sqlite. Adds SQLite support to Godot/GodotJS.
103 lines (102 loc) • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeWorker = initializeWorker;
const godot_lib_api_1 = require("godot.lib.api");
const godot_worker_1 = require("godot.worker");
const utils_1 = require("../utils");
let sqlite = null;
function postResponse(message) {
return godot_worker_1.JSWorkerParent.postMessage(message);
}
function initializeWorker() {
if (!godot_worker_1.JSWorkerParent) {
return;
}
godot_worker_1.JSWorkerParent.close = () => {
if (!sqlite) {
return;
}
sqlite.close_db();
sqlite = null;
};
godot_worker_1.JSWorkerParent.onmessage = (request) => {
switch (request.type) {
case 'initialize':
if (sqlite) {
postResponse({
type: 'initializationError',
message: 'Worker already initialized',
});
}
else {
try {
sqlite = (0, utils_1.createSQLiteConnection)(request.config);
postResponse({
type: 'initialized',
});
}
catch (e) {
postResponse({
type: 'initializationError',
message: e && typeof e === 'object' && 'message' in e && typeof e.message === 'string'
? e.message
: 'Failed to initialize worker connection',
});
}
}
break;
case 'query': {
const { id, query, parameters } = request;
if (!sqlite) {
postResponse({
type: 'queryError',
id,
message: 'Worker not initialized',
});
break;
}
try {
const bindings = typeof parameters === 'undefined' || Array.isArray(parameters)
? godot_lib_api_1.GArray.create(parameters ?? [])
: parameters;
if (sqlite.query_with_bindings(query, bindings)) {
postResponse({
type: 'queryResult',
id,
result: {
rows: (0, utils_1.getResultRows)(sqlite),
},
});
}
else {
postResponse({
type: 'queryError',
id,
message: sqlite.error_message,
});
}
}
catch (e) {
postResponse({
type: 'queryError',
id,
message: e && typeof e === 'object' && 'message' in e && typeof e.message === 'string'
? e.message
: 'Failed to perform query',
});
}
break;
}
case 'terminate':
sqlite?.close_db();
sqlite = null;
postResponse({
type: 'terminated',
});
break;
default:
console.error('Unhandled worker request: ' + JSON.stringify(request, null, 2));
break;
}
};
}