@morphql/core 0.1.3
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/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/cache-DDvLhPfR.d.cts +16 -0
- package/dist/cache-DDvLhPfR.d.ts +16 -0
- package/dist/cache-services/index.cjs +2 -0
- package/dist/cache-services/index.cjs.map +1 -0
- package/dist/cache-services/index.d.cts +50 -0
- package/dist/cache-services/index.d.ts +50 -0
- package/dist/cache-services/index.js +2 -0
- package/dist/cache-services/index.js.map +1 -0
- package/dist/index.cjs +64 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +31 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/package.json +85 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniele Traverso
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# @morphql/core
|
|
2
|
+
|
|
3
|
+
A high-performance, isomorphic Query-to-Code engine. It provides the **Morph Query Language** (MorphQL) to transform structural data (JSON, XML, or Objects) by compiling queries into specialized, pure JavaScript functions.
|
|
4
|
+
|
|
5
|
+
## Key Features
|
|
6
|
+
|
|
7
|
+
- 🚀 **Performance**: Compiles DSL to native JS for maximum execution speed.
|
|
8
|
+
- 🌐 **Isomorphic**: Runs seamlessly in Node.js and the Browser.
|
|
9
|
+
- 🧩 **Format Agnostic**: Input and output can be JSON, XML, or raw Objects.
|
|
10
|
+
- ➗ **Expressions**: Support for arithmetic, string concatenation, and unary minus.
|
|
11
|
+
- 🔀 **Conditional Logic**: `if` function with comparison and logical operators.
|
|
12
|
+
- 🔄 **Structural Mapping**: Easy handling of nested objects and arrays (`multiple`).
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @morphql/core
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { compile } from '@morphql/core';
|
|
24
|
+
|
|
25
|
+
const query = `
|
|
26
|
+
from json to xml
|
|
27
|
+
transform
|
|
28
|
+
set fullName = firstName + " " + lastName
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
const engine = await compile(query);
|
|
32
|
+
const result = engine({ firstName: 'John', lastName: 'Doe' });
|
|
33
|
+
// <root><fullName>John Doe</fullName></root>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
For full documentation of the Morph Query Language, see the [main repository README](https://github.com/Hyperwindmill/morphql).
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
MIT
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface MorphQLCache {
|
|
2
|
+
/**
|
|
3
|
+
* Retrieve cached code for a given query.
|
|
4
|
+
* @param query The source query string.
|
|
5
|
+
* @returns The cached Javascript code, or null if not found.
|
|
6
|
+
*/
|
|
7
|
+
retrieve(query: string): Promise<string | null>;
|
|
8
|
+
/**
|
|
9
|
+
* Save code to the cache.
|
|
10
|
+
* @param query The source query string.
|
|
11
|
+
* @param code The generated Javascript code.
|
|
12
|
+
*/
|
|
13
|
+
save(query: string, code: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type { MorphQLCache as M };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface MorphQLCache {
|
|
2
|
+
/**
|
|
3
|
+
* Retrieve cached code for a given query.
|
|
4
|
+
* @param query The source query string.
|
|
5
|
+
* @returns The cached Javascript code, or null if not found.
|
|
6
|
+
*/
|
|
7
|
+
retrieve(query: string): Promise<string | null>;
|
|
8
|
+
/**
|
|
9
|
+
* Save code to the cache.
|
|
10
|
+
* @param query The source query string.
|
|
11
|
+
* @param code The generated Javascript code.
|
|
12
|
+
*/
|
|
13
|
+
save(query: string, code: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type { MorphQLCache as M };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var a=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var s=class{client;prefix;ttl;constructor(t={}){this.prefix=t.prefix??"morphql:",this.ttl=t.ttl;try{let e=a("ioredis");this.client=new e({host:t.host??"localhost",port:t.port??6379,lazyConnect:!0});}catch{throw new Error('RedisCache requires "ioredis" package. Install it with: npm install ioredis')}}getKey(t){let e=0;for(let i=0;i<t.length;i++){let n=t.charCodeAt(i);e=(e<<5)-e+n,e|=0;}return `${this.prefix}${e.toString(16)}`}async retrieve(t){let e=this.getKey(t);return this.client.get(e)}async save(t,e){let i=this.getKey(t);this.ttl?await this.client.set(i,e,"EX",this.ttl):await this.client.set(i,e);}async ping(){try{return await this.client.ping()==="PONG"}catch{return false}}async disconnect(){await this.client.quit();}};exports.RedisCache=s;//# sourceMappingURL=index.cjs.map
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cache-services/redis-cache.ts"],"names":["RedisCache","options","Redis","query","hash","char","key","code"],"mappings":"aA6BO,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,OAAA,KAAA,CAAA,GAAA,CAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA,GAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,MAAA,KAAA,CAAA,sBAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,CAAA,IAAMA,EAAN,KAAyC,CACtC,MAAA,CACA,MAAA,CACA,IAER,WAAA,CAAYC,CAAAA,CAA6B,EAAC,CAAG,CAC3C,IAAA,CAAK,MAAA,CAASA,EAAQ,MAAA,EAAU,UAAA,CAChC,KAAK,GAAA,CAAMA,CAAAA,CAAQ,GAAA,CAGnB,GAAI,CAEF,IAAMC,CAAAA,CAAQ,CAAA,CAAQ,SAAS,EAC/B,IAAA,CAAK,MAAA,CAAS,IAAIA,CAAAA,CAAM,CACtB,IAAA,CAAMD,CAAAA,CAAQ,MAAQ,WAAA,CACtB,IAAA,CAAMA,EAAQ,IAAA,EAAQ,IAAA,CACtB,WAAA,CAAa,CAAA,CACf,CAAC,EACH,CAAA,KAAQ,CACN,MAAM,IAAI,KAAA,CACR,6EACF,CACF,CACF,CAKQ,MAAA,CAAOE,CAAAA,CAAuB,CACpC,IAAIC,CAAAA,CAAO,EACX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAID,EAAM,MAAA,CAAQ,CAAA,EAAA,CAAK,CACrC,IAAME,CAAAA,CAAOF,EAAM,UAAA,CAAW,CAAC,CAAA,CAC/BC,CAAAA,CAAAA,CAAQA,GAAQ,CAAA,EAAKA,CAAAA,CAAOC,EAC5BD,CAAAA,EAAQ,EACV,CACA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,GAAGA,CAAAA,CAAK,QAAA,CAAS,EAAE,CAAC,EAC3C,CAEA,MAAM,QAAA,CAASD,CAAAA,CAAuC,CACpD,IAAMG,CAAAA,CAAM,KAAK,MAAA,CAAOH,CAAK,EAC7B,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIG,CAAG,CAC5B,CAEA,MAAM,IAAA,CAAKH,EAAeI,CAAAA,CAA6B,CACrD,IAAMD,CAAAA,CAAM,KAAK,MAAA,CAAOH,CAAK,EACzB,IAAA,CAAK,GAAA,CACP,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIG,CAAAA,CAAKC,EAAM,IAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAE/C,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAID,CAAAA,CAAKC,CAAI,EAEnC,CAKA,MAAM,IAAA,EAAyB,CAC7B,GAAI,CAEF,OADY,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK,GACpB,MACjB,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAKA,MAAM,YAA4B,CAChC,MAAM,KAAK,MAAA,CAAO,IAAA,GACpB,CACF","file":"index.cjs","sourcesContent":["import type { MorphQLCache } from '../runtime/cache.js';\n\n/**\n * Configuration options for the Redis cache.\n */\nexport interface RedisCacheOptions {\n /** Redis host. Default: 'localhost' */\n host?: string;\n /** Redis port. Default: 6379 */\n port?: number;\n /** Key prefix for all cached queries. Default: 'morphql:' */\n prefix?: string;\n /** TTL in seconds. Default: undefined (no expiration) */\n ttl?: number;\n}\n\n/**\n * Redis-backed implementation of MorphQLCache.\n * Requires `ioredis` as a peer dependency.\n *\n * @example\n * ```typescript\n * import { compile } from '@morphql/core';\n * import { RedisCache } from '@morphql/core/cache-services';\n *\n * const cache = new RedisCache({ host: 'localhost', port: 6379 });\n * const engine = await compile(query, { cache });\n * ```\n */\nexport class RedisCache implements MorphQLCache {\n private client: any;\n private prefix: string;\n private ttl?: number;\n\n constructor(options: RedisCacheOptions = {}) {\n this.prefix = options.prefix ?? 'morphql:';\n this.ttl = options.ttl;\n\n // Dynamic import to keep ioredis as optional peer dependency\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const Redis = require('ioredis');\n this.client = new Redis({\n host: options.host ?? 'localhost',\n port: options.port ?? 6379,\n lazyConnect: true,\n });\n } catch {\n throw new Error(\n 'RedisCache requires \"ioredis\" package. Install it with: npm install ioredis'\n );\n }\n }\n\n /**\n * Generate a cache key from the query string using a simple hash.\n */\n private getKey(query: string): string {\n let hash = 0;\n for (let i = 0; i < query.length; i++) {\n const char = query.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash |= 0; // Convert to 32bit integer\n }\n return `${this.prefix}${hash.toString(16)}`;\n }\n\n async retrieve(query: string): Promise<string | null> {\n const key = this.getKey(query);\n return this.client.get(key);\n }\n\n async save(query: string, code: string): Promise<void> {\n const key = this.getKey(query);\n if (this.ttl) {\n await this.client.set(key, code, 'EX', this.ttl);\n } else {\n await this.client.set(key, code);\n }\n }\n\n /**\n * Check if the Redis connection is alive.\n */\n async ping(): Promise<boolean> {\n try {\n const res = await this.client.ping();\n return res === 'PONG';\n } catch {\n return false;\n }\n }\n\n /**\n * Close the Redis connection.\n */\n async disconnect(): Promise<void> {\n await this.client.quit();\n }\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { M as MorphQLCache } from '../cache-DDvLhPfR.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for the Redis cache.
|
|
5
|
+
*/
|
|
6
|
+
interface RedisCacheOptions {
|
|
7
|
+
/** Redis host. Default: 'localhost' */
|
|
8
|
+
host?: string;
|
|
9
|
+
/** Redis port. Default: 6379 */
|
|
10
|
+
port?: number;
|
|
11
|
+
/** Key prefix for all cached queries. Default: 'morphql:' */
|
|
12
|
+
prefix?: string;
|
|
13
|
+
/** TTL in seconds. Default: undefined (no expiration) */
|
|
14
|
+
ttl?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Redis-backed implementation of MorphQLCache.
|
|
18
|
+
* Requires `ioredis` as a peer dependency.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { compile } from '@morphql/core';
|
|
23
|
+
* import { RedisCache } from '@morphql/core/cache-services';
|
|
24
|
+
*
|
|
25
|
+
* const cache = new RedisCache({ host: 'localhost', port: 6379 });
|
|
26
|
+
* const engine = await compile(query, { cache });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare class RedisCache implements MorphQLCache {
|
|
30
|
+
private client;
|
|
31
|
+
private prefix;
|
|
32
|
+
private ttl?;
|
|
33
|
+
constructor(options?: RedisCacheOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Generate a cache key from the query string using a simple hash.
|
|
36
|
+
*/
|
|
37
|
+
private getKey;
|
|
38
|
+
retrieve(query: string): Promise<string | null>;
|
|
39
|
+
save(query: string, code: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Check if the Redis connection is alive.
|
|
42
|
+
*/
|
|
43
|
+
ping(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Close the Redis connection.
|
|
46
|
+
*/
|
|
47
|
+
disconnect(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { RedisCache, type RedisCacheOptions };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { M as MorphQLCache } from '../cache-DDvLhPfR.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for the Redis cache.
|
|
5
|
+
*/
|
|
6
|
+
interface RedisCacheOptions {
|
|
7
|
+
/** Redis host. Default: 'localhost' */
|
|
8
|
+
host?: string;
|
|
9
|
+
/** Redis port. Default: 6379 */
|
|
10
|
+
port?: number;
|
|
11
|
+
/** Key prefix for all cached queries. Default: 'morphql:' */
|
|
12
|
+
prefix?: string;
|
|
13
|
+
/** TTL in seconds. Default: undefined (no expiration) */
|
|
14
|
+
ttl?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Redis-backed implementation of MorphQLCache.
|
|
18
|
+
* Requires `ioredis` as a peer dependency.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { compile } from '@morphql/core';
|
|
23
|
+
* import { RedisCache } from '@morphql/core/cache-services';
|
|
24
|
+
*
|
|
25
|
+
* const cache = new RedisCache({ host: 'localhost', port: 6379 });
|
|
26
|
+
* const engine = await compile(query, { cache });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare class RedisCache implements MorphQLCache {
|
|
30
|
+
private client;
|
|
31
|
+
private prefix;
|
|
32
|
+
private ttl?;
|
|
33
|
+
constructor(options?: RedisCacheOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Generate a cache key from the query string using a simple hash.
|
|
36
|
+
*/
|
|
37
|
+
private getKey;
|
|
38
|
+
retrieve(query: string): Promise<string | null>;
|
|
39
|
+
save(query: string, code: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Check if the Redis connection is alive.
|
|
42
|
+
*/
|
|
43
|
+
ping(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Close the Redis connection.
|
|
46
|
+
*/
|
|
47
|
+
disconnect(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { RedisCache, type RedisCacheOptions };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var s=class{client;prefix;ttl;constructor(t={}){this.prefix=t.prefix??"morphql:",this.ttl=t.ttl;try{let e=a("ioredis");this.client=new e({host:t.host??"localhost",port:t.port??6379,lazyConnect:!0});}catch{throw new Error('RedisCache requires "ioredis" package. Install it with: npm install ioredis')}}getKey(t){let e=0;for(let i=0;i<t.length;i++){let n=t.charCodeAt(i);e=(e<<5)-e+n,e|=0;}return `${this.prefix}${e.toString(16)}`}async retrieve(t){let e=this.getKey(t);return this.client.get(e)}async save(t,e){let i=this.getKey(t);this.ttl?await this.client.set(i,e,"EX",this.ttl):await this.client.set(i,e);}async ping(){try{return await this.client.ping()==="PONG"}catch{return false}}async disconnect(){await this.client.quit();}};export{s as RedisCache};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cache-services/redis-cache.ts"],"names":["RedisCache","options","Redis","query","hash","char","key","code"],"mappings":"AA6BO,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,OAAA,KAAA,CAAA,GAAA,CAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA,GAAA,OAAA,OAAA,CAAA,GAAA,CAAA,OAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,MAAA,KAAA,CAAA,sBAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,CAAA,IAAMA,EAAN,KAAyC,CACtC,MAAA,CACA,MAAA,CACA,IAER,WAAA,CAAYC,CAAAA,CAA6B,EAAC,CAAG,CAC3C,IAAA,CAAK,MAAA,CAASA,EAAQ,MAAA,EAAU,UAAA,CAChC,KAAK,GAAA,CAAMA,CAAAA,CAAQ,GAAA,CAGnB,GAAI,CAEF,IAAMC,CAAAA,CAAQ,CAAA,CAAQ,SAAS,EAC/B,IAAA,CAAK,MAAA,CAAS,IAAIA,CAAAA,CAAM,CACtB,IAAA,CAAMD,CAAAA,CAAQ,MAAQ,WAAA,CACtB,IAAA,CAAMA,EAAQ,IAAA,EAAQ,IAAA,CACtB,WAAA,CAAa,CAAA,CACf,CAAC,EACH,CAAA,KAAQ,CACN,MAAM,IAAI,KAAA,CACR,6EACF,CACF,CACF,CAKQ,MAAA,CAAOE,CAAAA,CAAuB,CACpC,IAAIC,CAAAA,CAAO,EACX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAID,EAAM,MAAA,CAAQ,CAAA,EAAA,CAAK,CACrC,IAAME,CAAAA,CAAOF,EAAM,UAAA,CAAW,CAAC,CAAA,CAC/BC,CAAAA,CAAAA,CAAQA,GAAQ,CAAA,EAAKA,CAAAA,CAAOC,EAC5BD,CAAAA,EAAQ,EACV,CACA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,GAAGA,CAAAA,CAAK,QAAA,CAAS,EAAE,CAAC,EAC3C,CAEA,MAAM,QAAA,CAASD,CAAAA,CAAuC,CACpD,IAAMG,CAAAA,CAAM,KAAK,MAAA,CAAOH,CAAK,EAC7B,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIG,CAAG,CAC5B,CAEA,MAAM,IAAA,CAAKH,EAAeI,CAAAA,CAA6B,CACrD,IAAMD,CAAAA,CAAM,KAAK,MAAA,CAAOH,CAAK,EACzB,IAAA,CAAK,GAAA,CACP,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIG,CAAAA,CAAKC,EAAM,IAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAE/C,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAID,CAAAA,CAAKC,CAAI,EAEnC,CAKA,MAAM,IAAA,EAAyB,CAC7B,GAAI,CAEF,OADY,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK,GACpB,MACjB,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAKA,MAAM,YAA4B,CAChC,MAAM,KAAK,MAAA,CAAO,IAAA,GACpB,CACF","file":"index.js","sourcesContent":["import type { MorphQLCache } from '../runtime/cache.js';\n\n/**\n * Configuration options for the Redis cache.\n */\nexport interface RedisCacheOptions {\n /** Redis host. Default: 'localhost' */\n host?: string;\n /** Redis port. Default: 6379 */\n port?: number;\n /** Key prefix for all cached queries. Default: 'morphql:' */\n prefix?: string;\n /** TTL in seconds. Default: undefined (no expiration) */\n ttl?: number;\n}\n\n/**\n * Redis-backed implementation of MorphQLCache.\n * Requires `ioredis` as a peer dependency.\n *\n * @example\n * ```typescript\n * import { compile } from '@morphql/core';\n * import { RedisCache } from '@morphql/core/cache-services';\n *\n * const cache = new RedisCache({ host: 'localhost', port: 6379 });\n * const engine = await compile(query, { cache });\n * ```\n */\nexport class RedisCache implements MorphQLCache {\n private client: any;\n private prefix: string;\n private ttl?: number;\n\n constructor(options: RedisCacheOptions = {}) {\n this.prefix = options.prefix ?? 'morphql:';\n this.ttl = options.ttl;\n\n // Dynamic import to keep ioredis as optional peer dependency\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const Redis = require('ioredis');\n this.client = new Redis({\n host: options.host ?? 'localhost',\n port: options.port ?? 6379,\n lazyConnect: true,\n });\n } catch {\n throw new Error(\n 'RedisCache requires \"ioredis\" package. Install it with: npm install ioredis'\n );\n }\n }\n\n /**\n * Generate a cache key from the query string using a simple hash.\n */\n private getKey(query: string): string {\n let hash = 0;\n for (let i = 0; i < query.length; i++) {\n const char = query.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash |= 0; // Convert to 32bit integer\n }\n return `${this.prefix}${hash.toString(16)}`;\n }\n\n async retrieve(query: string): Promise<string | null> {\n const key = this.getKey(query);\n return this.client.get(key);\n }\n\n async save(query: string, code: string): Promise<void> {\n const key = this.getKey(query);\n if (this.ttl) {\n await this.client.set(key, code, 'EX', this.ttl);\n } else {\n await this.client.set(key, code);\n }\n }\n\n /**\n * Check if the Redis connection is alive.\n */\n async ping(): Promise<boolean> {\n try {\n const res = await this.client.ping();\n return res === 'PONG';\n } catch {\n return false;\n }\n }\n\n /**\n * Close the Redis connection.\n */\n async disconnect(): Promise<void> {\n await this.client.quit();\n }\n}\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';var chevrotain=require('chevrotain'),fastXmlParser=require('fast-xml-parser'),ft=require('js-beautify');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ft__default=/*#__PURE__*/_interopDefault(ft);var at=chevrotain.createToken({name:"WhiteSpace",pattern:/\s+/,group:chevrotain.Lexer.SKIPPED}),ht=chevrotain.createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:chevrotain.Lexer.SKIPPED}),ut=chevrotain.createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:chevrotain.Lexer.SKIPPED}),u=chevrotain.createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=chevrotain.createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=chevrotain.createToken({name:"From",pattern:/from/i,longer_alt:u}),d=chevrotain.createToken({name:"To",pattern:/to/i,longer_alt:u}),A=chevrotain.createToken({name:"Transform",pattern:/transform/i,longer_alt:u}),N=chevrotain.createToken({name:"Set",pattern:/set/i,longer_alt:u}),B=chevrotain.createToken({name:"Section",pattern:/section/i,longer_alt:u}),C=chevrotain.createToken({name:"Multiple",pattern:/multiple/i,longer_alt:u}),v=chevrotain.createToken({name:"Clone",pattern:/clone/i,longer_alt:u}),M=chevrotain.createToken({name:"Delete",pattern:/delete/i,longer_alt:u}),q=chevrotain.createToken({name:"Define",pattern:/define/i,longer_alt:u}),w=chevrotain.createToken({name:"Modify",pattern:/modify/i,longer_alt:u}),y=chevrotain.createToken({name:"If",pattern:/if/i,longer_alt:u}),P=chevrotain.createToken({name:"Else",pattern:/else/i,longer_alt:u}),b=chevrotain.createToken({name:"EqualsEquals",pattern:/==/}),I=chevrotain.createToken({name:"EqualsEqualsEquals",pattern:/===/}),_=chevrotain.createToken({name:"NotEquals",pattern:/!=/}),x=chevrotain.createToken({name:"NotEqualsEquals",pattern:/!==/}),F=chevrotain.createToken({name:"LessThanOrEqual",pattern:/<=/}),D=chevrotain.createToken({name:"GreaterThanOrEqual",pattern:/>=/}),j=chevrotain.createToken({name:"LessThan",pattern:/</}),z=chevrotain.createToken({name:"GreaterThan",pattern:/>/}),W=chevrotain.createToken({name:"And",pattern:/&&/}),G=chevrotain.createToken({name:"Or",pattern:/\|\|/}),Y=chevrotain.createToken({name:"Not",pattern:/!/}),f=chevrotain.createToken({name:"Equals",pattern:/=/}),Q=chevrotain.createToken({name:"Plus",pattern:/\+/}),R=chevrotain.createToken({name:"Minus",pattern:/-/}),k=chevrotain.createToken({name:"Times",pattern:/\*/}),V=chevrotain.createToken({name:"Divide",pattern:/\//}),l=chevrotain.createToken({name:"LParen",pattern:/\(/}),c=chevrotain.createToken({name:"RParen",pattern:/\)/}),$=chevrotain.createToken({name:"Comma",pattern:/,/}),T=chevrotain.createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),K=chevrotain.createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),H=[at,ht,ut,L,d,A,N,B,C,v,M,q,w,y,P,I,b,x,_,F,D,W,G,f,j,z,Y,Q,R,k,V,l,c,$,T,K,O,u],rt=new chevrotain.Lexer(H);var J=class extends chevrotain.CstParser{constructor(){super(H),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(A),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(l),this.CONSUME(T,{LABEL:"parameter"}),this.CONSUME(c);});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(u)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(T)},{ALT:()=>this.CONSUME(K)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(y),this.CONSUME(l),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(l),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(l),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(N),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(W),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(b,{LABEL:"ops"})},{ALT:()=>this.CONSUME(I,{LABEL:"ops"})},{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(k,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Y,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===l,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(l),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(u,{LABEL:"name"})},{ALT:()=>this.CONSUME(y,{LABEL:"name"})}]),this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(B),this.OPTION(()=>{this.CONSUME(C);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(l),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(A,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new J;var it={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[s,o]=[e,2];s=[...Array(Math.ceil(s.length/o))].map(a=>s.splice(0,o)).map(([a,h])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${h||"null"}`}),i=","+s.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,s=e!==void 0?e:'""',o=i!==void 0?`, ${i}`:"";return `String(${t}).split(${s}${o})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var pt=E.getBaseCstVisitorConstructor(),X=class extends pt{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let s=this.visit(t);return this.readFrom=i,s}query(t){let e=t.action?t.action.map(m=>this.visit(m)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),s=this.visit(t.targetType),o=i.name,a=s.name,h=s.parameter?`'${s.parameter}'`:"undefined";return {code:`
|
|
2
|
+
return function(input, env) {
|
|
3
|
+
// 1. Parse Input
|
|
4
|
+
const source = env.parse('${o}', input);
|
|
5
|
+
const _rootSource = source;
|
|
6
|
+
|
|
7
|
+
// 2. Transform
|
|
8
|
+
const target = {};
|
|
9
|
+
const _rootTarget = target;
|
|
10
|
+
${e.join(`
|
|
11
|
+
`)}
|
|
12
|
+
|
|
13
|
+
// 3. Serialize Output
|
|
14
|
+
return env.serialize('${a}', target ${h!=="undefined"?`, { rootGenerated: ${h} }`:""} );
|
|
15
|
+
}
|
|
16
|
+
`,sourceType:i,targetType:s}}typeFormat(t){let e=this.visit(t.name),i;return t.parameter&&(i=t.parameter[0].image.slice(1,-1)),{name:e.name,parameter:i}}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(o=>this.visit(o)).join(`
|
|
17
|
+
`):"",s=t.elseActions?`else { ${t.elseActions.map(o=>this.visit(o)).join(`
|
|
18
|
+
`)} }`:"";return `if (${e}) {
|
|
19
|
+
${i}
|
|
20
|
+
} ${s}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
|
|
21
|
+
`):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} || ${s}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} && ${s}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,s=this.visit(t.rhs[0]);e=`${e} ${i} ${s}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),s=t.args?t.args.map(a=>this.visit(a)):[],o=it[i];if(o)return o(s);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let s=this.genAccess("target",e),o=t.followPath?this.visit(t.followPath):e;o.name==="parent"?"":"."+o.name;let h=o.name==="parent"?"source":this.genAccess("source",o),p=!!t.Multiple,m=t.action?t.action.map(g=>this.visit(g)):[];if(!!t.subqueryFrom){let g=this.visit(t.subquerySourceType),U=this.visit(t.subqueryTargetType);t.subqueryTransform||m.push("Object.assign(target, source);");let et=U.parameter?`, { rootGenerated: "${U.parameter}" }`:"";return p?`
|
|
22
|
+
if (${h} && Array.isArray(${h})) {
|
|
23
|
+
${s} = ${h}.map(item => {
|
|
24
|
+
const subSource = env.parse('${g.name}', item);
|
|
25
|
+
const source = subSource;
|
|
26
|
+
const target = {};
|
|
27
|
+
${m.join(`
|
|
28
|
+
`)}
|
|
29
|
+
return env.serialize('${U.name}', target${et});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
`:`
|
|
33
|
+
if (${h}) {
|
|
34
|
+
${s} = (function(innerSource) {
|
|
35
|
+
const subSource = env.parse('${g.name}', innerSource);
|
|
36
|
+
const source = subSource;
|
|
37
|
+
const target = {};
|
|
38
|
+
${m.join(`
|
|
39
|
+
`)}
|
|
40
|
+
return env.serialize('${U.name}', target${et});
|
|
41
|
+
})(${h});
|
|
42
|
+
}
|
|
43
|
+
`}return p?`
|
|
44
|
+
if (${h} && Array.isArray(${h})) {
|
|
45
|
+
${s} = ${h}.map(item => {
|
|
46
|
+
const source = item;
|
|
47
|
+
const target = {};
|
|
48
|
+
${m.join(`
|
|
49
|
+
`)}
|
|
50
|
+
return target;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
`:`
|
|
54
|
+
if (${h}) {
|
|
55
|
+
${s} = (function(innerSource) {
|
|
56
|
+
const source = innerSource;
|
|
57
|
+
const target = {};
|
|
58
|
+
${m.join(`
|
|
59
|
+
`)}
|
|
60
|
+
return target;
|
|
61
|
+
})(${h});
|
|
62
|
+
}
|
|
63
|
+
`}},st=new X;var nt={};function Z(r,t){nt[r.toLowerCase()]=t;}function tt(r){let t=nt[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}Z("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var Lt=new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});Z("xml",{parse:r=>typeof r!="string"?r:new fastXmlParser.XMLParser({ignoreAttributes:false,removeNSPrefix:true}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??"root";return Lt.build({[e]:r})}});Z("object",{parse:r=>r,serialize:r=>r});async function wt(r,t){if(t?.cache){let a=await t.cache.retrieve(r);if(a)return ot(a)}let e=rt.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:s}=st.visit(i),o=ft__default.default.js(s,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,o),ot(o)}function ot(r){let e=new Function(r)(),i={parse:(o,a)=>tt(o).parse(a),serialize:(o,a,h)=>tt(o).serialize(a,h)},s=(o=>e(o,i));return s.code=r,s}function Pt(r,...t){return r.reduce((e,i,s)=>e+i+(t[s]??""),"")}function bt(r){return `Hello, ${r}! The Morph engine is ready.`}exports.compile=wt;exports.greet=bt;exports.morphQL=Pt;//# sourceMappingURL=index.cjs.map
|
|
64
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","targetParam","id","parameter","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subTargetParam","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","options","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"uOAEO,IAAMA,EAAAA,CAAaC,sBAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,KAAA,CACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAGYC,EAAAA,CAAcF,sBAAAA,CAAY,CACrC,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,cAAA,CACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAEYE,EAAAA,CAAeH,sBAAAA,CAAY,CACtC,IAAA,CAAM,cAAA,CACN,OAAA,CAAS,kBAAA,CACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAEYG,CAAAA,CAAaJ,sBAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,8BACX,CAAC,CAAA,CAEYK,CAAAA,CAAmBL,sBAAAA,CAAY,CAC1C,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,iBACX,CAAC,CAAA,CAEYM,CAAAA,CAAON,uBAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC7EG,CAAAA,CAAKP,sBAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEI,CAAAA,CAAYR,sBAAAA,CAAY,CACnC,IAAA,CAAM,WAAA,CACN,OAAA,CAAS,YAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYK,CAAAA,CAAMT,uBAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,MAAA,CAAQ,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC1EM,CAAAA,CAAUV,sBAAAA,CAAY,CACjC,IAAA,CAAM,SAAA,CACN,OAAA,CAAS,UAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYO,CAAAA,CAAWX,sBAAAA,CAAY,CAClC,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,WAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYQ,CAAAA,CAAQZ,uBAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,QAAA,CAAU,UAAA,CAAYI,CAAW,CAAC,CAAA,CAChFS,CAAAA,CAASb,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFU,CAAAA,CAASd,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFW,CAAAA,CAASf,uBAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFY,CAAAA,CAAKhB,sBAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEa,CAAAA,CAAOjB,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAG7Ec,CAAAA,CAAelB,uBAAY,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS,IAAK,CAAC,CAAA,CAClEmB,CAAAA,CAAqBnB,sBAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,KAAM,CAAC,CAAA,CAC/EoB,CAAAA,CAAYpB,sBAAAA,CAAY,CAAE,IAAA,CAAM,WAAA,CAAa,OAAA,CAAS,IAAK,CAAC,CAAA,CAC5DqB,CAAAA,CAAkBrB,sBAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,KAAM,CAAC,CAAA,CACzEsB,CAAAA,CAAkBtB,sBAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,IAAK,CAAC,CAAA,CACxEuB,CAAAA,CAAqBvB,sBAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,IAAK,CAAC,CAAA,CAC9EwB,CAAAA,CAAWxB,sBAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,GAAI,CAAC,CAAA,CACzDyB,CAAAA,CAAczB,sBAAAA,CAAY,CAAE,IAAA,CAAM,cAAe,OAAA,CAAS,GAAI,CAAC,CAAA,CAG/D0B,CAAAA,CAAM1B,sBAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,IAAK,CAAC,CAAA,CAChD2B,CAAAA,CAAK3B,sBAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,MAAO,CAAC,CAAA,CAChD4B,CAAAA,CAAM5B,sBAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,GAAI,CAAC,CAAA,CAE/C6B,CAAAA,CAAS7B,uBAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,GAAI,CAAC,CAAA,CACrD8B,CAAAA,CAAO9B,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,IAAK,CAAC,CAAA,CAClD+B,CAAAA,CAAQ/B,sBAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,GAAI,CAAC,CAAA,CACnDgC,CAAAA,CAAQhC,sBAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,IAAK,CAAC,CAAA,CACpDiC,CAAAA,CAASjC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDkC,CAAAA,CAASlC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDmC,CAAAA,CAASnC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDoC,CAAAA,CAAQpC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAS,OAAA,CAAS,GAAI,CAAC,CAAA,CAEnDqC,CAAAA,CAAgBrC,sBAAAA,CAAY,CACvC,IAAA,CAAM,eAAA,CACN,OAAA,CAAS,qCACX,CAAC,CAAA,CAEYsC,CAAAA,CAAiBtC,sBAAAA,CAAY,CACxC,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,kCACX,CAAC,CAAA,CAEYuC,CAAAA,CAAY,CACvBxC,EAAAA,CACAG,EAAAA,CACAC,EAAAA,CACAG,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEAE,CAAAA,CACAD,CAAAA,CACAG,CAAAA,CACAD,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACAC,CAAAA,CAEAE,CAAAA,CACAL,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAjC,CAAAA,CACAD,CACF,CAAA,CAEaoC,EAAAA,CAAa,IAAIvC,iBAAMsC,CAAS,CAAA,CClItC,IAAME,CAAAA,CAAN,cAA0BC,oBAAU,CACzC,WAAA,EAAc,CACZ,KAAA,CAAQH,CAAS,CAAA,CACjB,IAAA,CAAK,mBAAA,GACP,CAEO,KAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS,IAAM,CACtC,IAAA,CAAK,OAAA,CAAUjC,CAAI,CAAA,CACnB,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACrD,IAAA,CAAK,OAAA,CAAUC,CAAE,CAAA,CACjB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACtD,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAS,CAAA,CACxB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,EACH,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,QAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAU0B,CAAM,CAAA,CACrB,IAAA,CAAK,QAAUG,CAAAA,CAAe,CAAE,KAAA,CAAO,WAAY,CAAC,CAAA,CACpD,IAAA,CAAK,OAAA,CAAUF,CAAM,EACvB,CAAC,EACH,CAAC,CAAA,CAEO,aAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,eAAA,CAAiB,IAAM,CACvD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAU/B,CAAU,CAAE,CAAA,CACxC,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAgB,CAAE,CAChD,CAAC,EACH,CAAC,CAAA,CAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUgC,CAAa,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAc,CAAE,CAC9C,CAAC,EACH,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,EAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAE,CAAA,CAC5C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAE,CAAA,CAC1C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAQ,CAAE,CAAA,CACzC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,CAC7C,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUzB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,OAAQ,CAAC,EACrD,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,OAAA,CAAUG,CAAE,CAAA,CACjB,IAAA,CAAK,OAAA,CAAUkB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,WAAY,CAAC,CAAA,CACpD,IAAA,CAAK,OAAA,CAAUC,CAAM,CAAA,CACrB,IAAA,CAAK,SAAWD,CAAM,CAAA,CACtB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACpD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAWC,CAAM,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUlB,CAAI,CAAA,CACnB,IAAA,CAAK,QAAA,CAAWiB,CAAM,EACtB,IAAA,CAAK,KAAA,CAAM,IAAM,CACf,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACrD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAWC,CAAM,EACxB,CAAC,EACH,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,OAAA,CAAUvB,CAAK,EACpB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUsB,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,QAAS,CAAC,EACtD,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,EACH,CAAC,CAAA,CAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,OAAA,CAAU1B,CAAG,CAAA,CAClB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUoB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUd,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUc,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,MAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,EAC7B,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EAC9C,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUF,CAAE,CAAA,CACjB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,MAAO,KAAM,CAAC,CAAA,CAC9C,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUD,CAAG,CAAA,CAClB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAC5C,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUR,CAAAA,CAAc,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC5D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,MAAO,KAAM,CAAC,CAAE,CAAA,CAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACzD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,EAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACxD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAa,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAC7D,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,EAC/C,CAAC,EACH,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,OAAA,CAAQ,KAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAClD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUK,CAAAA,CAAM,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACpD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,MAAO,KAAM,CAAC,CAAE,CACvD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,EACrD,CAAC,EACH,CAAC,CAAA,CAEO,cAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAkB,IAAM,CACzD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CACnD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACrD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAQ,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CACxD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,EACtD,CAAC,EACH,CAAC,CAAA,CAEO,eAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAmB,IAAM,CAC3D,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUF,EAAO,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CAAA,CACtD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUH,CAAAA,CAAK,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACtD,CAAC,EACH,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,IAAA,CAAK,SAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CACE,IAAA,CAAM,IAAM,IAAA,CAAK,EAAA,CAAG,CAAC,CAAA,CAAE,SAAA,GAAgBM,CAAAA,CACvC,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,YAAY,CAC3C,CAAA,CACA,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAE,CAAA,CAC9C,CACE,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAUA,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,CAC5B,IAAA,CAAK,OAAA,CAAUC,CAAM,EACvB,CACF,CACF,CAAC,EACH,CAAC,CAAA,CAEO,YAAA,CAAe,IAAA,CAAK,KAAK,cAAA,CAAgB,IAAM,CACrD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAU/B,CAAAA,CAAY,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CAAA,CAC3D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUY,CAAAA,CAAI,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACrD,CAAC,CAAA,CACD,KAAK,OAAA,CAAUkB,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,MAAO,CAAC,EACjD,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,CAAA,CAEO,WAAA,CAAc,IAAA,CAAK,IAAA,CAAK,cAAe,IAAM,CACnD,IAAA,CAAK,OAAA,CAAUzB,CAAO,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAQ,EACzB,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,aAAc,CAAC,CAAA,CACzD,IAAA,CAAK,OAAA,CAAUuB,CAAM,CAAA,CAGrB,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,OAAA,CAAU5B,CAAAA,CAAM,CAAE,KAAA,CAAO,cAAe,CAAC,CAAA,CAC9C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC7D,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAI,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC1C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC9D,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,mBAAoB,CAAC,EAC1D,CAAC,EACH,CAAC,CAAA,CAGD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAED,IAAA,CAAK,OAAA,CAAU2B,CAAM,CAAA,CACrB,KAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,QAAA,CAAW7B,CAAAA,CAAM,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC7C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,YAAa,CAAC,EAC3D,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUQ,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUe,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CACH,CAAA,CAEac,CAAAA,CAAS,IAAIF,CAAAA,CCjPnB,IAAMG,EAAAA,CAAoD,CAC/D,SAAA,CAAYC,GAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,qEAAqE,CAAA,CAEvF,GAAM,CAACC,CAAAA,CAAKC,CAAAA,CAAOC,CAAM,CAAA,CAAIH,CAAAA,CAC7B,OAAIG,CAAAA,GAAW,MAAA,CAEN,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,GAAA,EAAMA,CAAK,CAAA,KAAA,EAAQC,CAAM,CAAA,EAAA,CAAA,CAGxD,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,CAAA,CACtC,CAAA,CACA,EAAA,CAAKF,CAAAA,EAAmB,CACtB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACI,CAAAA,CAAWC,CAAAA,CAAWC,CAAU,CAAA,CAAIN,CAAAA,CAG3C,OAAO,CAAA,EAAA,EAAKI,CAAS,CAAA,KAAA,EAAQC,CAAS,CAAA,KAAA,EAAQC,CAAU,CAAA,EAAA,CAC1D,CAAA,CACA,IAAA,CAAON,CAAAA,EAAmB,CACxB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,CAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACC,CAAAA,CAAKM,CAAAA,CAAQC,CAAW,CAAA,CAAIR,CAAAA,CACnC,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,UAAA,EAAaM,CAAM,CAAA,EAAA,EAAKC,CAAW,CAAA,CAAA,CACzD,CAAA,CACA,MAAA,CAASR,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA,CAEjE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,UAAUC,CAAG,CAAA,CAAA,CACtB,CAAA,CACA,aAAA,CAAgBD,CAAAA,EAAmB,CACjC,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAExE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,cAAA,EAAiBC,CAAG,CAAA,6BAAA,CAC7B,CAAA,CACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,eAAA,CACtB,CAAA,CACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,UAAUC,CAAG,CAAA,eAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,iDAAiD,CAAA,CAEnE,IAAMS,CAAAA,CAAQT,CAAAA,CAAK,CAAC,CAAA,CACdU,CAAAA,CAAiB,CAAC,GAAGV,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACpCW,CAAAA,CAAa,EAAA,CACjB,GAAID,CAAAA,CAAe,OAAS,CAAA,CAAG,CAC7B,GAAI,CAACE,CAAAA,CAAMC,CAAS,CAAA,CAAI,CAACH,CAAAA,CAAgB,CAAC,CAAA,CAC1CE,CAAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAK,MAAA,CAASC,CAAS,CAAC,CAAC,CAAA,CACjD,GAAA,CAAKC,CAAAA,EAAMF,CAAAA,CAAK,MAAA,CAAO,CAAA,CAAGC,CAAS,CAAC,CAAA,CACpC,GAAA,CAAI,CAAC,CAACE,CAAAA,CAAKN,CAAK,CAAA,GAAM,CACrB,IAAIO,CAAAA,CAAUD,CAAAA,CACd,OAAIA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAKA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,CAC3CC,CAAAA,CAAU,CAAA,EAAA,EAAKD,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAA,CAAA,CAE/BC,CAAAA,CAAU,CAAA,KAAA,EAAQD,CAAG,CAAA,CAAA,CAAA,CAEhB,CAAA,EAAGC,CAAO,CAAA,CAAA,EAAIP,GAAgB,MAAM,CAAA,CAC7C,CAAC,CAAA,CACHE,CAAAA,CAAa,GAAA,CAAMC,CAAAA,CAAK,IAAA,CAAK,GAAG,EAClC,CAAA,KACE,OAAOH,CAAAA,CAET,OAAO,CAAA,GAAA,EAAMA,CAAK,CAAA,EAAGE,CAAU,CAAA,CAAA,CACjC,CAAA,CACA,KAAA,CAAQX,CAAAA,EAAmB,CACzB,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA,CAEjE,GAAM,CAACC,CAAAA,CAAKgB,CAAAA,CAAWC,CAAK,CAAA,CAAIlB,CAAAA,CAC1BmB,CAAAA,CAAMF,CAAAA,GAAc,MAAA,CAAYA,CAAAA,CAAY,IAAA,CAC5CG,CAAAA,CAAMF,CAAAA,GAAU,MAAA,CAAY,CAAA,EAAA,EAAKA,CAAK,CAAA,CAAA,CAAK,EAAA,CACjD,OAAO,CAAA,OAAA,EAAUjB,CAAG,CAAA,QAAA,EAAWkB,CAAG,CAAA,EAAGC,CAAG,CAAA,CAAA,CAC1C,CAAA,CACA,SAAA,CAAYpB,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,SAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,sEAAA,EAAyEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACrH,CAAA,CACA,WAAA,CAAcrB,CAAAA,EAAmB,CAC/B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,oDAAoD,CAAA,CAEtE,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,oEAAA,EAAuEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACnH,CAAA,CACA,MAAA,CAASrB,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAExD,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,eAAA,EAAkBqB,CAAG,CAAA,IAAA,EAAOA,CAAG,CAAA,IAAA,EAAOA,CAAG,CAAA,iBAAA,EAAoBA,CAAG,CAAA,GAAA,CACzE,CACF,CAAA,CC/HA,IAAMC,EAAAA,CAAiBxB,CAAAA,CAAO,4BAAA,EAA6B,CAE9CyB,CAAAA,CAAN,cAA6BD,EAAuB,CAEjD,QAAA,CAAgC,QAAA,CAExC,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,eAAA,GACP,CAKQ,gBAAA,CAAiBE,CAAAA,CAAWC,CAAAA,CAA4C,CAC9E,IAAMC,CAAAA,CAAmB,IAAA,CAAK,QAAA,CAC9B,KAAK,QAAA,CAAWD,CAAAA,CAAQ,QAAA,CACxB,IAAME,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMH,CAAI,CAAA,CAC9B,OAAA,IAAA,CAAK,QAAA,CAAWE,CAAAA,CACTC,CACT,CAEA,KAAA,CAAMC,CAAAA,CAAU,CACd,IAAMC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,MAAA,CAAO,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAI,EAAC,CAErEF,EAAI,SAAA,EACPC,CAAAA,CAAQ,IAAA,CAAK,gCAAgC,CAAA,CAG/C,IAAME,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAI,UAAU,CAAA,CACtCI,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAI,UAAU,CAAA,CAGtCK,CAAAA,CAAiBF,CAAAA,CAAW,IAAA,CAC5BG,CAAAA,CAAiBF,CAAAA,CAAW,IAAA,CAC5BG,CAAAA,CAAcH,CAAAA,CAAW,SAAA,CAAY,CAAA,CAAA,EAAIA,CAAAA,CAAW,SAAS,CAAA,CAAA,CAAA,CAAM,WAAA,CAkBzE,OAAO,CACL,IAAA,CAjBW;AAAA;AAAA;AAAA,kCAAA,EAGmBC,CAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAMxCJ,EAAQ,IAAA,CAAK;AAAA,QAAA,CAAY,CAAC;;AAAA;AAAA,8BAAA,EAGJK,CAAc,CAAA,UAAA,EAAaC,CAAAA,GAAgB,YAAc,CAAA,mBAAA,EAAsBA,CAAW,KAAO,EAAE,CAAA;AAAA;AAAA,IAAA,CAAA,CAM7H,UAAA,CAAAJ,CAAAA,CACA,UAAA,CAAAC,CACF,CACF,CAEA,UAAA,CAAWJ,CAAAA,CAAU,CACnB,IAAMQ,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAMR,CAAAA,CAAI,IAAI,CAAA,CAC1BS,CAAAA,CACJ,OAAIT,CAAAA,CAAI,SAAA,GAENS,CAAAA,CAAYT,CAAAA,CAAI,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,CAAG,EAAE,GAEzC,CAAE,IAAA,CAAMQ,CAAAA,CAAG,IAAA,CAAM,SAAA,CAAAC,CAAU,CACpC,CAEQ,SAAA,CAAUC,CAAAA,CAAcF,CAAAA,CAAuC,CACrE,OAAIA,CAAAA,CAAG,MAAA,EAAWA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,CACjF,CAAA,EAAGE,CAAI,CAAA,EAAA,EAAKF,CAAAA,CAAG,IAAI,CAAA,EAAA,CAAA,CAErB,CAAA,EAAGE,CAAI,CAAA,CAAA,EAAIF,CAAAA,CAAG,IAAI,CAAA,CAC3B,CAEA,aAAA,CAAcR,CAAAA,CAAU,CACtB,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,CAAE,IAAA,CAAMA,CAAAA,CAAI,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAM,EAExD,GAAIA,CAAAA,CAAI,gBAAA,CAGN,OAAO,CAAE,IAAA,CADIA,CAAAA,CAAI,gBAAA,CAAiB,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAU,IAAI,CAAA,CAC/D,MAAA,CAAQ,IAAK,CAEhC,CAEA,OAAA,CAAQA,CAAAA,CAAU,CAChB,GAAIA,CAAAA,CAAI,aAAA,CACN,OAAOA,EAAI,aAAA,CAAc,CAAC,CAAA,CAAE,KAAA,CAE9B,GAAIA,CAAAA,CAAI,cAAA,CACN,OAAOA,CAAAA,CAAI,cAAA,CAAe,CAAC,CAAA,CAAE,KAEjC,CAEA,MAAA,CAAOA,CAAAA,CAAU,CACf,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,OAAO,CAAA,CAE/B,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,KAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAElC,GAAIA,CAAAA,CAAI,WAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,WAAW,CAAA,CAEnC,GAAIA,CAAAA,CAAI,SAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,SAAS,CAAA,CAEjC,GAAIA,CAAAA,CAAI,QAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,QAAQ,EAEhC,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAElC,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAEpC,CAEA,UAAA,CAAWA,CAAAA,CAAU,CACnB,IAAMW,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAMX,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUW,CAAK,CAAC,CAAA,CAAA,CAClD,CAEA,QAAA,CAASX,CAAAA,CAAU,CACjB,IAAMxB,CAAAA,CAAY,IAAA,CAAK,KAAA,CAAMwB,CAAAA,CAAI,SAAS,CAAA,CACpCY,CAAAA,CAAcZ,CAAAA,CAAI,WAAA,CACpBA,CAAAA,CAAI,WAAA,CAAY,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK;AAAA,CAAI,CAAA,CACxD,EAAA,CACEW,CAAAA,CAAYb,CAAAA,CAAI,YAClB,CAAA,OAAA,EAAUA,CAAAA,CAAI,WAAA,CAAY,GAAA,CAAKE,GAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,EAAE,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,EAAA,CAAA,CACnE,EAAA,CAEJ,OAAO,OAAO1B,CAAS,CAAA;AAAA,OAAA,EAClBoC,CAAW;AAAA,OAAA,EACXC,CAAS,CAAA,CAChB,CAEA,SAAA,CAAUb,EAAU,CAClB,OAAIA,CAAAA,CAAI,MAAA,CACcA,EAAI,MAAA,CAAO,GAAA,CAAKc,CAAAA,EAAW,IAAA,CAAK,MAAMA,CAAC,CAAC,CAAA,CAEzD,GAAA,CAAKN,CAAAA,EAAY,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUA,CAAE,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,QAAA,CAAUA,CAAE,CAAC,CAAA,CAAA,CAAG,EACrF,IAAA,CAAK;AAAA,QAAA,CAAY,CAAA,CAEf,gCACT,CAEA,OAAA,CAAQR,EAAU,CAChB,IAAMe,CAAAA,CAAO,IAAA,CAAK,MAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,KAAK,KAAA,CAAMhB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUe,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,GACrD,CAEA,UAAA,CAAWhB,CAAAA,CAAU,CACnB,IAAMe,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,IAAA,CAAK,iBAAiBhB,CAAAA,CAAI,KAAA,CAAO,CAAE,QAAA,CAAU,QAAS,CAAC,CAAA,CACrE,OAAO,CAAA,EAAG,KAAK,SAAA,CAAU,QAAA,CAAUe,CAAI,CAAC,MAAMC,CAAK,CAAA,CAAA,CACrD,CAEA,UAAA,CAAWhB,EAAU,CACnB,IAAMe,CAAAA,CAAO,IAAA,CAAK,MAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,KAAK,KAAA,CAAMhB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUe,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,GACrD,CAEA,UAAA,CAAWhB,CAAAA,CAAU,CACnB,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,SAAS,CACjC,CAEA,SAAA,CAAUA,CAAAA,CAAU,CAClB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,QAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMiB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMjB,CAAAA,CAAI,IAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,GAAGA,CAAM,CAAA,IAAA,EAAOkB,CAAG,CAAA,EAC9B,CAEF,OAAOlB,CACT,CAEA,UAAA,CAAWC,EAAU,CACnB,IAAID,CAAAA,CAAS,IAAA,CAAK,MAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,EAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMiB,CAAAA,CAAM,IAAA,CAAK,MAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,EACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,CAAA,IAAA,EAAOkB,CAAG,CAAA,EAC9B,CAEF,OAAOlB,CACT,CAEA,UAAA,CAAWC,CAAAA,CAAU,CACnB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CAAK,CACX,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,IAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,CAAA,EACjC,CACA,OAAOlB,CACT,CAEA,QAAA,CAASC,EAAU,CACjB,IAAID,CAAAA,CAAS,IAAA,CAAK,MAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,EAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,IAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,CAAA,EACjC,CAEF,OAAOlB,CACT,CAEA,cAAA,CAAeC,CAAAA,CAAU,CACvB,IAAID,CAAAA,CAAS,KAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,EAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,GACjC,CAEF,OAAOlB,CACT,CAEA,gBAAgBC,CAAAA,CAAU,CACxB,IAAMmB,CAAAA,CAAS,KAAK,KAAA,CAAMnB,CAAAA,CAAI,MAAM,CAAA,CACpC,OAAIA,CAAAA,CAAI,IAAA,CAEC,CAAA,EADIA,EAAI,IAAA,CAAK,CAAC,CAAA,CAAE,KACX,GAAGmB,CAAM,CAAA,CAAA,CAEhBA,CACT,CAEA,OAAOnB,CAAAA,CAAU,CACf,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,EAAI,OAAO,CAAA,CAE/B,GAAIA,CAAAA,CAAI,aACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,YAAY,CAAA,CAEpC,GAAIA,CAAAA,CAAI,aAAA,CAAe,CACrB,IAAMQ,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAMR,EAAI,aAAa,CAAA,CACvC,GAAI,CAAC,OAAQ,OAAA,CAAS,MAAM,CAAA,CAAE,QAAA,CAASQ,EAAG,IAAI,CAAA,EAAK,CAACA,CAAAA,CAAG,MAAA,CACrD,OAAOA,CAAAA,CAAG,IAAA,CAEZ,GAAI,CAACA,CAAAA,CAAG,MAAA,CAAQ,CACd,GAAIA,CAAAA,CAAG,IAAA,GAAS,SAAA,EAAaA,CAAAA,CAAG,KAAK,UAAA,CAAW,UAAU,CAAA,EAAKA,CAAAA,CAAG,KAAK,UAAA,CAAW,UAAU,CAAA,CAC1F,OAAO,cAAcA,CAAAA,CAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,CAE3C,GAAIA,CAAAA,CAAG,IAAA,GAAS,WAAaA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAKA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,CAC1F,OAAO,CAAA,WAAA,EAAcA,CAAAA,CAAG,KAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAE7C,CACA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,SAAUA,CAAE,CACzC,CACA,GAAIR,EAAI,UAAA,CACN,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,MAAMA,CAAAA,CAAI,UAAU,CAAC,CAAA,CAAA,CAEzC,CAEA,YAAA,CAAaA,CAAAA,CAAU,CACrB,IAAMoB,CAAAA,CAAepB,CAAAA,CAAI,IAAA,CAAK,CAAC,EAAE,KAAA,CAC3BqB,CAAAA,CAAAA,CACJD,CAAAA,CAAa,UAAA,CAAW,GAAG,CAAA,CAAIA,CAAAA,CAAa,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAIA,CAAAA,EAC3D,WAAA,EAAY,CACRhD,CAAAA,CAAO4B,CAAAA,CAAI,IAAA,CAAOA,CAAAA,CAAI,KAAK,GAAA,CAAK,CAAA,EAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAI,EAAC,CAE7DsB,EAAUnD,EAAAA,CAAiBkD,CAAI,CAAA,CACrC,GAAIC,CAAAA,CACF,OAAOA,CAAAA,CAAQlD,CAAI,EAGrB,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqBgD,CAAY,CAAA,CAAE,CACrD,CAEA,WAAA,CAAYpB,EAAU,CACpB,IAAMuB,CAAAA,CAAY,IAAA,CAAK,MAAMvB,CAAAA,CAAI,WAAW,CAAA,CACxBuB,EAAU,IAAA,KACxBC,CAAAA,CAAgB,IAAA,CAAK,SAAA,CAAU,SAAUD,CAAS,CAAA,CAElDE,CAAAA,CAAezB,CAAAA,CAAI,WAAa,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAAIuB,CAAAA,CAChDE,CAAAA,CAAa,OAAS,QAAA,CAAW,EAAA,CAAK,GAAA,CAAMA,CAAAA,CAAa,SAKtEC,CAAAA,CACJD,CAAAA,CAAa,IAAA,GAAS,QAAA,CAAW,SAAW,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUA,CAAY,EAE7EE,CAAAA,CAAa,CAAC,CAAC3B,CAAAA,CAAI,SACnBC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,OAAO,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAI,GAKzE,GAFmB,CAAC,CAACF,CAAAA,CAAI,aAET,CACd,IAAM4B,CAAAA,CAAgB,IAAA,CAAK,MAAM5B,CAAAA,CAAI,kBAAkB,CAAA,CACjD6B,CAAAA,CAAgB,KAAK,KAAA,CAAM7B,CAAAA,CAAI,kBAAkB,CAAA,CAChCA,EAAI,iBAAA,EAIzBC,CAAAA,CAAQ,IAAA,CAAK,gCAAgC,EAG/C,IAAM6B,EAAAA,CAAiBD,CAAAA,CAAc,SAAA,CACjC,uBAAuBA,CAAAA,CAAc,SAAS,CAAA,GAAA,CAAA,CAC9C,EAAA,CAEJ,OAAIF,CAAAA,CACK;AAAA,YAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,UAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA,yCAAA,EACAE,EAAc,IAAI,CAAA;AAAA;AAAA;AAAA,YAAA,EAG/C3B,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACR4B,CAAAA,CAAc,IAAI,CAAA,SAAA,EAAYC,EAAc,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAKjE;AAAA,YAAA,EACDJ,CAAY,CAAA;AAAA,UAAA,EACdF,CAAa,CAAA;AAAA,yCAAA,EACkBI,EAAc,IAAI,CAAA;AAAA;AAAA;AAAA,YAAA,EAG/C3B,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACR4B,CAAAA,CAAc,IAAI,CAAA,SAAA,EAAYC,EAAc,CAAA;AAAA,aAAA,EACjEJ,CAAY,CAAA;AAAA;AAAA,QAAA,CAIvB,CAGA,OAAIC,CAAAA,CACK;AAAA,UAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,QAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA;AAAA;AAAA,UAAA,EAG7BzB,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAM3B;AAAA,UAAA,EACDyB,CAAY,CAAA;AAAA,QAAA,EACdF,CAAa,CAAA;AAAA;AAAA;AAAA,UAAA,EAGXvB,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA,WAAA,EAE3ByB,CAAY,CAAA;AAAA;AAAA,MAAA,CAIvB,CACF,CAAA,CAEaK,EAAAA,CAAW,IAAIpC,CAAAA,CC3W5B,IAAMqC,EAAAA,CAAwC,EAAC,CAExC,SAASC,CAAAA,CAAgBZ,CAAAA,CAAca,CAAAA,CAAsB,CAClEF,GAASX,CAAAA,CAAK,WAAA,EAAa,CAAA,CAAIa,EACjC,CAEO,SAASC,EAAAA,CAAWd,CAAAA,CAA2B,CACpD,IAAMa,CAAAA,CAAUF,GAASX,CAAAA,CAAK,WAAA,EAAa,CAAA,CAC3C,GAAI,CAACa,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCb,CAAI,EAAE,CAAA,CAExD,OAAOa,CACT,CAIAD,EAAgB,MAAA,CAAQ,CACtB,MAAQG,CAAAA,EACF,OAAOA,GAAY,QAAA,CAAiBA,CAAAA,CACjC,IAAA,CAAK,KAAA,CAAMA,CAAO,CAAA,CAE3B,SAAA,CAAYC,CAAAA,EAAS,IAAA,CAAK,UAAUA,CAAAA,CAAM,IAAA,CAAM,CAAC,CACnD,CAAC,CAAA,CAGD,IAAMC,GAAa,IAAIC,wBAAAA,CAAW,CAChC,gBAAA,CAAkB,KAAA,CAClB,mBAAA,CAAqB,GAAA,CACrB,aAAc,GAAA,CACd,MAAA,CAAQ,IACV,CAAC,EAEDN,CAAAA,CAAgB,KAAA,CAAO,CACrB,KAAA,CAAQG,GACF,OAAOA,CAAAA,EAAY,SAAiBA,CAAAA,CACzB,IAAII,wBAAU,CAC3B,gBAAA,CAAkB,KAAA,CAClB,cAAA,CAAgB,IAClB,CAAC,CAAA,CACa,KAAA,CAAMJ,CAAO,EAE7B,SAAA,CAAW,CAACC,CAAAA,CAAMI,CAAAA,GAAY,CAC5B,IAAMC,CAAAA,CAAUD,GAAS,aAAA,EAAiB,MAAA,CAC1C,OAAOH,EAAAA,CAAW,KAAA,CAAM,CAAE,CAACI,CAAO,EAAGL,CAAK,CAAC,CAC7C,CACF,CAAC,CAAA,CAGDJ,CAAAA,CAAgB,QAAA,CAAU,CACxB,KAAA,CAAQG,CAAAA,EAAYA,EACpB,SAAA,CAAYC,CAAAA,EAASA,CACvB,CAAC,CAAA,CCxCD,eAAsBM,EAAAA,CACpBC,CAAAA,CACAH,CAAAA,CACsC,CAEtC,GAAIA,CAAAA,EAAS,KAAA,CAAO,CAClB,IAAMI,CAAAA,CAAa,MAAMJ,EAAQ,KAAA,CAAM,QAAA,CAASG,CAAW,CAAA,CAC3D,GAAIC,CAAAA,CACF,OAAOC,GAA6BD,CAAU,CAElD,CAGA,IAAME,EAAYhF,EAAAA,CAAW,QAAA,CAAS6E,CAAW,CAAA,CAEjD,GAAIG,CAAAA,CAAU,MAAA,CAAO,MAAA,CAAS,CAAA,CAC5B,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkBA,CAAAA,CAAU,OAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,EAGjE7E,CAAAA,CAAO,KAAA,CAAQ6E,CAAAA,CAAU,MAAA,CACzB,IAAMC,CAAAA,CAAM9E,CAAAA,CAAO,OAAM,CAEzB,GAAIA,EAAO,MAAA,CAAO,MAAA,CAAS,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAAA,CAAO,MAAA,CAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAG/D,GAAM,CAAE,IAAA,CAAM+E,CAAQ,CAAA,CAAIlB,EAAAA,CAAS,MAAMiB,CAAG,CAAA,CAEtCE,CAAAA,CAAOC,mBAAAA,CAAS,GAAGF,CAAAA,CAAS,CAChC,WAAA,CAAa,CAAA,CACb,qBAAsB,IAAA,CACtB,gBAAA,CAAkB,IACpB,CAAC,EAGD,OAAIR,CAAAA,EAAS,OACX,MAAMA,CAAAA,CAAQ,MAAM,IAAA,CAAKG,CAAAA,CAAaM,CAAI,CAAA,CAGrCJ,GAA6BI,CAAI,CAC1C,CAEA,SAASJ,GAA6BI,CAAAA,CAA2C,CAG/E,IAAME,CAAAA,CADU,IAAI,QAAA,CAASF,CAAI,GACP,CAGpBG,CAAAA,CAAM,CACV,KAAA,CAAO,CAACC,CAAAA,CAAgBlB,CAAAA,GACfD,GAAWmB,CAAM,CAAA,CAAE,KAAA,CAAMlB,CAAO,EAEzC,SAAA,CAAW,CAACkB,CAAAA,CAAgBjB,CAAAA,CAAWI,IAC9BN,EAAAA,CAAWmB,CAAM,EAAE,SAAA,CAAUjB,CAAAA,CAAMI,CAAO,CAErD,CAAA,CAGMc,CAAAA,EAAWC,CAAAA,EACRJ,EAAUI,CAAAA,CAAOH,CAAG,CAAA,CAAA,CAG7B,OAAAE,EAAO,IAAA,CAAOL,CAAAA,CACPK,CACT,CAgBO,SAASE,EAAAA,CAAQC,CAAAA,CAAAA,GAAkCC,EAAuB,CAC/E,OAAOD,EAAQ,MAAA,CAAO,CAACE,CAAAA,CAAKvF,CAAAA,CAAKwF,IAAMD,CAAAA,CAAMvF,CAAAA,EAAOsF,CAAAA,CAAOE,CAAC,GAAK,EAAA,CAAA,CAAK,EAAE,CAC1E,CAKO,SAASC,EAAAA,CAAMzC,CAAAA,CAAsB,CAC1C,OAAO,CAAA,OAAA,EAAUA,CAAI,CAAA,4BAAA,CACvB","file":"index.cjs","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.CONSUME(t.StringLiteral, { LABEL: 'parameter' });\n this.CONSUME(t.RParen);\n });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n const targetParam = targetType.parameter ? `'${targetType.parameter}'` : 'undefined';\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input);\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target ${targetParam !== 'undefined' ? `, { rootGenerated: ${targetParam} }` : ''} );\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n let parameter = undefined;\n if (ctx.parameter) {\n // Remove quotes from string literal\n parameter = ctx.parameter[0].image.slice(1, -1);\n }\n return { name: id.name, parameter };\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (id.name === '_source' || id.name.startsWith('_source.') || id.name.startsWith('_source[')) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (id.name === '_target' || id.name.startsWith('_target.') || id.name.startsWith('_target[')) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subTargetParam = subTargetType.parameter\n ? `, { rootGenerated: \"${subTargetType.parameter}\" }`\n : '';\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? 'root';\n return xmlBuilder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string) => {\n return getAdapter(format).parse(content);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { M as MorphQLCache } from './cache-DDvLhPfR.cjs';
|
|
2
|
+
|
|
3
|
+
interface MorphEngine<Source = any, Target = any> {
|
|
4
|
+
(source: Source): Promise<Target> | Target;
|
|
5
|
+
code: string;
|
|
6
|
+
}
|
|
7
|
+
interface CompileOptions {
|
|
8
|
+
cache?: MorphQLCache;
|
|
9
|
+
}
|
|
10
|
+
declare function compile<Source = any, Target = any>(queryString: string, options?: CompileOptions): Promise<MorphEngine<Source, Target>>;
|
|
11
|
+
/**
|
|
12
|
+
* Tagged template helper for MorphQL queries.
|
|
13
|
+
* Enables syntax highlighting in VSCode and provides a cleaner API.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const query = morphQL`
|
|
18
|
+
* from json to xml
|
|
19
|
+
* transform
|
|
20
|
+
* set fullName = firstName + " " + lastName
|
|
21
|
+
* `;
|
|
22
|
+
* const engine = await compile(query);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
declare function morphQL(strings: TemplateStringsArray, ...values: any[]): string;
|
|
26
|
+
/**
|
|
27
|
+
* Legacy greet function for compatibility during migration.
|
|
28
|
+
*/
|
|
29
|
+
declare function greet(name: string): string;
|
|
30
|
+
|
|
31
|
+
export { type CompileOptions, type MorphEngine, MorphQLCache, compile, greet, morphQL };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { M as MorphQLCache } from './cache-DDvLhPfR.js';
|
|
2
|
+
|
|
3
|
+
interface MorphEngine<Source = any, Target = any> {
|
|
4
|
+
(source: Source): Promise<Target> | Target;
|
|
5
|
+
code: string;
|
|
6
|
+
}
|
|
7
|
+
interface CompileOptions {
|
|
8
|
+
cache?: MorphQLCache;
|
|
9
|
+
}
|
|
10
|
+
declare function compile<Source = any, Target = any>(queryString: string, options?: CompileOptions): Promise<MorphEngine<Source, Target>>;
|
|
11
|
+
/**
|
|
12
|
+
* Tagged template helper for MorphQL queries.
|
|
13
|
+
* Enables syntax highlighting in VSCode and provides a cleaner API.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const query = morphQL`
|
|
18
|
+
* from json to xml
|
|
19
|
+
* transform
|
|
20
|
+
* set fullName = firstName + " " + lastName
|
|
21
|
+
* `;
|
|
22
|
+
* const engine = await compile(query);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
declare function morphQL(strings: TemplateStringsArray, ...values: any[]): string;
|
|
26
|
+
/**
|
|
27
|
+
* Legacy greet function for compatibility during migration.
|
|
28
|
+
*/
|
|
29
|
+
declare function greet(name: string): string;
|
|
30
|
+
|
|
31
|
+
export { type CompileOptions, type MorphEngine, MorphQLCache, compile, greet, morphQL };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParser}from'fast-xml-parser';import ft from'js-beautify';var at=createToken({name:"WhiteSpace",pattern:/\s+/,group:Lexer.SKIPPED}),ht=createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:Lexer.SKIPPED}),ut=createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:Lexer.SKIPPED}),u=createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=createToken({name:"From",pattern:/from/i,longer_alt:u}),d=createToken({name:"To",pattern:/to/i,longer_alt:u}),A=createToken({name:"Transform",pattern:/transform/i,longer_alt:u}),N=createToken({name:"Set",pattern:/set/i,longer_alt:u}),B=createToken({name:"Section",pattern:/section/i,longer_alt:u}),C=createToken({name:"Multiple",pattern:/multiple/i,longer_alt:u}),v=createToken({name:"Clone",pattern:/clone/i,longer_alt:u}),M=createToken({name:"Delete",pattern:/delete/i,longer_alt:u}),q=createToken({name:"Define",pattern:/define/i,longer_alt:u}),w=createToken({name:"Modify",pattern:/modify/i,longer_alt:u}),y=createToken({name:"If",pattern:/if/i,longer_alt:u}),P=createToken({name:"Else",pattern:/else/i,longer_alt:u}),b=createToken({name:"EqualsEquals",pattern:/==/}),I=createToken({name:"EqualsEqualsEquals",pattern:/===/}),_=createToken({name:"NotEquals",pattern:/!=/}),x=createToken({name:"NotEqualsEquals",pattern:/!==/}),F=createToken({name:"LessThanOrEqual",pattern:/<=/}),D=createToken({name:"GreaterThanOrEqual",pattern:/>=/}),j=createToken({name:"LessThan",pattern:/</}),z=createToken({name:"GreaterThan",pattern:/>/}),W=createToken({name:"And",pattern:/&&/}),G=createToken({name:"Or",pattern:/\|\|/}),Y=createToken({name:"Not",pattern:/!/}),f=createToken({name:"Equals",pattern:/=/}),Q=createToken({name:"Plus",pattern:/\+/}),R=createToken({name:"Minus",pattern:/-/}),k=createToken({name:"Times",pattern:/\*/}),V=createToken({name:"Divide",pattern:/\//}),l=createToken({name:"LParen",pattern:/\(/}),c=createToken({name:"RParen",pattern:/\)/}),$=createToken({name:"Comma",pattern:/,/}),T=createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),K=createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),H=[at,ht,ut,L,d,A,N,B,C,v,M,q,w,y,P,I,b,x,_,F,D,W,G,f,j,z,Y,Q,R,k,V,l,c,$,T,K,O,u],rt=new Lexer(H);var J=class extends CstParser{constructor(){super(H),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(A),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(l),this.CONSUME(T,{LABEL:"parameter"}),this.CONSUME(c);});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(u)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(T)},{ALT:()=>this.CONSUME(K)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(y),this.CONSUME(l),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(l),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(l),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(N),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(W),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(b,{LABEL:"ops"})},{ALT:()=>this.CONSUME(I,{LABEL:"ops"})},{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(k,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Y,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===l,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(l),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(u,{LABEL:"name"})},{ALT:()=>this.CONSUME(y,{LABEL:"name"})}]),this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(B),this.OPTION(()=>{this.CONSUME(C);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(l),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(A,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new J;var it={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[s,o]=[e,2];s=[...Array(Math.ceil(s.length/o))].map(a=>s.splice(0,o)).map(([a,h])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${h||"null"}`}),i=","+s.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,s=e!==void 0?e:'""',o=i!==void 0?`, ${i}`:"";return `String(${t}).split(${s}${o})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var pt=E.getBaseCstVisitorConstructor(),X=class extends pt{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let s=this.visit(t);return this.readFrom=i,s}query(t){let e=t.action?t.action.map(m=>this.visit(m)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),s=this.visit(t.targetType),o=i.name,a=s.name,h=s.parameter?`'${s.parameter}'`:"undefined";return {code:`
|
|
2
|
+
return function(input, env) {
|
|
3
|
+
// 1. Parse Input
|
|
4
|
+
const source = env.parse('${o}', input);
|
|
5
|
+
const _rootSource = source;
|
|
6
|
+
|
|
7
|
+
// 2. Transform
|
|
8
|
+
const target = {};
|
|
9
|
+
const _rootTarget = target;
|
|
10
|
+
${e.join(`
|
|
11
|
+
`)}
|
|
12
|
+
|
|
13
|
+
// 3. Serialize Output
|
|
14
|
+
return env.serialize('${a}', target ${h!=="undefined"?`, { rootGenerated: ${h} }`:""} );
|
|
15
|
+
}
|
|
16
|
+
`,sourceType:i,targetType:s}}typeFormat(t){let e=this.visit(t.name),i;return t.parameter&&(i=t.parameter[0].image.slice(1,-1)),{name:e.name,parameter:i}}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(o=>this.visit(o)).join(`
|
|
17
|
+
`):"",s=t.elseActions?`else { ${t.elseActions.map(o=>this.visit(o)).join(`
|
|
18
|
+
`)} }`:"";return `if (${e}) {
|
|
19
|
+
${i}
|
|
20
|
+
} ${s}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
|
|
21
|
+
`):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} || ${s}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} && ${s}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,s=this.visit(t.rhs[0]);e=`${e} ${i} ${s}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),s=t.args?t.args.map(a=>this.visit(a)):[],o=it[i];if(o)return o(s);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let s=this.genAccess("target",e),o=t.followPath?this.visit(t.followPath):e;o.name==="parent"?"":"."+o.name;let h=o.name==="parent"?"source":this.genAccess("source",o),p=!!t.Multiple,m=t.action?t.action.map(g=>this.visit(g)):[];if(!!t.subqueryFrom){let g=this.visit(t.subquerySourceType),U=this.visit(t.subqueryTargetType);t.subqueryTransform||m.push("Object.assign(target, source);");let et=U.parameter?`, { rootGenerated: "${U.parameter}" }`:"";return p?`
|
|
22
|
+
if (${h} && Array.isArray(${h})) {
|
|
23
|
+
${s} = ${h}.map(item => {
|
|
24
|
+
const subSource = env.parse('${g.name}', item);
|
|
25
|
+
const source = subSource;
|
|
26
|
+
const target = {};
|
|
27
|
+
${m.join(`
|
|
28
|
+
`)}
|
|
29
|
+
return env.serialize('${U.name}', target${et});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
`:`
|
|
33
|
+
if (${h}) {
|
|
34
|
+
${s} = (function(innerSource) {
|
|
35
|
+
const subSource = env.parse('${g.name}', innerSource);
|
|
36
|
+
const source = subSource;
|
|
37
|
+
const target = {};
|
|
38
|
+
${m.join(`
|
|
39
|
+
`)}
|
|
40
|
+
return env.serialize('${U.name}', target${et});
|
|
41
|
+
})(${h});
|
|
42
|
+
}
|
|
43
|
+
`}return p?`
|
|
44
|
+
if (${h} && Array.isArray(${h})) {
|
|
45
|
+
${s} = ${h}.map(item => {
|
|
46
|
+
const source = item;
|
|
47
|
+
const target = {};
|
|
48
|
+
${m.join(`
|
|
49
|
+
`)}
|
|
50
|
+
return target;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
`:`
|
|
54
|
+
if (${h}) {
|
|
55
|
+
${s} = (function(innerSource) {
|
|
56
|
+
const source = innerSource;
|
|
57
|
+
const target = {};
|
|
58
|
+
${m.join(`
|
|
59
|
+
`)}
|
|
60
|
+
return target;
|
|
61
|
+
})(${h});
|
|
62
|
+
}
|
|
63
|
+
`}},st=new X;var nt={};function Z(r,t){nt[r.toLowerCase()]=t;}function tt(r){let t=nt[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}Z("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var Lt=new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});Z("xml",{parse:r=>typeof r!="string"?r:new XMLParser({ignoreAttributes:false,removeNSPrefix:true}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??"root";return Lt.build({[e]:r})}});Z("object",{parse:r=>r,serialize:r=>r});async function wt(r,t){if(t?.cache){let a=await t.cache.retrieve(r);if(a)return ot(a)}let e=rt.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:s}=st.visit(i),o=ft.js(s,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,o),ot(o)}function ot(r){let e=new Function(r)(),i={parse:(o,a)=>tt(o).parse(a),serialize:(o,a,h)=>tt(o).serialize(a,h)},s=(o=>e(o,i));return s.code=r,s}function Pt(r,...t){return r.reduce((e,i,s)=>e+i+(t[s]??""),"")}function bt(r){return `Hello, ${r}! The Morph engine is ready.`}export{wt as compile,bt as greet,Pt as morphQL};//# sourceMappingURL=index.js.map
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","targetParam","id","parameter","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subTargetParam","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","options","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"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","file":"index.js","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.CONSUME(t.StringLiteral, { LABEL: 'parameter' });\n this.CONSUME(t.RParen);\n });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n const targetParam = targetType.parameter ? `'${targetType.parameter}'` : 'undefined';\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input);\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target ${targetParam !== 'undefined' ? `, { rootGenerated: ${targetParam} }` : ''} );\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n let parameter = undefined;\n if (ctx.parameter) {\n // Remove quotes from string literal\n parameter = ctx.parameter[0].image.slice(1, -1);\n }\n return { name: id.name, parameter };\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (id.name === '_source' || id.name.startsWith('_source.') || id.name.startsWith('_source[')) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (id.name === '_target' || id.name.startsWith('_target.') || id.name.startsWith('_target[')) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subTargetParam = subTargetType.parameter\n ? `, { rootGenerated: \"${subTargetType.parameter}\" }`\n : '';\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? 'root';\n return xmlBuilder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string) => {\n return getAdapter(format).parse(content);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@morphql/core",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "A high-performance, isomorphic Query-to-Code engine for structural data transformations.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"require": "./dist/index.cjs"
|
|
17
|
+
},
|
|
18
|
+
"./cache-services": {
|
|
19
|
+
"types": "./dist/cache-services/index.d.ts",
|
|
20
|
+
"import": "./dist/cache-services/index.js",
|
|
21
|
+
"require": "./dist/cache-services/index.cjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"dev": "tsup src/index.ts src/cache-services/index.ts --watch --format cjs,esm",
|
|
31
|
+
"build": "tsup src/index.ts src/cache-services/index.ts --format cjs,esm --dts --clean",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"test:watch": "vitest",
|
|
34
|
+
"lint": "eslint src/**/*.ts",
|
|
35
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
36
|
+
"typecheck": "tsc --noEmit"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"query",
|
|
40
|
+
"transform",
|
|
41
|
+
"json",
|
|
42
|
+
"xml",
|
|
43
|
+
"dsl",
|
|
44
|
+
"compiler"
|
|
45
|
+
],
|
|
46
|
+
"author": "Hyperwindmill",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/Hyperwindmill/morphql.git",
|
|
51
|
+
"directory": "packages/core"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/Hyperwindmill/morphql/issues"
|
|
55
|
+
},
|
|
56
|
+
"homepage": "https://github.com/Hyperwindmill/morphql/tree/main/packages/core#readme",
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@eslint/js": "^9.39.2",
|
|
59
|
+
"@types/js-beautify": "^1.14.3",
|
|
60
|
+
"@types/node": "^25.0.9",
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
|
62
|
+
"@typescript-eslint/parser": "^8.53.0",
|
|
63
|
+
"eslint": "^9.39.2",
|
|
64
|
+
"eslint-config-prettier": "^10.1.8",
|
|
65
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
66
|
+
"prettier": "^3.8.0",
|
|
67
|
+
"tsup": "^8.5.1",
|
|
68
|
+
"typescript": "^5.9.3",
|
|
69
|
+
"typescript-eslint": "^8.53.0",
|
|
70
|
+
"vitest": "^4.0.17"
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"chevrotain": "^11.1.0",
|
|
74
|
+
"fast-xml-parser": "^5.3.3",
|
|
75
|
+
"js-beautify": "^1.15.4"
|
|
76
|
+
},
|
|
77
|
+
"peerDependencies": {
|
|
78
|
+
"ioredis": "^5.0.0"
|
|
79
|
+
},
|
|
80
|
+
"peerDependenciesMeta": {
|
|
81
|
+
"ioredis": {
|
|
82
|
+
"optional": true
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|