{"_id":"3d-ast-generator","_rev":"19-e63943fed3ac4ea21a1b9bbec9ab35b8","name":"3d-ast-generator","dist-tags":{"latest":"1.0.18"},"versions":{"1.0.0":{"name":"3d-ast-generator","version":"1.0.0","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.0","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/yourusername/3d-ast-generator#readme","bugs":{"url":"https://github.com/yourusername/3d-ast-generator/issues"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"a86bc87b11a9d97ed1c75a3d8ec956830467a5a6","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.0.tgz","fileCount":79,"integrity":"sha512-lrIoUNyXqHg7SLwFy7vN6OaD9cb3udF6QI7US92TKTHQn/kCNgyKcruVeLfo7zkTCPuiabmjZxZ8iqEUya7UeQ==","signatures":[{"sig":"MEYCIQCluK9HI7vil4HKKBDXf8gxvURt7u3iWNtxhgWH5W8UNgIhAJ/ZuFE9E5lUxeuln/TwNZPEVAaawYkKjoocFn4a3+5c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292086},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f460c604cc11cd47973c075e063f6d034273f183","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/yourusername/3d-ast-generator.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.0_1752682083752_0.32882449749481246","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"3d-ast-generator","version":"1.0.1","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.1","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"3e36ee7564ebe50aebf2576f7a21d2b81b93edb9","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.1.tgz","fileCount":79,"integrity":"sha512-scDqB3rmvSqOdx44QvUOYkcpzwC7Ml6Kd2EJW7623LduA/W5z/rvbBd/CafbUMH2SpFtOOWOMK6HtSU9AL4a2Q==","signatures":[{"sig":"MEUCIQCOKZE5SQs0NNQUlWSPM1T073XjA9eb7sniQJUgVws0IAIgRFi571xMXolj0kr9YI6nt9gKETt3FBiPeeaVOuM/XS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292078},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"190a2715bf673ed65f2077f393bcad88b05a3b78","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.1_1752687631200_0.050795742172191405","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"3d-ast-generator","version":"1.0.2","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.2","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"e658d66f624e357c94c53eff26bdb77850b9c2eb","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.2.tgz","fileCount":79,"integrity":"sha512-3bf7T53JJmJNu8l7HWpWeAwN9Qpzmrlk8Ig/pk5/tmDklJ4W7jEUysCI43RsoZfWkqM5gVNluRqMSVe20HpwEw==","signatures":[{"sig":"MEQCID93mJ5A5o9rWrVBNSyZ9oHATJuFAsD+f6Mm/AH4wR4lAiBdTUQKJj7Rt5hnQ/xub1lc+BM/9z1Ty8YJQ/tOtd2kMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297451},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"190a2715bf673ed65f2077f393bcad88b05a3b78","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.2_1752689573955_0.8126565484180355","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"3d-ast-generator","version":"1.0.3","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.3","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"8edb69566d78b1cbc25ba838750a9f27c0ccf624","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.3.tgz","fileCount":79,"integrity":"sha512-AVIcai62LVeRaJcJyYgfjU9AER//rWHFtmKF2W3EadJbQ0+uALgi5ZJidRZzSY5J0sbgA0iIAcVNKbJLkHMYpA==","signatures":[{"sig":"MEQCIEeXp/oqHNj7rDtRgyyxnLrojGwW/tIWOVHF4NH4eg5mAiBgt7EnjDvt2lIvb6ag10Hg7k/9IeBQ4W5t38dXbmP2Fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297461},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.3_1752690381771_0.20182464665579847","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"3d-ast-generator","version":"1.0.4","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.4","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"6247f055089f064ec9bd2984128b32cd22e2bad5","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.4.tgz","fileCount":79,"integrity":"sha512-i97yxSR/s8fPmyHm3XIqIcdOE9bQT1f7ZihgZgOamIdrlhpWY7RS4XDWZ49kOgR6JRcOabIvuEfbJSdJF+2E5Q==","signatures":[{"sig":"MEUCIQC6aHiX67wntorLK39Ql5mGbMVtIGEo5EhSN+TorEoBugIgfHPKqdSO4FEfQCwPgZ7NjVK+bm2Ur9j4SYWwBR11WTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301503},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.4_1753213115267_0.2815787061000714","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"3d-ast-generator","version":"1.0.5","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.5","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"c5b147096522952e27b7a7a5a6d6f0b85bf3668c","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.5.tgz","fileCount":79,"integrity":"sha512-E+TmtFZO5wjvqch/67ce1S3//saMUhfLUg15VSMHQOApnEd5/VHRB7PhYe4F7UJrcFmmvNuol/fOlFo//Pg7og==","signatures":[{"sig":"MEYCIQDRt7vHiSQVH9FdyjXnAj/XH04SKbXcco++RzVpRfr3FwIhAJ0sYWuN8hr/TDiUVpHu+ltMmBGKK/nxKdM7R17oAEXR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306959},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.5_1753213891134_0.5845444337183929","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"3d-ast-generator","version":"1.0.6","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.6","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"b9350e78a84ee2aa8bf2d137948b54a39b26d0a6","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.6.tgz","fileCount":79,"integrity":"sha512-I7YjJqaQN5rRjqPOgNZyE+34ZKBMBdlkwn84ST8oi3S5SMwmoSmZTW3Wrlb9BM1VqHIgwhVjF7dBER+5tV1X/g==","signatures":[{"sig":"MEYCIQCPCSBiEbA6NRmHPL1xANsOADmJ176shEqBPtHmL06ORAIhALhjgQRwyi6O/tNWa3+JCQYpwWUzK3ljj/p5+/fxvpsJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309997},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.6_1753217289613_0.8351253939047494","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"3d-ast-generator","version":"1.0.7","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.7","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"fb4c090e4bf6819de1bde01c08c3d3f3ac92308d","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.7.tgz","fileCount":79,"integrity":"sha512-MBe6REdKi0g1W5M1UMdtR1FpR+JPYUbsgwhFTOjqlnWHfAFIbG7YQUoTkHgQ0vJBl9IbgWgUsBYbq6G4hEP5mw==","signatures":[{"sig":"MEUCIEZYeyZoe96K3mvJdwIhBTmiKJhJ+PjVVCLtRhIKO6cbAiEAkJTPuBXh1wNdjitsYiF99NiXKnqdAF33mqCTWLuKvm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309991},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.7_1753226565180_0.26975350278527466","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"3d-ast-generator","version":"1.0.8","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.8","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"820bc3cfb96ce19184a8b434df0543823f0f63b0","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.8.tgz","fileCount":79,"integrity":"sha512-k6TldllxCR/5M9/P/BK2ZnNs97d8JWUKfn5GMwAoSgvadJOZwFlaSvz3YLY9LEaWj9KAXPVM2As479D/cuTCJg==","signatures":[{"sig":"MEUCIAoLnLMMjsOvr0GsIh3rrR7kgvn4w5mhxbo4iMtwB2HEAiEA+ix+gJTjKcT9j1DsH6/YoJBgQn/RiQltXMNRsg6Uj70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311307},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"67de605a81ab27306efa4b959628b5243d075147","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.8_1753308590151_0.5769675583152105","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"3d-ast-generator","version":"1.0.9","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.9","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"cdf1f96795605e1bfb4366a9b68e2757f9c10d1a","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.9.tgz","fileCount":79,"integrity":"sha512-EDpizMctMxUPfVa1plPjduERTjbkYPcFuq1C/YorWKAvzWhKWQ/97we6yJilhN5isQcp9EeJyCafXD03r9A0iA==","signatures":[{"sig":"MEUCIQCLtxVHvcBxyqzW80h4aN8K1R1/dNUuUq+Bvoh+Dl2sIAIgfo5N0c/lAeKd7ktZtLoVtfHtG+2ERSBWH0XggKrF0+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321146},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.9_1753804072409_0.10846905461812417","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"3d-ast-generator","version":"1.0.10","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.10","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"c674a25de89c42532a3db4285c9e63302eca6a9c","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.10.tgz","fileCount":79,"integrity":"sha512-xsjhjgcj1FKfmRm0LG36mEkGrl8kK5FSRkbsxpN1UE1sSGtetNl5Sew0p6Y2rWztIX5ka8k3mQufVmIh1cyuUQ==","signatures":[{"sig":"MEUCIQDmZjJp+uzcLyE2U3txil3cKos9dceQt9Fxtd0OvOsYfgIgBZ4HYQdxlNZZtJYrutyjUKTM9IJz+X2nlaggENteT30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323937},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.10_1753815522063_0.16395313982188298","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"3d-ast-generator","version":"1.0.11","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.11","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"07e042a9a127cd905026b7ddf5b7e411ed23fd27","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.11.tgz","fileCount":79,"integrity":"sha512-hCUdRdiJWhCWFRJ+YRvBhs/e2gEbZf1zYpLIzNz8hKZD0DQEPZmUA00Uc06Bb6NPQfAgdzkUkxa97XDdgZ8G2g==","signatures":[{"sig":"MEUCIQCfVEQUmt7QKC8aKME0mcHJoN9kzgrKHW6D6WP0Yni0JgIgEhknSOgU/XhW3dk4mYXnwEIS4pnYhYe5fmN5ljqxdEE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323192},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.11_1753842763235_0.9761912040461955","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"3d-ast-generator","version":"1.0.12","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.12","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"db2d110aec64c0b9a8e9351379a660fe03432faf","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.12.tgz","fileCount":79,"integrity":"sha512-VHn0WIzfDp3NKEu/tF/bJRpG2E9c06qSuuyh5lpCG93zjWhWnpexj5JhabmQj9wgkN0K4I1SrUSzQSM+C6TgfQ==","signatures":[{"sig":"MEUCIAOemKp4p+6Z5D+kwL/Ez4/zswBkuqiPC9d/u/BhS6WkAiEA53zwXy19c3i5lvGf6rMDV24U2n1Ziu7ZR8whbZyIemI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323937},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.12_1753843130443_0.5534099285392398","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"3d-ast-generator","version":"1.0.13","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.13","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"0fc0d358de4c2446d9c6e164ccdd938df4ddc4dd","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.13.tgz","fileCount":79,"integrity":"sha512-4fPvOlrUF+a/lOrzIl1hfHhM48UMhfr96y2GRjr3KTkS4xJHdQABYIGQHqPSD1KdNT44R8pdF0Ie96+ncLxTlA==","signatures":[{"sig":"MEYCIQC3dM7g4mSmtB/KiWav4NuIu7pUMvpRhyWF0SzBd4yn2wIhAPu15OEbPJSJuLkDSMu8dKkg9A3WGQGzuyRlpluQ2oN4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334881},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.13_1759833626810_0.06354993817715027","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"3d-ast-generator","version":"1.0.14","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.14","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"0eeeeda1e58aaf135569a15bfcdc5c294a3fae7a","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.14.tgz","fileCount":79,"integrity":"sha512-5llV3UjqaZvToR/oPAEArTvvrOkHjmykcSRcwwwi6L9w3VxGG+FgNMPnxrdHRFpYIoTtdW6qhh1h040S4ppQmQ==","signatures":[{"sig":"MEUCIQDBcVIcPb2I3yQ1bfqfv6UKKBkCtTOHCdW4JHsm3k08jAIgXX5sRil1l3xTK+VpsP/zqU016XY1DuhvOa287Kw74Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334904},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.14_1759834280490_0.8733545148526989","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"3d-ast-generator","version":"1.0.15","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.15","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"bd72c976ac4039c7a0e76a94da7988bbe876c720","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.15.tgz","fileCount":79,"integrity":"sha512-aNBn370iCb+63d+p3CJVdR7u20019++ymljNzKprOTWSGZaIffOXMHvz0dQFcrgBgN6nvLz5qHMpYsIrji6tCA==","signatures":[{"sig":"MEQCIDqVc0c+ZIhily2f3OOe4LismbUBAE0UHw17giIND5dAAiBJplyDt4ETifVHCW3//KZc1jhmxJoGsP0Ym2Rzqml79A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332505},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.15_1759888197174_0.935664057446058","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"3d-ast-generator","version":"1.0.16","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.16","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"511b4fa2d401cf7140d6ad849399ce72049e91c2","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.16.tgz","fileCount":79,"integrity":"sha512-mBf7nTx2shd9QD9oP0LLAidpIwFwE15RpflVi56SHCxjxU1dW93xhGv5VuHRiAdnRuRCwmpeE9xwCI3fcfwfzQ==","signatures":[{"sig":"MEYCIQCgP3mo8jsNr7cSd+WZgUjygmB8A3CcclOmBxvVrh91pAIhAJWqFjmK9MVRVPChIJhOKbZxH/MLuua4cGFHEbLSSeSI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334676},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"f0f61198006b51681143d055ef8bb6f5f176c8c5","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.16_1759892476469_0.37490241835068927","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"3d-ast-generator","version":"1.0.17","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"3D AST Generator Team"},"license":"MIT","_id":"3d-ast-generator@1.0.17","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"homepage":"https://github.com/ma-cook/3DAST","bugs":{"url":"https://github.com/ma-cook/3DAST"},"bin":{"3d-ast":"dist/src/cli.js"},"dist":{"shasum":"71e71fac7a4ad29b47fcddaec878e3a25396ab8f","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.17.tgz","fileCount":79,"integrity":"sha512-ZrTh2648mX2Z/n4RcVEYnU26WfSNWehVvo1q4v+Mb39TxjnIahd+TQrmsKYILMxYFDhNSfB9ekYgi8WvELOu5Q==","signatures":[{"sig":"MEUCIBh8EF0EhWEQEM/H5RcNq6n9+0fq93HXhgeDmYS8tDxPAiEA9u8mIMSl2TrmCAHD68w8WUsqw18HNIcX3IIv7FRBqyc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334979},"main":"dist/src/index.js","types":"dist/src/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"5c0d60f45164b05a9de029aea2c3aa516e368853","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"repository":{"url":"git+https://github.com/ma-cook/3DAST.git","type":"git"},"_npmVersion":"9.8.1","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","directories":{},"_nodeVersion":"18.18.0","dependencies":{"commander":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/3d-ast-generator_1.0.17_1759895188723_0.4705079324827497","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"3d-ast-generator","version":"1.0.18","description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","main":"dist/src/index.js","types":"dist/src/index.d.ts","bin":{"3d-ast":"dist/src/cli.js"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:watch":"jest --watch","lint":"eslint src/**/*.ts","clean":"rimraf dist","prepublishOnly":"npm run clean && npm run build"},"keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"author":{"name":"Mitchell Cook"},"license":"MIT","dependencies":{"commander":"^11.0.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/ma-cook/3DAST.git"},"bugs":{"url":"https://github.com/ma-cook/3DAST"},"homepage":"https://github.com/ma-cook/3DAST","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public"},"gitHead":"5c0d60f45164b05a9de029aea2c3aa516e368853","_id":"3d-ast-generator@1.0.18","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-DFh7xV8wF1On1tiY4XJkDzmzTTCnOJzY4auDFn2hWlg8llzovDRWh7KZFB7KYYd5ZJeo1O7LBLk+jMifE+bn6w==","shasum":"3196ad615064c35051a4395da4701c29a5bea92c","tarball":"https://registry.npmjs.org/3d-ast-generator/-/3d-ast-generator-1.0.18.tgz","fileCount":79,"unpackedSize":359799,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD/9cgi+0UfqkLKQ+7+m8kyIXZukzXfuiaBDr5CKimKWAIgUEh0t881yZr07v7ACXgb+MHhoXZeL+daZ37H84z0dNo="}]},"_npmUser":{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"},"directories":{},"maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/3d-ast-generator_1.0.18_1772680605664_0.31177218900714343"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-16T16:08:03.672Z","modified":"2026-03-05T03:16:45.957Z","1.0.0":"2025-07-16T16:08:03.944Z","1.0.1":"2025-07-16T17:40:31.404Z","1.0.2":"2025-07-16T18:12:54.157Z","1.0.3":"2025-07-16T18:26:21.941Z","1.0.4":"2025-07-22T19:38:35.466Z","1.0.5":"2025-07-22T19:51:31.333Z","1.0.6":"2025-07-22T20:48:09.873Z","1.0.7":"2025-07-22T23:22:45.376Z","1.0.8":"2025-07-23T22:09:50.326Z","1.0.9":"2025-07-29T15:47:52.611Z","1.0.10":"2025-07-29T18:58:42.251Z","1.0.11":"2025-07-30T02:32:43.430Z","1.0.12":"2025-07-30T02:38:50.620Z","1.0.13":"2025-10-07T10:40:26.996Z","1.0.14":"2025-10-07T10:51:20.705Z","1.0.15":"2025-10-08T01:49:57.366Z","1.0.16":"2025-10-08T03:01:16.766Z","1.0.17":"2025-10-08T03:46:28.908Z","1.0.18":"2026-03-05T03:16:45.829Z"},"bugs":{"url":"https://github.com/ma-cook/3DAST"},"author":{"name":"Mitchell Cook"},"license":"MIT","homepage":"https://github.com/ma-cook/3DAST","keywords":["ast","3d","visualization","merfolk","3d-ast","graph","parser","typescript"],"repository":{"type":"git","url":"git+https://github.com/ma-cook/3DAST.git"},"description":"A TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization","maintainers":[{"name":"alttabit","email":"mitchell.cook@outlook.co.nz"}],"readme":"# 3D AST Generator\r\n\r\nA TypeScript library for parsing Merfolk syntax and generating 3D abstract syntax trees for visualization. Perfect for creating 3D diagrams of application architectures, data flows, and system relationships.\r\n\r\n## Features\r\n\r\n- 🎯 **Merfolk Syntax**: Familiar, easy-to-write syntax for defining nodes and connections\r\n- 🧊 **Multiple 3D Geometries**: Cubes, tetrahedrons, and dodecahedrons\r\n- 🔗 **Face-specific Connections**: Connect to specific faces of 3D objects\r\n- � **Flow Path Tracking**: Trace complete data paths across your entire application, not just between two nodes\r\n- �📐 **Smart Layout Algorithms**: Hierarchical, force-directed, circular, and grid layouts\r\n- 🎨 **Customizable Visuals**: Themes, colors, materials, and styling options\r\n- ⚡ **TypeScript Native**: Full type safety and IntelliSense support\r\n- 🔧 **Plugin Ready**: Designed to integrate with 3D visualization applications\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install 3d-ast-generator\r\n```\r\n\r\n## Quick Start\r\n\r\n```typescript\r\nimport { MarkdownProcessor, AST3DGenerator } from '3d-ast-generator';\r\n\r\nconst generator = new AST3DGenerator();\r\n\r\nconst syntax = `\r\n%% My Application Architecture\r\nApp{Component: Main Application}\r\nDataService[Function: Process Data]\r\nUserInterface{Component: User Interface}\r\nDatabase[[Store: Database]]\r\nThreeJS<Library: Three.js>\r\n\r\n%% Data flow connections\r\nApp --> UserInterface : \"renders\"\r\nApp --> DataService : \"uses\"\r\nDataService --> Database : \"queries\"\r\nUserInterface --> App : \"user events\"\r\nApp --> ThreeJS : \"3D rendering\"\r\n`;\r\n\r\nconst graph = generator.generate(syntax);\r\nconsole.log(\r\n  `Generated ${graph.nodes.size} nodes and ${graph.connections.size} connections`\r\n);\r\n\r\n// Export for your 3D application\r\nconst jsonData = generator.generateJSON(syntax);\r\n\r\n// Or process markdown files with multiple diagrams\r\nconst processor = new MarkdownProcessor({\r\n  layout: { algorithm: 'hierarchical', nodeSpacing: 4.0 },\r\n  visual: { theme: 'dark' },\r\n});\r\n\r\nconst markdownContent = `\r\n# My Architecture\r\n\\`\\`\\`merfolk\r\n%% System Overview\r\nAPI[Function: API Server]\r\nUI{Component: User Interface}\r\nDatabase[[Store: Database]]\r\n\r\nAPI --> UI : \"data\"\r\nAPI --> Database : \"queries\"\r\n\\`\\`\\`\r\n`;\r\n\r\nconst diagrams = processor.processMarkdown(markdownContent);\r\ndiagrams.forEach((diagram) => {\r\n  if (diagram.errors.length === 0) {\r\n    console.log(`Diagram: ${diagram.block.title || 'Untitled'}`);\r\n    console.log(`Nodes: ${diagram.graph.nodes.size}`);\r\n  }\r\n});\r\n```\r\n\r\n## Syntax Guide\r\n\r\n### Node Types & Geometries\r\n\r\n| Syntax               | Type      | Geometry     | Use Case                  |\r\n| -------------------- | --------- | ------------ | ------------------------- |\r\n| `A{Component: name}` | Component | Dodecahedron | Components, modules       |\r\n| `B[Function: name]`  | Function  | Cube         | Functions, methods        |\r\n| `C[[Store: name]]`   | Store     | Cube         | Databases, data stores    |\r\n| `D((Service: name))` | Service   | Tetrahedron  | External services, APIs   |\r\n| `E<Library: name>`   | Library   | Cube         | External libraries        |\r\n| `F[Hook: name]`      | Hook      | Cube         | React hooks, custom hooks |\r\n\r\n**Node Type Detection**: The 3D AST generator automatically detects node types based on the bracket style and content label (e.g., \"Component:\", \"Function:\", \"Store:\", \"Hook:\", etc.).\r\n\r\n### Connection Types\r\n\r\n| Syntax     | Type         | Style        | Use Case                 |\r\n| ---------- | ------------ | ------------ | ------------------------ | ----------- | ----------------- |\r\n| `A --> B`  | Data Flow    | Solid arrow  | Data passing             |\r\n| `A -->     | \"label\"      | B`           | Labeled Flow             | Solid arrow | Labeled data flow |\r\n| `A -.-> B` | Control Flow | Dashed arrow | Event/control flow       |\r\n| `A --- B`  | Association  | Solid line   | General relationships    |\r\n| `A == B`   | Inheritance  | Thick line   | Inheritance/dependencies |\r\n\r\n**Labeled Connections**: Use `-->|\"label\"|` syntax to add descriptive labels to connections, which will be displayed on the 3D connection lines.\r\n\r\n### Face Connections\r\n\r\nConnect to specific faces of 3D objects:\r\n\r\n```\r\nA@front --> B@back : \"direct connection\"\r\nC@top --> D@bottom : \"vertical flow\"\r\n```\r\n\r\n**Available faces:**\r\n\r\n- Cubes: `front`, `back`, `top`, `bottom`, `left`, `right`\r\n- Dodecahedrons: `face_0` through `face_11`\r\n- Other shapes have context-appropriate face names\r\n\r\n### Labels and Properties\r\n\r\n```\r\nA --> B : \"Connection Label\"\r\nC{Component: MyComp} {color: \"blue\", scale: \"2,1,1\"}\r\n```\r\n\r\n### Flow Path Tracking\r\n\r\nFlow paths let you define and trace **complete data paths** that span multiple nodes across your application — not just individual point-to-point connections.\r\n\r\n#### The `flowpath` Directive\r\n\r\nDefine a named, multi-hop data path in a single line. This auto-creates tagged connections between each adjacent pair of nodes:\r\n\r\n```\r\nflowpath \"userDataFlow\" : A --> B --> C --> D\r\n```\r\n\r\nThis creates 3 connections (A→B, B→C, C→D), all tagged with the `userDataFlow` identifier so the entire path can be queried and traced as a unit.\r\n\r\n**Full syntax:**\r\n\r\n```\r\n%% Basic flow path\r\nflowpath \"name\" : NodeA --> NodeB --> NodeC\r\n\r\n%% With a custom arrow type (applies to all connections in the path)\r\nflowpath \"eventPipeline\" (-.->): Input --> Transform --> Output\r\n\r\n%% With a description\r\nflowpath \"requestLifecycle\" : Client --> API --> DB --> API --> Client : \"full request cycle\"\r\n```\r\n\r\n#### The `#tag` Syntax on Connections\r\n\r\nTag individual connections with one or more flow path names using `#`:\r\n\r\n```\r\nA --> B : \"payload\" #userDataFlow\r\nB --> C #userDataFlow #auditTrail\r\nC --> D #auditTrail\r\n```\r\n\r\nThis is useful when you want to manually compose flow paths from existing connections rather than auto-generating them.\r\n\r\n#### Combining Both Approaches\r\n\r\nYou can freely mix `flowpath` directives with `#tag` connections. If a `flowpath` references a connection that already exists, it tags the existing connection instead of creating a duplicate:\r\n\r\n```merfolk\r\n%% Nodes\r\nUI{Component: User Interface}\r\nAPI[Function: API Handler]\r\nAuth[Function: Auth Service]\r\nDB[[Store: Database]]\r\nCache[Function: Cache Layer]\r\n\r\n%% Explicit connections\r\nUI --> API : \"request\" #userFlow\r\nAPI --> Auth : \"validate\"\r\n\r\n%% Flow path reuses existing UI-->API connection, creates the rest\r\nflowpath \"userFlow\" : UI --> API --> Auth --> DB\r\n\r\n%% A separate flow path through the cache layer\r\nflowpath \"cachedRead\" : UI --> API --> Cache --> DB\r\n```\r\n\r\n#### Querying Flow Paths\r\n\r\n```typescript\r\nconst graph = generator.generate(syntax);\r\n\r\n// Trace a complete data path — returns ordered nodes and connections\r\nconst trace = graph.traceFlowPath('userDataFlow');\r\nconsole.log(trace.nodes.map(n => n.name));  // ['UI', 'API Handler', 'Auth Service', 'DB']\r\nconsole.log(trace.connections.length);       // 3\r\n\r\n// Which flow paths pass through a specific node?\r\nconst apiFlows = graph.getNodeFlowPaths('API');\r\nconsole.log(apiFlows.map(fp => fp.name));    // ['userFlow', 'cachedRead']\r\n\r\n// Get all connections belonging to a flow path\r\nconst conns = graph.getFlowPathConnections('cachedRead');\r\n\r\n// Find all flow paths that connect two nodes (even indirectly)\r\nconst paths = graph.getFlowPathsBetween('UI', 'DB');\r\nconsole.log(paths.length);  // 2  (userFlow and cachedRead both reach from UI to DB)\r\n\r\n// List all defined flow paths\r\nconst all = graph.getAllFlowPaths();\r\n```\r\n\r\n#### JSON Output\r\n\r\nFlow paths are included in `generateJSON()` output:\r\n\r\n```json\r\n{\r\n  \"flowPaths\": [\r\n    {\r\n      \"id\": \"flowpath_0\",\r\n      \"name\": \"userDataFlow\",\r\n      \"nodeSequence\": [\"UI\", \"API\", \"Auth\", \"DB\"],\r\n      \"connectionIds\": [\"conn_0\", \"conn_1\", \"conn_2\"]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\nEach connection also carries a `flowPaths` array listing which flow paths it belongs to, making it easy to highlight or filter connections by path in your 3D visualization.\r\n\r\n### Nested Grouping (Automatic)\r\n\r\nThe 3D AST generator automatically creates nested grouping when functions are connected to components:\r\n\r\n```merfolk\r\n%% Define components and functions\r\nUserService{Component: User Service}\r\nAuthService{Component: Authentication Service}\r\n\r\nvalidateUser[Function: User Validation]\r\nauthenticateToken[Function: Token Authentication]\r\n\r\n%% Connect functions to components (creates nesting)\r\nvalidateUser --> UserService : \"validates\"\r\nauthenticateToken --> AuthService : \"authenticates\"\r\n```\r\n\r\n**Result**: Functions automatically become nested inside their connected components:\r\n\r\n- Components become **containers** with increased scale\r\n- Functions are positioned **inside** their parent components\r\n- Parent-child relationships are tracked in the data structure\r\n\r\n## Configuration\r\n\r\n```typescript\r\nconst generator = new AST3DGenerator({\r\n  layout: {\r\n    algorithm: 'hierarchical', // 'hierarchical' | 'force-directed' | 'circular' | 'grid'\r\n    nodeSpacing: 3.0,\r\n    layers: 4,\r\n  },\r\n  visual: {\r\n    theme: 'dark', // 'dark' | 'light' | 'custom'\r\n    colors: {\r\n      function: '#4CAF50',\r\n      component: '#2196F3',\r\n      datapath: '#FF9800',\r\n    },\r\n    material: {\r\n      metalness: 0.1,\r\n      roughness: 0.7,\r\n      opacity: 0.9,\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n## API Reference\r\n\r\n### Available Exports\r\n\r\n```typescript\r\nimport {\r\n  // Main Classes\r\n  AST3DGenerator,\r\n  MarkdownProcessor,\r\n\r\n  // Core Models\r\n  Node,\r\n  Connection,\r\n  Graph,\r\n\r\n  // Parsers\r\n  MermaidParser,\r\n  ASTBuilder,\r\n\r\n  // Utilities\r\n  PositionCalculator,\r\n  Validator,\r\n  Helpers,\r\n\r\n  // Types\r\n  NodeType,\r\n  ConnectionType,\r\n  GeometryType,\r\n  FlowPath,\r\n  ParsedFlowPath,\r\n\r\n  // Configuration\r\n  DEFAULT_CONFIG,\r\n} from '3d-ast-generator';\r\n```\r\n\r\n### AST3DGenerator\r\n\r\nMain class for generating 3D AST graphs from Merfolk syntax.\r\n\r\n#### Methods\r\n\r\n- `generate(input: string): Graph` - Parse and generate 3D graph\r\n- `generateJSON(input: string): AST3DGraph` - Generate serializable format\r\n- `validate(input: string): ValidationResult` - Validate syntax\r\n- `parseOnly(input: string): ParsedGraph` - Parse without building\r\n\r\n### MarkdownProcessor\r\n\r\nProcess markdown files containing multiple Merfolk code blocks.\r\n\r\n#### Constructor\r\n\r\n```typescript\r\nconst processor = new MarkdownProcessor(config?: {\r\n  layout?: { algorithm: string, nodeSpacing: number },\r\n  visual?: { theme: string, colors: object }\r\n});\r\n```\r\n\r\n#### Methods\r\n\r\n- `processMarkdown(content: string): ProcessedDiagram[]` - Extract and process all Merfolk blocks\r\n- `extractMerfolkBlocks(content: string): MerfolkBlock[]` - Extract code blocks only\r\n\r\n### Graph\r\n\r\nRepresents a 3D AST graph with nodes and connections.\r\n\r\n#### Properties\r\n\r\n- `nodes: Map<string, Node>` - All nodes in the graph\r\n- `connections: Map<string, Connection>` - All connections\r\n- `flowPaths: Map<string, FlowPath>` - All registered flow paths\r\n- `bounds: BoundingBox` - Overall graph bounding box\r\n\r\n#### Methods\r\n\r\n- `addNode(node: Node): void` - Add a node\r\n- `addConnection(connection: Connection): void` - Add a connection\r\n- `getBounds(): BoundingBox` - Calculate bounding box\r\n- `getRootNodes(): Node[]` - Get nodes with no parents\r\n- `getLeafNodes(): Node[]` - Get nodes with no children\r\n- `addFlowPath(flowPath: FlowPath): void` - Register a flow path\r\n- `removeFlowPath(flowPathId: string): void` - Remove a flow path\r\n- `traceFlowPath(name: string): { nodes: Node[], connections: Connection[] } | null` - Trace a complete data path\r\n- `getNodeFlowPaths(nodeId: string): FlowPath[]` - Get all flow paths through a node\r\n- `getFlowPathConnections(name: string): Connection[]` - Get connections in a flow path\r\n- `getFlowPathsBetween(nodeA: string, nodeB: string): FlowPath[]` - Find flow paths connecting two nodes\r\n- `getFlowPathByName(name: string): FlowPath | undefined` - Look up a flow path by name\r\n- `getAllFlowPaths(): FlowPath[]` - List all registered flow paths\r\n\r\n### Node\r\n\r\nRepresents a 3D node with geometry and connections.\r\n\r\n#### Properties\r\n\r\n- `id: string` - Unique identifier\r\n- `type: NodeType` - Node type (function, component, etc.)\r\n- `geometry: GeometryType` - 3D geometry type\r\n- `transform: Transform3D` - Position, rotation, scale\r\n- `faces: Face[]` - Available connection faces\r\n- `visual: VisualProperties` - Visual styling\r\n\r\n### Connection\r\n\r\nRepresents a connection between two nodes.\r\n\r\n#### Properties\r\n\r\n- `source: ConnectionPoint` - Source node and face\r\n- `target: ConnectionPoint` - Target node and face\r\n- `type: ConnectionType` - Connection type\r\n- `waypoints: Position3D[]` - Path waypoints\r\n- `visual: VisualProperties` - Visual styling\r\n- `flowPaths: string[]` - Flow path names this connection belongs to\r\n\r\n#### Methods\r\n\r\n- `addFlowPath(name: string): void` - Tag this connection with a flow path\r\n- `removeFlowPath(name: string): void` - Remove a flow path tag\r\n- `belongsToFlowPath(name: string): boolean` - Check if connection is part of a flow path\r\n\r\n## Integration with 3D Applications\r\n\r\nThe library outputs standardized 3D data that can be consumed by various 3D engines:\r\n\r\n### Three.js Example\r\n\r\n```typescript\r\nimport * as THREE from 'three';\r\nimport { MarkdownProcessor } from '3d-ast-generator';\r\n\r\n// Process markdown with Merfolk diagrams\r\nconst processor = new MarkdownProcessor();\r\nconst markdownContent = `\r\n\\`\\`\\`merfolk\r\n%% My System Architecture\r\nWebServer[Function: Web Server]\r\nDatabase{Component: Database Service}\r\nAPIGateway((Service: API Gateway))\r\n\r\nAPIGateway --> WebServer : \"routes requests\"\r\nWebServer --> Database : \"queries data\"\r\n\\`\\`\\`\r\n`;\r\n\r\nconst diagrams = processor.processMarkdown(markdownContent);\r\n\r\n// Create Three.js scene\r\nconst scene = new THREE.Scene();\r\n\r\ndiagrams.forEach((diagram, diagramIndex) => {\r\n  if (diagram.errors.length === 0) {\r\n    const graph = diagram.graph;\r\n\r\n    // Add nodes as 3D objects\r\n    for (const [nodeId, node] of graph.nodes) {\r\n      let geometry;\r\n\r\n      switch (node.geometry) {\r\n        case 'cube':\r\n          geometry = new THREE.BoxGeometry(\r\n            node.transform.scale.x,\r\n            node.transform.scale.y,\r\n            node.transform.scale.z\r\n          );\r\n          break;\r\n        case 'dodecahedron':\r\n          geometry = new THREE.DodecahedronGeometry(1);\r\n          break;\r\n        case 'tetrahedron':\r\n          geometry = new THREE.TetrahedronGeometry(1);\r\n          break;\r\n      }\r\n\r\n      const material = new THREE.MeshStandardMaterial({\r\n        color: node.visual.color || '#ffffff',\r\n        opacity: node.visual.opacity || 1.0,\r\n        transparent: true,\r\n      });\r\n\r\n      const mesh = new THREE.Mesh(geometry, material);\r\n      mesh.position.set(\r\n        node.transform.position.x + diagramIndex * 20,\r\n        node.transform.position.y,\r\n        node.transform.position.z\r\n      );\r\n\r\n      scene.add(mesh);\r\n    }\r\n\r\n    // Add connections as lines\r\n    for (const [connId, connection] of graph.connections) {\r\n      const points = [\r\n        new THREE.Vector3(\r\n          connection.source.anchor?.x || 0,\r\n          connection.source.anchor?.y || 0,\r\n          connection.source.anchor?.z || 0\r\n        ),\r\n        ...connection.waypoints.map((p) => new THREE.Vector3(p.x, p.y, p.z)),\r\n        new THREE.Vector3(\r\n          connection.target.anchor?.x || 0,\r\n          connection.target.anchor?.y || 0,\r\n          connection.target.anchor?.z || 0\r\n        ),\r\n      ];\r\n\r\n      const geometry = new THREE.BufferGeometry().setFromPoints(points);\r\n      const material = new THREE.LineBasicMaterial({\r\n        color: connection.visual.color || '#ffffff',\r\n      });\r\n\r\n      const line = new THREE.Line(geometry, material);\r\n      scene.add(line);\r\n    }\r\n  }\r\n});\r\n```\r\n\r\n## Examples\r\n\r\nSee the `examples/` directory for complete usage examples:\r\n\r\n- `basic-usage.ts` - Simple API usage\r\n- `sample.md` - Complex application architecture example\r\n\r\n## Contributing\r\n\r\n1. Fork the repository\r\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\r\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\r\n4. Push to the branch (`git push origin feature/amazing-feature`)\r\n5. Open a Pull Request\r\n\r\n## License\r\n\r\nMIT License - see [LICENSE](LICENSE) file for details.\r\n\r\n## Related Projects\r\n\r\n- [Mermaid](https://mermaid-js.github.io/) - Inspiration for syntax\r\n- [Three.js](https://threejs.org/) - 3D rendering library\r\n- [D3.js](https://d3js.org/) - Data visualization\r\n\r\n## Markdown File Upload & 3D Generation\r\n\r\nYou can automatically generate 3D diagrams by uploading markdown files containing Merfolk syntax:\r\n\r\n### Installation\r\n\r\n```bash\r\nnpm install 3d-ast-generator\r\n```\r\n\r\n### Basic Setup\r\n\r\n```typescript\r\nimport { MarkdownProcessor } from '3d-ast-generator';\r\n\r\n// Create processor with configuration\r\nconst processor = new MarkdownProcessor({\r\n  layout: {\r\n    algorithm: 'hierarchical',\r\n    nodeSpacing: 4.0,\r\n    layers: 5,\r\n  },\r\n  visual: {\r\n    theme: 'dark',\r\n    colors: {\r\n      function: '#4CAF50',\r\n      component: '#2196F3',\r\n      datapath: '#FF9800',\r\n    },\r\n  },\r\n});\r\n\r\n// Process markdown file upload\r\nconst handleFileUpload = async (file: File) => {\r\n  try {\r\n    const content = await file.text();\r\n    const diagrams = processor.processMarkdown(content);\r\n\r\n    const validDiagrams = diagrams.filter((d) => d.errors.length === 0);\r\n    const errors = diagrams\r\n      .filter((d) => d.errors.length > 0)\r\n      .flatMap((d) => d.errors);\r\n\r\n    if (validDiagrams.length > 0) {\r\n      console.log(`Generated ${validDiagrams.length} 3D diagrams!`);\r\n\r\n      // Process each diagram for your 3D application\r\n      validDiagrams.forEach((diagram, index) => {\r\n        const graph = diagram.graph;\r\n        console.log(`Diagram ${index + 1}:`, {\r\n          title: diagram.block.title || 'Untitled',\r\n          nodes: graph.nodes.size,\r\n          connections: graph.connections.size,\r\n          bounds: graph.getBounds(),\r\n        });\r\n\r\n        // Add to your 3D scene here\r\n        addDiagramToScene(graph, index);\r\n      });\r\n    } else {\r\n      console.error('No valid diagrams found:', errors);\r\n    }\r\n  } catch (error) {\r\n    console.error('Upload failed:', error);\r\n  }\r\n};\r\n\r\n// Helper function to add diagram to your 3D scene\r\nfunction addDiagramToScene(graph, diagramIndex) {\r\n  // Implementation depends on your 3D library (Three.js, Babylon.js, etc.)\r\n  // See the Three.js example above for complete implementation\r\n}\r\n```\r\n\r\n### File Upload UI Helper\r\n\r\n```typescript\r\n// Simple file upload handler\r\nfunction setupFileUpload() {\r\n  const fileInput = document.createElement('input');\r\n  fileInput.type = 'file';\r\n  fileInput.accept = '.md,.markdown';\r\n  fileInput.multiple = true;\r\n\r\n  fileInput.addEventListener('change', async (e) => {\r\n    const files = Array.from(e.target.files || []);\r\n\r\n    for (const file of files) {\r\n      if (file.name.endsWith('.md') || file.name.endsWith('.markdown')) {\r\n        await handleFileUpload(file);\r\n      }\r\n    }\r\n  });\r\n\r\n  // Trigger file selection\r\n  fileInput.click();\r\n}\r\n\r\n// Or drag and drop\r\nfunction setupDragAndDrop(dropZone: HTMLElement) {\r\n  dropZone.addEventListener('dragover', (e) => {\r\n    e.preventDefault();\r\n    dropZone.classList.add('dragover');\r\n  });\r\n\r\n  dropZone.addEventListener('dragleave', () => {\r\n    dropZone.classList.remove('dragover');\r\n  });\r\n\r\n  dropZone.addEventListener('drop', async (e) => {\r\n    e.preventDefault();\r\n    dropZone.classList.remove('dragover');\r\n\r\n    const files = Array.from(e.dataTransfer?.files || []);\r\n    for (const file of files) {\r\n      if (file.type === 'text/markdown' || file.name.endsWith('.md')) {\r\n        await handleFileUpload(file);\r\n      }\r\n    }\r\n  });\r\n}\r\n```\r\n\r\n### Markdown File Format\r\n\r\nYour markdown files should contain Merfolk code blocks:\r\n\r\n```markdown\r\n# My Architecture\r\n\r\nThis document describes our system architecture.\r\n\r\n\\`\\`\\`merfolk\r\n%% System Overview\r\nWebServer[Function: Web Server]\r\nDatabase{Component: Database Service}\r\nAPIGateway((Service: API Gateway))\r\nCache[Function: Cache System]\r\n\r\nAPIGateway --> WebServer : \"routes requests\"\r\nWebServer --> Database : \"queries data\"\r\nDatabase --> Cache : \"caches results\"\r\n\\`\\`\\`\r\n\r\n## Data Flow\r\n\r\n\\`\\`\\`merfolk  \r\n%% User Registration Flow\r\nSignupForm{Component: Signup Form}\r\nUserAPI[Function: User API]\r\nUserDB[[Store: User Database]]\r\nEmailService((Service: Email Service))\r\n\r\nSignupForm --> UserAPI : \"submits form\"\r\nUserAPI --> UserDB : \"stores user\"\r\nUserAPI -.-> EmailService : \"sends welcome email\"\r\n\\`\\`\\`\r\n```\r\n\r\n### Complete Syntax Example\r\n\r\nHere's a comprehensive example showing all geometry types and connection features:\r\n\r\n```markdown\r\n\\`\\`\\`merfolk\r\n%% Complete Application Architecture\r\n%% Components (Dodecahedrons, can become containers for functions)\r\nApp{Component: Main Application}\r\nUI{Component: User Interface}\r\nAPI{Component: API Gateway}\r\n\r\n%% Functions (Cubes, can be nested in components)\r\nprocessData[Function: Data Processing]\r\nvalidateUser[Function: User Validation]\r\nrenderUI[Function: UI Rendering]\r\n\r\n%% Hooks (Cubes, for React hooks and custom hooks)\r\nuseAuth[Hook: useAuth]\r\nuseForm[Hook: useForm]\r\nuseTheme[Hook: useTheme]\r\n\r\n%% Stores (Cubes)\r\nUserDB[[Store: User Database]]\r\nConfigDB[[Store: Configuration Store]]\r\n\r\n%% External Services (Tetrahedrons)\r\nPaymentAPI((Service: Payment Gateway))\r\nEmailService((Service: Email Provider))\r\n\r\n%% Libraries (Cubes)\r\nReactLib<Library: React>\r\nExpressLib<Library: Express.js>\r\n\r\n%% Labeled connections with nested grouping\r\nprocessData --> API : \"processes requests\"\r\nvalidateUser --> API : \"validates tokens\"\r\nrenderUI --> UI : \"renders components\"\r\n\r\n%% Hook connections\r\nuseAuth --> UI : \"provides auth state\"\r\nuseForm --> UI : \"manages form state\"\r\nuseTheme --> UI : \"provides theme\"\r\n\r\n%% Component connections\r\nApp --> UI : \"renders\"\r\nApp --> API : \"calls\"\r\nAPI --> UserDB : \"queries\"\r\nAPI --> PaymentAPI : \"payment processing\"\r\nAPI -.-> EmailService : \"notifications\"\r\n\r\n%% Library dependencies  \r\nUI --> ReactLib : \"uses\"\r\nAPI --> ExpressLib : \"uses\"\r\n\r\n%% Face-specific connections\r\nApp@front --> UI@back : \"direct rendering\"\r\nAPI@top --> UserDB@bottom : \"data flow\"\r\n\\`\\`\\`\r\n```\r\n\r\n**Result**: This creates:\r\n\r\n- **Nested grouping**: Functions automatically nest inside their connected components\r\n- **Multi-geometry**: 3 different 3D shapes (cubes, dodecahedrons, tetrahedrons)\r\n- **Hooks support**: React hooks and custom hooks as cubes with pink color (#E91E63)\r\n- **Labeled connections**: Descriptive labels on connection lines\r\n- **Face connections**: Specific face-to-face connections for precise 3D positioning\r\n\r\n### Features\r\n\r\n- **Drag & Drop Upload**: Simply drag markdown files into your application\r\n- **Multiple Diagrams**: Process multiple Merfolk diagrams from a single file\r\n- **Automatic 3D Positioning**: Diagrams are automatically positioned in 3D space\r\n- **Error Handling**: Clear error messages for syntax issues\r\n- **Real-time Processing**: Instant 3D visualization upon upload\r\n- **Batch Processing**: Handle multiple files at once\r\n\r\n### Generated 3D Objects\r\n\r\nEach Merfolk syntax element becomes a 3D object:\r\n\r\n- `{Component: name}` → **Dodecahedron mesh** (becomes container when containing functions)\r\n- `[Function: name]` → **Cube mesh** (can be nested inside components)\r\n- `[Hook: name]` → **Cube mesh** (pink #E91E63) for React hooks and custom hooks\r\n- `[[Store: name]]` → **Cube mesh** for databases and data stores\r\n- `((Service: name))` → **Tetrahedron mesh** for external services\r\n- `<Library: name>` → **Cube mesh** for external libraries\r\n- Connections → **Line geometries** between nodes with optional labels\r\n- Face connections → **Precise face-to-face connections**\r\n\r\n### Complete Example\r\n\r\n```typescript\r\nimport { MarkdownProcessor } from '3d-ast-generator';\r\n\r\nasync function processArchitectureFile(file: File) {\r\n  const processor = new MarkdownProcessor({\r\n    visual: {\r\n      theme: 'dark',\r\n      colors: {\r\n        function: '#4CAF50', // Green cubes\r\n        component: '#2196F3', // Blue dodecahedrons\r\n        datapath: '#FF9800', // Orange planes\r\n      },\r\n    },\r\n  });\r\n\r\n  try {\r\n    const content = await file.text();\r\n    const diagrams = processor.processMarkdown(content);\r\n\r\n    console.log(`Processed ${file.name}:`);\r\n    diagrams.forEach((diagram, i) => {\r\n      if (diagram.errors.length === 0) {\r\n        const graph = diagram.graph;\r\n        console.log(\r\n          `  Diagram ${i + 1}: ${graph.nodes.size} nodes, ${\r\n            graph.connections.size\r\n          } connections`\r\n        );\r\n\r\n        // Convert to your 3D application format\r\n        const diagramData = {\r\n          title: diagram.block.title,\r\n          nodes: Array.from(graph.nodes.values()).map((node) => ({\r\n            id: node.id,\r\n            type: node.type,\r\n            geometry: node.geometry,\r\n            position: node.transform.position,\r\n            color: node.visual.color,\r\n          })),\r\n          connections: Array.from(graph.connections.values()).map((conn) => ({\r\n            source: conn.source.nodeId,\r\n            target: conn.target.nodeId,\r\n            type: conn.type,\r\n          })),\r\n        };\r\n\r\n        // Add to your 3D scene, save to database, etc.\r\n        addToScene(diagramData);\r\n      } else {\r\n        console.error(`  Diagram ${i + 1} has errors:`, diagram.errors);\r\n      }\r\n    });\r\n  } catch (error) {\r\n    console.error('Processing failed:', error);\r\n  }\r\n}\r\n```\r\n\r\nThis makes it incredibly easy to convert documentation into interactive 3D visualizations!\r\n","readmeFilename":"README.md"}