@bakery-framework/plugin-db-explorer 2.5.0-alpha.1 → 2.5.0-alpha.2
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.
- package/package.json +3 -3
- package/src/client/confirm.ts +2 -1
- package/src/client/dom.ts +4 -2
- package/src/client/grid.ts +2 -1
- package/src/shared/coerce.ts +2 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bakery-framework/plugin-db-explorer",
|
|
3
|
-
"version": "2.5.0-alpha.
|
|
3
|
+
"version": "2.5.0-alpha.2",
|
|
4
4
|
"description": "Bakery database explorer plugin: browse and edit rows, no raw SQL, no DDL.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bakery",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"!src/tests"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@bakery-framework/core": "^2.5.0-alpha.
|
|
37
|
-
"@bakery-framework/orm": "^2.5.0-alpha.
|
|
36
|
+
"@bakery-framework/core": "^2.5.0-alpha.2",
|
|
37
|
+
"@bakery-framework/orm": "^2.5.0-alpha.2"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
40
|
"bun": ">=1.4.4"
|
package/src/client/confirm.ts
CHANGED
|
@@ -93,7 +93,8 @@ export async function confirmChoice(request: DangerRequest): Promise<boolean> {
|
|
|
93
93
|
*
|
|
94
94
|
* The native element rather than a hand-rolled overlay: it traps focus, closes
|
|
95
95
|
* on Escape, and is inert to the page behind it without a single line of
|
|
96
|
-
* script. Resolved through a `close` listener so a dismissal by any route
|
|
96
|
+
* script. Resolved through a `close` listener so a dismissal by any route
|
|
97
|
+
* (Escape, the backdrop, the button) lands in one place.
|
|
97
98
|
*/
|
|
98
99
|
function openDialog(request: DangerRequest, typed: boolean): Promise<boolean> {
|
|
99
100
|
const dialog = el('dialog', { class: 'danger' })
|
package/src/client/dom.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* The only place this client creates a node.
|
|
3
3
|
*
|
|
4
4
|
* **Nothing here writes `innerHTML`, and `client/safety.test.ts` asserts that
|
|
5
|
-
* no client module does.** Every value the grid renders is a database row
|
|
5
|
+
* no client module does.** Every value the grid renders is a database row
|
|
6
|
+
* (whatever the last writer put there), and the operator's origin owns
|
|
6
7
|
* `/api/_db/rows`, so a string that reached the DOM as markup would be stored
|
|
7
8
|
* XSS to arbitrary row writes. `textContent` is not a style preference; it is
|
|
8
9
|
* the reason this plugin has no XSS surface. The dashboard's grid, which
|
|
@@ -87,7 +88,8 @@ export function each<T>(
|
|
|
87
88
|
/**
|
|
88
89
|
* A `<table class="grid">` with its heading row already in it.
|
|
89
90
|
*
|
|
90
|
-
* The two lines this replaces (build the table, loop `<th>` into a `<tr>`)
|
|
91
|
+
* The two lines this replaces (build the table, loop `<th>` into a `<tr>`)
|
|
92
|
+
* had been written out three times, twice in `structure.ts` and once in
|
|
91
93
|
* `csv-preview.ts`. Rows are appended by the caller, because the three differ
|
|
92
94
|
* in what a row is: `structure.ts` has plain text cells, and `csv-preview.ts`
|
|
93
95
|
* puts a checkbox row directly under the headings.
|
package/src/client/grid.ts
CHANGED
|
@@ -293,7 +293,8 @@ export class Grid {
|
|
|
293
293
|
// write, and a multi-column edit must stay one statement.
|
|
294
294
|
//
|
|
295
295
|
// `relatedTarget` is checked because `focusout` also fires for movement
|
|
296
|
-
// *inside* the editor (tabbing from the input to the null toggle is one),
|
|
296
|
+
// *inside* the editor (tabbing from the input to the null toggle is one),
|
|
297
|
+
// and committing there would close the editor the user is still in.
|
|
297
298
|
handle.node.addEventListener('focusout', event => {
|
|
298
299
|
const next = (event as FocusEvent).relatedTarget
|
|
299
300
|
if (next instanceof Node && handle.node.contains(next)) return
|
package/src/shared/coerce.ts
CHANGED
|
@@ -102,7 +102,8 @@ const ok = (value: unknown): CoerceResult => ({ ok: true, value })
|
|
|
102
102
|
* `json` and `buffer` cannot, portably: MySQL compares JSON structurally,
|
|
103
103
|
* Postgres refuses `=` on `json` outright (only `jsonb` has it), and a blob
|
|
104
104
|
* comparison depends on how the driver bound the parameter. An optimiztic
|
|
105
|
-
* `expect` on one of these would be a predicate that silently never matched
|
|
105
|
+
* `expect` on one of these would be a predicate that silently never matched
|
|
106
|
+
* (every edit a 409), so it is refused instead.
|
|
106
107
|
*/
|
|
107
108
|
export function comparableKind(kind: ColumnKind): boolean {
|
|
108
109
|
return kind !== 'json' && kind !== 'buffer'
|