fastyaml-rs 0.1.5 → 0.1.6

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/index.d.ts CHANGED
@@ -1,126 +1,172 @@
1
- /**
2
- * Fast YAML 1.2.2 parser for Node.js, powered by Rust
3
- *
4
- * This module provides high-performance YAML parsing and serialization
5
- * with 5-10x speedup over pure JavaScript implementations.
6
- *
7
- * @module @fast-yaml/core
8
- */
9
-
10
- /**
11
- * Options for YAML serialization.
12
- */
1
+ /* auto-generated by NAPI-RS */
2
+ /* eslint-disable */
3
+ /** Options for YAML serialization. */
13
4
  export interface DumpOptions {
5
+ /** If true, sort object keys alphabetically (default: false) */
6
+ sortKeys?: boolean
14
7
  /**
15
- * If true, sort object keys alphabetically (default: false)
16
- */
17
- sortKeys?: boolean;
18
-
19
- /**
20
- * Allow unicode characters (default: true)
21
- * Note: yaml-rust2 always outputs unicode; this is accepted for API compatibility
8
+ * Allow unicode characters (default: true).
9
+ * Note: yaml-rust2 always outputs unicode; this is accepted for API compatibility.
22
10
  */
23
- allowUnicode?: boolean;
11
+ allowUnicode?: boolean
24
12
  }
25
13
 
26
14
  /**
27
- * Parse a YAML string and return a JavaScript object.
28
- * Equivalent to js-yaml's `safeLoad()`.
15
+ * Serialize a JavaScript object to a YAML string.
29
16
  *
30
- * @param yamlStr - YAML string to parse
31
- * @returns Parsed JavaScript object
32
- * @throws {Error} If YAML is invalid or exceeds 100MB limit
17
+ * This is equivalent to js-yaml's `safeDump()` and `PyYAML`'s `safe_dump()`.
33
18
  *
34
- * @example
35
- * ```typescript
36
- * import { safeLoad } from '@fast-yaml/core';
19
+ * # Arguments
37
20
  *
38
- * const data = safeLoad('name: test\nvalue: 123');
39
- * console.log(data); // { name: 'test', value: 123 }
21
+ * * `data` - A JavaScript object to serialize (Object, Array, string, number, boolean, null)
22
+ * * `options` - Optional serialization options
23
+ *
24
+ * # Returns
25
+ *
26
+ * A YAML string representation of the object
27
+ *
28
+ * # Errors
29
+ *
30
+ * Throws an error if the object contains non-serializable types.
31
+ *
32
+ * # Example
33
+ *
34
+ * ```javascript
35
+ * const { safeDump } = require('@fast-yaml/core');
36
+ *
37
+ * const yaml = safeDump({ name: 'test', value: 123 });
38
+ * console.log(yaml); // 'name: test
39
+ value: 123
40
+ '
40
41
  * ```
41
42
  */
42
- export function safeLoad(yamlStr: string): unknown;
43
+ export declare function safeDump(data: unknown, options?: DumpOptions | undefined | null): NapiResult<string>
43
44
 
44
45
  /**
45
- * Parse a YAML string containing multiple documents.
46
- * Equivalent to js-yaml's `safeLoadAll()`.
46
+ * Serialize multiple JavaScript objects to a YAML string with document separators.
47
47
  *
48
- * @param yamlStr - YAML string potentially containing multiple documents
49
- * @returns Array of parsed JavaScript objects
50
- * @throws {Error} If YAML is invalid or exceeds 100MB limit
48
+ * This is equivalent to js-yaml's `safeDumpAll()` and `PyYAML`'s `safe_dump_all()`.
51
49
  *
52
- * @example
53
- * ```typescript
54
- * import { safeLoadAll } from '@fast-yaml/core';
50
+ * # Arguments
55
51
  *
56
- * const docs = safeLoadAll('---\nfoo: 1\n---\nbar: 2');
57
- * console.log(docs); // [{ foo: 1 }, { bar: 2 }]
52
+ * * `documents` - An array of JavaScript objects to serialize
53
+ * * `options` - Optional serialization options
54
+ *
55
+ * # Returns
56
+ *
57
+ * A YAML string with multiple documents separated by "---"
58
+ *
59
+ * # Errors
60
+ *
61
+ * Throws an error if:
62
+ * - Any object cannot be serialized
63
+ * - Total output size exceeds 100MB limit
64
+ *
65
+ * # Security
66
+ *
67
+ * Maximum output size is limited to 100MB to prevent memory exhaustion.
68
+ *
69
+ * # Example
70
+ *
71
+ * ```javascript
72
+ * const { safeDumpAll } = require('@fast-yaml/core');
73
+ *
74
+ * const yaml = safeDumpAll([{ a: 1 }, { b: 2 }]);
75
+ * console.log(yaml); // '---
76
+ a: 1
77
+ ---
78
+ b: 2
79
+ '
58
80
  * ```
59
81
  */
