diffx-js 0.5.6 → 0.5.9

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.js CHANGED
@@ -1,53 +1,322 @@
1
- #!/usr/bin/env node
2
-
3
- const { spawn } = require('child_process');
4
- const path = require('path');
5
- const fs = require('fs');
6
-
7
- // Determine the platform-specific binary name and directory
8
- function getPlatformInfo() {
9
- const platform = process.platform;
10
- const arch = process.arch;
11
-
12
- if (platform === 'win32') {
13
- return { subdir: 'win32-x64', binaryName: 'diffx.exe' };
14
- } else if (platform === 'darwin') {
15
- if (arch === 'arm64') {
16
- return { subdir: 'darwin-arm64', binaryName: 'diffx' };
17
- } else {
18
- return { subdir: 'darwin-x64', binaryName: 'diffx' };
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
19
24
  }
20
- } else if (platform === 'linux') {
21
- return { subdir: 'linux-x64', binaryName: 'diffx' };
22
25
  } else {
23
- throw new Error(`Unsupported platform: ${platform}-${arch}`);
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
24
28
  }
25
29
  }
26
30
 
27
- // Get platform-specific binary path
28
- const platformInfo = getPlatformInfo();
29
- const binaryPath = path.join(__dirname, 'bin', platformInfo.subdir, platformInfo.binaryName);
30
-
31
- // Check if the binary exists
32
- if (!fs.existsSync(binaryPath)) {
33
- console.error(`Error: Binary not found at ${binaryPath}`);
34
- console.error(`Platform: ${process.platform}-${process.arch}`);
35
- console.error('Expected platform-specific binary not found.');
36
- console.error('This might indicate a packaging issue. Please report this at:');
37
- console.error('https://github.com/kako-jun/diffx/issues');
38
- process.exit(1);
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'diffx-js.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./diffx-js.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('diffx-js-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'diffx-js.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./diffx-js.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('diffx-js-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'diffx-js.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./diffx-js.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('diffx-js-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'diffx-js.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./diffx-js.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('diffx-js-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'diffx-js.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./diffx-js.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('diffx-js-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'diffx-js.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./diffx-js.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('diffx-js-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'diffx-js.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./diffx-js.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('diffx-js-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'diffx-js.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./diffx-js.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('diffx-js-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'diffx-js.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./diffx-js.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('diffx-js-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'diffx-js.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./diffx-js.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('diffx-js-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'diffx-js.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./diffx-js.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('diffx-js-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'diffx-js.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./diffx-js.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('diffx-js-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'diffx-js.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./diffx-js.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('diffx-js-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'diffx-js.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./diffx-js.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('diffx-js-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'diffx-js.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./diffx-js.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('diffx-js-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'diffx-js.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./diffx-js.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('diffx-js-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'diffx-js.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./diffx-js.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('diffx-js-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'diffx-js.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./diffx-js.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('diffx-js-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
39
304
  }
40
305
 
41
- // Spawn the diffx process with arguments
42
- const child = spawn(binaryPath, process.argv.slice(2), {
43
- stdio: 'inherit',
44
- });
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
45
312
 
46
- child.on('close', (code) => {
47
- process.exit(code);
48
- });
313
+ const { diff, parseJson, parseCsv, parseYaml, parseToml, parseIni, parseXml, formatOutput } = nativeBinding
49
314
 
50
- child.on('error', (err) => {
51
- console.error(`Failed to start diffx: ${err.message}`);
52
- process.exit(1);
53
- });
315
+ module.exports.diff = diff
316
+ module.exports.parseJson = parseJson
317
+ module.exports.parseCsv = parseCsv
318
+ module.exports.parseYaml = parseYaml
319
+ module.exports.parseToml = parseToml
320
+ module.exports.parseIni = parseIni
321
+ module.exports.parseXml = parseXml
322
+ module.exports.formatOutput = formatOutput
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "diffx-js",
3
- "version": "0.5.6",
3
+ "version": "0.5.9",
4
4
  "description": "A Node.js wrapper for the diffx CLI tool - semantic diffing of JSON, YAML, TOML, XML, INI, and CSV files. Focuses on structural meaning rather than formatting.",
5
5
  "keywords": [
6
6
  "diff",
@@ -20,25 +20,26 @@
20
20
  "automation",
21
21
  "data-analysis"
22
22
  ],
