'use strict'; const assert = require('node:assert/strict'); const fs = require('fs'); const path = require('path'); const os = require('os'); const { createStore } = require('../js/spine-preview-settings'); const root = fs.mkdtempSync(path.join(os.tmpdir(), 'spine-settings-test-')); try { const userData = path.join(root, 'settings'); const source = path.join(root, 'A.library', 'images', 'ITEM.info', 'hero.skel.bytes'); const store = createStore(userData, source); assert.equal(store.read(), undefined); assert.equal(fs.existsSync(userData), false, 'opening an item must not create metadata'); store.write(true); assert.deepEqual(JSON.parse(fs.readFileSync(store.file)), { premultipliedAlpha: true }); assert.equal(createStore(userData, source).read(), true); // Asset rename preserves the Eagle item identity. assert.equal(createStore(userData, path.join(path.dirname(source), 'renamed.skel.bytes')).read(), true); store.write(false); assert.equal(createStore(userData, source).read(), false, 'false must not be treated as unset'); assert.equal(createStore(userData, source.replace('ITEM.info', 'OTHER.info')).read(), undefined); assert.equal(createStore(userData, source.replace('A.library', 'B.library')).read(), undefined); assert.throws(() => store.write('false'), TypeError); assert.equal(fs.existsSync(path.dirname(source)), false, 'never modify Eagle metadata'); console.log('PASS: no default writes, explicit true/false, reopening, rename and library isolation'); } finally { fs.rmSync(root, { recursive: true, force: true }); }