60
- export function safeLoadAll(yamlStr: string): unknown[];
82
+ export declare function safeDumpAll(documents: Array<unknown>, options?: DumpOptions | undefined | null): NapiResult<string>
61
83
 
62
84
  /**
63
- * Serialize a JavaScript object to YAML string.
64
- * Equivalent to js-yaml's `safeDump()`.
85
+ * Parse a YAML string and return a JavaScript object.
65
86
  *
66
- * @param data - JavaScript object to serialize
67
- * @param options - Serialization options
68
- * @returns YAML string representation
69
- * @throws {TypeError} If object contains non-serializable types
87
+ * This is equivalent to js-yaml's `safeLoad()` and `PyYAML`'s `safe_load()`.
70
88
  *
71
- * @example
72
- * ```typescript
73
- * import { safeDump } from '@fast-yaml/core';
89
+ * # Arguments
74
90
  *
75
- * const yaml = safeDump({ name: 'test', value: 123 });
76
- * console.log(yaml); // 'name: test\nvalue: 123\n'
91
+ * * `yaml_str` - A YAML document as a string
92
+ *
93
+ * # Returns
94
+ *
95
+ * The parsed YAML document as JavaScript objects (Object, Array, string, number, boolean, null)
96
+ *
97
+ * # Errors
98
+ *
99
+ * Throws an error if:
100
+ * - The YAML is invalid
101
+ * - Input exceeds size limit (100MB)
102
+ *
103
+ * # Security
104
+ *
105
+ * Maximum input size is limited to 100MB to prevent denial-of-service attacks.
106
+ *
107
+ * # Example
108
+ *
109
+ * ```javascript
110
+ * const { safeLoad } = require('@fast-yaml/core');
111
+ *
112
+ * const data = safeLoad('name: test
113
+ value: 123');
114
+ * console.log(data); // { name: 'test', value: 123 }
77
115
  * ```
78
116
  */
79
- export function safeDump(data: unknown, options?: DumpOptions): string;
117
+ export declare function safeLoad(yamlStr: string): NapiResult<unknown>
80
118
 
81
119
  /**
82
- * Serialize multiple JavaScript objects to YAML with document separators.
83
- * Equivalent to js-yaml's `safeDumpAll()`.
120
+ * Parse a YAML string containing multiple documents.
84
121
  *
85
- * @param documents - Array of JavaScript objects to serialize
86
- * @param options - Serialization options
87
- * @returns YAML string with '---' separators
88
- * @throws {TypeError} If any object cannot be serialized
89
- * @throws {Error} If output exceeds 100MB limit
122
+ * This is equivalent to js-yaml's `safeLoadAll()` and `PyYAML`'s `safe_load_all()`.
90
123
  *
91
- * @example
92
- * ```typescript
93
- * import { safeDumpAll } from '@fast-yaml/core';
124
+ * # Arguments
94
125
  *
95
- * const yaml = safeDumpAll([{ a: 1 }, { b: 2 }]);
96
- * console.log(yaml); // '---\na: 1\n---\nb: 2\n'
126
+ * * `yaml_str` - A YAML string potentially containing multiple documents
127
+ *
128
+ * # Returns
129
+ *
130
+ * An array of parsed JavaScript objects
131
+ *
132
+ * # Errors
133
+ *
134
+ * Throws an error if:
135
+ * - The YAML is invalid
136
+ * - Input exceeds size limit (100MB)
137
+ *
138
+ * # Security
139
+ *
140
+ * Maximum input size is limited to 100MB to prevent denial-of-service attacks.
141
+ *
142
+ * # Example
143
+ *
144
+ * ```javascript
145
+ * const { safeLoadAll } = require('@fast-yaml/core');
146
+ *
147
+ * const docs = safeLoadAll('---
148
+ foo: 1
149
+ ---
150
+ bar: 2');
151
+ * console.log(docs); // [{ foo: 1 }, { bar: 2 }]
97
152
  * ```
98
153
  */
99
- export function safeDumpAll(documents: unknown[], options?: DumpOptions): string;
154
+ export declare function safeLoadAll(yamlStr: string): NapiResult<Array<unknown>>
100
155
 
101
156
  /**
102
157
  * Get the library version.
103
158
  *
104
- * @returns Version string (e.g., "0.1.0")
159
+ * Returns the version string of the fast-yaml-nodejs crate.
105
160
  *
106
- * @example
107
- * ```typescript
108
- * import { version } from '@fast-yaml/core';
161
+ * # Examples
109
162
  *
163
+ * ```javascript
164
+ * const { version } = require('@fast-yaml/core');
110
165
  * console.log(version()); // "0.1.0"
111
166
  * ```
112
167
  */
113
- export function version(): string;
168
+ export declare function version(): string
114
169
 
115
170
  // Aliases for js-yaml compatibility
