mirror of
https://github.com/h-sphere/sql-seal.git
synced 2026-07-22 10:10:28 +00:00
feat: replacing better-sqlite3 with sql.js which makes the plugin work on mobile
This commit is contained in:
parent
5f7c3107c3
commit
7f7352e62f
10 changed files with 124 additions and 14626 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -22,9 +22,4 @@ data.json
|
|||
.DS_Store
|
||||
docs/.vitepress/dist
|
||||
docs/.vitepress/cache
|
||||
rebuild
|
||||
better_sqlite3.node
|
||||
|
||||
better_sqlite3*.node
|
||||
database.sqlite
|
||||
coverage/
|
||||
coverage/
|
||||
|
|
|
|||
|
|
@ -1,23 +1,44 @@
|
|||
import esbuild from "esbuild";
|
||||
import process from "process";
|
||||
import builtins from "builtin-modules";
|
||||
import replacePlugin from "esbuild-plugin-replace-regex";
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
|
||||
const patchStr = `
|
||||
const os = require("os")
|
||||
const arch = os.arch()
|
||||
const platform = os.platform()
|
||||
const libPath = app.vault.adapter.getFullPath(app.vault.configDir)
|
||||
addon = DEFAULT_ADDON || (DEFAULT_ADDON = require(path.resolve(libPath, \`plugins/sqlseal/better_sqlite3-\${platform}-\${arch}.node\`)));
|
||||
`;
|
||||
|
||||
const banner =
|
||||
`/*
|
||||
const banner = `/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
`;
|
||||
|
||||
const wasmPlugin = {
|
||||
name: 'wasm',
|
||||
setup(build) {
|
||||
// Handle direct importing of wasm files
|
||||
build.onResolve({ filter: /\.wasm$/ }, args => {
|
||||
if (args.resolveDir === '') return;
|
||||
return {
|
||||
path: join(args.resolveDir, args.path),
|
||||
namespace: 'wasm-binary',
|
||||
};
|
||||
});
|
||||
|
||||
// Load and encode the wasm file
|
||||
build.onLoad({ filter: /\.wasm$/, namespace: 'wasm-binary' }, async (args) => {
|
||||
const contents = readFileSync(args.path);
|
||||
const wasmBase64 = contents.toString('base64');
|
||||
|
||||
return {
|
||||
contents: `
|
||||
const wasmBase64 = "${wasmBase64}";
|
||||
const wasmBinary = Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
||||
export default wasmBinary;
|
||||
`,
|
||||
loader: 'js',
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
const prod = (process.argv[2] === "production");
|
||||
|
||||
const context = await esbuild.context({
|
||||
|
|
@ -40,7 +61,8 @@ const context = await esbuild.context({
|
|||
"@lezer/common",
|
||||
"@lezer/highlight",
|
||||
"@lezer/lr",
|
||||
...builtins],
|
||||
...builtins
|
||||
],
|
||||
format: "cjs",
|
||||
target: "es2018",
|
||||
logLevel: "info",
|
||||
|
|
@ -48,12 +70,7 @@ const context = await esbuild.context({
|
|||
treeShaking: true,
|
||||
outfile: "main.js",
|
||||
plugins: [
|
||||
replacePlugin({
|
||||
filter: /.*/,
|
||||
patterns: [
|
||||
[/addon\s=\sDEFAULT_ADDON\s\|\|\s\(DEFAULT_ADDON\s=\srequire.*;/, patchStr]
|
||||
]
|
||||
})
|
||||
wasmPlugin
|
||||
]
|
||||
});
|
||||
|
||||
|
|
|
|||
9441
package-lock.json
generated
9441
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -20,11 +20,11 @@
|
|||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29.7.0",
|
||||
"@types/better-sqlite3": "^7.6.10",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/lodash": "^4.17.7",
|
||||
"@types/node": "^22.5.0",
|
||||
"@types/papaparse": "^5.3.14",
|
||||
"@types/sql.js": "^1.4.9",
|
||||
"@typescript-eslint/eslint-plugin": "5.29.0",
|
||||
"@typescript-eslint/parser": "5.29.0",
|
||||
"antlr4ts-cli": "0.5.0-alpha.4",
|
||||
|
|
@ -33,7 +33,6 @@
|
|||
"electron-rebuild": "^3.2.9",
|
||||
"esbuild": "0.17.3",
|
||||
"esbuild-plugin-replace": "^1.4.0",
|
||||
"esbuild-plugin-replace-regex": "^0.0.2",
|
||||
"jest": "^29.7.0",
|
||||
"obsidian": "latest",
|
||||
"prettier": "3.2.5",
|
||||
|
|
@ -47,10 +46,10 @@
|
|||
"@ag-grid-community/theming": "^32.3.2",
|
||||
"ag-grid-community": "^32.3.2",
|
||||
"antlr4ts": "0.5.0-alpha.4",
|
||||
"better-sqlite3": "^11.2.1",
|
||||
"json5": "^2.2.3",
|
||||
"lodash": "^4.17.21",
|
||||
"node-sql-parser": "^5.0.0",
|
||||
"papaparse": "^5.4.1"
|
||||
"papaparse": "^5.4.1",
|
||||
"sql.js": "^1.12.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
192
pnpm-lock.yaml
192
pnpm-lock.yaml
|
|
@ -17,9 +17,6 @@ importers:
|
|||
antlr4ts:
|
||||
specifier: 0.5.0-alpha.4
|
||||
version: 0.5.0-alpha.4
|
||||
better-sqlite3:
|
||||
specifier: ^11.2.1
|
||||
version: 11.2.1
|
||||
json5:
|
||||
specifier: ^2.2.3
|
||||
version: 2.2.3
|
||||
|
|
@ -32,13 +29,13 @@ importers:
|
|||
papaparse:
|
||||
specifier: ^5.4.1
|
||||
version: 5.4.1
|
||||
sql.js:
|
||||
specifier: ^1.12.0
|
||||
version: 1.12.0
|
||||
devDependencies:
|
||||
'@jest/globals':
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0
|
||||
'@types/better-sqlite3':
|
||||
specifier: ^7.6.10
|
||||
version: 7.6.11
|
||||
'@types/jest':
|
||||
specifier: ^29.5.12
|
||||
version: 29.5.12
|
||||
|
|
@ -51,6 +48,9 @@ importers:
|
|||
'@types/papaparse':
|
||||
specifier: ^5.3.14
|
||||
version: 5.3.14
|
||||
'@types/sql.js':
|
||||
specifier: ^1.4.9
|
||||
version: 1.4.9
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: 5.29.0
|
||||
version: 5.29.0(@typescript-eslint/parser@5.29.0(eslint@8.57.0)(typescript@4.7.4))(eslint@8.57.0)(typescript@4.7.4)
|
||||
|
|
@ -75,9 +75,6 @@ importers:
|
|||
esbuild-plugin-replace:
|
||||
specifier: ^1.4.0
|
||||
version: 1.4.0
|
||||
esbuild-plugin-replace-regex:
|
||||
specifier: ^0.0.2
|
||||
version: 0.0.2
|
||||
jest:
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0(@types/node@22.5.0)
|
||||
|
|
@ -922,15 +919,15 @@ packages:
|
|||
'@types/babel__traverse@7.20.6':
|
||||
resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
|
||||
|
||||
'@types/better-sqlite3@7.6.11':
|
||||
resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==}
|
||||
|
||||
'@types/cacheable-request@6.0.3':
|
||||
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
|
||||
|
||||
'@types/codemirror@5.60.8':
|
||||
resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==}
|
||||
|
||||
'@types/emscripten@1.39.13':
|
||||
resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==}
|
||||
|
||||
'@types/estree@1.0.5':
|
||||
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
|
||||
|
||||
|
|
@ -991,6 +988,9 @@ packages:
|
|||
'@types/responselike@1.0.3':
|
||||
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
|
||||
|
||||
'@types/sql.js@1.4.9':
|
||||
resolution: {integrity: sha512-ep8b36RKHlgWPqjNG9ToUrPiwkhwh0AEzy883mO5Xnd+cL6VBH1EvSjBAAuxLUFF2Vn/moE3Me6v9E1Lo+48GQ==}
|
||||
|
||||
'@types/stack-utils@2.0.3':
|
||||
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
|
||||
|
||||
|
|
@ -1288,16 +1288,10 @@ packages:
|
|||
base64-js@1.5.1:
|
||||
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
||||
|
||||
better-sqlite3@11.2.1:
|
||||
resolution: {integrity: sha512-Xbt1d68wQnUuFIEVsbt6V+RG30zwgbtCGQ4QOcXVrOH0FE4eHk64FWZ9NUfRHS4/x1PXqwz/+KOrnXD7f0WieA==}
|
||||
|
||||
big-integer@1.6.52:
|
||||
resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
|
||||
engines: {node: '>=0.6'}
|
||||
|
||||
bindings@1.5.0:
|
||||
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
|
||||
|
||||
birpc@0.2.17:
|
||||
resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==}
|
||||
|
||||
|
|
@ -1381,9 +1375,6 @@ packages:
|
|||
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
chownr@1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
|
||||
chownr@2.0.0:
|
||||
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -1488,10 +1479,6 @@ packages:
|
|||
babel-plugin-macros:
|
||||
optional: true
|
||||
|
||||
deep-extend@0.6.0:
|
||||
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
|
||||
engines: {node: '>=4.0.0'}
|
||||
|
||||
deep-is@0.1.4:
|
||||
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
||||
|
||||
|
|
@ -1597,9 +1584,6 @@ packages:
|
|||
es6-error@4.1.1:
|
||||
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
|
||||
|
||||
esbuild-plugin-replace-regex@0.0.2:
|
||||
resolution: {integrity: sha512-kU3zfnr7cNMC5S0xIY+RdiFcJrUr1P892QAdFsD3FSefUk0C6rEWb1Oz/paRbwrU73x+Bu9YiwoenbtqSmtykg==}
|
||||
|
||||
esbuild-plugin-replace@1.4.0:
|
||||
resolution: {integrity: sha512-lP3ZAyzyRa5JXoOd59lJbRKNObtK8pJ/RO7o6vdjwLi71GfbL32NR22ZuS7/cLZkr10/L1lutoLma8E4DLngYg==}
|
||||
|
||||
|
|
@ -1696,10 +1680,6 @@ packages:
|
|||
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
||||
expand-template@2.0.3:
|
||||
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
expect@29.7.0:
|
||||
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
|
||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||
|
|
@ -1738,9 +1718,6 @@ packages:
|
|||
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
|
||||
|
||||
filelist@1.0.4:
|
||||
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
|
||||
|
||||
|
|
@ -1766,9 +1743,6 @@ packages:
|
|||
focus-trap@7.5.4:
|
||||
resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}
|
||||
|
||||
fs-constants@1.0.0:
|
||||
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
||||
|
||||
fs-extra@10.1.0:
|
||||
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
|
@ -1824,9 +1798,6 @@ packages:
|
|||
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
github-from-package@0.0.0:
|
||||
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
|
||||
|
||||
glob-parent@5.1.2:
|
||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||
engines: {node: '>= 6'}
|
||||
|
|
@ -1969,9 +1940,6 @@ packages:
|
|||
inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
|
||||
ini@1.3.8:
|
||||
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
|
||||
|
||||
ip-address@9.0.5:
|
||||
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
|
||||
engines: {node: '>= 12'}
|
||||
|
|
@ -2344,9 +2312,6 @@ packages:
|
|||
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
minimist@1.2.8:
|
||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||
|
||||
minipass-collect@1.0.2:
|
||||
resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
|
||||
engines: {node: '>= 8'}
|
||||
|
|
@ -2385,9 +2350,6 @@ packages:
|
|||
mitt@3.0.1:
|
||||
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
||||
|
||||
mkdirp-classic@0.5.3:
|
||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
|
||||
mkdirp@1.0.4:
|
||||
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -2407,9 +2369,6 @@ packages:
|
|||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
hasBin: true
|
||||
|
||||
napi-build-utils@1.0.2:
|
||||
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
|
||||
|
||||
natural-compare@1.4.0:
|
||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
|
||||
|
|
@ -2579,11 +2538,6 @@ packages:
|
|||
preact@10.23.2:
|
||||
resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==}
|
||||
|
||||
prebuild-install@7.1.2:
|
||||
resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
prelude-ls@1.2.1:
|
||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
|
@ -2634,10 +2588,6 @@ packages:
|
|||
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
rc@1.2.8:
|
||||
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
|
||||
hasBin: true
|
||||
|
||||
react-is@18.3.1:
|
||||
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
|
||||
|
||||
|
|
@ -2753,12 +2703,6 @@ packages:
|
|||
signal-exit@3.0.7:
|
||||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
|
||||
simple-concat@1.0.1:
|
||||
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
||||
|
||||
simple-get@4.0.1:
|
||||
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
|
||||
|
||||
sisteransi@1.0.5:
|
||||
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
|
||||
|
||||
|
|
@ -2803,6 +2747,9 @@ packages:
|
|||
sprintf-js@1.1.3:
|
||||
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
|
||||
|
||||
sql.js@1.12.0:
|
||||
resolution: {integrity: sha512-Bi+43yMx/tUFZVYD4AUscmdL6NHn3gYQ+CM+YheFWLftOmrEC/Mz6Yh7E96Y2WDHYz3COSqT+LP6Z79zgrwJlA==}
|
||||
|
||||
ssri@9.0.1:
|
||||
resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==}
|
||||
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
||||
|
|
@ -2834,10 +2781,6 @@ packages:
|
|||
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
strip-json-comments@2.0.1:
|
||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
strip-json-comments@3.1.1:
|
||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
engines: {node: '>=8'}
|
||||
|
|
@ -2872,13 +2815,6 @@ packages:
|
|||
tabbable@6.2.0:
|
||||
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
|
||||
|
||||
tar-fs@2.1.1:
|
||||
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
|
||||
|
||||
tar-stream@2.2.0:
|
||||
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar@6.2.1:
|
||||
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -2940,9 +2876,6 @@ packages:
|
|||
peerDependencies:
|
||||
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
|
||||
|
||||
tunnel-agent@0.6.0:
|
||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||
|
||||
type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
|
@ -3972,10 +3905,6 @@ snapshots:
|
|||
dependencies:
|
||||
'@babel/types': 7.25.4
|
||||
|
||||
'@types/better-sqlite3@7.6.11':
|
||||
dependencies:
|
||||
'@types/node': 16.18.105
|
||||
|
||||
'@types/cacheable-request@6.0.3':
|
||||
dependencies:
|
||||
'@types/http-cache-semantics': 4.0.4
|
||||
|
|
@ -3987,6 +3916,8 @@ snapshots:
|
|||
dependencies:
|
||||
'@types/tern': 0.23.9
|
||||
|
||||
'@types/emscripten@1.39.13': {}
|
||||
|
||||
'@types/estree@1.0.5': {}
|
||||
|
||||
'@types/graceful-fs@4.1.9':
|
||||
|
|
@ -4051,6 +3982,11 @@ snapshots:
|
|||
dependencies:
|
||||
'@types/node': 16.18.105
|
||||
|
||||
'@types/sql.js@1.4.9':
|
||||
dependencies:
|
||||
'@types/emscripten': 1.39.13
|
||||
'@types/node': 22.5.0
|
||||
|
||||
'@types/stack-utils@2.0.3': {}
|
||||
|
||||
'@types/tern@0.23.9':
|
||||
|
|
@ -4416,17 +4352,8 @@ snapshots:
|
|||
|
||||
base64-js@1.5.1: {}
|
||||
|
||||
better-sqlite3@11.2.1:
|
||||
dependencies:
|
||||
bindings: 1.5.0
|
||||
prebuild-install: 7.1.2
|
||||
|
||||
big-integer@1.6.52: {}
|
||||
|
||||
bindings@1.5.0:
|
||||
dependencies:
|
||||
file-uri-to-path: 1.0.0
|
||||
|
||||
birpc@0.2.17: {}
|
||||
|
||||
bl@4.1.0:
|
||||
|
|
@ -4533,8 +4460,6 @@ snapshots:
|
|||
|
||||
char-regex@1.0.2: {}
|
||||
|
||||
chownr@1.1.4: {}
|
||||
|
||||
chownr@2.0.0: {}
|
||||
|
||||
ci-info@3.9.0: {}
|
||||
|
|
@ -4622,8 +4547,6 @@ snapshots:
|
|||
|
||||
dedent@1.5.3: {}
|
||||
|
||||
deep-extend@0.6.0: {}
|
||||
|
||||
deep-is@0.1.4: {}
|
||||
|
||||
deepmerge@4.3.1: {}
|
||||
|
|
@ -4735,8 +4658,6 @@ snapshots:
|
|||
es6-error@4.1.1:
|
||||
optional: true
|
||||
|
||||
esbuild-plugin-replace-regex@0.0.2: {}
|
||||
|
||||
esbuild-plugin-replace@1.4.0:
|
||||
dependencies:
|
||||
magic-string: 0.25.9
|
||||
|
|
@ -4900,8 +4821,6 @@ snapshots:
|
|||
|
||||
exit@0.1.2: {}
|
||||
|
||||
expand-template@2.0.3: {}
|
||||
|
||||
expect@29.7.0:
|
||||
dependencies:
|
||||
'@jest/expect-utils': 29.7.0
|
||||
|
|
@ -4952,8 +4871,6 @@ snapshots:
|
|||
dependencies:
|
||||
flat-cache: 3.2.0
|
||||
|
||||
file-uri-to-path@1.0.0: {}
|
||||
|
||||
filelist@1.0.4:
|
||||
dependencies:
|
||||
minimatch: 5.1.6
|
||||
|
|
@ -4984,8 +4901,6 @@ snapshots:
|
|||
dependencies:
|
||||
tabbable: 6.2.0
|
||||
|
||||
fs-constants@1.0.0: {}
|
||||
|
||||
fs-extra@10.1.0:
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
|
|
@ -5043,8 +4958,6 @@ snapshots:
|
|||
|
||||
get-stream@6.0.1: {}
|
||||
|
||||
github-from-package@0.0.0: {}
|
||||
|
||||
glob-parent@5.1.2:
|
||||
dependencies:
|
||||
is-glob: 4.0.3
|
||||
|
|
@ -5209,8 +5122,6 @@ snapshots:
|
|||
|
||||
inherits@2.0.4: {}
|
||||
|
||||
ini@1.3.8: {}
|
||||
|
||||
ip-address@9.0.5:
|
||||
dependencies:
|
||||
jsbn: 1.1.0
|
||||
|
|
@ -5790,8 +5701,6 @@ snapshots:
|
|||
dependencies:
|
||||
brace-expansion: 2.0.1
|
||||
|
||||
minimist@1.2.8: {}
|
||||
|
||||
minipass-collect@1.0.2:
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
|
|
@ -5831,8 +5740,6 @@ snapshots:
|
|||
|
||||
mitt@3.0.1: {}
|
||||
|
||||
mkdirp-classic@0.5.3: {}
|
||||
|
||||
mkdirp@1.0.4: {}
|
||||
|
||||
moment@2.29.4: {}
|
||||
|
|
@ -5843,8 +5750,6 @@ snapshots:
|
|||
|
||||
nanoid@3.3.7: {}
|
||||
|
||||
napi-build-utils@1.0.2: {}
|
||||
|
||||
natural-compare@1.4.0: {}
|
||||
|
||||
negotiator@0.6.3: {}
|
||||
|
|
@ -6014,21 +5919,6 @@ snapshots:
|
|||
|
||||
preact@10.23.2: {}
|
||||
|
||||
prebuild-install@7.1.2:
|
||||
dependencies:
|
||||
detect-libc: 2.0.3
|
||||
expand-template: 2.0.3
|
||||
github-from-package: 0.0.0
|
||||
minimist: 1.2.8
|
||||
mkdirp-classic: 0.5.3
|
||||
napi-build-utils: 1.0.2
|
||||
node-abi: 3.67.0
|
||||
pump: 3.0.0
|
||||
rc: 1.2.8
|
||||
simple-get: 4.0.1
|
||||
tar-fs: 2.1.1
|
||||
tunnel-agent: 0.6.0
|
||||
|
||||
prelude-ls@1.2.1: {}
|
||||
|
||||
prettier@3.2.5: {}
|
||||
|
|
@ -6066,13 +5956,6 @@ snapshots:
|
|||
|
||||
quick-lru@5.1.1: {}
|
||||
|
||||
rc@1.2.8:
|
||||
dependencies:
|
||||
deep-extend: 0.6.0
|
||||
ini: 1.3.8
|
||||
minimist: 1.2.8
|
||||
strip-json-comments: 2.0.1
|
||||
|
||||
react-is@18.3.1: {}
|
||||
|
||||
readable-stream@3.6.2:
|
||||
|
|
@ -6192,14 +6075,6 @@ snapshots:
|
|||
|
||||
signal-exit@3.0.7: {}
|
||||
|
||||
simple-concat@1.0.1: {}
|
||||
|
||||
simple-get@4.0.1:
|
||||
dependencies:
|
||||
decompress-response: 6.0.0
|
||||
once: 1.4.0
|
||||
simple-concat: 1.0.1
|
||||
|
||||
sisteransi@1.0.5: {}
|
||||
|
||||
slash@3.0.0: {}
|
||||
|
|
@ -6236,6 +6111,8 @@ snapshots:
|
|||
|
||||
sprintf-js@1.1.3: {}
|
||||
|
||||
sql.js@1.12.0: {}
|
||||
|
||||
ssri@9.0.1:
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
|
|
@ -6267,8 +6144,6 @@ snapshots:
|
|||
|
||||
strip-final-newline@2.0.0: {}
|
||||
|
||||
strip-json-comments@2.0.1: {}
|
||||
|
||||
strip-json-comments@3.1.1: {}
|
||||
|
||||
style-mod@4.1.2: {}
|
||||
|
|
@ -6299,21 +6174,6 @@ snapshots:
|
|||
|
||||
tabbable@6.2.0: {}
|
||||
|
||||
tar-fs@2.1.1:
|
||||
dependencies:
|
||||
chownr: 1.1.4
|
||||
mkdirp-classic: 0.5.3
|
||||
pump: 3.0.0
|
||||
tar-stream: 2.2.0
|
||||
|
||||
tar-stream@2.2.0:
|
||||
dependencies:
|
||||
bl: 4.1.0
|
||||
end-of-stream: 1.4.4
|
||||
fs-constants: 1.0.0
|
||||
inherits: 2.0.4
|
||||
readable-stream: 3.6.2
|
||||
|
||||
tar@6.2.1:
|
||||
dependencies:
|
||||
chownr: 2.0.0
|
||||
|
|
@ -6370,10 +6230,6 @@ snapshots:
|
|||
tslib: 1.14.1
|
||||
typescript: 4.7.4
|
||||
|
||||
tunnel-agent@0.6.0:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
type-check@0.4.0:
|
||||
dependencies:
|
||||
prelude-ls: 1.2.1
|
||||
|
|
|
|||
|
|
@ -35,11 +35,9 @@ export class SqlSealCodeblockHandler {
|
|||
setupQuerySignals({ statement, tables }: ReturnType<typeof updateTables>, el: HTMLElement, ctx: MarkdownPostProcessorContext) {
|
||||
const frontmatter = resolveFrontmatter(ctx, this.app)
|
||||
|
||||
const renderSelect = async () => {
|
||||
const renderSelect = () => {
|
||||
try {
|
||||
const stmt = this.db.db.prepare(statement)
|
||||
const columns = stmt.columns().map(column => column.name);
|
||||
const data = stmt.all(frontmatter ?? {})
|
||||
const { data, columns } = this.db.select(statement, frontmatter ?? {})
|
||||
displayData(el, columns, data, this.app)
|
||||
} catch (e) {
|
||||
displayError(el, e)
|
||||
|
|
|
|||
122
src/database.ts
122
src/database.ts
|
|
@ -1,4 +1,3 @@
|
|||
import Database from "better-sqlite3"
|
||||
import { App } from "obsidian"
|
||||
import path from 'path'
|
||||
import Papa from 'papaparse'
|
||||
|
|
@ -8,6 +7,8 @@ import { dataToCamelCase, fetchBlobData, FieldTypes, predictJson, predictType, t
|
|||
import os from 'os'
|
||||
import fs from 'fs'
|
||||
import { sanitise } from "./utils/sanitiseColumn"
|
||||
import initSqlJs, { BindParams, Database, Statement } from 'sql.js'
|
||||
import wasmBinary from '../node_modules/sql.js/dist/sql-wasm.wasm'
|
||||
|
||||
export interface FieldDefinition {
|
||||
name: string;
|
||||
|
|
@ -43,7 +44,8 @@ const formatData = (data: Record<string, any>) => {
|
|||
|
||||
export class SqlSealDatabase {
|
||||
private savedDatabases: Record<string, any> = {}
|
||||
db: Database.Database
|
||||
db: Database
|
||||
private SQL: initSqlJs.SqlJsStatic
|
||||
private isConnected = false
|
||||
private connectingPromise: Promise<void>;
|
||||
private connectingPromiseResolve: (value: void | PromiseLike<void>) => void
|
||||
|
|
@ -51,7 +53,6 @@ export class SqlSealDatabase {
|
|||
|
||||
}
|
||||
|
||||
|
||||
async connect() {
|
||||
if (this.isConnected) {
|
||||
return Promise.resolve()
|
||||
|
|
@ -64,47 +65,24 @@ export class SqlSealDatabase {
|
|||
this.connectingPromise = new Promise((resolve) => {
|
||||
this.connectingPromiseResolve = resolve
|
||||
})
|
||||
//@ts-ignore
|
||||
// const dbPath = normalizePath(this.app.vault.adapter.basePath + '/' + this.app.vault.configDir + '/sqlseal.db')
|
||||
|
||||
const arch = os.arch()
|
||||
const platform = os.platform()
|
||||
const better_sql_version = 'v11.2.1'
|
||||
|
||||
const dbNodeFilePath = path.resolve(this.app.vault.adapter.basePath, this.app.vault.configDir, `plugins/sqlseal/better_sqlite3-${platform}-${arch}.node`)
|
||||
// check if file "better_sqlite3.node" exists in the plugin folder, if not, download it from better sqlite release.
|
||||
try {
|
||||
if (!fs.existsSync(dbNodeFilePath)) {
|
||||
const url = `https://github.com/h-sphere/bettersql3-builds/releases/download/processed-${better_sql_version}/better-sqlite3-${better_sql_version}-electron-v${process.versions.modules}-${platform}-${arch}.node`
|
||||
|
||||
await fetchBlobData(url, dbNodeFilePath)
|
||||
}
|
||||
|
||||
await sleep(500)
|
||||
|
||||
|
||||
const dbPath = path.resolve(this.app.vault.adapter.basePath, this.app.vault.configDir, `plugins/sqlseal/database.sqlite`)
|
||||
|
||||
this.db = new Database(dbPath, { verbose: this.verbose ? console.log : undefined })
|
||||
this.SQL = await initSqlJs({
|
||||
wasmBinary: wasmBinary
|
||||
})
|
||||
|
||||
this.db = new this.SQL.Database()
|
||||
await this.defineCustomFunctions()
|
||||
|
||||
|
||||
|
||||
this.isConnected = true
|
||||
this.connectingPromiseResolve()
|
||||
|
||||
} catch (e) {
|
||||
console.error(`Error while loading SQLSeal. Please reload Obsiidan. If it repeats, please create new issue on GitHub: https://github.com/h-sphere/sql-seal/issues . Please quote following parameters:
|
||||
Architecture: ${arch}
|
||||
Platform: ${platform}
|
||||
Electron Version: ${process.versions.modules}
|
||||
BetterSQLite Version: ${better_sql_version}
|
||||
Error: ${e}
|
||||
`, e)
|
||||
console.error('Error initializing SQLite database:', e)
|
||||
}
|
||||
}
|
||||
|
||||
private async defineCustomFunctions() {
|
||||
this.db.function('a', (href: string, name: string) => {
|
||||
this.db.create_function('a', (href: string, name: string) => {
|
||||
const linkObject = {
|
||||
type: 'link',
|
||||
href: href,
|
||||
|
|
@ -113,7 +91,7 @@ export class SqlSealDatabase {
|
|||
return `SQLSEALCUSTOM(${JSON.stringify(linkObject)})`;
|
||||
});
|
||||
|
||||
this.db.function('a', (href: string) => {
|
||||
this.db.create_function('a', (href: string) => {
|
||||
const linkObject = {
|
||||
type: 'link',
|
||||
href: href,
|
||||
|
|
@ -122,7 +100,7 @@ export class SqlSealDatabase {
|
|||
return `SQLSEALCUSTOM(${JSON.stringify(linkObject)})`;
|
||||
});
|
||||
|
||||
this.db.function('img', (href: string) => {
|
||||
this.db.create_function('img', (href: string) => {
|
||||
const imgObject = {
|
||||
type: 'img',
|
||||
href: href
|
||||
|
|
@ -130,7 +108,7 @@ export class SqlSealDatabase {
|
|||
return `SQLSEALCUSTOM(${JSON.stringify(imgObject)})`
|
||||
})
|
||||
|
||||
this.db.function('img', (href: string, path: string) => {
|
||||
this.db.create_function('img', (href: string, path: string) => {
|
||||
const imgObject = {
|
||||
type: 'img',
|
||||
path,
|
||||
|
|
@ -139,7 +117,7 @@ export class SqlSealDatabase {
|
|||
return `SQLSEALCUSTOM(${JSON.stringify(imgObject)})`
|
||||
})
|
||||
|
||||
this.db.function('checkbox', (val: string) => {
|
||||
this.db.create_function('checkbox', (val: string) => {
|
||||
const imgObject = {
|
||||
type: 'checkbox',
|
||||
value: val
|
||||
|
|
@ -167,7 +145,7 @@ export class SqlSealDatabase {
|
|||
|
||||
async addNewColumns(name: string, data: Array<Record<string, unknown>>) {
|
||||
const schema = await this.getSchema(data)
|
||||
const currentSchema = this.db.prepare(`PRAGMA table_info(${name})`).all()
|
||||
const currentSchema = this.toObjectsArray(this.db.prepare(`PRAGMA table_info(${name})`))
|
||||
const currentFields = currentSchema.map((f: any) => f.name)
|
||||
const newFields = Object.keys(schema).filter(f => !currentFields.includes(f))
|
||||
|
||||
|
|
@ -180,50 +158,43 @@ export class SqlSealDatabase {
|
|||
alter.run()
|
||||
}
|
||||
|
||||
private toObjectsArray(stmt: Statement) {
|
||||
const ret = []
|
||||
while(stmt.step()) {
|
||||
ret.push(stmt.getAsObject())
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
private recordToBindParams(record: Record<string, unknown>) {
|
||||
const bindParams = Object.fromEntries(Object.entries(record).map(([key, val]) => ([`@${key}`, val]))) as BindParams
|
||||
return bindParams
|
||||
}
|
||||
|
||||
updateData(name: string, data: Array<Record<string, unknown>>) {
|
||||
const fields = Object.keys(data.reduce((acc, obj) => ({ ...acc, ...obj }), {}));
|
||||
const update = this.db.prepare(`UPDATE ${name} SET ${fields.map((key: string) => `${key} = @${key}`).join(', ')} WHERE id = @id`);
|
||||
const updateMany = this.db.transaction((pData: Array<Record<string, any>>) => {
|
||||
pData.forEach(data => {
|
||||
try {
|
||||
update.run(formatData(data))
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
})
|
||||
data.forEach((d: Record<string, unknown>) => {
|
||||
const stmt = this.db.prepare(`UPDATE ${name} SET ${fields.map((key: string) => `${key} = @${key}`).join(', ')} WHERE id = @id`)
|
||||
stmt.run(this.recordToBindParams(d))
|
||||
})
|
||||
|
||||
return updateMany(data)
|
||||
}
|
||||
|
||||
deleteData(name: string, data: Array<Record<string, unknown>>, key: string = 'id') {
|
||||
|
||||
const deleteStmt = this.db.prepare(`DELETE FROM ${name} WHERE ${key} = @${key}`);
|
||||
const deleteMany = this.db.transaction((pData: Array<Record<string, any>>) => {
|
||||
pData.forEach(data => {
|
||||
try {
|
||||
deleteStmt.run(data)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
})
|
||||
data.forEach(d => {
|
||||
const stmt = this.db.prepare(`DELETE FROM ${name} WHERE ${key} = @${key}`);
|
||||
stmt.run({
|
||||
[`@${key}`]: d[key]
|
||||
} as BindParams)
|
||||
})
|
||||
|
||||
return deleteMany(data)
|
||||
}
|
||||
|
||||
async insertData(name: string, inData: Array<Record<string, unknown>>) {
|
||||
const insertMany = this.db.transaction((pData: Array<Record<string, any>>) => {
|
||||
// FIXME: should we do this as a transaction or not?
|
||||
pData.forEach(data => {
|
||||
const columns = Object.keys(data)
|
||||
const insert = this.db.prepare(`INSERT INTO ${name} (${columns.join(', ')}) VALUES (${columns.map((key: string) => '@' + key).join(', ')})`);
|
||||
const d = formatData(data)
|
||||
insert.run(d)
|
||||
})
|
||||
inData.forEach(d => {
|
||||
const columns = Object.keys(d)
|
||||
const insertStatement = this.db.prepare(`INSERT INTO ${name} (${columns.join(', ')}) VALUES (${columns.map((key: string) => '@' + key).join(', ')})`);
|
||||
insertStatement.run(this.recordToBindParams(formatData(d)))
|
||||
})
|
||||
|
||||
insertMany(inData)
|
||||
}
|
||||
|
||||
dropTable(name: string) {
|
||||
|
|
@ -292,6 +263,15 @@ export class SqlSealDatabase {
|
|||
return name
|
||||
}
|
||||
|
||||
select(statement: string, frontmatter: Record<string, unknown>) {
|
||||
const stmt = this.db.prepare(statement)
|
||||
stmt.bind(this.recordToBindParams(frontmatter ?? {}))
|
||||
return {
|
||||
data: this.toObjectsArray(stmt) as Record<string, any>[],
|
||||
columns: stmt.getColumnNames()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @param unprefixedName
|
||||
|
|
|
|||
|
|
@ -38,15 +38,14 @@ export class SyncModel {
|
|||
}
|
||||
|
||||
getSync(filename: string, tableName: string) {
|
||||
const data = this.db.db.prepare(`
|
||||
SELECT *
|
||||
const { data } = this.db.select(`SELECT *
|
||||
FROM sqlseal_sync
|
||||
WHERE filename = @filename
|
||||
AND name = @name
|
||||
`).all({
|
||||
filename: filename,
|
||||
name: tableName,
|
||||
})
|
||||
AND name = @name`,
|
||||
{
|
||||
name: tableName,
|
||||
filename: filename
|
||||
})
|
||||
|
||||
if (data) {
|
||||
return data[0] as SyncEntry
|
||||
|
|
@ -55,6 +54,7 @@ export class SyncModel {
|
|||
}
|
||||
|
||||
removeSync(filename: string, tableName: string) {
|
||||
// FIXME: do not use exposed db, instead implement "exec" method inside the file.
|
||||
this.db.db.prepare('DELETE FROM sqlseal_sync WHERE filename = :filename AND name = :name').run({
|
||||
filename: filename,
|
||||
name: tableName
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"allowJs": true,
|
||||
"noImplicitAny": true,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"importHelpers": false,
|
||||
"isolatedModules": true,
|
||||
"skipLibCheck": true,
|
||||
"types": [],
|
||||
|
|
|
|||
Loading…
Reference in a new issue