@toonstore/torm 0.3.0 → 0.4.0
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/README.md +497 -43
- package/dist/cli.js +404 -65
- package/dist/cli.js.map +1 -1
- package/dist/migrations.d.ts +62 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +275 -0
- package/dist/migrations.js.map +1 -0
- package/dist/studio-server.d.ts +1 -0
- package/dist/studio-server.d.ts.map +1 -1
- package/dist/studio-server.js +284 -0
- package/dist/studio-server.js.map +1 -1
- package/package.json +1 -1
- package/studio/index.html +54 -22
package/package.json
CHANGED
package/studio/index.html
CHANGED
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
// Load collections on startup
|
|
464
464
|
async function loadCollections() {
|
|
465
465
|
try {
|
|
466
|
-
const response = await fetch('/
|
|
466
|
+
const response = await fetch('/api/keys');
|
|
467
467
|
const data = await response.json();
|
|
468
468
|
const list = document.getElementById('collectionList');
|
|
469
469
|
list.innerHTML = '';
|
|
@@ -471,8 +471,10 @@
|
|
|
471
471
|
data.collections.forEach(collection => {
|
|
472
472
|
const li = document.createElement('li');
|
|
473
473
|
li.className = 'collection-item';
|
|
474
|
-
li.textContent = collection
|
|
475
|
-
li.
|
|
474
|
+
li.textContent = `${collection.name} (${collection.count})`;
|
|
475
|
+
li.addEventListener('click', function() {
|
|
476
|
+
loadCollection(collection.name);
|
|
477
|
+
});
|
|
476
478
|
list.appendChild(li);
|
|
477
479
|
});
|
|
478
480
|
|
|
@@ -484,25 +486,45 @@
|
|
|
484
486
|
|
|
485
487
|
// Load collection data
|
|
486
488
|
async function loadCollection(collection) {
|
|
489
|
+
console.log('Loading collection:', collection);
|
|
487
490
|
currentCollection = collection;
|
|
491
|
+
|
|
492
|
+
// Update active state
|
|
488
493
|
document.querySelectorAll('.collection-item').forEach(el => el.classList.remove('active'));
|
|
489
|
-
event.target.classList.add('active');
|
|
490
494
|
|
|
491
495
|
try {
|
|
492
|
-
const response = await fetch(`/
|
|
496
|
+
const response = await fetch(`/api/collection/${collection}`);
|
|
497
|
+
console.log('API Response status:', response.status);
|
|
498
|
+
|
|
493
499
|
const data = await response.json();
|
|
494
|
-
|
|
500
|
+
console.log('Received data:', data);
|
|
501
|
+
|
|
502
|
+
// Transform documents to the format expected by renderData
|
|
503
|
+
allKeys = data.documents.map(doc => ({
|
|
504
|
+
key: `toonstore:${collection}:${doc._id}`,
|
|
505
|
+
value: doc
|
|
506
|
+
}));
|
|
507
|
+
|
|
508
|
+
console.log('Transformed data:', allKeys);
|
|
495
509
|
renderData(allKeys);
|
|
496
510
|
} catch (error) {
|
|
497
511
|
console.error('Failed to load collection data:', error);
|
|
512
|
+
document.getElementById('dataContainer').innerHTML = `
|
|
513
|
+
<div class="empty-state">
|
|
514
|
+
<h3>Error loading data</h3>
|
|
515
|
+
<p>${error.message}</p>
|
|
516
|
+
</div>
|
|
517
|
+
`;
|
|
498
518
|
}
|
|
499
519
|
}
|
|
500
520
|
|
|
501
521
|
// Render data table
|
|
502
522
|
function renderData(data) {
|
|
523
|
+
console.log('renderData called with:', data);
|
|
503
524
|
const container = document.getElementById('dataContainer');
|
|
504
525
|
|
|
505
|
-
if (data.length === 0) {
|
|
526
|
+
if (!data || data.length === 0) {
|
|
527
|
+
console.log('No data to render');
|
|
506
528
|
container.innerHTML = `
|
|
507
529
|
<div class="empty-state">
|
|
508
530
|
<h3>No data found</h3>
|
|
@@ -512,6 +534,23 @@
|
|
|
512
534
|
return;
|
|
513
535
|
}
|
|
514
536
|
|
|
537
|
+
console.log('Rendering', data.length, 'items');
|
|
538
|
+
|
|
539
|
+
const rows = data.map(item => {
|
|
540
|
+
const valueStr = JSON.stringify(item.value).substring(0, 100);
|
|
541
|
+
const itemJson = JSON.stringify(item).replace(/'/g, "\\'");
|
|
542
|
+
return `
|
|
543
|
+
<div class="table-row">
|
|
544
|
+
<div class="table-cell key">${item.key}</div>
|
|
545
|
+
<div class="table-cell value">${valueStr}...</div>
|
|
546
|
+
<div class="table-cell actions">
|
|
547
|
+
<button class="btn-small secondary" onclick='editKey(${itemJson})'>Edit</button>
|
|
548
|
+
<button class="btn-small danger" onclick='deleteKey("${item.key}")'>Delete</button>
|
|
549
|
+
</div>
|
|
550
|
+
</div>
|
|
551
|
+
`;
|
|
552
|
+
}).join('');
|
|
553
|
+
|
|
515
554
|
container.innerHTML = `
|
|
516
555
|
<div class="data-table">
|
|
517
556
|
<div class="table-row table-header">
|
|
@@ -519,24 +558,17 @@
|
|
|
519
558
|
<div class="table-cell value">Value</div>
|
|
520
559
|
<div class="table-cell actions">Actions</div>
|
|
521
560
|
</div>
|
|
522
|
-
${
|
|
523
|
-
<div class="table-row">
|
|
524
|
-
<div class="table-cell key">${item.key}</div>
|
|
525
|
-
<div class="table-cell value">${JSON.stringify(item.value).substring(0, 100)}...</div>
|
|
526
|
-
<div class="table-cell actions">
|
|
527
|
-
<button class="btn-small secondary" onclick='editKey(${JSON.stringify(item)})'>Edit</button>
|
|
528
|
-
<button class="btn-small danger" onclick='deleteKey("${item.key}")'>Delete</button>
|
|
529
|
-
</div>
|
|
530
|
-
</div>
|
|
531
|
-
`).join('')}
|
|
561
|
+
${rows}
|
|
532
562
|
</div>
|
|
533
563
|
`;
|
|
564
|
+
|
|
565
|
+
console.log('Render complete');
|
|
534
566
|
}
|
|
535
567
|
|
|
536
568
|
// Load stats
|
|
537
569
|
async function loadStats() {
|
|
538
570
|
try {
|
|
539
|
-
const response = await fetch('/
|
|
571
|
+
const response = await fetch('/api/stats');
|
|
540
572
|
const data = await response.json();
|
|
541
573
|
document.getElementById('totalKeys').textContent = data.total_keys;
|
|
542
574
|
} catch (error) {
|
|
@@ -556,8 +588,8 @@
|
|
|
556
588
|
const key = document.getElementById('modalKey').value;
|
|
557
589
|
const value = JSON.parse(document.getElementById('modalValue').value);
|
|
558
590
|
|
|
559
|
-
await fetch(`/
|
|
560
|
-
method: '
|
|
591
|
+
await fetch(`/api/key/${encodeURIComponent(key)}`, {
|
|
592
|
+
method: 'POST',
|
|
561
593
|
headers: { 'Content-Type': 'application/json' },
|
|
562
594
|
body: JSON.stringify({ value })
|
|
563
595
|
});
|
|
@@ -579,7 +611,7 @@
|
|
|
579
611
|
const key = document.getElementById('modalKey').value;
|
|
580
612
|
const value = JSON.parse(document.getElementById('modalValue').value);
|
|
581
613
|
|
|
582
|
-
await fetch(
|
|
614
|
+
await fetch(`/api/key/${encodeURIComponent(key)}`, {
|
|
583
615
|
method: 'POST',
|
|
584
616
|
headers: { 'Content-Type': 'application/json' },
|
|
585
617
|
body: JSON.stringify({ key, value })
|
|
@@ -595,7 +627,7 @@
|
|
|
595
627
|
async function deleteKey(key) {
|
|
596
628
|
if (!confirm(`Delete key "${key}"?`)) return;
|
|
597
629
|
|
|
598
|
-
await fetch(`/
|
|
630
|
+
await fetch(`/api/key/${encodeURIComponent(key)}`, {
|
|
599
631
|
method: 'DELETE'
|
|
600
632
|
});
|
|
601
633
|
|