toonfile 1.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/LICENSE +21 -0
- package/README.md +302 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +161 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +199 -0
- package/dist/utils.js.map +1 -0
- package/package.json +72 -0
- package/src/index.ts +222 -0
- package/src/types.ts +198 -0
- package/src/universalify.d.ts +6 -0
- package/src/utils.ts +222 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON File Types and Interfaces
|
|
3
|
+
*/
|
|
4
|
+
import type * as fs from 'fs';
|
|
5
|
+
/**
|
|
6
|
+
* Options for reading TOON files
|
|
7
|
+
*/
|
|
8
|
+
export interface ReadOptions {
|
|
9
|
+
/**
|
|
10
|
+
* File encoding (default: 'utf8')
|
|
11
|
+
*/
|
|
12
|
+
encoding?: BufferEncoding;
|
|
13
|
+
/**
|
|
14
|
+
* Throw error on parse failure. If false, returns null instead.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
throws?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Custom fs module for testing or alternative file systems
|
|
20
|
+
*/
|
|
21
|
+
fs?: typeof fs;
|
|
22
|
+
/**
|
|
23
|
+
* Transform function applied to parsed values (similar to JSON.parse reviver)
|
|
24
|
+
*/
|
|
25
|
+
reviver?: (key: string, value: any) => any;
|
|
26
|
+
/**
|
|
27
|
+
* Indent size for parsing (default: 2)
|
|
28
|
+
*/
|
|
29
|
+
indentSize?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Strict mode for parsing
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
34
|
+
strict?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Options for writing TOON files
|
|
38
|
+
*/
|
|
39
|
+
export interface WriteOptions {
|
|
40
|
+
/**
|
|
41
|
+
* File encoding (default: 'utf8')
|
|
42
|
+
*/
|
|
43
|
+
encoding?: BufferEncoding;
|
|
44
|
+
/**
|
|
45
|
+
* Custom fs module for testing or alternative file systems
|
|
46
|
+
*/
|
|
47
|
+
fs?: typeof fs;
|
|
48
|
+
/**
|
|
49
|
+
* Spaces per indent level
|
|
50
|
+
* @default 2
|
|
51
|
+
*/
|
|
52
|
+
indentSize?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Delimiter for arrays: comma, tab, or pipe
|
|
55
|
+
* @default ','
|
|
56
|
+
*/
|
|
57
|
+
delimiter?: ',' | '\t' | '|';
|
|
58
|
+
/**
|
|
59
|
+
* End-of-line character(s)
|
|
60
|
+
* @default '\n'
|
|
61
|
+
*/
|
|
62
|
+
EOL?: '\n' | '\r\n' | string;
|
|
63
|
+
/**
|
|
64
|
+
* Include EOL at end of file
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
finalEOL?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Use tabular format for uniform arrays of objects
|
|
70
|
+
* @default true
|
|
71
|
+
*/
|
|
72
|
+
tabularArrays?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Minimum array length to use tabular format
|
|
75
|
+
* @default 2
|
|
76
|
+
*/
|
|
77
|
+
minArrayLengthForTabular?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Transform function applied before stringifying (similar to JSON.stringify replacer)
|
|
80
|
+
*/
|
|
81
|
+
replacer?: (key: string, value: any) => any;
|
|
82
|
+
/**
|
|
83
|
+
* File system flags (e.g., 'w', 'a')
|
|
84
|
+
* @default 'w'
|
|
85
|
+
*/
|
|
86
|
+
flag?: string;
|
|
87
|
+
/**
|
|
88
|
+
* File mode (permissions)
|
|
89
|
+
*/
|
|
90
|
+
mode?: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Options for parsing TOON strings
|
|
94
|
+
*/
|
|
95
|
+
export interface ParseOptions {
|
|
96
|
+
/**
|
|
97
|
+
* Transform function applied to parsed values
|
|
98
|
+
*/
|
|
99
|
+
reviver?: (key: string, value: any) => any;
|
|
100
|
+
/**
|
|
101
|
+
* Indent size (default: 2)
|
|
102
|
+
*/
|
|
103
|
+
indentSize?: number;
|
|
104
|
+
/**
|
|
105
|
+
* Strict mode
|
|
106
|
+
* @default true
|
|
107
|
+
*/
|
|
108
|
+
strict?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Options for stringifying objects to TOON
|
|
112
|
+
*/
|
|
113
|
+
export interface StringifyOptions {
|
|
114
|
+
/**
|
|
115
|
+
* Spaces per indent level
|
|
116
|
+
* @default 2
|
|
117
|
+
*/
|
|
118
|
+
indentSize?: number;
|
|
119
|
+
/**
|
|
120
|
+
* Delimiter for arrays
|
|
121
|
+
* @default ','
|
|
122
|
+
*/
|
|
123
|
+
delimiter?: ',' | '\t' | '|' | string;
|
|
124
|
+
/**
|
|
125
|
+
* End-of-line character(s)
|
|
126
|
+
* @default '\n'
|
|
127
|
+
*/
|
|
128
|
+
EOL?: '\n' | '\r\n' | string;
|
|
129
|
+
/**
|
|
130
|
+
* Include EOL at end of file
|
|
131
|
+
* @default true
|
|
132
|
+
*/
|
|
133
|
+
finalEOL?: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Use tabular format for uniform arrays
|
|
136
|
+
* @default true
|
|
137
|
+
*/
|
|
138
|
+
tabularArrays?: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Minimum array length for tabular format
|
|
141
|
+
* @default 2
|
|
142
|
+
*/
|
|
143
|
+
minArrayLengthForTabular?: number;
|
|
144
|
+
/**
|
|
145
|
+
* Transform function applied before stringifying
|
|
146
|
+
*/
|
|
147
|
+
replacer?: (key: string, value: any) => any;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Callback function for async operations
|
|
151
|
+
*/
|
|
152
|
+
export type Callback<T> = (err: Error | null, data?: T) => void;
|
|
153
|
+
/**
|
|
154
|
+
* TOON value types
|
|
155
|
+
*/
|
|
156
|
+
export type ToonValue = string | number | boolean | null | ToonArray | ToonObject;
|
|
157
|
+
export interface ToonObject {
|
|
158
|
+
[key: string]: ToonValue;
|
|
159
|
+
}
|
|
160
|
+
export type ToonArray = ToonValue[];
|
|
161
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,EAAE,MAAM,IAAI,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;IAEd;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAA;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAE3C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAA;IAErC;;;OAGG;IACH,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;CAC5C;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,UAAU,CAAA;AAEd,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,EAAE,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON Format Parser and Serializer
|
|
3
|
+
*
|
|
4
|
+
* Custom implementation supporting basic TOON features.
|
|
5
|
+
*/
|
|
6
|
+
import type { ParseOptions, StringifyOptions } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Parse TOON string to JavaScript object
|
|
9
|
+
*/
|
|
10
|
+
export declare function parse(content: string | Buffer, options?: ParseOptions): any;
|
|
11
|
+
/**
|
|
12
|
+
* Stringify JavaScript object to TOON format
|
|
13
|
+
*/
|
|
14
|
+
export declare function stringify(obj: any, options?: StringifyOptions): string;
|
|
15
|
+
export declare function stripBom(content: string | Buffer): string;
|
|
16
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAEjB,MAAM,SAAS,CAAA;AAEhB;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,GAAG,CAuE/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAqD1E;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGzD"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TOON Format Parser and Serializer
|
|
4
|
+
*
|
|
5
|
+
* Custom implementation supporting basic TOON features.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parse = parse;
|
|
9
|
+
exports.stringify = stringify;
|
|
10
|
+
exports.stripBom = stripBom;
|
|
11
|
+
/**
|
|
12
|
+
* Parse TOON string to JavaScript object
|
|
13
|
+
*/
|
|
14
|
+
function parse(content, options = {}) {
|
|
15
|
+
if (Buffer.isBuffer(content)) {
|
|
16
|
+
content = content.toString('utf8');
|
|
17
|
+
}
|
|
18
|
+
content = stripBom(content);
|
|
19
|
+
const lines = content.split(/\r?\n/);
|
|
20
|
+
const indentSize = options.indentSize || 2;
|
|
21
|
+
const stack = [{ obj: {}, indent: -indentSize }];
|
|
22
|
+
for (let i = 0; i < lines.length; i++) {
|
|
23
|
+
const line = lines[i];
|
|
24
|
+
// Skip empty lines and comments
|
|
25
|
+
if (!line.trim() || line.trim().startsWith('#'))
|
|
26
|
+
continue;
|
|
27
|
+
const indent = getIndentLevel(line);
|
|
28
|
+
const trimmedLine = line.trim();
|
|
29
|
+
// Pop stack until we find the right parent
|
|
30
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
31
|
+
stack.pop();
|
|
32
|
+
}
|
|
33
|
+
const parent = stack[stack.length - 1].obj;
|
|
34
|
+
// Parse key-value
|
|
35
|
+
if (trimmedLine.includes(':')) {
|
|
36
|
+
const colonIndex = trimmedLine.indexOf(':');
|
|
37
|
+
const key = trimmedLine.substring(0, colonIndex).trim();
|
|
38
|
+
const valueStr = trimmedLine.substring(colonIndex + 1).trim();
|
|
39
|
+
// Check for array declaration: key[length]
|
|
40
|
+
const arrayMatch = key.match(/^(.+)\[(\d+)\]$/);
|
|
41
|
+
if (arrayMatch) {
|
|
42
|
+
// Inline array: scores[3]: 95,87,92
|
|
43
|
+
const arrayName = arrayMatch[1];
|
|
44
|
+
const arrayLength = parseInt(arrayMatch[2], 10);
|
|
45
|
+
if (valueStr) {
|
|
46
|
+
parent[arrayName] = parseInlineArray(valueStr, arrayLength);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
parent[arrayName] = [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (valueStr) {
|
|
53
|
+
// Simple key-value
|
|
54
|
+
parent[key] = parseValue(valueStr);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Nested object
|
|
58
|
+
const newObj = {};
|
|
59
|
+
parent[key] = newObj;
|
|
60
|
+
stack.push({ obj: newObj, indent });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const result = stack[0].obj;
|
|
65
|
+
if (options.reviver) {
|
|
66
|
+
return applyReviver(result, options.reviver);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Stringify JavaScript object to TOON format
|
|
72
|
+
*/
|
|
73
|
+
function stringify(obj, options = {}) {
|
|
74
|
+
const indentSize = options.indentSize || 2;
|
|
75
|
+
const delimiter = options.delimiter || ',';
|
|
76
|
+
const lines = [];
|
|
77
|
+
function serializeObject(o, depth = 0) {
|
|
78
|
+
const indent = ' '.repeat(depth * indentSize);
|
|
79
|
+
for (const [key, value] of Object.entries(o)) {
|
|
80
|
+
if (Array.isArray(value)) {
|
|
81
|
+
const arrayStr = value.map(v => serializeValue(v)).join(delimiter);
|
|
82
|
+
lines.push(`${indent}${key}[${value.length}]: ${arrayStr}`);
|
|
83
|
+
}
|
|
84
|
+
else if (value !== null && typeof value === 'object') {
|
|
85
|
+
lines.push(`${indent}${key}:`);
|
|
86
|
+
serializeObject(value, depth + 1);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
lines.push(`${indent}${key}: ${serializeValue(value)}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function serializeValue(value) {
|
|
94
|
+
if (value === null)
|
|
95
|
+
return 'null';
|
|
96
|
+
if (typeof value === 'boolean')
|
|
97
|
+
return value.toString();
|
|
98
|
+
if (typeof value === 'number')
|
|
99
|
+
return value.toString();
|
|
100
|
+
if (typeof value === 'string') {
|
|
101
|
+
if (needsQuotes(value, delimiter)) {
|
|
102
|
+
return `"${escapeString(value)}"`;
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
return String(value);
|
|
107
|
+
}
|
|
108
|
+
serializeObject(obj);
|
|
109
|
+
let result = lines.join('\n');
|
|
110
|
+
// Handle finalEOL (default: true)
|
|
111
|
+
const finalEOL = options.finalEOL !== undefined ? options.finalEOL : true;
|
|
112
|
+
if (finalEOL && !result.endsWith('\n')) {
|
|
113
|
+
result += '\n';
|
|
114
|
+
}
|
|
115
|
+
else if (!finalEOL && result.endsWith('\n')) {
|
|
116
|
+
result = result.slice(0, -1);
|
|
117
|
+
}
|
|
118
|
+
// Handle EOL customization
|
|
119
|
+
const EOL = options.EOL || '\n';
|
|
120
|
+
if (EOL !== '\n') {
|
|
121
|
+
result = result.replace(/\n/g, EOL);
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
function stripBom(content) {
|
|
126
|
+
if (Buffer.isBuffer(content))
|
|
127
|
+
content = content.toString('utf8');
|
|
128
|
+
return content.replace(/^\uFEFF/, '');
|
|
129
|
+
}
|
|
130
|
+
function applyReviver(obj, reviver) {
|
|
131
|
+
return reviver('', obj);
|
|
132
|
+
}
|
|
133
|
+
function parseInlineArray(valueStr, expectedLength) {
|
|
134
|
+
const delimiter = detectDelimiter(valueStr);
|
|
135
|
+
const values = valueStr.split(delimiter).map(v => parseValue(v.trim()));
|
|
136
|
+
if (expectedLength !== undefined && values.length !== expectedLength) {
|
|
137
|
+
console.warn(`[toonfile] Array length mismatch: expected ${expectedLength}, got ${values.length}`);
|
|
138
|
+
}
|
|
139
|
+
return values;
|
|
140
|
+
}
|
|
141
|
+
function detectDelimiter(str) {
|
|
142
|
+
if (str.includes('\t'))
|
|
143
|
+
return '\t';
|
|
144
|
+
if (str.includes('|'))
|
|
145
|
+
return '|';
|
|
146
|
+
return ',';
|
|
147
|
+
}
|
|
148
|
+
function parseValue(str) {
|
|
149
|
+
if (str === 'null')
|
|
150
|
+
return null;
|
|
151
|
+
if (str === 'true')
|
|
152
|
+
return true;
|
|
153
|
+
if (str === 'false')
|
|
154
|
+
return false;
|
|
155
|
+
if (/^-?\d+(\.\d+)?$/.test(str)) {
|
|
156
|
+
return parseFloat(str);
|
|
157
|
+
}
|
|
158
|
+
if ((str.startsWith('"') && str.endsWith('"')) ||
|
|
159
|
+
(str.startsWith("'") && str.endsWith("'"))) {
|
|
160
|
+
return unescapeString(str.slice(1, -1));
|
|
161
|
+
}
|
|
162
|
+
return str;
|
|
163
|
+
}
|
|
164
|
+
function getIndentLevel(line) {
|
|
165
|
+
const match = line.match(/^( *)/);
|
|
166
|
+
return match ? match[1].length : 0;
|
|
167
|
+
}
|
|
168
|
+
function needsQuotes(str, delimiter) {
|
|
169
|
+
const reservedWords = ['true', 'false', 'null'];
|
|
170
|
+
if (reservedWords.includes(str))
|
|
171
|
+
return true;
|
|
172
|
+
if (str.includes(delimiter))
|
|
173
|
+
return true;
|
|
174
|
+
if (str.includes(':'))
|
|
175
|
+
return true;
|
|
176
|
+
if (str.includes('\n') || str.includes('\r') || str.includes('\t'))
|
|
177
|
+
return true;
|
|
178
|
+
if (/^-?\d+(\.\d+)?$/.test(str))
|
|
179
|
+
return true;
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
function escapeString(str) {
|
|
183
|
+
return str
|
|
184
|
+
.replace(/\\/g, '\\\\')
|
|
185
|
+
.replace(/"/g, '\\"')
|
|
186
|
+
.replace(/\n/g, '\\n')
|
|
187
|
+
.replace(/\r/g, '\\r')
|
|
188
|
+
.replace(/\t/g, '\\t');
|
|
189
|
+
}
|
|
190
|
+
function unescapeString(str) {
|
|
191
|
+
return str
|
|
192
|
+
.replace(/\\n/g, '\n')
|
|
193
|
+
.replace(/\\r/g, '\r')
|
|
194
|
+
.replace(/\\t/g, '\t')
|
|
195
|
+
.replace(/\\"/g, '"')
|
|
196
|
+
.replace(/\\'/g, "'")
|
|
197
|
+
.replace(/\\\\/g, '\\');
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "toonfile",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Easily read/write TOON files. Like jsonfile, but for TOON format.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"toon",
|
|
7
|
+
"toon-format",
|
|
8
|
+
"file",
|
|
9
|
+
"read",
|
|
10
|
+
"write",
|
|
11
|
+
"fs",
|
|
12
|
+
"llm",
|
|
13
|
+
"token-efficient",
|
|
14
|
+
"json",
|
|
15
|
+
"parser",
|
|
16
|
+
"serializer",
|
|
17
|
+
"config",
|
|
18
|
+
"configuration",
|
|
19
|
+
"data"
|
|
20
|
+
],
|
|
21
|
+
"author": {
|
|
22
|
+
"name": "ideas2code",
|
|
23
|
+
"url": "https://www.npmjs.com/~ideas2code"
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"homepage": "https://github.com/ideas2codedev/node-toonfile#readme",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/ideas2codedev/node-toonfile/issues"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/ideas2codedev/node-toonfile.git"
|
|
33
|
+
},
|
|
34
|
+
"main": "dist/index.js",
|
|
35
|
+
"types": "dist/index.d.ts",
|
|
36
|
+
"files": [
|
|
37
|
+
"dist/**/*",
|
|
38
|
+
"src/**/*"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"clean": "rimraf dist",
|
|
43
|
+
"prebuild": "npm run clean",
|
|
44
|
+
"lint": "standard",
|
|
45
|
+
"test": "npm run build && npm run unit",
|
|
46
|
+
"unit": "mocha",
|
|
47
|
+
"prepublishOnly": "npm run build"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"universalify": "^2.0.0"
|
|
51
|
+
},
|
|
52
|
+
"optionalDependencies": {
|
|
53
|
+
"graceful-fs": "^4.1.6"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/mocha": "^10.0.10",
|
|
57
|
+
"@types/node": "^25.0.3",
|
|
58
|
+
"mocha": "^10.0.0",
|
|
59
|
+
"rimraf": "^5.0.0",
|
|
60
|
+
"standard": "^17.0.0",
|
|
61
|
+
"ts-node": "^10.9.2",
|
|
62
|
+
"typescript": "^5.9.3"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=14"
|
|
66
|
+
},
|
|
67
|
+
"standard": {
|
|
68
|
+
"env": [
|
|
69
|
+
"mocha"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|