23
- "main": "lib.js",
24
- "bin": {
25
- "diffx": "index.js"
26
- },
23
+ "main": "index.js",
24
+ "types": "index.d.ts",
27
25
  "scripts": {
28
- "test": "node test.js",
29
- "examples": "node examples.js",
30
- "verify": "node index.js --help",
31
- "prepublish": "npm run verify"
26
+ "build": "napi build --platform --release",
27
+ "build:debug": "napi build --platform",
28
+ "test": "npm run build && cd tests && npm test",
29
+ "examples": "npm run build && npx tsx examples.ts",
30
+ "verify": "npm run build && node -e \"console.log(require('./index.js'))\"",
31
+ "prepublish": "npm run build",
32
+ "artifacts": "napi artifacts"
32
33
  },
33
34
  "engines": {
34
35
  "node": ">=12.0.0"
35
36
  },
36
37
  "files": [
37
38
  "index.js",
38
- "lib.js",
39
- "bin/",
39
+ "index.d.ts",
40
+ "*.node",
40
41
  "README.md",
41
- "examples.js",
42
+ "examples.ts",
42
43
  "test.js"
43
44
  ],
44
45
  "os": [
@@ -56,7 +57,7 @@
56
57
  "repository": {
57
58
  "type": "git",
58
59
  "url": "git+https://github.com/kako-jun/diffx.git",
59
- "directory": "diffx-npm"
60
+ "directory": "diffx-js"
60
61
  },
61
62
  "bugs": {
62
63
  "url": "https://github.com/kako-jun/diffx/issues"
@@ -64,5 +65,22 @@
64
65
  "funding": {
65
66
  "type": "github",
66
67
  "url": "https://github.com/sponsors/kako-jun"
68
+ },
69
+ "devDependencies": {
70
+ "@napi-rs/cli": "^2.18.0"
71
+ },
72
+ "napi": {
73
+ "name": "diffx-js",
74
+ "triples": {
75
+ "defaults": false,
76
+ "additional": [
77
+ "x86_64-pc-windows-msvc",
78
+ "aarch64-pc-windows-msvc",
79
+ "x86_64-apple-darwin",
80
+ "aarch64-apple-darwin",
81
+ "x86_64-unknown-linux-gnu",
82
+ "aarch64-unknown-linux-gnu"
83
+ ]
84
+ }
67
85
  }
68
86
  }
package/test.js CHANGED
@@ -175,34 +175,30 @@ async function runTests() {
175
175
 
176
176
  // Test 6: Stdin processing
177
177
  info('Test 6: Testing stdin processing...');
178
- const stdinResult = await runCommand('node', [
179
- path.join(__dirname, 'index.js'),
180
- '-',
181
- 'test2.json'
182
- ]);
183
178
 
184
- stdinResult.child = spawn('node', [
179
+ // Use spawn directly with proper stdin handling
180
+ const stdinChild = spawn('node', [
185
181
  path.join(__dirname, 'index.js'),
186
182
  '-',
187
- 'test2.json'
183
+ path.join(__dirname, 'fixtures', 'test2.json')
188
184
  ], { stdio: ['pipe', 'pipe', 'pipe'] });
189
185
 
190
- stdinResult.child.stdin.write(testData.json1);
191
- stdinResult.child.stdin.end();
186
+ stdinChild.stdin.write(testData.json1);
187
+ stdinChild.stdin.end();
192
188
 
193
189
  let stdinOutput = '';
194
- stdinResult.child.stdout.on('data', (data) => {
190
+ stdinChild.stdout.on('data', (data) => {
195
191
  stdinOutput += data.toString();
196
192
  });
197
193
 
198
- await new Promise((resolve) => {
199
- stdinResult.child.on('close', () => resolve());
194
+ const stdinExitCode = await new Promise((resolve) => {
195
+ stdinChild.on('close', (code) => resolve(code));
200
196
  });
201
197
 
202
- if (stdinOutput.includes('version')) {
198
+ if (stdinExitCode === 1 && stdinOutput.includes('debug')) {
203
199
  success('Stdin processing works correctly');
204
200
  } else {
205
- info('Stdin test skipped (may require manual verification)');
201
+ info(`Stdin test result: exit code ${stdinExitCode}, output length: ${stdinOutput.length}`);
206
202
  }
207
203
 
208
204
  // Test 7: Error handling
Binary file
Binary file
package/bin/diffx DELETED
Binary file
Binary file
Binary file