@kedem/okdb 1.0.1 → 1.0.4

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.
Files changed (142) hide show
  1. package/bin/okdb.js +1 -1
  2. package/keys/public.pem +3 -0
  3. package/okdb.js +1 -1
  4. package/package.json +2 -2
  5. package/public/admin-app.js +1 -1
  6. package/public/components/admin-route-host.ok.js +1 -1
  7. package/public/components/env-picker.ok.js +1 -1
  8. package/public/components/field-path-input.ok.js +1 -1
  9. package/public/components/field.html +154 -2
  10. package/public/components/geo-map.ok.js +1 -1
  11. package/public/components/ok-cron-input.ok.js +1 -1
  12. package/public/components/ok-dropzone.ok.js +1 -1
  13. package/public/components/ok-js-input.ok.js +1 -1
  14. package/public/components/ok-json-input.ok.js +1 -1
  15. package/public/components/ok-text-monaco-input.ok.js +1 -1
  16. package/public/components/theme-toggle.ok.js +1 -1
  17. package/public/index.html +29 -2
  18. package/public/layouts/_default.ok.html +1 -1
  19. package/public/layouts/okdb-cube.ok.html +1 -1
  20. package/public/login-app.js +1 -1
  21. package/public/login.html +205 -1
  22. package/public/modules/ok.js +1 -1
  23. package/public/sections/api/index.ok.html +1 -1
  24. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  25. package/public/sections/auth/index.ok.html +1 -1
  26. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  27. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  28. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  29. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  30. package/public/sections/auth/parts/token-list.ok.js +1 -1
  31. package/public/sections/db/index.ok.html +1 -1
  32. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  33. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  34. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  35. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  36. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  37. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  38. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  39. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  40. package/public/sections/db/parts/db-overview.ok.js +1 -1
  41. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  42. package/public/sections/db/parts/edit-row.ok.js +1 -1
  43. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  44. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  45. package/public/sections/db/parts/type-list.ok.js +1 -1
  46. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  47. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  48. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  49. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  50. package/public/sections/docs/index.ok.html +1 -1
  51. package/public/sections/embeddings/index.ok.html +1 -1
  52. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  55. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  56. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  57. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  58. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  59. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  60. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  61. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  62. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  63. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  64. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  65. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  66. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  67. package/public/sections/engines/engine-ui-utils.js +1 -1
  68. package/public/sections/engines/index.ok.html +1 -1
  69. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  70. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  71. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  72. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  73. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  74. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  75. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  76. package/public/sections/files/index.ok.html +1 -1
  77. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  78. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  79. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  80. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  81. package/public/sections/files/parts/files-overview.ok.js +1 -1
  82. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  83. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  84. package/public/sections/functions/index.ok.html +1 -1
  85. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  86. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  87. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  88. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  89. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  90. package/public/sections/license/index.ok.html +1 -1
  91. package/public/sections/license/parts/license-panel.ok.js +1 -1
  92. package/public/sections/processors/index.ok.html +1 -1
  93. package/public/sections/queue/index.ok.html +1 -1
  94. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  95. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  96. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  97. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  98. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  99. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  100. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  101. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  102. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  103. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  104. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  105. package/public/sections/sync/index.ok.html +1 -1
  106. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  107. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  108. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  109. package/public/sections/system/index.ok.html +1 -1
  110. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  111. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  112. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  113. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  114. package/public/sections/system/parts/system-log.ok.js +1 -1
  115. package/public/sections/system/parts/system-status.ok.js +1 -1
  116. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  117. package/public/sections/views/index.ok.html +1 -1
  118. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  119. package/public/sections/views/parts/view-detail.ok.js +1 -1
  120. package/public/sections/views/parts/views-list.ok.js +1 -1
  121. package/public/sections/views/parts/views-overview.ok.js +1 -1
  122. package/public/setup-app.js +1 -1
  123. package/public/setup.html +189 -1
  124. package/public/stores/auth-store.js +1 -1
  125. package/public/stores/events-store.js +1 -1
  126. package/public/stores/functions-store.js +1 -1
  127. package/public/stores/okdb-store.js +1 -1
  128. package/public/stores/theme-store.js +1 -1
  129. package/public/test-cron-input.html +53 -3
  130. package/public/test-json-input.html +182 -3
  131. package/public/util/permissions.js +1 -1
  132. package/public/util/sift-schema.js +1 -1
  133. package/public/vendor/okjs/ok.esm.min.js +1 -2
  134. package/public/view-models/type-query-vm.js +1 -1
  135. package/okdb-data/default/data.mdb +0 -0
  136. package/okdb-data/default/lock.mdb +0 -0
  137. package/okdb-data/~log/data.mdb +0 -0
  138. package/okdb-data/~log/lock.mdb +0 -0
  139. package/okdb-data/~system/data.mdb +0 -0
  140. package/okdb-data/~system/lock.mdb +0 -0
  141. package/public/images/logo.png +0 -0
  142. package/public/images/logo.svg +0 -333
