@onivoro/onix 20.5.46 → 20.5.48

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/executors.json CHANGED
@@ -10,6 +10,11 @@
10
10
  "schema": "./src/executors/typeorm/schema.json",
11
11
  "description": "typeorm"
12
12
  },
13
+ "typeorm-db-client": {
14
+ "implementation": "./src/executors/typeorm-db-client/executor",
15
+ "schema": "./src/executors/typeorm/schema.json",
16
+ "description": "typeorm-db-client"
17
+ },
13
18
  "docker-run": {
14
19
  "implementation": "./src/executors/docker-run/executor",
15
20
  "schema": "./src/executors/docker-run/schema.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onivoro/onix",
3
- "version": "20.5.46",
3
+ "version": "20.5.48",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
@@ -13,10 +13,14 @@
13
13
  "@aws-sdk/credential-providers": "^3.782.0",
14
14
  "@nx/devkit": "20.5.0",
15
15
  "@nx/js": "20.5.0",
16
+ "@onivoro/server-html": "24.25.1",
16
17
  "@playwright/test": "^1.51.1",
18
+ "@types/express": "^4.17.21",
17
19
  "adm-zip": "^0.5.16",
18
20
  "esbuild": "^0.25.2",
19
- "esbuild-node-externals": "^1.18.0"
21
+ "esbuild-node-externals": "^1.18.0",
22
+ "express": "^4.18.2",
23
+ "typeorm": "^0.3.20"
20
24
  },
21
25
  "types": "./src/index.d.ts"
22
26
  }