116
- /**
117
- * Alias for safeLoad() for js-yaml compatibility.
118
- * @deprecated Use safeLoad() instead
119
- */
120
- export { safeLoad as load };
121
-
122
- /**
123
- * Alias for safeDump() for js-yaml compatibility.
124
- * @deprecated Use safeDump() instead
125
- */
126
- export { safeDump as dump };
171
+ export declare const load: typeof safeLoad
172
+ export declare const dump: typeof safeDump
package/index.js CHANGED
@@ -1,248 +1,583 @@
1
- /**
2
- * fast-yaml-nodejs entry point
3
- *
4
- * This file will be auto-generated by NAPI-RS during build.
5
- * This placeholder ensures the module can be required during development.
6
- */
1
+ // prettier-ignore
2
+ /* eslint-disable */
3
+ // @ts-nocheck
4
+ /* auto-generated by NAPI-RS */
7
5
 
8
- const { existsSync, readFileSync } = require('fs');
9
- const { join } = require('path');
6
+ const { readFileSync } = require('node:fs')
7
+ let nativeBinding = null
8
+ const loadErrors = []
10
9
 
11
- const { platform, arch } = process;
10
+ const isMusl = () => {
11
+ let musl = false
12
+ if (process.platform === 'linux') {
13
+ musl = isMuslFromFilesystem()
14
+ if (musl === null) {
15
+ musl = isMuslFromReport()
16
+ }
17
+ if (musl === null) {
18
+ musl = isMuslFromChildProcess()
19
+ }
20
+ }
21
+ return musl
22
+ }
12
23
 
13
- let nativeBinding = null;
14
- let localFileExisted = false;
15
- let loadError = null;
24
+ const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
16
25
 