@@ -1,9 +1,184 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>ok-json-input — completion test</title><script type="importmap">{
1
+ <!DOCTYPE html>
2
+ <!--
3
+ Standalone smoke-test for ok-json-input schema-driven completions.
4
+
5
+ ROOT CAUSE of invisible labels (type-viewer):
6
+ Monaco's fixedOverflowWidgets:true moves the suggest/hover widgets to
7
+ <body> inside a SEPARATE .monaco-editor.vs-dark container. Monaco sets
8
+ its colour palette as INLINE custom-properties on the MAIN editor element
9
+ only — the overflow container never gets them. Every var(--vscode-…)
10
+ inside the widget therefore falls back to `initial` (black text on dark
11
+ background → invisible).
12
+
13
+ FIX:
14
+ Declare the same custom-properties in a stylesheet rule that targets
15
+ .monaco-editor.vs-dark so they cascade into the overflow container.
16
+ See the <style> block below — the identical block is in styles.css for
17
+ the real admin app.
18
+ -->
19
+ <html lang="en">
20
+ <head>
21
+ <meta charset="UTF-8">
22
+ <title>ok-json-input — completion test</title>
23
+ <script type="importmap">
24
+ {
2
25
  "imports": {
3
26
  "@toolkit/": "./vendor/okjs/toolkit/",
4
27
  "@okjs": "./vendor/okjs/ok.esm.min.js"
5
28
  }
6
- }</script><style>*,::after,::before{box-sizing:border-box}body{margin:0;padding:24px;background:#161c20;color:#d0d8e0;font-family:'Segoe UI',Arial,sans-serif;font-size:13px;line-height:1.6}h2{margin:0 0 4px;font-size:15px;color:#e0eaf4}p{margin:0 0 12px;opacity:.55;font-size:12px}.card{background:#1a2228;border:1px solid #23292e;border-radius:10px;padding:16px 18px;margin-bottom:20px}label{display:block;font-size:11px;opacity:.5;margin-bottom:6px;text-transform:uppercase;letter-spacing:.04em}.result{margin-top:10px;background:#0d1318;border:1px solid #1e2e3e;border-radius:7px;padding:8px 12px;font-family:'Cascadia Code','Fira Code',Consolas,monospace;font-size:12px;color:#4fc1ff;min-height:24px;white-space:pre-wrap;word-break:break-all}.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.badge-ok{background:#0d2e1a;color:#3dbb6a;border:1px solid #1e4a2a}.badge-err{background:#2e0d0d;color:#bb3d3d;border:1px solid #4a1e1e}.monaco-editor.vs-dark{--vscode-editorSuggestWidget-background:#252526;--vscode-editorSuggestWidget-foreground:#d4d4d4;--vscode-editorSuggestWidget-selectedForeground:#d4d4d4;--vscode-editorSuggestWidget-selectedBackground:#04395e;--vscode-editorSuggestWidget-highlightForeground:#18a3ff;--vscode-editorSuggestWidget-focusHighlightForeground:#18a3ff;--vscode-editorSuggestWidget-border:#454545;--vscode-list-foreground:#d4d4d4;--vscode-list-hoverBackground:#2a2d2e;--vscode-list-hoverForeground:#d4d4d4;--vscode-list-focusBackground:#062f4a;--vscode-list-focusForeground:#d4d4d4;--vscode-list-activeSelectionBackground:#04395e;--vscode-list-activeSelectionForeground:#d4d4d4;--vscode-list-inactiveSelectionBackground:#37373d;--vscode-list-inactiveSelectionForeground:#d4d4d4;--vscode-list-highlightForeground:#18a3ff;--vscode-editorHoverWidget-background:#252526;--vscode-editorHoverWidget-foreground:#d4d4d4;--vscode-editorHoverWidget-border:#454545;--vscode-editorHoverWidget-statusBarBackground:#2c2c2d}</style></head><body><div class="card"><h2>Filter query <span style="opacity:.4;font-weight:400;font-size:12px">— textbox, schema completions</span></h2><p>Type <code style="color:#4fc1ff">{</code> then <kbd>Ctrl+Space</kbd> to open completions. Schema fields: <code style="color:#4fc1ff">name</code> (string), <code style="color:#4fc1ff">age</code> (number), <code style="color:#4fc1ff">active</code> (boolean).</p><label>Value</label><ok-json-input id="filter-input" style="min-height:80px;display:flex;flex:1" :schema="filterSchema"></ok-json-input><div style="margin-top:8px;display:flex;align-items:center;gap:8px"><span id="filter-badge" class="badge badge-ok">—</span> <span style="opacity:.4;font-size:11px">last valid value:</span></div><div id="filter-result" class="result">—</div></div><div class="card"><h2>Prefix value <span style="opacity:.4;font-weight:400;font-size:12px">— input mode (no schema)</span></h2><p>Single-line mode. Press Enter to commit, Shift+Enter to add a newline.</p><label>Value</label><ok-json-input id="prefix-input" mode="input" style="width:280px"></ok-json-input><div id="prefix-result" class="result">—</div></div><div class="card"><h2>Logical query <span style="opacity:.4;font-weight:400;font-size:12px">— textbox, richer schema</span></h2><p>Schema exposes <code style="color:#4fc1ff">$and</code>, <code style="color:#4fc1ff">$or</code>, <code style="color:#4fc1ff">$nor</code> at the top level in addition to field names. Try typing <code style="color:#4fc1ff">"$</code> and pressing Ctrl+Space.</p><label>Value</label><ok-json-input id="logical-input" style="min-height:110px;display:flex;flex:1" :schema="logicalSchema"></ok-json-input><div id="logical-result" class="result">—</div></div><script type="module">import OK from '@okjs';
29
+ }
30
+ </script>
31
+ <style>
32
+ /* ── page chrome ────────────────────────────────────────────── */
33
+ *, *::before, *::after { box-sizing: border-box; }
34
+
35
+ body {
36
+ margin: 0;
37
+ padding: 24px;
38
+ background: #161c20;
39
+ color: #d0d8e0;
40
+ font-family: 'Segoe UI', Arial, sans-serif;
41
+ font-size: 13px;
42
+ line-height: 1.6;
43
+ }
44
+
45
+ h2 { margin: 0 0 4px; font-size: 15px; color: #e0eaf4; }
46
+ p { margin: 0 0 12px; opacity: .55; font-size: 12px; }
47
+
48
+ .card {
49
+ background: #1a2228;
50
+ border: 1px solid #23292e;
51
+ border-radius: 10px;
52
+ padding: 16px 18px;
53
+ margin-bottom: 20px;
54
+ }
55
+
56
+ label {
57
+ display: block;
58
+ font-size: 11px;
59
+ opacity: .5;
60
+ margin-bottom: 6px;
61
+ text-transform: uppercase;
62
+ letter-spacing: .04em;
63
+ }
64
+
65
+ .result {
66
+ margin-top: 10px;
67
+ background: #0d1318;
68
+ border: 1px solid #1e2e3e;
69
+ border-radius: 7px;
70
+ padding: 8px 12px;
71
+ font-family: 'Cascadia Code', 'Fira Code', Consolas, monospace;
72
+ font-size: 12px;
73
+ color: #4FC1FF;
74
+ min-height: 24px;
75
+ white-space: pre-wrap;
76
+ word-break: break-all;
77
+ }
78
+
79
+ .badge {
80
+ display: inline-block;
81
+ padding: 2px 8px;
82
+ border-radius: 4px;
83
+ font-size: 11px;
84
+ font-weight: 600;
85
+ }
86
+ .badge-ok { background: #0d2e1a; color: #3dbb6a; border: 1px solid #1e4a2a; }
87
+ .badge-err { background: #2e0d0d; color: #bb3d3d; border: 1px solid #4a1e1e; }
88
+
89
+ /* ── Monaco overflow widget fix ─────────────────────────────── */
90
+ /*
91
+ * The suggest/hover widgets rendered at body level live in their own
92
+ * .monaco-editor.vs-dark wrapper which does NOT inherit Monaco's inline
93
+ * --vscode-* custom properties. Defining them here (in a stylesheet)
94
+ * makes them cascade into the overflow containers so labels are visible.
95
+ */
96
+ .monaco-editor.vs-dark {
97
+ /* Suggest widget */
98
+ --vscode-editorSuggestWidget-background: #252526;
99
+ --vscode-editorSuggestWidget-foreground: #d4d4d4;
100
+ --vscode-editorSuggestWidget-selectedForeground: #d4d4d4;
101
+ --vscode-editorSuggestWidget-selectedBackground: #04395e;
102
+ --vscode-editorSuggestWidget-highlightForeground: #18a3ff;
103
+ --vscode-editorSuggestWidget-focusHighlightForeground: #18a3ff;
104
+ --vscode-editorSuggestWidget-border: #454545;
105
+
106
+ /* List / tree (used inside suggest + picker widgets) */
107
+ --vscode-list-foreground: #d4d4d4;
108
+ --vscode-list-hoverBackground: #2a2d2e;
109
+ --vscode-list-hoverForeground: #d4d4d4;
110
+ --vscode-list-focusBackground: #062f4a;
111
+ --vscode-list-focusForeground: #d4d4d4;
112
+ --vscode-list-activeSelectionBackground: #04395e;
113
+ --vscode-list-activeSelectionForeground: #d4d4d4;
114
+ --vscode-list-inactiveSelectionBackground: #37373d;
115
+ --vscode-list-inactiveSelectionForeground: #d4d4d4;
116
+ --vscode-list-highlightForeground: #18a3ff;
117
+
118
+ /* Hover / parameter hints widget */
119
+ --vscode-editorHoverWidget-background: #252526;
120
+ --vscode-editorHoverWidget-foreground: #d4d4d4;
121
+ --vscode-editorHoverWidget-border: #454545;
122
+ --vscode-editorHoverWidget-statusBarBackground: #2c2c2d;
123
+ }
124
+ </style>
125
+ </head>
126
+ <body>
127
+
128
+ <!-- ─── Card 1: textbox with sift-style schema ──────────────────────────── -->
129
+ <div class="card">
130
+ <h2>Filter query <span style="opacity:.4;font-weight:400;font-size:12px;">— textbox, schema completions</span></h2>
131
+ <p>
132
+ Type <code style="color:#4FC1FF">{</code> then <kbd>Ctrl+Space</kbd> to open completions.
133
+ Schema fields: <code style="color:#4FC1FF">name</code> (string),
134
+ <code style="color:#4FC1FF">age</code> (number),
135
+ <code style="color:#4FC1FF">active</code> (boolean).
136
+ </p>
137
+ <label>Value</label>
138
+ <ok-json-input
139
+ id="filter-input"
140
+ style="min-height: 80px; display:flex; flex:1;"
141
+ :schema="filterSchema"
142
+ ></ok-json-input>
143
+ <div style="margin-top:8px; display:flex; align-items:center; gap:8px;">
144
+ <span id="filter-badge" class="badge badge-ok">—</span>
145
+ <span style="opacity:.4; font-size:11px;">last valid value:</span>
146
+ </div>
147
+ <div id="filter-result" class="result">—</div>
148
+ </div>
149
+
150
+ <!-- ─── Card 2: single-line input mode ──────────────────────────────────── -->
151
+ <div class="card">
152
+ <h2>Prefix value <span style="opacity:.4;font-weight:400;font-size:12px;">— input mode (no schema)</span></h2>
153
+ <p>Single-line mode. Press Enter to commit, Shift+Enter to add a newline.</p>
154
+ <label>Value</label>
155
+ <ok-json-input
156
+ id="prefix-input"
157
+ mode="input"
158
+ style="width: 280px;"
159
+ ></ok-json-input>
160
+ <div id="prefix-result" class="result">—</div>
161
+ </div>
162
+
163
+ <!-- ─── Card 3: schema with $or / logical operators ─────────────────────── -->
164
+ <div class="card">
165
+ <h2>Logical query <span style="opacity:.4;font-weight:400;font-size:12px;">— textbox, richer schema</span></h2>
166
+ <p>
167
+ Schema exposes <code style="color:#4FC1FF">$and</code>, <code style="color:#4FC1FF">$or</code>, <code style="color:#4FC1FF">$nor</code>
168
+ at the top level in addition to field names.
169
+ Try typing <code style="color:#4FC1FF">"$</code> and pressing Ctrl+Space.
170
+ </p>
171
+ <label>Value</label>
172
+ <ok-json-input
173
+ id="logical-input"
174
+ style="min-height: 110px; display:flex; flex:1;"
175
+ :schema="logicalSchema"
176
+ ></ok-json-input>
177
+ <div id="logical-result" class="result">—</div>
178
+ </div>
179
+
180
+ <script type="module">
181
+ import OK from '@okjs';
7
182
  import okJsonInput from './components/ok-json-input.ok.js';
8
183
 
9
184
  // ── bootstrap ok.js ─────────────────────────────────────────────────────
@@ -98,4 +273,8 @@
98
273
 
99
274
  showResult('filter-input', 'filter-result', 'filter-badge');
100
275
  showResult('prefix-input', 'prefix-result', null);
101
- showResult('logical-input', 'logical-result', null);</script></body></html>
276
+ showResult('logical-input', 'logical-result', null);
277
+ </script>
278
+ </body>
279
+ </html>
280
+
@@ -1 +1 @@
1
- (function(_0x1c4f53,_0x1e0126){const _0x570aab=_0x1564,_0x42d8ab=_0x1c4f53();while(!![]){try{const _0x2a50f6=parseInt(_0x570aab(0x139))/0x1*(-parseInt(_0x570aab(0x134))/0x2)+-parseInt(_0x570aab(0x133))/0x3+-parseInt(_0x570aab(0x132))/0x4+parseInt(_0x570aab(0x13a))/0x5+parseInt(_0x570aab(0x135))/0x6+-parseInt(_0x570aab(0x130))/0x7*(-parseInt(_0x570aab(0x137))/0x8)+parseInt(_0x570aab(0x131))/0x9;if(_0x2a50f6===_0x1e0126)break;else _0x42d8ab['push'](_0x42d8ab['shift']());}catch(_0x3a0b57){_0x42d8ab['push'](_0x42d8ab['shift']());}}}(_0x139a,0x7dd47));let IMPLIED_BY={};export function setImpliedBy(_0x187e7b){IMPLIED_BY=_0x187e7b||{};}function _0x1564(_0x5355f9,_0x271e3e){_0x5355f9=_0x5355f9-0x12f;const _0x139a87=_0x139a();let _0x156455=_0x139a87[_0x5355f9];return _0x156455;}export function hasPermission(_0x55bd15,_0x1b02b7){const _0x19e58e=_0x1564;if(!Array[_0x19e58e(0x12f)](_0x55bd15)||0x0===_0x55bd15['length'])return!0x1;for(const _0x20931c of _0x55bd15){if(_0x19e58e(0x138)!=typeof _0x20931c||!_0x20931c['includes'](':')){if('*'===_0x20931c)return!0x0;continue;}const [_0x4b71d7,_0x28b5c0]=_0x20931c['split'](':'),[_0x2ea456,_0x1a11ad]=_0x1b02b7[_0x19e58e(0x136)](':');if(!('*'!==_0x4b71d7&&_0x4b71d7!==_0x2ea456||'*'!==_0x28b5c0&&_0x28b5c0!==_0x1a11ad))return!0x0;}const _0x40e60b=IMPLIED_BY[_0x1b02b7];if(_0x40e60b){for(const _0x56a2b1 of _0x40e60b)if(hasPermission(_0x55bd15,_0x56a2b1))return!0x0;}return!0x1;}export function permLabel(_0xa36430){return _0xa36430;}function _0x139a(){const _0x56cc22=['2542028jTzmjS','5649nycCGH','1058882ofFXCD','2659872aORupo','split','144776JQsRKr','string','1jMtwcq','4143805YOfSPg','isArray','119onOxkH','922572uuBxhW'];_0x139a=function(){return _0x56cc22;};return _0x139a();}
1
+ let IMPLIED_BY={};export function setImpliedBy(r){IMPLIED_BY=r||{}}export function hasPermission(r,t){if(!Array.isArray(r)||0===r.length)return!1;for(const n of r){if("string"!=typeof n||!n.includes(":")){if("*"===n)return!0;continue}const[r,e]=n.split(":"),[i,o]=t.split(":");if(!("*"!==r&&r!==i||"*"!==e&&e!==o))return!0}const n=IMPLIED_BY[t];if(n)for(const t of n)if(hasPermission(r,t))return!0;return!1}export function permLabel(r){return r}
@@ -1 +1 @@
1
- const _0x160a0c=_0x2f57;(function(_0x175722,_0x52f3b2){const _0x100871=_0x2f57,_0x5aa9f7=_0x175722();while(!![]){try{const _0x22f6fc=parseInt(_0x100871(0x17c))/0x1+parseInt(_0x100871(0x163))/0x2+-parseInt(_0x100871(0x16c))/0x3+parseInt(_0x100871(0x177))/0x4*(parseInt(_0x100871(0x16b))/0x5)+parseInt(_0x100871(0x162))/0x6+parseInt(_0x100871(0x157))/0x7+-parseInt(_0x100871(0x15f))/0x8;if(_0x22f6fc===_0x52f3b2)break;else _0x5aa9f7['push'](_0x5aa9f7['shift']());}catch(_0x594939){_0x5aa9f7['push'](_0x5aa9f7['shift']());}}}(_0x421a,0x512b4));const COMPARISON_OPS={'$eq':{'description':'Equals\x20this\x20value\x20exactly'},'$ne':{'description':_0x160a0c(0x178)},'$gt':{'description':'Greater\x20than'},'$gte':{'description':_0x160a0c(0x168)},'$lt':{'description':_0x160a0c(0x16e)},'$lte':{'description':_0x160a0c(0x159)}},SET_OPS={'$in':{'type':_0x160a0c(0x151),'items':{},'description':_0x160a0c(0x16f)},'$nin':{'type':_0x160a0c(0x151),'items':{},'description':_0x160a0c(0x16a)}},ELEMENT_OPS={'$exists':{'type':_0x160a0c(0x164),'enum':[!0x0,!0x1],'description':_0x160a0c(0x17a)},'$type':{'type':_0x160a0c(0x153),'enum':['string',_0x160a0c(0x150),_0x160a0c(0x164),_0x160a0c(0x152),_0x160a0c(0x151),_0x160a0c(0x171),_0x160a0c(0x170)],'description':_0x160a0c(0x175)}},STRING_OPS={'$regex':{'type':_0x160a0c(0x153),'description':'Regular-expression\x20pattern\x20\x20e.g.\x20{\x22$regex\x22:\x20\x22^foo\x22}'},'$options':{'type':_0x160a0c(0x153),'description':_0x160a0c(0x158)}},NUMERIC_OPS={'$mod':{'type':_0x160a0c(0x151),'items':{'type':_0x160a0c(0x150)},'minItems':0x2,'maxItems':0x2,'description':_0x160a0c(0x166)}},ARRAY_OPS={'$size':{'type':_0x160a0c(0x150),'description':'Array\x20length\x20equals\x20this\x20number'},'$all':{'type':_0x160a0c(0x151),'items':{},'description':_0x160a0c(0x15e)},'$elemMatch':{'type':_0x160a0c(0x152),'description':_0x160a0c(0x160)}};function buildOperatorProperties(_0x123a2d=[]){const _0x5b9924=_0x160a0c,_0x4d938b=_0x123a2d[_0x5b9924(0x179)]('number'),_0x5e4189=_0x123a2d[_0x5b9924(0x179)](_0x5b9924(0x153)),_0x1d9f93=_0x123a2d[_0x5b9924(0x179)](_0x5b9924(0x151)),_0x29dd1c=0x0===_0x123a2d[_0x5b9924(0x174)],_0x3b9f9d={...COMPARISON_OPS,...SET_OPS,...ELEMENT_OPS};return(_0x4d938b||_0x29dd1c)&&Object[_0x5b9924(0x155)](_0x3b9f9d,NUMERIC_OPS),(_0x5e4189||_0x29dd1c)&&Object[_0x5b9924(0x155)](_0x3b9f9d,STRING_OPS),(_0x1d9f93||_0x29dd1c)&&Object[_0x5b9924(0x155)](_0x3b9f9d,ARRAY_OPS),_0x3b9f9d[_0x5b9924(0x172)]={'type':_0x5b9924(0x152),'description':_0x5b9924(0x165),'properties':{..._0x3b9f9d},'additionalProperties':!0x1},_0x3b9f9d;}function _0x421a(){const _0x223123=['Modulo\x20[divisor,\x20remainder]\x20\x20e.g.\x20{\x22$mod\x22:[2,0]}\x20matches\x20even\x20numbers','$and','Greater\x20than\x20or\x20equal','any','Value\x20is\x20NOT\x20one\x20of\x20these\x20\x20e.g.\x20{\x22$nin\x22:\x20[1,2]}','59935Nechxw','1212501YcYQsa','OR\x20\x20—\x20at\x20least\x20one\x20sub-condition\x20must\x20match','Less\x20than','Value\x20is\x20one\x20of\x20these\x20(OR\x20match)\x20\x20e.g.\x20{\x22$in\x22:\x20[\x22a\x22,\x22b\x22]}','undefined','null','$not','join','length','Match\x20by\x20JavaScript\x20type\x20name','Direct\x20equality\x20match\x20\x20e.g.\x20\x22value\x22\x20or\x2042','52wSgPiB','Not\x20equal\x20to\x20this\x20value','includes','true\x20→\x20field\x20must\x20be\x20present,\x20\x20false\x20→\x20field\x20must\x20be\x20absent','isArray','334384xvHSJV','Sift\x20filter','number','array','object','string','AND\x20—\x20all\x20sub-conditions\x20must\x20match','assign','\x20|\x20','2964472kXwhJC','Regex\x20flags\x20used\x20with\x20$regex\x20\x20e.g.\x20\x22i\x22\x20for\x20case-insensitive','Less\x20than\x20or\x20equal','MongoDB-style\x20sift\x20filter.\x20\x20Field\x20names\x20are\x20keys;\x20use\x20$and/$or/$nor\x20for\x20logic.','$or','$nor','\x22\x20\x20(','Array\x20contains\x20ALL\x20of\x20these\x20values','3964656iyEYEY','At\x20least\x20one\x20array\x20element\x20matches\x20this\x20sub-query','http://json-schema.org/draft-07/schema#','1609806STFNrb','100410TKlpHP','boolean','Negate\x20the\x20nested\x20operator\x20conditions\x20\x20e.g.\x20{\x22$not\x22:{\x22$gt\x22:5}}'];_0x421a=function(){return _0x223123;};return _0x421a();}function _0x2f57(_0x30d086,_0x2286f1){_0x30d086=_0x30d086-0x14f;const _0x421abf=_0x421a();let _0x2f575c=_0x421abf[_0x30d086];return _0x2f575c;}function buildFieldSchema(_0x1c3af0,_0x4e35cd=[]){const _0x4f543f=_0x160a0c;return{'description':'\x22'+_0x1c3af0+_0x4f543f(0x15d)+(_0x4e35cd[_0x4f543f(0x174)]?_0x4e35cd[_0x4f543f(0x173)](_0x4f543f(0x156)):_0x4f543f(0x169))+')','oneOf':[{'description':_0x4f543f(0x176),'not':{'type':_0x4f543f(0x152)}},{'type':'object','description':'Operator\x20conditions','properties':buildOperatorProperties(_0x4e35cd),'additionalProperties':!0x1}]};}export function buildSiftSchema(_0x31f34a={}){const _0x233a6f=_0x160a0c,_0x13e9c0={};for(const [_0x4bd877,_0x33c8fa]of Object['entries'](_0x31f34a))_0x13e9c0[_0x4bd877]=buildFieldSchema(_0x4bd877,Array[_0x233a6f(0x17b)](_0x33c8fa)?_0x33c8fa:[String(_0x33c8fa)]);const _0x18c053={'$ref':'#'};return _0x13e9c0[_0x233a6f(0x167)]={'type':_0x233a6f(0x151),'items':_0x18c053,'description':_0x233a6f(0x154)},_0x13e9c0[_0x233a6f(0x15b)]={'type':_0x233a6f(0x151),'items':_0x18c053,'description':_0x233a6f(0x16d)},_0x13e9c0[_0x233a6f(0x15c)]={'type':'array','items':_0x18c053,'description':'NOR\x20—\x20no\x20sub-condition\x20may\x20match'},{'$schema':_0x233a6f(0x161),'title':_0x233a6f(0x14f),'description':_0x233a6f(0x15a),'type':_0x233a6f(0x152),'properties':_0x13e9c0,'additionalProperties':buildFieldSchema('(field)',[])};}
1
+ const COMPARISON_OPS={$eq:{description:"Equals this value exactly"},$ne:{description:"Not equal to this value"},$gt:{description:"Greater than"},$gte:{description:"Greater than or equal"},$lt:{description:"Less than"},$lte:{description:"Less than or equal"}},SET_OPS={$in:{type:"array",items:{},description:'Value is one of these (OR match) e.g. {"$in": ["a","b"]}'},$nin:{type:"array",items:{},description:'Value is NOT one of these e.g. {"$nin": [1,2]}'}},ELEMENT_OPS={$exists:{type:"boolean",enum:[!0,!1],description:"true → field must be present, false → field must be absent"},$type:{type:"string",enum:["string","number","boolean","object","array","null","undefined"],description:"Match by JavaScript type name"}},STRING_OPS={$regex:{type:"string",description:'Regular-expression pattern e.g. {"$regex": "^foo"}'},$options:{type:"string",description:'Regex flags used with $regex e.g. "i" for case-insensitive'}},NUMERIC_OPS={$mod:{type:"array",items:{type:"number"},minItems:2,maxItems:2,description:'Modulo [divisor, remainder] e.g. {"$mod":[2,0]} matches even numbers'}},ARRAY_OPS={$size:{type:"number",description:"Array length equals this number"},$all:{type:"array",items:{},description:"Array contains ALL of these values"},$elemMatch:{type:"object",description:"At least one array element matches this sub-query"}};function buildOperatorProperties(e=[]){const t=e.includes("number"),i=e.includes("string"),r=e.includes("array"),n=0===e.length,s={...COMPARISON_OPS,...SET_OPS,...ELEMENT_OPS};return(t||n)&&Object.assign(s,NUMERIC_OPS),(i||n)&&Object.assign(s,STRING_OPS),(r||n)&&Object.assign(s,ARRAY_OPS),s.$not={type:"object",description:'Negate the nested operator conditions e.g. {"$not":{"$gt":5}}',properties:{...s},additionalProperties:!1},s}function buildFieldSchema(e,t=[]){return{description:`"${e}" (${t.length?t.join(" | "):"any"})`,oneOf:[{description:'Direct equality match e.g. "value" or 42',not:{type:"object"}},{type:"object",description:"Operator conditions",properties:buildOperatorProperties(t),additionalProperties:!1}]}}export function buildSiftSchema(e={}){const t={};for(const[i,r]of Object.entries(e))t[i]=buildFieldSchema(i,Array.isArray(r)?r:[String(r)]);const i={$ref:"#"};return t.$and={type:"array",items:i,description:"AND — all sub-conditions must match"},t.$or={type:"array",items:i,description:"OR — at least one sub-condition must match"},t.$nor={type:"array",items:i,description:"NOR — no sub-condition may match"},{$schema:"http://json-schema.org/draft-07/schema#",title:"Sift filter",description:"MongoDB-style sift filter. Field names are keys; use $and/$or/$nor for logic.",type:"object",properties:t,additionalProperties:buildFieldSchema("(field)",[])}}