@@ -0,0 +1,3 @@
1
+ import { ExecutorSchema } from './schema';
2
+ declare const _default: import("@nx/devkit").PromiseExecutor<ExecutorSchema>;
3
+ export default _default;
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const load_env_file_function_1 = require("../../functions/load-env-file.function");
6
+ const executor_factory_function_1 = require("../../functions/executor-factory.function");
7
+ const server_html_1 = require("@onivoro/server-html");
8
+ const typeorm_1 = require("typeorm");
9
+ const path_1 = require("path");
10
+ const express = require("express");
11
+ exports.default = (0, executor_factory_function_1.executorFactory)((options, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
12
+ const { envFile, ormConfigPath } = options;
13
+ (0, load_env_file_function_1.loadEnvFile)(envFile);
14
+ // Load TypeORM configuration
15
+ const ormConfig = require((0, path_1.join)(process.cwd(), ormConfigPath));
16
+ const dataSource = new typeorm_1.DataSource(ormConfig);
17
+ try {
18
+ yield dataSource.initialize();
19
+ devkit_1.logger.info('Database connection established');
20
+ // Create Express server
21
+ const app = express();
22
+ app.use(express.json());
23
+ app.use(express.urlencoded({ extended: true }));
24
+ // Routes
25
+ app.get('/', (req, res) => {
26
+ res.send(getDatabaseClientUI());
27
+ });
28
+ app.get('/api/tables', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
29
+ const tablesHtml = yield getTables(dataSource);
30
+ res.send(tablesHtml);
31
+ }));
32
+ app.get('/api/table/:tableName', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
33
+ const tableDataHtml = yield getTableData(dataSource, req.params.tableName);
34
+ res.send(tableDataHtml);
35
+ }));
36
+ app.get('/api/table/:tableName/structure', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
37
+ const structureHtml = yield getTableStructure(dataSource, req.params.tableName);
38
+ res.send(structureHtml);
39
+ }));
40
+ app.post('/api/query', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
41
+ const queryResultHtml = yield executeQuery(dataSource, req.body.query);
42
+ res.send(queryResultHtml);
43
+ }));
44
+ const server = app.listen(3000, () => {
45
+ devkit_1.logger.info('Database client UI available at http://localhost:3000');
46
+ });
47
+ // Keep the process running
48
+ process.on('SIGINT', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
49
+ devkit_1.logger.info('Shutting down database client...');
50
+ server.close();
51
+ yield dataSource.destroy();
52
+ process.exit(0);
53
+ }));
54
+ }
55
+ catch (error) {
56
+ devkit_1.logger.error('Failed to connect to database: ' + error.message);
57
+ throw error;
58
+ }
59
+ }));
60
+ function getDatabaseClientUI() {
61
+ return (0, server_html_1.$html)({
62
+ lang: 'en',
63
+ children: [
64
+ (0, server_html_1.$head)({
65
+ children: [
66
+ (0, server_html_1.$meta)({ charset: 'UTF-8' }),
67
+ (0, server_html_1.$meta)({ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }),
68
+ (0, server_html_1.$title)({ textContent: 'TypeORM Database Client' }),
69
+ (0, server_html_1.$script)({ src: 'https://unpkg.com/htmx.org@1.9.10' }),
70
+ (0, server_html_1.$script)({ src: 'https://unpkg.com/alpinejs@3.13.5/dist/cdn.min.js', defer: true }),
71
+ (0, server_html_1.$style)({
72
+ textContent: `
73
+ * { margin: 0; padding: 0; box-sizing: border-box; }
74
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f5f5; }
75
+ .container { display: flex; height: 100vh; }
76
+ .sidebar { width: 300px; background: #fff; border-right: 1px solid #e0e0e0; overflow-y: auto; }
77
+ .main { flex: 1; display: flex; flex-direction: column; }
78
+ .header { background: #fff; padding: 1rem; border-bottom: 1px solid #e0e0e0; }
79
+ .content { flex: 1; padding: 1rem; overflow: auto; }
80
+ .table-list { padding: 1rem; }
81
+ .table-item { padding: 0.5rem; cursor: pointer; border-radius: 4px; margin-bottom: 0.25rem; }
82
+ .table-item:hover { background: #f0f0f0; }
83
+ .table-item.active { background: #007acc; color: white; }
84
+ .query-editor { margin-bottom: 1rem; }
85
+ .query-editor textarea { width: 100%; height: 100px; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px; font-family: monospace; }
86
+ .btn { padding: 0.5rem 1rem; background: #007acc; color: white; border: none; border-radius: 4px; cursor: pointer; }
87
+ .btn:hover { background: #005a9e; }
88
+ .table-container { background: white; border-radius: 4px; overflow: hidden; }
89
+ table { width: 100%; border-collapse: collapse; }
90
+ th, td { padding: 0.5rem; text-align: left; border-bottom: 1px solid #e0e0e0; }
91
+ th { background: #f8f9fa; font-weight: 600; }
92
+ .loading { text-align: center; padding: 2rem; color: #666; }
93
+ .error { background: #fee; color: #c33; padding: 1rem; border-radius: 4px; margin-bottom: 1rem; }
94
+ .tabs { display: flex; border-bottom: 1px solid #e0e0e0; }
95
+ .tab { padding: 0.75rem 1rem; cursor: pointer; border-bottom: 2px solid transparent; }
96
+ .tab.active { border-bottom-color: #007acc; color: #007acc; font-weight: 600; }
97
+ .tab-content { display: none; }
98
+ .tab-content.active { display: block; }
99
+ `
100
+ })
101
+ ]
102
+ }),
103
+ (0, server_html_1.$body)({
104
+ 'x-data': 'dbClient()',
105
+ children: [
106
+ (0, server_html_1.$div)({
107
+ className: 'container',
108
+ children: [
109
+ // Sidebar
110
+ (0, server_html_1.$div)({
111
+ className: 'sidebar',
112
+ children: [
113
+ (0, server_html_1.$div)({
114
+ className: 'table-list',
115
+ children: [
116
+ (0, server_html_1.$h3)({
117
+ textContent: 'Tables',
118
+ style: { marginBottom: '1rem', color: '#333' }
119
+ }),
120
+ (0, server_html_1.$div)({
121
+ 'hx-get': '/api/tables',
122
+ 'hx-trigger': 'load',
123
+ 'hx-target': '#table-list',
124
+ children: [
125
+ (0, server_html_1.$div)({
126
+ id: 'table-list',
127
+ className: 'loading',
128
+ textContent: 'Loading tables...'
129
+ })
130
+ ]
131
+ })
132
+ ]
133
+ })
134
+ ]
135
+ }),
136
+ // Main Content
137
+ (0, server_html_1.$div)({
138
+ className: 'main',
139
+ children: [
140
+ (0, server_html_1.$div)({
141
+ className: 'header',
142
+ children: [
143
+ (0, server_html_1.$h1)({ textContent: 'TypeORM Database Client' })
144
+ ]
145
+ }),
146
+ (0, server_html_1.$div)({
147
+ className: 'content',
148
+ children: [
149
+ // Query Editor
150
+ (0, server_html_1.$div)({
151
+ className: 'query-editor',
152
+ children: [
153
+ (0, server_html_1.$textarea)({
154
+ 'x-model': 'query',
155
+ placeholder: 'Enter SQL query...'
156
+ }),
157
+ (0, server_html_1.$button)({
158
+ className: 'btn',
159
+ '@click': 'executeQuery()',
160
+ style: { marginTop: '0.5rem' },
161
+ textContent: 'Execute Query'
162
+ })
163
+ ]
164
+ }),
165
+ // Results Area
166
+ (0, server_html_1.$div)({
167
+ id: 'results-area',
168
+ children: [
169
+ (0, server_html_1.$div)({
170
+ className: 'loading',
171
+ textContent: 'Select a table or execute a query to see results'
172
+ })
173
+ ]
174
+ })
175
+ ]
176
+ })
177
+ ]
178
+ })
179
+ ]
180
+ }),
181
+ (0, server_html_1.$script)({
182
+ textContent: `
183
+ function dbClient() {
184
+ return {
185
+ query: '',
186
+ selectedTable: '',
187
+
188
+ selectTable(tableName) {
189
+ this.selectedTable = tableName;
190
+
191
+ // Update table list active state
192
+ document.querySelectorAll('.table-item').forEach(item => {
193
+ item.classList.remove('active');
194
+ });
195
+ event.target.classList.add('active');
196
+
197
+ // Load table data with tabs
198
+ htmx.ajax('GET', '/api/table/' + tableName, {
199
+ target: '#results-area'
200
+ });
201
+ },
202
+
203
+ executeQuery() {
204
+ if (!this.query.trim()) return;
205
+
206
+ htmx.ajax('POST', '/api/query', {
207
+ target: '#results-area',
208
+ values: { query: this.query }
209
+ });
210
+ },
211
+
212
+ switchTab(tabName) {
213
+ // Handle tab switching
214
+ document.querySelectorAll('.tab').forEach(tab => {
215
+ tab.classList.remove('active');
216
+ });
217
+ document.querySelectorAll('.tab-content').forEach(content => {
218
+ content.classList.remove('active');
219
+ });
220
+
221
+ event.target.classList.add('active');
222
+ document.getElementById(tabName + '-content').classList.add('active');
223
+
224
+ // Load structure if structure tab is clicked
225
+ if (tabName === 'structure' && this.selectedTable) {
226
+ htmx.ajax('GET', '/api/table/' + this.selectedTable + '/structure', {
227
+ target: '#structure-content'
228
+ });
229
+ }
230
+ }
231
+ }
232
+ }
233
+
234
+ // Make selectTable and switchTab globally available for HTMX
235
+ window.selectTable = function(tableName) {
236
+ document.querySelector('[x-data]').__x.$data.selectTable(tableName);
237
+ };
238
+
239
+ window.switchTab = function(tabName) {
240
+ document.querySelector('[x-data]').__x.$data.switchTab(tabName);
241
+ };
242
+ `
243
+ })
244
+ ]
245
+ })
246
+ ]
247
+ });
248
+ }
249
+ function getTables(dataSource) {
250
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
251
+ try {
252
+ const tables = yield dataSource.query(`
253
+ SELECT table_name
254
+ FROM information_schema.tables
255
+ WHERE table_schema = 'public'
256
+ ORDER BY table_name
257
+ `);
258
+ const tableElements = tables.map(table => (0, server_html_1.$div)({
259
+ className: 'table-item',
260
+ onclick: `selectTable('${table.table_name}')`,
261
+ textContent: table.table_name
262
+ }));
263
+ return tableElements.join('');
264
+ }
265
+ catch (error) {
266
+ return (0, server_html_1.$div)({
267
+ className: 'error',
268
+ textContent: `Error loading tables: ${error.message}`
269
+ });
270
+ }
271
+ });
272
+ }
273
+ function getTableData(dataSource, tableName) {
274
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
275
+ try {
276
+ const data = yield dataSource.query(`SELECT * FROM "${tableName}" LIMIT 100`);
277
+ if (data.length === 0) {
278
+ const tabs = (0, server_html_1.$div)({
279
+ className: 'tabs',
280
+ children: [
281
+ (0, server_html_1.$div)({
282
+ className: 'tab active',
283
+ onclick: "switchTab('data')",
284
+ textContent: 'Data'
285
+ }),
286
+ (0, server_html_1.$div)({
287
+ className: 'tab',
288
+ onclick: "switchTab('structure')",
289
+ textContent: 'Structure'
290
+ })
291
+ ]
292
+ });
293
+ const dataContent = (0, server_html_1.$div)({
294
+ id: 'data-content',
295
+ className: 'tab-content active',
296
+ children: [
297
+ (0, server_html_1.$p)({
298
+ style: { padding: '2rem', textAlign: 'center', color: '#666' },
299
+ textContent: `No data found in table "${tableName}"`
300
+ })
301
+ ]
302
+ });
303
+ const structureContent = (0, server_html_1.$div)({
304
+ id: 'structure-content',
305
+ className: 'tab-content'
306
+ });
307
+ return tabs + dataContent + structureContent;
308
+ }
309
+ const columns = Object.keys(data[0]);
310
+ const headerRow = (0, server_html_1.$tr)({
311
+ children: columns.map(col => (0, server_html_1.$th)({ textContent: col }))
312
+ });
313
+ const rows = data.map(row => (0, server_html_1.$tr)({
314
+ children: columns.map(col => (0, server_html_1.$td)({
315
+ innerHTML: row[col] !== null ? String(row[col]) : '<em>NULL</em>'
316
+ }))
317
+ }));
318
+ const tabs = (0, server_html_1.$div)({
319
+ className: 'tabs',
320
+ children: [
321
+ (0, server_html_1.$div)({
322
+ className: 'tab active',
323
+ onclick: "switchTab('data')",
324
+ textContent: 'Data'
325
+ }),
326
+ (0, server_html_1.$div)({
327
+ className: 'tab',
328
+ onclick: "switchTab('structure')",
329
+ textContent: 'Structure'
330
+ })
331
+ ]
332
+ });
333
+ const dataContent = (0, server_html_1.$div)({
334
+ id: 'data-content',
335
+ className: 'tab-content active',
336
+ children: [
337
+ (0, server_html_1.$div)({
338
+ className: 'table-container',
339
+ children: [
340
+ (0, server_html_1.$table)({
341
+ children: [
342
+ (0, server_html_1.$thead)({ children: [headerRow] }),
343
+ (0, server_html_1.$tbody)({ children: rows })
344
+ ]
345
+ })
346
+ ]
347
+ })
348
+ ]
349
+ });
350
+ const structureContent = (0, server_html_1.$div)({
351
+ id: 'structure-content',
352
+ className: 'tab-content'
353
+ });
354
+ return tabs + dataContent + structureContent;
355
+ }
356
+ catch (error) {
357
+ return (0, server_html_1.$div)({
358
+ className: 'error',
359
+ textContent: `Error loading table data: ${error.message}`
360
+ });
361
+ }
362
+ });
363
+ }
364
+ function getTableStructure(dataSource, tableName) {
365
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
366
+ try {
367
+ const columns = yield dataSource.query(`
368
+ SELECT column_name, data_type, is_nullable, column_default
369
+ FROM information_schema.columns
370
+ WHERE table_name = $1
371
+ ORDER BY ordinal_position
372
+ `, [tableName]);
373
+ const headerRow = (0, server_html_1.$tr)({
374
+ children: [
375
+ (0, server_html_1.$th)({ textContent: 'Column' }),
376
+ (0, server_html_1.$th)({ textContent: 'Type' }),
377
+ (0, server_html_1.$th)({ textContent: 'Nullable' }),
378
+ (0, server_html_1.$th)({ textContent: 'Default' })
379
+ ]
380
+ });
381
+ const rows = columns.map(col => (0, server_html_1.$tr)({
382
+ children: [
383
+ (0, server_html_1.$td)({ textContent: col.column_name }),
384
+ (0, server_html_1.$td)({ textContent: col.data_type }),
385
+ (0, server_html_1.$td)({ textContent: col.is_nullable }),
386
+ (0, server_html_1.$td)({
387
+ innerHTML: col.column_default || '<em>NULL</em>'
388
+ })
389
+ ]
390
+ }));
391
+ return (0, server_html_1.$div)({
392
+ className: 'table-container',
393
+ children: [
394
+ (0, server_html_1.$table)({
395
+ children: [
396
+ (0, server_html_1.$thead)({ children: [headerRow] }),
397
+ (0, server_html_1.$tbody)({ children: rows })
398
+ ]
399
+ })
400
+ ]
401
+ });
402
+ }
403
+ catch (error) {
404
+ return (0, server_html_1.$div)({
405
+ className: 'error',
406
+ textContent: `Error loading table structure: ${error.message}`
407
+ });
408
+ }
409
+ });
410
+ }
411
+ function executeQuery(dataSource, query) {
412
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
413
+ try {
414
+ const result = yield dataSource.query(query);
415
+ if (!Array.isArray(result) || result.length === 0) {
416
+ return (0, server_html_1.$div)({
417
+ style: { padding: '2rem', textAlign: 'center', color: '#666' },
418
+ textContent: 'Query executed successfully. No results to display.'
419
+ });
420
+ }
421
+ const columns = Object.keys(result[0]);
422
+ const headerRow = (0, server_html_1.$tr)({
423
+ children: columns.map(col => (0, server_html_1.$th)({ textContent: col }))
424
+ });
425
+ const rows = result.map(row => (0, server_html_1.$tr)({
426
+ children: columns.map(col => (0, server_html_1.$td)({
427
+ innerHTML: row[col] !== null ? String(row[col]) : '<em>NULL</em>'
428
+ }))
429
+ }));
430
+ return (0, server_html_1.$div)({
431
+ className: 'table-container',
432
+ children: [
433
+ (0, server_html_1.$table)({
434
+ children: [
435
+ (0, server_html_1.$thead)({ children: [headerRow] }),
436
+ (0, server_html_1.$tbody)({ children: rows })
437
+ ]
438
+ })
439
+ ]
440
+ });
441
+ }
442
+ catch (error) {
443
+ return (0, server_html_1.$div)({
444
+ className: 'error',
445
+ textContent: `Query error: ${error.message}`
446
+ });
447
+ }
448
+ });
449
+ }
450
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../onix/src/executors/typeorm-db-client/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface ExecutorSchema {
2
+ envFile: string;
3
+ ormConfigPath: string;
4
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "version": 2,
4
+ "title": "TypeORM DB Client",
5
+ "description": "",
6
+ "type": "object",
7
+ "properties": {
8
+ "envFile": {
9
+ "type": "string",
10
+ "description": "Path and name of the .env file to load"
11
+ },
12
+ "ormConfigPath": {
13
+ "type": "string",
14
+ "description": "Path and name of the ormconfig"
15
+ }
16
+ },
17
+ "required": [
18
+ "envFile", "ormConfigPath"
19
+ ]
20
+ }
@@ -1,3 +1,3 @@
1
1
  import { ExecutorContext } from '@nx/devkit';