17
- function isMusl() {
18
- // For Node 10
19
- if (!process.report || typeof process.report.getReport !== 'function') {
20
- try {
21
- const lddPath = require('child_process').execSync('which ldd').toString().trim();
22
- return readFileSync(lddPath, 'utf8').includes('musl');
23
- } catch (e) {
24
- return true;
26
+ const isMuslFromFilesystem = () => {
27
+ try {
28
+ return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
29
+ } catch {
30
+ return null
31
+ }
32
+ }
33
+
34
+ const isMuslFromReport = () => {
35
+ let report = null
36
+ if (typeof process.report?.getReport === 'function') {
37
+ process.report.excludeNetwork = true
38
+ report = process.report.getReport()
39
+ }
40
+ if (!report) {
41
+ return null
42
+ }
43
+ if (report.header && report.header.glibcVersionRuntime) {
44
+ return false
45
+ }
46
+ if (Array.isArray(report.sharedObjects)) {
47
+ if (report.sharedObjects.some(isFileMusl)) {
48
+ return true
25
49
  }
26
- } else {
27
- const { glibcVersionRuntime } = process.report.getReport().header;
28
- return !glibcVersionRuntime;
29
50
  }
51
+ return false
30
52
  }
31
53
 
32
- switch (platform) {
33
- case 'android':
34
- switch (arch) {
35
- case 'arm64':
36
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.android-arm64.node'));
37
- try {
38
- if (localFileExisted) {
39
- nativeBinding = require('./fast-yaml.android-arm64.node');
40
- } else {
41
- nativeBinding = require('@fast-yaml/android-arm64');
42
- }
54
+ const isMuslFromChildProcess = () => {
55
+ try {
56
+ return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
57
+ } catch (e) {
58
+ // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
59
+ return false
60
+ }
61
+ }
62
+
63
+ function requireNative() {
64
+ if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
65
+ try {
66
+ return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
67
+ } catch (err) {
68
+ loadErrors.push(err)
69
+ }
70
+ } else if (process.platform === 'android') {
71
+ if (process.arch === 'arm64') {
72
+ try {
73
+ return require('./fastyaml-rs.android-arm64.node')
74
+ } catch (e) {
75
+ loadErrors.push(e)
76
+ }
77
+ try {
78
+ const binding = require('fastyaml-rs-android-arm64')
79
+ const bindingPackageVersion = require('fastyaml-rs-android-arm64/package.json').version
80
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
81
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
82
+ }
83
+ return binding
84
+ } catch (e) {
85
+ loadErrors.push(e)
86
+ }
87
+ } else if (process.arch === 'arm') {
88
+ try {
89
+ return require('./fastyaml-rs.android-arm-eabi.node')
90
+ } catch (e) {
91
+ loadErrors.push(e)
92
+ }
93
+ try {
94
+ const binding = require('fastyaml-rs-android-arm-eabi')
95
+ const bindingPackageVersion = require('fastyaml-rs-android-arm-eabi/package.json').version
96
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
97
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
98
+ }
99
+ return binding
100
+ } catch (e) {
101
+ loadErrors.push(e)
102
+ }
103
+ } else {
104
+ loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
105
+ }
106
+ } else if (process.platform === 'win32') {
107
+ if (process.arch === 'x64') {
108
+ if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
109
+ try {
110
+ return require('./fastyaml-rs.win32-x64-gnu.node')
111
+ } catch (e) {
112
+ loadErrors.push(e)
113
+ }
114
+ try {
115
+ const binding = require('fastyaml-rs-win32-x64-gnu')
116
+ const bindingPackageVersion = require('fastyaml-rs-win32-x64-gnu/package.json').version
117
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
118
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
119
+ }
120
+ return binding
121
+ } catch (e) {
122
+ loadErrors.push(e)
123
+ }
124
+ } else {
125
+ try {
126
+ return require('./fastyaml-rs.win32-x64-msvc.node')
127
+ } catch (e) {
128
+ loadErrors.push(e)
129
+ }
130
+ try {
131
+ const binding = require('fastyaml-rs-win32-x64-msvc')
132
+ const bindingPackageVersion = require('fastyaml-rs-win32-x64-msvc/package.json').version
133
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
134
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
135
+ }
136
+ return binding
137
+ } catch (e) {
138
+ loadErrors.push(e)
139
+ }
140
+ }
141
+ } else if (process.arch === 'ia32') {
142
+ try {
143
+ return require('./fastyaml-rs.win32-ia32-msvc.node')
144
+ } catch (e) {
145
+ loadErrors.push(e)
146
+ }
147
+ try {
148
+ const binding = require('fastyaml-rs-win32-ia32-msvc')
149
+ const bindingPackageVersion = require('fastyaml-rs-win32-ia32-msvc/package.json').version
150
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
151
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
152
+ }
153
+ return binding
154
+ } catch (e) {
155
+ loadErrors.push(e)
156
+ }
157
+ } else if (process.arch === 'arm64') {
158
+ try {
159
+ return require('./fastyaml-rs.win32-arm64-msvc.node')
160
+ } catch (e) {
161
+ loadErrors.push(e)
162
+ }
163
+ try {
164
+ const binding = require('fastyaml-rs-win32-arm64-msvc')
165
+ const bindingPackageVersion = require('fastyaml-rs-win32-arm64-msvc/package.json').version
166
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
167
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
168
+ }
169
+ return binding
170
+ } catch (e) {
171
+ loadErrors.push(e)
172
+ }
173
+ } else {
174
+ loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
175
+ }
176
+ } else if (process.platform === 'darwin') {
177
+ try {
178
+ return require('./fastyaml-rs.darwin-universal.node')
179
+ } catch (e) {
180
+ loadErrors.push(e)
181
+ }
182
+ try {
183
+ const binding = require('fastyaml-rs-darwin-universal')
184
+ const bindingPackageVersion = require('fastyaml-rs-darwin-universal/package.json').version
185
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
186
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
187
+ }
188
+ return binding
189
+ } catch (e) {
190
+ loadErrors.push(e)
191
+ }
192
+ if (process.arch === 'x64') {
193
+ try {
194
+ return require('./fastyaml-rs.darwin-x64.node')
195
+ } catch (e) {
196
+ loadErrors.push(e)
197
+ }
198
+ try {
199
+ const binding = require('fastyaml-rs-darwin-x64')
200
+ const bindingPackageVersion = require('fastyaml-rs-darwin-x64/package.json').version
201
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
202
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
203
+ }
204
+ return binding
205
+ } catch (e) {
206
+ loadErrors.push(e)
207
+ }
208
+ } else if (process.arch === 'arm64') {
209
+ try {
210
+ return require('./fastyaml-rs.darwin-arm64.node')
211
+ } catch (e) {
212
+ loadErrors.push(e)
213
+ }
214
+ try {
215
+ const binding = require('fastyaml-rs-darwin-arm64')
216
+ const bindingPackageVersion = require('fastyaml-rs-darwin-arm64/package.json').version
217
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
218
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
219
+ }
220
+ return binding
221
+ } catch (e) {
222
+ loadErrors.push(e)
223
+ }
224
+ } else {
225
+ loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
226
+ }
227
+ } else if (process.platform === 'freebsd') {
228
+ if (process.arch === 'x64') {
229
+ try {
230
+ return require('./fastyaml-rs.freebsd-x64.node')
231
+ } catch (e) {
232
+ loadErrors.push(e)
233
+ }
234
+ try {
235
+ const binding = require('fastyaml-rs-freebsd-x64')
236
+ const bindingPackageVersion = require('fastyaml-rs-freebsd-x64/package.json').version
237
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
238
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
239
+ }
240
+ return binding
241
+ } catch (e) {
242
+ loadErrors.push(e)
243
+ }
244
+ } else if (process.arch === 'arm64') {
245
+ try {
246
+ return require('./fastyaml-rs.freebsd-arm64.node')
247
+ } catch (e) {
248
+ loadErrors.push(e)
249
+ }
250
+ try {
251
+ const binding = require('fastyaml-rs-freebsd-arm64')
252
+ const bindingPackageVersion = require('fastyaml-rs-freebsd-arm64/package.json').version
253
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
254
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
255
+ }
256
+ return binding
257
+ } catch (e) {
258
+ loadErrors.push(e)
259
+ }
260
+ } else {
261
+ loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
262
+ }
263
+ } else if (process.platform === 'linux') {
264
+ if (process.arch === 'x64') {
265
+ if (isMusl()) {
266
+ try {
267
+ return require('./fastyaml-rs.linux-x64-musl.node')
43
268
  } catch (e) {
44
- loadError = e;
269
+ loadErrors.push(e)
45
270
  }
46
- break;
47
- case 'arm':
48
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.android-arm-eabi.node'));
49
271
  try {
50
- if (localFileExisted) {
51
- nativeBinding = require('./fast-yaml.android-arm-eabi.node');
52
- } else {
53
- nativeBinding = require('@fast-yaml/android-arm-eabi');
272
+ const binding = require('fastyaml-rs-linux-x64-musl')
273
+ const bindingPackageVersion = require('fastyaml-rs-linux-x64-musl/package.json').version
274
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
275
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
54
276
  }
277
+ return binding
55
278
  } catch (e) {
56
- loadError = e;
279
+ loadErrors.push(e)
57
280
  }
58
- break;
59
- default:
60
- throw new Error(`Unsupported architecture on Android ${arch}`);
61
- }
62
- break;
63
- case 'win32':
64
- switch (arch) {
65
- case 'x64':
66
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.win32-x64-msvc.node'));
67
- try {
68
- if (localFileExisted) {
69
- nativeBinding = require('./fast-yaml.win32-x64-msvc.node');
70
- } else {
71
- nativeBinding = require('@fast-yaml/win32-x64-msvc');
72
- }
281
+ } else {
282
+ try {
283
+ return require('./fastyaml-rs.linux-x64-gnu.node')
73
284
  } catch (e) {
74
- loadError = e;
285
+ loadErrors.push(e)
75
286
  }
76
- break;
77
- case 'ia32':
78
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.win32-ia32-msvc.node'));
79
287
  try {
80
- if (localFileExisted) {
81
- nativeBinding = require('./fast-yaml.win32-ia32-msvc.node');
82
- } else {
83
- nativeBinding = require('@fast-yaml/win32-ia32-msvc');
288
+ const binding = require('fastyaml-rs-linux-x64-gnu')
289
+ const bindingPackageVersion = require('fastyaml-rs-linux-x64-gnu/package.json').version
290
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
291
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
84
292
  }
293
+ return binding
85
294
  } catch (e) {
86
- loadError = e;
295
+ loadErrors.push(e)
87
296
  }
88
- break;
89
- case 'arm64':
90
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.win32-arm64-msvc.node'));
297
+ }
298
+ } else if (process.arch === 'arm64') {
299
+ if (isMusl()) {
91
300
  try {
92
- if (localFileExisted) {
93
- nativeBinding = require('./fast-yaml.win32-arm64-msvc.node');
94
- } else {
95
- nativeBinding = require('@fast-yaml/win32-arm64-msvc');
301
+ return require('./fastyaml-rs.linux-arm64-musl.node')
302
+ } catch (e) {
303
+ loadErrors.push(e)
304
+ }
305
+ try {
306
+ const binding = require('fastyaml-rs-linux-arm64-musl')
307
+ const bindingPackageVersion = require('fastyaml-rs-linux-arm64-musl/package.json').version
308
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
309
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
96
310
  }
311
+ return binding
97
312
  } catch (e) {
98
- loadError = e;
313
+ loadErrors.push(e)
99
314
  }
100
- break;
101
- default:
102
- throw new Error(`Unsupported architecture on Windows: ${arch}`);
103
- }
104
- break;
105
- case 'darwin':
106
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.darwin-universal.node'));
107
- try {
108
- if (localFileExisted) {
109
- nativeBinding = require('./fast-yaml.darwin-universal.node');
110
315
  } else {
111
- nativeBinding = require('@fast-yaml/darwin-universal');
112
- }
113
- break;
114
- } catch {}
115
- switch (arch) {
116
- case 'x64':
117
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.darwin-x64.node'));
118
- try {
119
- if (localFileExisted) {
120
- nativeBinding = require('./fast-yaml.darwin-x64.node');
121
- } else {
122
- nativeBinding = require('@fast-yaml/darwin-x64');
316
+ try {
317
+ return require('./fastyaml-rs.linux-arm64-gnu.node')
318
+ } catch (e) {
319
+ loadErrors.push(e)
320
+ }
321
+ try {
322
+ const binding = require('fastyaml-rs-linux-arm64-gnu')
323
+ const bindingPackageVersion = require('fastyaml-rs-linux-arm64-gnu/package.json').version
324
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
325
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
123
326
  }
327
+ return binding
124
328
  } catch (e) {
125
- loadError = e;
329
+ loadErrors.push(e)
126
330
  }
127
- break;
128
- case 'arm64':
129
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.darwin-arm64.node'));
331
+ }
332
+ } else if (process.arch === 'arm') {
333
+ if (isMusl()) {
130
334
  try {
131
- if (localFileExisted) {
132
- nativeBinding = require('./fast-yaml.darwin-arm64.node');
133
- } else {
134
- nativeBinding = require('@fast-yaml/darwin-arm64');
335
+ return require('./fastyaml-rs.linux-arm-musleabihf.node')
336
+ } catch (e) {
337
+ loadErrors.push(e)
338
+ }
339
+ try {
340
+ const binding = require('fastyaml-rs-linux-arm-musleabihf')
341
+ const bindingPackageVersion = require('fastyaml-rs-linux-arm-musleabihf/package.json').version
342
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
343
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
135
344
  }
345
+ return binding
136
346
  } catch (e) {
137
- loadError = e;
347
+ loadErrors.push(e)
138
348
  }
139
- break;
140
- default:
141
- throw new Error(`Unsupported architecture on macOS: ${arch}`);
142
- }
143
- break;
144
- case 'freebsd':
145
- if (arch !== 'x64') {
146
- throw new Error(`Unsupported architecture on FreeBSD: ${arch}`);
147
- }
148
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.freebsd-x64.node'));
149
- try {
150
- if (localFileExisted) {
151
- nativeBinding = require('./fast-yaml.freebsd-x64.node');
152
349
  } else {
153
- nativeBinding = require('@fast-yaml/freebsd-x64');
154
- }
155
- } catch (e) {
156
- loadError = e;
157
- }
158
- break;
159
- case 'linux':
160
- switch (arch) {
161
- case 'x64':
162
- if (isMusl()) {
163
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.linux-x64-musl.node'));
164
- try {
165
- if (localFileExisted) {
166
- nativeBinding = require('./fast-yaml.linux-x64-musl.node');
167
- } else {
168
- nativeBinding = require('@fast-yaml/linux-x64-musl');
169
- }
170
- } catch (e) {
171
- loadError = e;
350
+ try {
351
+ return require('./fastyaml-rs.linux-arm-gnueabihf.node')
352
+ } catch (e) {
353
+ loadErrors.push(e)
354
+ }
355
+ try {
356
+ const binding = require('fastyaml-rs-linux-arm-gnueabihf')
357
+ const bindingPackageVersion = require('fastyaml-rs-linux-arm-gnueabihf/package.json').version
358
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
359
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
172
360
  }
173
- } else {
174
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.linux-x64-gnu.node'));
175
- try {
176
- if (localFileExisted) {
177
- nativeBinding = require('./fast-yaml.linux-x64-gnu.node');
178
- } else {
179
- nativeBinding = require('@fast-yaml/linux-x64-gnu');
180
- }
181
- } catch (e) {
182
- loadError = e;
361
+ return binding
362
+ } catch (e) {
363
+ loadErrors.push(e)
364
+ }
365
+ }
366
+ } else if (process.arch === 'loong64') {
367
+ if (isMusl()) {
368
+ try {
369
+ return require('./fastyaml-rs.linux-loong64-musl.node')
370
+ } catch (e) {
371
+ loadErrors.push(e)
372
+ }
373
+ try {
374
+ const binding = require('fastyaml-rs-linux-loong64-musl')
375
+ const bindingPackageVersion = require('fastyaml-rs-linux-loong64-musl/package.json').version
376
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
377
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
183
378
  }
379
+ return binding
380
+ } catch (e) {
381
+ loadErrors.push(e)
382
+ }
383
+ } else {
384
+ try {
385
+ return require('./fastyaml-rs.linux-loong64-gnu.node')
386
+ } catch (e) {
387
+ loadErrors.push(e)
184
388
  }
185
- break;
186
- case 'arm64':
187
- if (isMusl()) {
188
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.linux-arm64-musl.node'));
189
- try {
190
- if (localFileExisted) {
191
- nativeBinding = require('./fast-yaml.linux-arm64-musl.node');
192
- } else {
193
- nativeBinding = require('@fast-yaml/linux-arm64-musl');
194
- }
195
- } catch (e) {
196
- loadError = e;
389
+ try {
390
+ const binding = require('fastyaml-rs-linux-loong64-gnu')
391
+ const bindingPackageVersion = require('fastyaml-rs-linux-loong64-gnu/package.json').version
392
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
393
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
197
394
  }
198
- } else {
199
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.linux-arm64-gnu.node'));
200
- try {
201
- if (localFileExisted) {
202
- nativeBinding = require('./fast-yaml.linux-arm64-gnu.node');
203
- } else {
204
- nativeBinding = require('@fast-yaml/linux-arm64-gnu');
205
- }
206
- } catch (e) {
207
- loadError = e;
395
+ return binding
396
+ } catch (e) {
397
+ loadErrors.push(e)
398
+ }
399
+ }
400
+ } else if (process.arch === 'riscv64') {
401
+ if (isMusl()) {
402
+ try {
403
+ return require('./fastyaml-rs.linux-riscv64-musl.node')
404
+ } catch (e) {
405
+ loadErrors.push(e)
406
+ }
407
+ try {
408
+ const binding = require('fastyaml-rs-linux-riscv64-musl')
409
+ const bindingPackageVersion = require('fastyaml-rs-linux-riscv64-musl/package.json').version
410
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
411
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
208
412
  }
413
+ return binding
414
+ } catch (e) {
415
+ loadErrors.push(e)
416
+ }
417
+ } else {
418
+ try {
419
+ return require('./fastyaml-rs.linux-riscv64-gnu.node')
420
+ } catch (e) {
421
+ loadErrors.push(e)
209
422
  }
210
- break;
211
- case 'arm':
212
- localFileExisted = existsSync(join(__dirname, 'fast-yaml.linux-arm-gnueabihf.node'));
213
423
  try {
214
- if (localFileExisted) {
215
- nativeBinding = require('./fast-yaml.linux-arm-gnueabihf.node');
216
- } else {
217
- nativeBinding = require('@fast-yaml/linux-arm-gnueabihf');
424
+ const binding = require('fastyaml-rs-linux-riscv64-gnu')
425
+ const bindingPackageVersion = require('fastyaml-rs-linux-riscv64-gnu/package.json').version
426
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
427
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
218
428
  }
429
+ return binding
219
430
  } catch (e) {
220
- loadError = e;
431
+ loadErrors.push(e)
432
+ }
433
+ }
434
+ } else if (process.arch === 'ppc64') {
435
+ try {
436
+ return require('./fastyaml-rs.linux-ppc64-gnu.node')
437
+ } catch (e) {
438
+ loadErrors.push(e)
439
+ }
440
+ try {
441
+ const binding = require('fastyaml-rs-linux-ppc64-gnu')
442
+ const bindingPackageVersion = require('fastyaml-rs-linux-ppc64-gnu/package.json').version
443
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
444
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
221
445
  }
222
- break;
223
- default:
224
- throw new Error(`Unsupported architecture on Linux: ${arch}`);
446
+ return binding
447
+ } catch (e) {
448
+ loadErrors.push(e)
449
+ }
450
+ } else if (process.arch === 's390x') {
451
+ try {
452
+ return require('./fastyaml-rs.linux-s390x-gnu.node')
453
+ } catch (e) {
454
+ loadErrors.push(e)
455
+ }
456
+ try {
457
+ const binding = require('fastyaml-rs-linux-s390x-gnu')
458
+ const bindingPackageVersion = require('fastyaml-rs-linux-s390x-gnu/package.json').version
459
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
460
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
461
+ }
462
+ return binding
463
+ } catch (e) {
464
+ loadErrors.push(e)
465
+ }
466
+ } else {
467
+ loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
225
468
  }
226
- break;
227
- default:
228
- throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);
469
+ } else if (process.platform === 'openharmony') {
470
+ if (process.arch === 'arm64') {
471
+ try {
472
+ return require('./fastyaml-rs.openharmony-arm64.node')
473
+ } catch (e) {
474
+ loadErrors.push(e)
475
+ }
476
+ try {
477
+ const binding = require('fastyaml-rs-openharmony-arm64')
478
+ const bindingPackageVersion = require('fastyaml-rs-openharmony-arm64/package.json').version
479
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
480
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
481
+ }
482
+ return binding
483
+ } catch (e) {
484
+ loadErrors.push(e)
485
+ }
486
+ } else if (process.arch === 'x64') {
487
+ try {
488
+ return require('./fastyaml-rs.openharmony-x64.node')
489
+ } catch (e) {
490
+ loadErrors.push(e)
491
+ }
492
+ try {
493
+ const binding = require('fastyaml-rs-openharmony-x64')
494
+ const bindingPackageVersion = require('fastyaml-rs-openharmony-x64/package.json').version
495
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
496
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
497
+ }
498
+ return binding
499
+ } catch (e) {
500
+ loadErrors.push(e)
501
+ }
502
+ } else if (process.arch === 'arm') {
503
+ try {
504
+ return require('./fastyaml-rs.openharmony-arm.node')
505
+ } catch (e) {
506
+ loadErrors.push(e)
507
+ }
508
+ try {
509
+ const binding = require('fastyaml-rs-openharmony-arm')
510
+ const bindingPackageVersion = require('fastyaml-rs-openharmony-arm/package.json').version
511
+ if (bindingPackageVersion !== '0.1.6' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
512
+ throw new Error(`Native binding package version mismatch, expected 0.1.6 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
513
+ }
514
+ return binding
515
+ } catch (e) {
516
+ loadErrors.push(e)
517
+ }
518
+ } else {
519
+ loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
520
+ }
521
+ } else {
522
+ loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
523
+ }
229
524
  }
230
525
 
231
- if (!nativeBinding) {
232
- if (loadError) {
233
- throw loadError;
526
+ nativeBinding = requireNative()
527
+
528
+ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
529
+ let wasiBinding = null
530
+ let wasiBindingError = null
531
+ try {
532
+ wasiBinding = require('./fastyaml-rs.wasi.cjs')
533
+ nativeBinding = wasiBinding
534
+ } catch (err) {
535
+ if (process.env.NAPI_RS_FORCE_WASI) {
536
+ wasiBindingError = err
537
+ }
538
+ }
539
+ if (!nativeBinding) {
540
+ try {
541
+ wasiBinding = require('fastyaml-rs-wasm32-wasi')
542
+ nativeBinding = wasiBinding
543
+ } catch (err) {
544
+ if (process.env.NAPI_RS_FORCE_WASI) {
545
+ wasiBindingError.cause = err
546
+ loadErrors.push(err)
547
+ }
548
+ }
549
+ }
550
+ if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
551
+ const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
552
+ error.cause = wasiBindingError
553
+ throw error
234
554
  }
235
- throw new Error(`Failed to load native binding`);
236
555
  }
237
556
 
238
- const { version, safeLoad, safeLoadAll, safeDump, safeDumpAll } = nativeBinding;
557
+ if (!nativeBinding) {
558
+ if (loadErrors.length > 0) {
559
+ throw new Error(
560
+ `Cannot find native binding. ` +
561
+ `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
562
+ 'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
563
+ {
564
+ cause: loadErrors.reduce((err, cur) => {
565
+ cur.cause = err
566
+ return cur
567
+ }),
568
+ },
569
+ )
570
+ }
571
+ throw new Error(`Failed to load native binding`)
572
+ }
239
573
 
240
- module.exports.version = version;
241
- module.exports.safeLoad = safeLoad;
242
- module.exports.safeLoadAll = safeLoadAll;
243
- module.exports.safeDump = safeDump;
244
- module.exports.safeDumpAll = safeDumpAll;
574
+ module.exports = nativeBinding
575
+ module.exports.safeDump = nativeBinding.safeDump
576
+ module.exports.safeDumpAll = nativeBinding.safeDumpAll
577
+ module.exports.safeLoad = nativeBinding.safeLoad
578
+ module.exports.safeLoadAll = nativeBinding.safeLoadAll
579
+ module.exports.version = nativeBinding.version
245
580
 
246
581
  // Aliases for js-yaml compatibility
247
- module.exports.load = safeLoad;
248
- module.exports.dump = safeDump;
582
+ module.exports.load = nativeBinding.safeLoad
583
+ module.exports.dump = nativeBinding.safeDump
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fastyaml-rs",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Fast YAML 1.2.2 parser, linter, and parallel processor for Node.js",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -22,9 +22,10 @@
22
22
  "engines": {
23
23
  "node": ">=20"
24
24
  },
25
- "publishConfig": {
26
- "registry": "https://registry.npmjs.org/"
27
- },
25
+ "files": [
26
+ "index.js",
27
+ "index.d.ts"
28
+ ],
28
29
  "napi": {
29
30
  "binaryName": "fastyaml-rs",
30
31
  "packageName": "fastyaml-rs",
@@ -61,14 +62,5 @@
61
62
  "prettier": "^3.4.2",
62
63
  "typescript": "^5.7.2",
63
64
  "vitest": "^4.0"
64
- },
65
- "optionalDependencies": {
66
- "fastyaml-rs-linux-x64-gnu": "0.1.5",
67
- "fastyaml-rs-linux-x64-musl": "0.1.5",
68
- "fastyaml-rs-darwin-x64": "0.1.5",
69
- "fastyaml-rs-darwin-arm64": "0.1.5",
70
- "fastyaml-rs-win32-x64-msvc": "0.1.5",
71
- "fastyaml-rs-linux-arm64-gnu": "0.1.5",
72
- "fastyaml-rs-win32-arm64-msvc": "0.1.5"
73
65
  }
74
- }
66
+ }
package/.prettierignore DELETED
@@ -1,7 +0,0 @@
1
- node_modules/
2
- dist/
3
- coverage/
4
- *.node
5
- target/
6
- Cargo.lock
7
- package-lock.json
package/.prettierrc.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "semi": true,
3
- "trailingComma": "es5",
4
- "singleQuote": true,
5
- "printWidth": 100,
6
- "tabWidth": 2,
7
- "useTabs": false,
8
- "arrowParens": "always",
9
- "endOfLine": "lf"
10
- }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file