{"_id":"@aperturesyndicate/synx-format","_rev":"9-1b40d5991a03b97db75de089ff5d1b38","name":"@aperturesyndicate/synx-format","dist-tags":{"latest":"3.7.0"},"versions":{"3.6.0":{"name":"@aperturesyndicate/synx-format","version":"3.6.0","keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","_id":"@aperturesyndicate/synx-format@3.6.0","maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"homepage":"https://github.com/kaiserrberg/synx-format","bugs":{"url":"https://github.com/kaiserrberg/synx-format/issues"},"bin":{"synx":"bin/synx.js"},"dist":{"shasum":"6dd7035d97a25946da0bbdd1291987a36a3e1241","tarball":"https://registry.npmjs.org/@aperturesyndicate/synx-format/-/synx-format-3.6.0.tgz","fileCount":34,"integrity":"sha512-9MMiGeXuULv7RHq1Fe9wJ4xK+wy9ObLov3rPKI7YOUMjGXbR16KGqyn9rFG8DNlqPflEKr7f/s9XbBhW7zafzA==","signatures":[{"sig":"MEQCIF1PfLTipAtiPIe65VyhXlqQk+Ybbmd4VtMuXd5VM6YOAiBSDjx3kmN9yA8o+CdefRbZi1ViGTc8coSiC8ipQKC7ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":467572},"main":"dist/index.js","types":"dist/index.d.ts","browser":"dist/synx.browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/synx.browser.js"}},"gitHead":"2ed382b6c69f842226ea4a197196d109aa3e56bb","scripts":{"lint":"eslint src/","test":"npx jest --config jest.config.js","build":"tsc","build:all":"tsc && node build-browser.js","build:browser":"node build-browser.js","prepublishOnly":"npm run build:all"},"_npmUser":{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"},"repository":{"url":"git+https://github.com/kaiserrberg/synx-format.git","type":"git"},"_npmVersion":"11.6.2","description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","esbuild":"^0.27.3","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synx-format_3.6.0_1775050602832_0.46412196461484245","host":"s3://npm-registry-packages-npm-production"}},"3.6.1":{"name":"@aperturesyndicate/synx-format","version":"3.6.1","keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","_id":"@aperturesyndicate/synx-format@3.6.1","maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"homepage":"https://github.com/APERTURESyndicate/synx-format","bugs":{"url":"https://github.com/APERTURESyndicate/synx-format/issues"},"bin":{"synx":"bin/synx.js"},"dist":{"shasum":"7ea51b70645b4a29715d8bec4310c860e751f841","tarball":"https://registry.npmjs.org/@aperturesyndicate/synx-format/-/synx-format-3.6.1.tgz","fileCount":34,"integrity":"sha512-23sGO7cNdVC4daKKKp5Hl4cBI+AgCNbnuAaDi4zSdjJbM9eiBNHxHE5n4AAOD+8OIzClEtiHkhCyqQ8GGMw4bQ==","signatures":[{"sig":"MEUCIQDUOUJeR2LtdGnYnHTm0fBWUE++qFnhqi96QKv1XzP+rQIgGJV3ppTQ847xm+iAGGMaYesMzYTM9m9XjFxDOOgJ8LE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":493386},"main":"dist/index.js","types":"dist/index.d.ts","browser":"dist/synx.browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/synx.browser.js"}},"gitHead":"ec3821009e3124f8819435a26718677a66f93193","scripts":{"lint":"eslint src/","test":"npx jest --config jest.config.js","build":"tsc","build:all":"tsc && node build-browser.js","build:browser":"node build-browser.js","prepublishOnly":"npm run build:all"},"_npmUser":{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"},"repository":{"url":"git+https://github.com/APERTURESyndicate/synx-format.git","type":"git"},"_npmVersion":"11.6.2","description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","esbuild":"^0.27.3","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synx-format_3.6.1_1775769785986_0.7929472804773063","host":"s3://npm-registry-packages-npm-production"}},"3.6.3":{"name":"@aperturesyndicate/synx-format","version":"3.6.3","keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","_id":"@aperturesyndicate/synx-format@3.6.3","maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"homepage":"https://github.com/APERTURESyndicate/synx-format","bugs":{"url":"https://github.com/APERTURESyndicate/synx-format/issues"},"bin":{"synx":"bin/synx.js"},"dist":{"shasum":"29da6167db0767a1796e57d14d3b817c2a63ac34","tarball":"https://registry.npmjs.org/@aperturesyndicate/synx-format/-/synx-format-3.6.3.tgz","fileCount":34,"integrity":"sha512-+F/Tnb2zsTPCtlqgaqDT43Kxt9xpsI62CcwO+GbZAkMWl/Az/VDDoSmgwcsaHi7TacYbHbEHYicwrCpGDB2P7w==","signatures":[{"sig":"MEUCIQD/tMu9C/C1TZnOzcQ6ivbEUIkcqKCu4uhxdGxjGPIcJAIgBjI6vq0MIwIKFqUhA3Ql6CtPmP43wjFbOlGhA7nDNAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":582249},"main":"dist/index.js","types":"dist/index.d.ts","browser":"dist/synx.browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/synx.browser.js"}},"gitHead":"28a59ee5e816cb2e07781f68e012d218be7bc5ff","scripts":{"lint":"eslint src/","test":"npx jest --config jest.config.js","build":"tsc","build:all":"tsc && node build-browser.js","build:browser":"node build-browser.js","prepublishOnly":"npm run build:all"},"_npmUser":{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"},"repository":{"url":"git+https://github.com/APERTURESyndicate/synx-format.git","type":"git"},"_npmVersion":"11.6.2","description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","esbuild":"^0.27.3","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synx-format_3.6.3_1778165500835_0.192731638862363","host":"s3://npm-registry-packages-npm-production"}},"3.7.1":{"name":"@aperturesyndicate/synx-format","version":"3.7.1","keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","_id":"@aperturesyndicate/synx-format@3.7.1","maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"homepage":"https://github.com/APERTURESyndicate/synx-format","bugs":{"url":"https://github.com/APERTURESyndicate/synx-format/issues"},"bin":{"synx":"bin/synx.js"},"dist":{"shasum":"7d6587b1145b31c25cf5329dd0c485fba8181b18","tarball":"https://registry.npmjs.org/@aperturesyndicate/synx-format/-/synx-format-3.7.1.tgz","fileCount":41,"integrity":"sha512-MYunpN5GtnrxUN+L7xAcZ3V9N8DdlHPM7JsR4QWamvIf6Ec5h/MvTiftS2cpV7Z0BlZQti1ITeUuETew68SmXg==","signatures":[{"sig":"MEQCIF3cU/XIpEgm39A3vym8nQGcsjGFrJJV0Q/Q2MtAgPAvAiAG1LZhQTi8dH+36DO06OqylY+hfcsaazS6lVRwF93ydw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aperturesyndicate%2fsynx-format@3.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":924094},"main":"dist/index.js","types":"dist/index.d.ts","browser":"dist/synx.browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/synx.browser.mjs","require":"./dist/synx.browser.js"}},"gitHead":"c5e50aab1d5e06e3c31295c37aaa397463aec2ec","scripts":{"lint":"eslint src/","test":"npx jest --config jest.config.js","build":"tsc","build:all":"tsc && node build-browser.js","build:browser":"node build-browser.js","prepublishOnly":"npm run build:all"},"_npmUser":{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"},"repository":{"url":"git+https://github.com/APERTURESyndicate/synx-format.git","type":"git"},"_npmVersion":"10.8.2","description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","esbuild":"^0.27.3","ts-jest":"^29.4.10","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/synx-format_3.7.1_1785539657837_0.9286403903817346","host":"s3://npm-registry-packages-npm-production"}},"3.7.0":{"name":"@aperturesyndicate/synx-format","version":"3.7.0","description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","main":"dist/index.js","types":"dist/index.d.ts","bin":{"synx":"bin/synx.js"},"browser":"dist/synx.browser.mjs","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","require":"./dist/synx.browser.js","import":"./dist/synx.browser.mjs"}},"scripts":{"build":"tsc","build:browser":"node build-browser.js","build:all":"tsc && node build-browser.js","test":"npx jest --config jest.config.js","lint":"eslint src/","prepublishOnly":"npm run build:all"},"keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/APERTURESyndicate/synx-format.git"},"homepage":"https://github.com/APERTURESyndicate/synx-format","devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","esbuild":"^0.27.3","jest":"^29.7.0","ts-jest":"^29.4.10","typescript":"^5.4.0"},"_id":"@aperturesyndicate/synx-format@3.7.0","gitHead":"0fbde06b1a647a1045cabae195edcb9842176940","bugs":{"url":"https://github.com/APERTURESyndicate/synx-format/issues"},"_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-UpkvZd3goVJRrv8w57WjZQPEIvz9ywYOpFvD+pmBA97/oWrh0c0IxemiieQ8IogLjMDxVVXHBolBVj9LIPOhwQ==","shasum":"959c2bdb75da7d3f289784a80ce65656a5858604","tarball":"https://registry.npmjs.org/@aperturesyndicate/synx-format/-/synx-format-3.7.0.tgz","fileCount":41,"unpackedSize":924094,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aperturesyndicate%2fsynx-format@3.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD3oQab235BpxL5MYnpqk+fkBy0R8cLtHtExHz+pEY0UgIhAPBSqpjJ5HXL/xErCsRPRmubIIHAFlYxiYyLjwKMXNcT"}]},"_npmUser":{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"},"directories":{},"maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/synx-format_3.7.0_1785540892307_0.46364025012337096"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T13:36:42.710Z","modified":"2026-07-31T23:34:52.908Z","3.6.0":"2026-04-01T13:36:43.003Z","3.6.1":"2026-04-09T21:23:06.171Z","3.6.2":"2026-04-09T21:25:46.551Z","3.6.3":"2026-05-07T14:51:40.997Z","3.7.1":"2026-07-31T23:14:17.992Z","3.7.0":"2026-07-31T23:34:52.548Z"},"bugs":{"url":"https://github.com/APERTURESyndicate/synx-format/issues"},"author":{"name":"APERTURESyndicate","email":"support@aperturesyndicate.com"},"license":"MIT","homepage":"https://github.com/APERTURESyndicate/synx-format","keywords":["synx","parser","config","json-alternative","yaml-alternative","ai-optimized","data-format","active-config"],"repository":{"type":"git","url":"git+https://github.com/APERTURESyndicate/synx-format.git"},"description":"SYNX: The Active Data Format. Faster than JSON, cheaper for AI tokens, built-in logic.","maintainers":[{"name":"kaiserberg","email":"kaiserberg@aperturesyndicate.ee"}],"readme":"> Main SYNX site: https://synx.aperturesyndicate.com/\n\n# SYNX for JS/TS � @aperturesyndicate/synx-format\n\nThe official JavaScript & TypeScript parser for the SYNX format.\n\n## Install\n\n```bash\nnpm install @aperturesyndicate/synx-format\n```\n\n## Usage\n\n```javascript\nconst Synx = require('@aperturesyndicate/synx-format');\n\n// Load from file\nconst data = Synx.loadSync('config.synx');\nconsole.log(data.server.port); // 8080\n\n// Parse from string\nconst data2 = Synx.parse('name Wario\\nage 30');\nconsole.log(data2.name); // \"Wario\"\n```\n\n### TypeScript\n\n```typescript\nimport Synx from '@aperturesyndicate/synx-format';\n\ninterface Config {\n  server: { port: number; host: string };\n  app_name: string;\n}\n\nconst data = Synx.loadSync<Config>('config.synx');\nconsole.log(data.server.port); // typed as number\n```\n\n## API\n\n| Method | Description |\n|---|---|\n| `Synx.parse<T>(text, options?)` | Parse a .synx string ? object |\n| `Synx.loadSync<T>(path, options?)` | Load & parse file (sync) |\n| `Synx.load<T>(path, options?)` | Load & parse file (async, returns Promise) |\n| `Synx.stringify(obj, active?)` | Serialize object ? .synx string |\n\n### Options\n\n```typescript\n{\n  basePath?: string;                 // For :include resolution\n  env?: Record<string, string>;      // Override env vars\n  region?: string;                   // For :geo (\"RU\", \"US\", etc.)\n  strict?: boolean;                  // Throw on INCLUDE_ERR/WATCH_ERR/CALC_ERR/CONSTRAINT_ERR\n}\n```\n\n`strict: true` enables fail-fast behavior for production: marker runtime errors throw instead of silently remaining in the output object as error strings.\n\n## CLI\n\nInstall globally:\n\n```bash\nnpm install -g @aperturesyndicate/synx-format\n```\n\n### Commands\n\n```bash\n# Convert to JSON/YAML/TOML/.env\nsynx convert config.synx --format json\nsynx convert config.synx --format yaml > values.yaml\nsynx convert config.synx --format toml\nsynx convert config.synx --format env > .env\n\n# Validate (strict mode, for CI/CD)\nsynx validate config.synx --strict\n\n# Watch for changes\nsynx watch config.synx --format json\nsynx watch config.synx --exec \"nginx -s reload\"\n\n# Extract JSON Schema from constraints\nsynx schema config.synx\n```\n\n## Export Formats\n\nConvert parsed SYNX to other formats programmatically:\n\n```typescript\nconst config = Synx.loadSync('config.synx');\n\nSynx.toJSON(config);           // JSON (pretty)\nSynx.toJSON(config, false);    // JSON (compact)\nSynx.toYAML(config);           // YAML\nSynx.toTOML(config);           // TOML\nSynx.toEnv(config);            // KEY=VALUE\nSynx.toEnv(config, 'PREFIX');  // PREFIX_KEY=VALUE\n```\n\n## File Watcher\n\n```typescript\nconst handle = Synx.watch('config.synx', (config, error) => {\n  if (error) return console.error(error);\n  console.log('Config reloaded:', config);\n}, { strict: true });\n\nhandle.close(); // stop watching\n```\n\n## Schema Export\n\nExtract constraints as JSON Schema:\n\n```typescript\nconst schema = Synx.schema(`\n!active\napp_name[required, min:3, max:30] TotalWario\nvolume[min:0, max:100, type:int] 75\n`);\n// { \"$schema\": \"...\", \"properties\": { \"app_name\": { ... } }, \"required\": [\"app_name\"] }\n```\n\n## Other Languages\n\n- **Python** � [synx-format](https://pypi.org/project/synx-format/) on PyPI\n- **Rust** � [synx](https://crates.io/crates/synx) on crates.io\n  ```bash\n  cargo add synx\n  ```\n  ```rust\n  use synx::Synx;\n  \n  let data = Synx::load(\"config.synx\")?;\n  println!(\"{}\", &data[\"server\"][\"port\"]);\n  ```\n\n## License\n\nMIT � � APERTURESyndicate\n","readmeFilename":"README.md"}