zerohelper-toon 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/package.json +15 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# zerohelper-toon
|
|
2
|
+
|
|
3
|
+
TOON (Token-Oriented Object Notation) parser and serializer.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install zerohelper-toon
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { stringify, parse } from 'zerohelper-toon';
|
|
15
|
+
|
|
16
|
+
// Stringify to TOON format
|
|
17
|
+
const data = [
|
|
18
|
+
{ id: 1, name: 'Alice' },
|
|
19
|
+
{ id: 2, name: 'Bob' }
|
|
20
|
+
];
|
|
21
|
+
const toon = stringify(data);
|
|
22
|
+
// Output:
|
|
23
|
+
// [2]{id,name}:
|
|
24
|
+
// 1,Alice
|
|
25
|
+
// 2,Bob
|
|
26
|
+
|
|
27
|
+
// Parse TOON format
|
|
28
|
+
const parsed = parse(toon);
|
|
29
|
+
// Output: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Features
|
|
33
|
+
|
|
34
|
+
- LLM token-efficient serialization
|
|
35
|
+
- Tabular format for uniform arrays
|
|
36
|
+
- Human-readable output
|
|
37
|
+
- Full JSON compatibility mode
|
|
38
|
+
- Unicode support
|
|
39
|
+
|
|
40
|
+
## API
|
|
41
|
+
|
|
42
|
+
### stringify(data: any): string
|
|
43
|
+
|
|
44
|
+
Convert JavaScript objects to TOON format.
|
|
45
|
+
|
|
46
|
+
### parse(text: string): any
|
|
47
|
+
|
|
48
|
+
Parse TOON format back to JavaScript objects.
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
ISC
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyB1C;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAoEvC;AAED,eAAO,MAAM,WAAW;;;CAGvB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toon_module = void 0;
|
|
4
|
+
exports.stringify = stringify;
|
|
5
|
+
exports.parse = parse;
|
|
6
|
+
function stringify(obj) {
|
|
7
|
+
if (Array.isArray(obj)) {
|
|
8
|
+
if (obj.length === 0)
|
|
9
|
+
return '[]';
|
|
10
|
+
const firstItem = obj[0];
|
|
11
|
+
const keys = typeof firstItem === 'object' && firstItem !== null ? Object.keys(firstItem) : [];
|
|
12
|
+
if (keys.length > 0) {
|
|
13
|
+
const header = `[${obj.length}]{${keys.join(',')}}:`;
|
|
14
|
+
const rows = obj.map(item => keys.map(k => {
|
|
15
|
+
const val = item[k];
|
|
16
|
+
if (typeof val === 'string' && val.includes(','))
|
|
17
|
+
return `"${val}"`;
|
|
18
|
+
return val;
|
|
19
|
+
}).join(',')).join('\n ');
|
|
20
|
+
return `${header}\n ${rows}`;
|
|
21
|
+
}
|
|
22
|
+
const items = obj.map(item => stringify(item)).join('\n ');
|
|
23
|
+
return `[${obj.length}]{\n ${items}\n}`;
|
|
24
|
+
}
|
|
25
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
26
|
+
const entries = Object.entries(obj).map(([k, v]) => {
|
|
27
|
+
const val = typeof v === 'string' ? v : stringify(v);
|
|
28
|
+
return `${k}: ${val}`;
|
|
29
|
+
}).join('\n');
|
|
30
|
+
return `{\n ${entries}\n}`;
|
|
31
|
+
}
|
|
32
|
+
return String(obj);
|
|
33
|
+
}
|
|
34
|
+
function parse(text) {
|
|
35
|
+
const trimmed = text.trim();
|
|
36
|
+
const lines = trimmed.split('\n').map(l => l.trim()).filter(l => l);
|
|
37
|
+
const result = {};
|
|
38
|
+
let i = 0;
|
|
39
|
+
while (i < lines.length) {
|
|
40
|
+
const line = lines[i];
|
|
41
|
+
if (line.includes('[') && line.includes(']{')) {
|
|
42
|
+
const arrayMatch = line.match(/^(\w+)\[(\d+)\]\{([^}]+)\}:?$/);
|
|
43
|
+
if (arrayMatch) {
|
|
44
|
+
const [, arrayName, countStr, keysStr] = arrayMatch;
|
|
45
|
+
const keys = keysStr.split(',').map(k => k.trim());
|
|
46
|
+
const count = parseInt(countStr);
|
|
47
|
+
const rows = [];
|
|
48
|
+
i++;
|
|
49
|
+
for (let j = 0; j < count && i < lines.length; j++) {
|
|
50
|
+
const dataLine = lines[i];
|
|
51
|
+
if (dataLine && !dataLine.includes(':') && !dataLine.startsWith('{')) {
|
|
52
|
+
const values = dataLine.split(',').map((v, idx) => {
|
|
53
|
+
const val = v.trim();
|
|
54
|
+
if (val.startsWith('"') && val.endsWith('"')) {
|
|
55
|
+
return val.slice(1, -1);
|
|
56
|
+
}
|
|
57
|
+
if (val === 'null')
|
|
58
|
+
return null;
|
|
59
|
+
if (val === 'true')
|
|
60
|
+
return true;
|
|
61
|
+
if (val === 'false')
|
|
62
|
+
return false;
|
|
63
|
+
const num = parseFloat(val);
|
|
64
|
+
return isNaN(num) ? val : num;
|
|
65
|
+
});
|
|
66
|
+
const obj = {};
|
|
67
|
+
keys.forEach((k, idx) => {
|
|
68
|
+
obj[k] = values[idx];
|
|
69
|
+
});
|
|
70
|
+
rows.push(obj);
|
|
71
|
+
}
|
|
72
|
+
i++;
|
|
73
|
+
}
|
|
74
|
+
result[arrayName] = rows;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const keyValueMatch = line.match(/^(\w+):\s*(.*)$/);
|
|
79
|
+
if (keyValueMatch) {
|
|
80
|
+
const [, key, value] = keyValueMatch;
|
|
81
|
+
if (value.startsWith('"') && value.endsWith('"')) {
|
|
82
|
+
result[key] = value.slice(1, -1);
|
|
83
|
+
}
|
|
84
|
+
else if (value === 'null') {
|
|
85
|
+
result[key] = null;
|
|
86
|
+
}
|
|
87
|
+
else if (value === 'true') {
|
|
88
|
+
result[key] = true;
|
|
89
|
+
}
|
|
90
|
+
else if (value === 'false') {
|
|
91
|
+
result[key] = false;
|
|
92
|
+
}
|
|
93
|
+
else if (value === '') {
|
|
94
|
+
result[key] = {};
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const num = parseFloat(value);
|
|
98
|
+
result[key] = isNaN(num) ? value : num;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
i++;
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
exports.toon_module = {
|
|
106
|
+
stringify,
|
|
107
|
+
parse,
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8BAyBC;AAED,sBAoEC;AA/FD,SAAgB,SAAS,CAAC,GAAQ;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,GAAG,GAAG,CAAC;gBACpE,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,GAAG,MAAM,OAAO,IAAI,EAAE,CAAC;QAChC,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,GAAG,CAAC,MAAM,SAAS,KAAK,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,QAAQ,OAAO,KAAK,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;gBACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAU,EAAE,CAAC;gBAEvB,CAAC,EAAE,CAAC;gBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;4BAChD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;4BACrB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC7C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC1B,CAAC;4BACD,IAAI,GAAG,KAAK,MAAM;gCAAE,OAAO,IAAI,CAAC;4BAChC,IAAI,GAAG,KAAK,MAAM;gCAAE,OAAO,IAAI,CAAC;4BAChC,IAAI,GAAG,KAAK,OAAO;gCAAE,OAAO,KAAK,CAAC;4BAClC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;4BAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;wBAChC,CAAC,CAAC,CAAC;wBACH,MAAM,GAAG,GAAQ,EAAE,CAAC;wBACpB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;4BACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;wBACvB,CAAC,CAAC,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC;oBACD,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;gBACzB,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC;YACrC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;iBAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACzC,CAAC;QACH,CAAC;QAED,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEY,QAAA,WAAW,GAAG;IACzB,SAAS;IACT,KAAK;CACN,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zerohelper-toon",
|
|
3
|
+
"version": "11.0.0",
|
|
4
|
+
"description": "TOON parser for ZeroHelper",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": { "build": "tsc", "clean": "rm -rf dist" },
|
|
8
|
+
"keywords": ["zerohelper", "toon", "parser"],
|
|
9
|
+
"author": "Onure9e",
|
|
10
|
+
"license": "ISC",
|
|
11
|
+
"dependencies": {},
|
|
12
|
+
"devDependencies": { "@types/node": "^22.10.2", "typescript": "^5.7.2" },
|
|
13
|
+
"files": ["dist", "README.md"],
|
|
14
|
+
"publishConfig": { "access": "public" }
|
|
15
|
+
}
|