mirror of
https://github.com/h-sphere/sql-seal.git
synced 2026-07-22 10:10:28 +00:00
fix: fixing issue with missing better-litesql3.node in prod build
This commit is contained in:
parent
4ef23584b0
commit
7000b44fa4
7 changed files with 3065 additions and 3289 deletions
|
|
@ -2,11 +2,18 @@ import esbuild from "esbuild";
|
|||
import process from "process";
|
||||
import builtins from "builtin-modules";
|
||||
import replacePlugin from "esbuild-plugin-replace-regex";
|
||||
import fs from "fs";
|
||||
|
||||
const nodeFileBase64 = fs.readFileSync("node_modules/better-sqlite3/build/Release/better_sqlite3.node", { encoding: "base64" });
|
||||
const patchStr = `
|
||||
const libPath = app.vault.adapter.getFullPath(app.vault.configDir)
|
||||
let addonBuffer;
|
||||
if (!fs.existsSync(path.resolve(libPath, "plugins/sqlseal/better_sqlite3.node"))) {
|
||||
addonBuffer = Buffer.from("${nodeFileBase64.replaceAll('"', '\\"')}", "base64");
|
||||
fs.writeFileSync(path.resolve(libPath, "plugins/sqlseal/better_sqlite3.node"), addonBuffer);
|
||||
}
|
||||
addon = DEFAULT_ADDON || (DEFAULT_ADDON = require(path.resolve(libPath, "plugins/sqlseal/better_sqlite3.node")));
|
||||
`
|
||||
`;
|
||||
|
||||
const banner =
|
||||
`/*
|
||||
|
|
@ -18,45 +25,45 @@ if you want to view the source, please visit the github repository of this plugi
|
|||
const prod = (process.argv[2] === "production");
|
||||
|
||||
const context = await esbuild.context({
|
||||
banner: {
|
||||
js: banner,
|
||||
},
|
||||
entryPoints: ["main.ts"],
|
||||
bundle: true,
|
||||
external: [
|
||||
"obsidian",
|
||||
"electron",
|
||||
"@codemirror/autocomplete",
|
||||
"@codemirror/collab",
|
||||
"@codemirror/commands",
|
||||
"@codemirror/language",
|
||||
"@codemirror/lint",
|
||||
"@codemirror/search",
|
||||
"@codemirror/state",
|
||||
"@codemirror/view",
|
||||
"@lezer/common",
|
||||
"@lezer/highlight",
|
||||
"@lezer/lr",
|
||||
...builtins],
|
||||
format: "cjs",
|
||||
target: "es2018",
|
||||
logLevel: "info",
|
||||
sourcemap: prod ? false : "inline",
|
||||
treeShaking: true,
|
||||
outfile: "main.js",
|
||||
plugins: [
|
||||
replacePlugin({
|
||||
filter: /.*/,
|
||||
patterns: [
|
||||
[/addon\s=\sDEFAULT_ADDON\s\|\|\s\(DEFAULT_ADDON\s=\srequire.*;/, patchStr]
|
||||
]
|
||||
})
|
||||
]
|
||||
banner: {
|
||||
js: banner,
|
||||
},
|
||||
entryPoints: ["main.ts"],
|
||||
bundle: true,
|
||||
external: [
|
||||
"obsidian",
|
||||
"electron",
|
||||
"@codemirror/autocomplete",
|
||||
"@codemirror/collab",
|
||||
"@codemirror/commands",
|
||||
"@codemirror/language",
|
||||
"@codemirror/lint",
|
||||
"@codemirror/search",
|
||||
"@codemirror/state",
|
||||
"@codemirror/view",
|
||||
"@lezer/common",
|
||||
"@lezer/highlight",
|
||||
"@lezer/lr",
|
||||
...builtins],
|
||||
format: "cjs",
|
||||
target: "es2018",
|
||||
logLevel: "info",
|
||||
sourcemap: prod ? false : "inline",
|
||||
treeShaking: true,
|
||||
outfile: "main.js",
|
||||
plugins: [
|
||||
replacePlugin({
|
||||
filter: /.*/,
|
||||
patterns: [
|
||||
[/addon\s=\sDEFAULT_ADDON\s\|\|\s\(DEFAULT_ADDON\s=\srequire.*;/, patchStr]
|
||||
]
|
||||
})
|
||||
]
|
||||
});
|
||||
|
||||
if (prod) {
|
||||
await context.rebuild();
|
||||
process.exit(0);
|
||||
await context.rebuild();
|
||||
process.exit(0);
|
||||
} else {
|
||||
await context.watch();
|
||||
await context.watch();
|
||||
}
|
||||
517
package-lock.json
generated
517
package-lock.json
generated
File diff suppressed because it is too large
Load diff
4625
pnpm-lock.yaml
4625
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
|
|
@ -3,7 +3,7 @@ import { App, normalizePath } from "obsidian"
|
|||
import path from 'path'
|
||||
import Papa from 'papaparse'
|
||||
import { prefixedIfNotGlobal } from "./sqlReparseTables"
|
||||
import fs from 'fs'
|
||||
import { camelCase } from 'lodash'
|
||||
import { fetchBlobData } from "./utils"
|
||||
|
||||
function isNumeric(str: string) {
|
||||
|
|
@ -12,6 +12,13 @@ function isNumeric(str: string) {
|
|||
!isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
|
||||
}
|
||||
|
||||
function dataToCamelCase(data: Array<Record<string, unknown>>) {
|
||||
return data.map(d => Object.keys(d).reduce((acc, k) => ({
|
||||
...acc,
|
||||
[camelCase(k)]: Array.isArray(d[k]) ? d[k].join(', ') : d[k]
|
||||
}), {}))
|
||||
}
|
||||
|
||||
|
||||
const toTypeStatements = (header: Array<string>, data: Array<Record<string, string>>) => {
|
||||
let d: Array<Record<string, string | number>> = data
|
||||
|
|
@ -163,8 +170,13 @@ export class SqlSealDatabase {
|
|||
return deleteMany(data)
|
||||
}
|
||||
|
||||
insertData(name: string, data: Array<Record<string, unknown>>) {
|
||||
insertData(name: string, inData: Array<Record<string, unknown>>) {
|
||||
const data = dataToCamelCase(inData)
|
||||
const fields = Object.keys(data.reduce((acc, obj) => ({ ...acc, ...obj }), {}));
|
||||
// FIXME: reworking all fields to be camel case
|
||||
if (!fields || !fields.length) {
|
||||
return
|
||||
}
|
||||
const insert = this.db.prepare(`INSERT INTO ${name} (${fields.join(', ')}) VALUES (${fields.map((key: string) => '@' + key).join(', ')})`);
|
||||
const insertMany = this.db.transaction((pData: Array<Record<string, any>>) => {
|
||||
pData.forEach(data => {
|
||||
|
|
@ -177,7 +189,7 @@ export class SqlSealDatabase {
|
|||
})
|
||||
insert.run(data)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e, insert, data)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
@ -186,7 +198,7 @@ export class SqlSealDatabase {
|
|||
}
|
||||
|
||||
async createTable(name: string, fields: Record<string, 'TEXT' | 'INTEGER' | 'REAL'>) {
|
||||
const sqlFields = Object.entries(fields).map(([key, type]) => `${key} ${type}`)
|
||||
const sqlFields = Object.entries(fields).map(([key, type]) => `${camelCase(key)} ${type}`)
|
||||
// FIXME: probably use schema generator, for now create with hardcoded fields
|
||||
await this.db.prepare(`DROP TABLE IF EXISTS ${name}`).run()
|
||||
const createSQL = `CREATE TABLE IF NOT EXISTS ${name} (
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import { App, MarkdownPostProcessorContext } from "obsidian";
|
|||
import { updateTables } from "./sqlReparseTables";
|
||||
import { hashString } from "./hash";
|
||||
import { SealObserver } from "./SealObserver";
|
||||
import { delay } from "./utils";
|
||||
|
||||
export class SqlSeal {
|
||||
public db: SqlSealDatabase
|
||||
|
|
@ -76,11 +75,10 @@ export class SqlSeal {
|
|||
const selectStatement = selectMatch[0]
|
||||
const { statement, tables } = updateTables(selectStatement, this.globalTables, prefix)
|
||||
|
||||
|
||||
const renderSelect = async () => {
|
||||
const stmt = await this.db.db.prepare(statement)
|
||||
const columns = await stmt.columns().map(column => column.name);
|
||||
const data = await stmt.all(frontmatter)
|
||||
const data = await stmt.all(frontmatter ?? {})
|
||||
displayData(el, columns, data)
|
||||
}
|
||||
|
||||
|
|
@ -103,7 +101,7 @@ export class SqlSeal {
|
|||
await renderSelect()
|
||||
|
||||
} catch (e) {
|
||||
if (e instanceof RangeError && Object.keys(ctx.frontmatter).length === 0) {
|
||||
if (e instanceof RangeError && ctx && Object.keys(ctx.frontmatter).length === 0) {
|
||||
displayInfo(el, 'Cannot access frontmatter properties in Live Preview Mode. Switch to Reading Mode to see the results.')
|
||||
} else {
|
||||
displayError(el, e)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"0.1.0": "0.15.0",
|
||||
"0.2.0": "0.15.0",
|
||||
"0.3.0": "0.15.0"
|
||||
}
|
||||
Loading…
Reference in a new issue