2
- export declare function pmxSpawn(context: ExecutorContext, command: string, env?: Record<string, any>): import("child_process").SpawnSyncReturns<Buffer<ArrayBufferLike>>;
2
+ export declare function pmxSpawn(context: ExecutorContext, command: string, env?: Record<string, any>): void;
3
3
  export declare function pmxExec(context: ExecutorContext, command: string): void;
@@ -10,16 +10,16 @@ function pmxSpawn(context, command, env = {}) {
10
10
  const envLiteral = ''; // objectToEnvExports(env);
11
11
  const completeCommand = `${envLiteral} ${dlx} ${command}`.trim();
12
12
  devkit_1.logger.info(completeCommand);
13
- const [program, ...args] = completeCommand.trim().split(' ');
14
- const result = (0, child_process_1.spawnSync)(program, args, { stdio: 'inherit', env });
15
- if (result.error) {
16
- throw new Error(`Command failed: ${completeCommand}. Error: ${result.error.message}`);
13
+ try {
14
+ // Use execSync instead of spawnSync for better shell command support
15
+ (0, child_process_1.execSync)(completeCommand, {
16
+ stdio: 'inherit',
17
+ env: Object.assign(Object.assign({}, process.env), env)
18
+ });
17
19
  }
18
- if (result.status !== 0) {
19
- throw new Error(`Command failed with exit code ${result.status}: ${completeCommand}`);
20
+ catch (error) {
21
+ throw new Error(`Command failed: ${completeCommand}. Error: ${error.message}`);
20
22
  }
21
- return result;
22
- // execSync(completeCommand, {stdio: 'inherit', env});
23
23
  }
24
24
  function pmxExec(context, command) {
25
25
  const { dlx } = (0, pm_function_1.pm)(context);
@@ -1 +1 @@
1
- {"version":3,"file":"pmx.function.js","sourceRoot":"","sources":["../../../../onix/src/functions/pmx.function.ts"],"names":[],"mappings":";;AAQA,4BAuBC;AAED,0BAQC;AAzCD,uCAGoB;AACpB,iDAAoD;AACpD,+CAAmC;AAGnC,SAAgB,QAAQ,CAAC,OAAwB,EAAE,OAAe,EAAE,MAA2B,EAAE;IAC7F,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAE,EAAC,OAAO,CAAC,CAAC;IAE5B,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,2BAA2B;IAElD,MAAM,eAAe,GAAG,GAAG,UAAU,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;IAEjE,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE7B,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,eAAe,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,MAAM,CAAC;IACd,sDAAsD;AAC1D,CAAC;AAED,SAAgB,OAAO,CAAC,OAAwB,EAAE,OAAe;IAC7D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAE,EAAC,OAAO,CAAC,CAAC;IAE5B,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAE5C,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE7B,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"pmx.function.js","sourceRoot":"","sources":["../../../../onix/src/functions/pmx.function.ts"],"names":[],"mappings":";;AAQA,4BAkBC;AAED,0BAQC;AApCD,uCAGoB;AACpB,iDAAoD;AACpD,+CAAmC;AAGnC,SAAgB,QAAQ,CAAC,OAAwB,EAAE,OAAe,EAAE,MAA2B,EAAE;IAC7F,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAE,EAAC,OAAO,CAAC,CAAC;IAE5B,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,2BAA2B;IAElD,MAAM,eAAe,GAAG,GAAG,UAAU,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;IAEjE,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE7B,IAAI,CAAC;QACD,qEAAqE;QACrE,IAAA,wBAAQ,EAAC,eAAe,EAAE;YACtB,KAAK,EAAE,SAAS;YAChB,GAAG,kCAAO,OAAO,CAAC,GAAG,GAAK,GAAG,CAAE;SAClC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,eAAe,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACL,CAAC;AAED,SAAgB,OAAO,CAAC,OAAwB,EAAE,OAAe;IAC7D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,gBAAE,EAAC,OAAO,CAAC,CAAC;IAE5B,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAE5C,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE7B,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACpD,CAAC"}