{"_id":"whitebrand","_rev":"39-c706183d77f0076325de1e9942b21917","name":"whitebrand","dist-tags":{"latest":"1.6.51"},"versions":{"1.0.0":{"name":"whitebrand","version":"1.0.0","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.0.0","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"dfc72211238c077a22418aa8dc4753ee642bff3d","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.0.0.tgz","fileCount":14,"integrity":"sha512-ESaiKyWBS2zPv3gUMdoL7FRFvQi7UDCwJnrVKKMgZiHHmc9eAZeyEnREQB53aGY8L7xrmCpNoi4KnpsmXMOk+g==","signatures":[{"sig":"MEUCIQDuWuRrVS0eAZUdc3lHsgiqo+yNIdy7OhKgxeta10BpLAIgFOIkuLH2ts3AzMEa3stk+EHsQZ08rbSgOmNHG3fQhEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175955},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"The B2B Whitelabel Engine - Transform any modern web/mobile app into a multi-tenant platform.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","jiti":"^2.7.0","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.0.0_1780423193551_0.4656500528174783","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"whitebrand","version":"1.0.2","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.0.2","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"3b13e593722f6e218a80fbea9275026ba4ff372e","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.0.2.tgz","fileCount":14,"integrity":"sha512-THZDAFeGr4YHmJFGC4kHzL4ivojMpbMZJ9zJSlAjWicr5K/3TK3W8Tt4ZDCzTEVLwupO6gVWY3IBXWXCY6WwZA==","signatures":[{"sig":"MEUCIQCJKH4jCtcOw/hKyYwfxDaIuauEgg7Zfz9oQ+l0V9feawIgMg6BaJF5qA7zqAv28bffwdEl6USj+aDt2ENGJfY+vUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185581},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"The B2B Whitelabel Engine - Transform any modern web/mobile app into a multi-tenant platform.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","jiti":"^2.7.0","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.0.2_1780423925526_0.6181713423323529","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"whitebrand","version":"1.0.7","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.0.7","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"1a3bf230a85eab40393f0a4c06e84d827a3c776e","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.0.7.tgz","fileCount":14,"integrity":"sha512-6JTHvcv1rhIw3WjhUSo2E8DrVw83zVor8kjsUj2pu6+ilnAQlOY/mBtlTV5wtI5CRLfPAi2hUpY1kmQ/pUY59g==","signatures":[{"sig":"MEUCIEuyzo86oPByliAM9PgwbxwxvI0x4M6zE8l4QsoXU42oAiEAuTiStdbiyyAv7JmQuENvVN6ImQUCanDjGUNF7qsmCo0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187786},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"The B2B Whitelabel Engine - Transform any modern web/mobile app into a multi-tenant platform.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","jiti":"^2.7.0","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.0.7_1780425162254_0.32912771432475596","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"whitebrand","version":"1.0.8","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.0.8","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"c745db19a00fbca73cf1e39ee35ab9b7f8e5d1e5","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.0.8.tgz","fileCount":14,"integrity":"sha512-NpHbeMd+dTITHIQk/z2OUshRNWAcOB0gCUiqFyPZX+PszN2OdMM9Z3zEhnUKEp5ZKdIE3VM/+WznMl1PJoPkHA==","signatures":[{"sig":"MEYCIQC2P5GC7oYrWCUDh0hWi+EIaZL9cf0A0fbZaS9HTMk49QIhAPxXrU+rqvFuCVAsVtCpl76f0rU8XQ+ABLKOljU2EWbg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203641},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"The B2B Whitelabel Engine - Transform any modern web/mobile app into a multi-tenant platform.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.0.8_1780483691751_0.7012908435170582","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"whitebrand","version":"1.3.0","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.3.0","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"f4f6bf35c9ab89bd775ff5e8c84fd9f806eef5ae","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.3.0.tgz","fileCount":14,"integrity":"sha512-ejMv/QijXrhemZ/GgHoD5U1fXtTF8GgPkxcm6yqG9DOQil69NosZpWdNNFPhqoZ7auaW7FOrlfZJTcjrs2dW+w==","signatures":[{"sig":"MEUCIBf3FwP4BJxtRqJiuClLhPRbd3YmNrayJwcayMqpOASUAiEAur12sJTyIM3Z4r8jQ0u5+++4lhiMAl532ct9ATtEYKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237140},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"The B2B Whitelabel Engine - Transform any modern web/mobile app into a multi-tenant platform.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.3.0_1780491619086_0.503642196205282","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"whitebrand","version":"1.4.0","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.0","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"0e6e20d7e62af3b31a88c89202a5501540df6cc2","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.0.tgz","fileCount":14,"integrity":"sha512-uECbvAgDDLPk3Zo9CivLH3kt1f/1CFxJ7r8uoyIFddj+hCE/lzkSrTgZMfQQ4N5gntHbw8vggiqB+E1gFUB7kQ==","signatures":[{"sig":"MEYCIQDH2mWP7jZ437aNcpX/5ZKkAyhsjJWOeRUqdhpmgD79NQIhAM9qIqZr0j3xOAPAwGp0b3aEOQieHcOEaNiUJPCUs47g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247381},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.0_1780492556559_0.5463692118391912","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"whitebrand","version":"1.4.1","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.1","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"554d619762e71238859ceb7dea0a2e13a6918784","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.1.tgz","fileCount":14,"integrity":"sha512-1B1OQjw9n0bFYVy7a/zTLBSY0aHqhuXACRYIsC/NfnOcultsF8FFp3/N7HlyeyiQOGX3YvIlorRgoEeum2zDNQ==","signatures":[{"sig":"MEUCIAyDtNpkyZNtnsD/p6oN2fzOaJYAoS3M2I0xM01FE8buAiEAhXMm5xaFyYKaFonCRH5zxUM1ytNG0QvbBLG0o/8vNcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248167},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.1_1780494187051_0.502282890690771","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"whitebrand","version":"1.4.4","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.4","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"9c1a9b2596262312496b3f4092007b8556abda3d","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.4.tgz","fileCount":14,"integrity":"sha512-nqbN8tH7gI6J5M63nnKK7Hq8+1iM761EekmN1cD2BA+BXx9WxLFkm4PgiH6+6Wqvis206UrnVXPslkslgP7vqg==","signatures":[{"sig":"MEUCIB/Dxn98VDMKgqDZFZGvdlG/Plp0899g8eOZAvabfemBAiEA4d1Q7V8/YofCrJEXQ0Tp8f4JcqLOectQyij0olWjcbI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248094},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.4_1780495700028_0.5753225522871943","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"whitebrand","version":"1.4.5","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.5","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"b1f68b8ec33c8fdbf3126d5ff812b3ff02a7a162","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.5.tgz","fileCount":14,"integrity":"sha512-ciQIZV0MZzCFTF3oqNgfFBj6yqoUZVwxAvQ07/jjqKbraNzoZxYw/cV92wHtQUhPdGLdPA3B2bDXGjRUJsxP0Q==","signatures":[{"sig":"MEUCIQDgbBLIE/Ic0yqOvMDMyUskSucPT0Ep9Oms/JDHwB5ZQAIgJjGURXNGAOwX8kn0uiK9Cu+ybu7N4aqnwcgBFeqR9vY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250216},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.5_1780497410747_0.10343762439656246","host":"s3://npm-registry-packages-npm-production"}},"1.4.6":{"name":"whitebrand","version":"1.4.6","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.6","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"2bdc8d32e1d21e7a2372d2d3891723b0eaa3c70b","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.6.tgz","fileCount":14,"integrity":"sha512-6Eit0d5TnnLpouEeubHJ8BzG701FApELsp0JbTyYlm46M/3Li4gR2n8WPRDqhUtYC+yZ9lQI18oSQBQ/L64SKQ==","signatures":[{"sig":"MEUCIHZnCBWCz0xOLRGivB9pnIPu70k8ScNnOq5kU0MCt69mAiEAvlJ7vJYWYD8/ctbzs8jKUsBk3+XXgzYmaxNcVpwxagY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251046},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.6_1780497589320_0.4977800122686129","host":"s3://npm-registry-packages-npm-production"}},"1.4.9":{"name":"whitebrand","version":"1.4.9","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.9","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"38e7c6f2f1b7931f5f4794a136287d409f3c2f51","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.9.tgz","fileCount":14,"integrity":"sha512-Y9bg9howiDiMkCrctkbEaio7+gZgY+qGFybYlr0U2K8gYD9/PcwpDluhTtmjuCo7fCAJTQoBIuYsVTQxBhZmuw==","signatures":[{"sig":"MEUCIHiChlU2A0MRCEiP4JMplE5SM+RjhjH0jcg+e35J3TJzAiEAu+kLjtEnEu6c0uVEsnAqMR/4fuwYxgsCGY9cmgUP4YQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257444},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.9_1780498162336_0.30678779690423696","host":"s3://npm-registry-packages-npm-production"}},"1.4.10":{"name":"whitebrand","version":"1.4.10","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.4.10","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"d57072fca40fe319816742436defef89f34e2c9f","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.4.10.tgz","fileCount":14,"integrity":"sha512-cUFDT/qFY6Bw+dksGjG1s0vCZNs8k97RFanP5REyPrIdX10RoRPtI6M8vGUm6u4H2qtS6FYWaT9P3qsxUWg6OQ==","signatures":[{"sig":"MEUCIHqlRrDah/q0VksM7GqE/shvVxZo+v7Fpi+zayPL6Gu9AiEAxLDqvte0QpgkobnXcT5dct8MY57XsJtjILtf03q84Ak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271672},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.4.10_1780498821586_0.5860527573851542","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"whitebrand","version":"1.5.0","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.5.0","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"b9af43a6d2e1cdcad5efbc6b1f658e9a4a94640b","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.5.0.tgz","fileCount":14,"integrity":"sha512-nXmU4zEOYeLu0EeVz6SC2MvihbRfgTWl350aRNVaJUYznIkF7+lUH3K+FkHz29r2K5r4kj2IosBBHEy+xgXlFA==","signatures":[{"sig":"MEUCIQCUVYAfDQMuMH14scj3Bw6kM3rwQnrdkJoa7ch+6cSf5QIgILdScJBXef/F75G9A7/iiw3bt55X6pD4WeHxj9zhSkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283038},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.5.0_1780503414688_0.8633545666966751","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"whitebrand","version":"1.5.1","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.5.1","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"46e95226d6449caabacd35064680b299326f0baf","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.5.1.tgz","fileCount":14,"integrity":"sha512-X0QwlRZzWa4bZpxNHL+QUaHivCFgnIVhUcyDo7iIzF5YTbDcTxDD4ZKCUkSLdQ4bxAQ52FG0g8XQ3ojxJs9Gxg==","signatures":[{"sig":"MEQCIGB3V8UnyNcoIe2jcQoE5e2Q9rgTGbCpAcMAlQSIpVOAAiBBcy1WLxc09kFnUf2t1UDQXA1rOikB0UK3FSmfpq93nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287935},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.5.1_1780504898789_0.07106108907033648","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"whitebrand","version":"1.6.0","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.0","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"d40c478a1fe7c502396fa1d85a2cb860f948fe21","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.0.tgz","fileCount":19,"integrity":"sha512-6aKwrLfyzAD4TfoNW2aMbjYsqtRnI3XXZr2bUJGN7qZqh8f940KjZZDZaLNaISyfuq2iyTat7rqkOKjwpNhPZQ==","signatures":[{"sig":"MEUCIQDkq69e852JxC53fv5QSiTCtBxo8EOpucBd11yP1mG2aQIgfEBSPo24Bq58ImWLcmb0D68v3YI/f/KifWQ2rM0F56A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1578384},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.0_1780510202758_0.4266355040804528","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"whitebrand","version":"1.6.4","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.4","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"89c3a7496ccb00204da375a7cdbc329a688c7bf8","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.4.tgz","fileCount":19,"integrity":"sha512-ZqSuK/rsWZBX+H7oiNQOEjBCqrpTGXlTuax5AtT82xP1jYCmnf3YFZ8j++OvPqwU4p6piHrGFtA9PJEFjmu3Lg==","signatures":[{"sig":"MEQCIC2et1wijQx5Cnm1vrjZBtGsXDQQ64XDAKWE7uSJXBuSAiAFcFGEz0N7Lo8Kh7fN9jjPCHNrE5S0mego2nt7Uw4lMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1534471},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.4_1780511753587_0.4467568040482317","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"whitebrand","version":"1.6.7","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.7","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"61f2d982c812c83e32e86ef91d66d20910f8809b","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.7.tgz","fileCount":19,"integrity":"sha512-s/YjVPTI6YkF1DeDsilM4wZHY1D9BFcoupJuI4PuPWp1qOyWIQQ/NKwTq0NC9P1InetcPPnpVpZ7obYsCHFtag==","signatures":[{"sig":"MEQCIAHJqAUeD2LnphPhHCl4nWA0IX8rSjhVa9fgKeZkPaVhAiB2y+8LDRqZlsf9qE5M6O5THdhoxIjpyn1jCqsJxeUEMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1609880},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.7_1780514116657_0.3131285841975304","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"whitebrand","version":"1.6.8","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.8","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"13d38c665a3ff9321e6cfbc9ff83c4b18548ca80","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.8.tgz","fileCount":19,"integrity":"sha512-93tZS8eiYuQ/9TE0lZg+kKTqDi+//zqXBVZEsxZh9ZFzWWQGRMM4lz078RLP/Iqdlg3zxq6XcnQCEKyxz7KGhg==","signatures":[{"sig":"MEUCIQDK3Os+H7lIOxN0szRUBHDFmZbpVWP8ToNUioYKSoSP/gIgJrgnXvnUZTsM0ApFeIof3ViCxw8HH7Ek/ibsKpZ7nkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1614379},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.8_1780515735225_0.8982424565017617","host":"s3://npm-registry-packages-npm-production"}},"1.6.9":{"name":"whitebrand","version":"1.6.9","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.9","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"11b24fdf85a8771eef075a1953b45fb07d319c09","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.9.tgz","fileCount":19,"integrity":"sha512-Lfi8K2vgsTdNRSF9NST9wYj4u9UfKU2WIp31ZCayLh9b9bgulO7lxI+yn4PUcBz4QTNP181unaEp4c9bvqGOzw==","signatures":[{"sig":"MEQCICWMgAc7weY3YkDr0K59hEwkFySvoIIU46a1MvAS6Z0sAiASKM5asNyS0HF6sM9GLTI2ec/UFfeWSZUPW23j5+rkwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1592484},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.9_1780516012474_0.12463658890949714","host":"s3://npm-registry-packages-npm-production"}},"1.6.11":{"name":"whitebrand","version":"1.6.11","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.11","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"670070fe5ae49e71edf04613c59727483bfe60d8","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.11.tgz","fileCount":19,"integrity":"sha512-0Vbp4svO0phUy/N1nAUJrQzdtENp1zcz06wLxmQB+JHoTEP2uPzrsVzeQ/zNMBj2rdZ/s3zwj2+Ywo3EaKz03Q==","signatures":[{"sig":"MEUCIQDhmhBeVmmn9gHF7U/DbPQaJJRaoRzlb8xfFCAUrVaAsgIgY/3YM7LIGo9LXO9M2tSw0j+z88htdyJqrYi3Tlecq44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1553280},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.11_1780516397432_0.4101936006654252","host":"s3://npm-registry-packages-npm-production"}},"1.6.21":{"name":"whitebrand","version":"1.6.21","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.21","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"06a20cefda34279ca287ad9ad814ffdc0b0043c7","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.21.tgz","fileCount":19,"integrity":"sha512-3Ydx3/NjmP6e9Qzg1+i9rahUVycU6T4sgrNekFwc6/T9Vs8+XetrR+3SkUsQuSrZi4IRtgJAlJnBWB0q/6b1gw==","signatures":[{"sig":"MEUCIFGFcbQ9x32lmb+mJcFp4dHSezFI6jfnsxB6eJjGx2VBAiEA8ixzl5la7+kpr5M661qWNjq7W/URpwseVrSnyJMXltU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1623505},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.21_1780524019864_0.13326894301639625","host":"s3://npm-registry-packages-npm-production"}},"1.6.29":{"name":"whitebrand","version":"1.6.29","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.29","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"f04be4735ffe03905c6c3daf8a012e3da8885c1e","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.29.tgz","fileCount":19,"integrity":"sha512-MJNsZJNZZq4LB9OTRaaCIC8nTtCZKukgwhAq4HXGyPchIgfmHFrqjyryhGTbqtv78BzR3nkQNo/ux1c1YIiJxA==","signatures":[{"sig":"MEUCIQC2PEg6TZJzBpBf1g2Yo28VvZvEfAP4DJoJ2rjHxUISSgIgFuLQu8u6p94PbhlbvIVkOCn1ZiKEh47Dd2qITd7ULxk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1655858},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.29_1780525997477_0.07936801302539154","host":"s3://npm-registry-packages-npm-production"}},"1.6.31":{"name":"whitebrand","version":"1.6.31","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.31","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"43b8d06fffc705fb2ca4e5cff6aa47eb4dc4eb9c","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.31.tgz","fileCount":19,"integrity":"sha512-fD/nGRgxJFYELeZOAI28gtY0RY5mFUne3y9fT5sLZVo5rrP6kp/iJr3sLCYRVb35BP6sbx9pinYLXsNPInviHg==","signatures":[{"sig":"MEUCIQDMAkUHnpmXrFNmQbdhgkEl6zz3TSifU2j6g0604vdBMgIgE5Gm6r0kGwiqxDFefyhG1ngdptwWGH9M7dsww73Y0ZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1635195},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.31_1780527405812_0.8297535775199201","host":"s3://npm-registry-packages-npm-production"}},"1.6.32":{"name":"whitebrand","version":"1.6.32","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.32","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"d1cb00f228d2db99827040f6fb5e0891653b7491","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.32.tgz","fileCount":19,"integrity":"sha512-NUJt5C54Nhmazly5MMZ3nTkC1UUnVaG4kTpEKFp7qpjB467OAUCW0hwjzZBwqYBLe7hsaGr/d3JSscHPn2vuOg==","signatures":[{"sig":"MEQCICsJZWpwmkeKRJm+E/GIlw8NNVOmjxZqQpMgsoLlXk/qAiB5eFeIg4KSRxs6r+RdoCZk9SMf8QbEOGPDEKs5MY0hJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1659221},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.32_1780528055737_0.1589273421926103","host":"s3://npm-registry-packages-npm-production"}},"1.6.33":{"name":"whitebrand","version":"1.6.33","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.33","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"8e44c550b5babe39aeecfa00018a084464f819a4","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.33.tgz","fileCount":19,"integrity":"sha512-CDWGAYJ9rRWNJrZ8wvQPkl5yqx3Sgw5GUfqWnmS3J+wnfW2mTrnHcYhLxdsfg1IHzMbt9am0vq6/hSNsIGPVOw==","signatures":[{"sig":"MEQCIBbvd6TmuounFYBSw3+uoblkGfJg0AiN9E+6ACoab1MmAiBGIPWJQTiIPWh99RazCvI0LirfshCpnu/hPxXyWHNbBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1625729},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.33_1780528511260_0.4323546660159838","host":"s3://npm-registry-packages-npm-production"}},"1.6.34":{"name":"whitebrand","version":"1.6.34","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.34","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"a36b849ef235e42c8d4f41dc246a05e202bf043b","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.34.tgz","fileCount":19,"integrity":"sha512-5/3a0W9etPQTsr8v3EKTZrYpZ9FzWAoB/7D59MsAtboMlIfXjyKJ/7IE1ngRuwW/C+6JiWXRQ+/ieb7ODzuEZA==","signatures":[{"sig":"MEUCIEr4erYQHvSiJEw3LX5+dmR9uvrgW/xX/TOLp5yMqpyFAiEAo1Tx4WStojSR4/nilx/eMJfg97pAxA/VLbOK44HvwCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1619922},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.34_1780528795342_0.06768113787529373","host":"s3://npm-registry-packages-npm-production"}},"1.6.37":{"name":"whitebrand","version":"1.6.37","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.37","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"96c40c7f5a4857e0f71ccbe27bbeaa15eadf74df","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.37.tgz","fileCount":19,"integrity":"sha512-Kuxf4e4QUD87/2Ku05+hsu1WnkKFPSGGEyiPVU9jY2Dut45xTxDrZRREdWIgKt6n0JMsbG74kGaeVJ2FkNRT+w==","signatures":[{"sig":"MEUCIQDASNWS1jZRzcEQ2kM/Yw2yRFEbSI+HOU2NROoiwOltOQIgPg16oZW84/0Dcn9kZNyiinh7KYQ63I+Yb2guhP+mXnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1629967},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.37_1780530627027_0.511388846154049","host":"s3://npm-registry-packages-npm-production"}},"1.6.38":{"name":"whitebrand","version":"1.6.38","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.38","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"297fafc45c93ddb4d941bb87f00389e3f18e64df","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.38.tgz","fileCount":19,"integrity":"sha512-WkXr60sfb67vaMsVw0a3tLvjfty5A8i+eVvvT1VK3C745zTyO2EKKncDq54F3x+/B/AcWozUc/m/eMZdV3uyGg==","signatures":[{"sig":"MEUCIQCVWNkngajZuJVY9WkEhuqqTaKWbxl2L2zNe5PI2Wxx4AIgT9p5iiOebB3/1kEKft5cCXL8aYSY39Cb0DbLgCq76xg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1658600},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.38_1780531739713_0.3747573477976718","host":"s3://npm-registry-packages-npm-production"}},"1.6.39":{"name":"whitebrand","version":"1.6.39","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.39","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"0099ba7c565d3c4a9dd0850bebdee1c12e562d9f","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.39.tgz","fileCount":19,"integrity":"sha512-+xEM0C4nTCZczaQfcKNQW3TNVinpXSM6+3POnbZT8Xh9AjtdBJHBPJgmRhUCNAx3uL2ijQR7MYVVVrthlTyfqQ==","signatures":[{"sig":"MEQCIDLqyC/wV8H5Gvk9TXXsz+xUSiBq5oV6NFgxTezIw9yjAiBo3YKWD52dM3C48U+Y1ksnd9EZuULK0a8f46X6zXo85A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1641526},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.39_1780532257322_0.04962690793511215","host":"s3://npm-registry-packages-npm-production"}},"1.6.40":{"name":"whitebrand","version":"1.6.40","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.40","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"d141798cd91358d995deabd83efd2c9bc99442a4","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.40.tgz","fileCount":19,"integrity":"sha512-FMcPtf73SehUnSeRsMlq6mAf2BYeKCrrluR4g8vq0snFQYWUBRpTYRi6S+f+nDfNuXvD87jOF42S2fBnpnPohQ==","signatures":[{"sig":"MEQCIGPFss0NFldU+FBnOs5IKGcTcI5D6Xc/uOQjpINGQ0plAiAwti1FMnBd/TZlLOZ/4DwPUsNZHaXz+fYio2iqF1oKeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1656446},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.40_1780533518661_0.6526628685113567","host":"s3://npm-registry-packages-npm-production"}},"1.6.41":{"name":"whitebrand","version":"1.6.41","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.41","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"23a32161e4d83ce25e2fd94d03372cc2796fe540","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.41.tgz","fileCount":19,"integrity":"sha512-XCZQOf+p/D3Dtd2pqCR+QX4Hmg22YruAzuWcGxLShwseO2a4iacffml3dyre3V/A7dH7ozAcKoffZF2VyButFA==","signatures":[{"sig":"MEUCIQDRyFC+wvL1UlmWj/7TnsZYC9ZllcuhGr54RKYhCL66+QIgcCYuYDN/KJIPrgzKN4qIqsOH3aiLhtliH5xnQ02hZ/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1696454},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.41_1780581937424_0.8793959949794861","host":"s3://npm-registry-packages-npm-production"}},"1.6.42":{"name":"whitebrand","version":"1.6.42","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.42","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"d37002d13bb9ee73b7694fa0810b248406f1345a","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.42.tgz","fileCount":19,"integrity":"sha512-mobY7HQHSnW6ADKKndxN55oYh48OJW6bQ0ainebqd+ynjf7DJQJ5Mepnl8bQFqYtvs4tmRuf6xHhqYDAM02hgA==","signatures":[{"sig":"MEUCIQDrL6Sll10XfMN8Eqg0FMNyDwBHRiSLE5xlFqYQJNKW9wIgJ+hxh6rFnQbJEHmuvfD2diO83r0OAFBFsnzkBtxXznY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1749180},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.42_1780583192182_0.048210190530210584","host":"s3://npm-registry-packages-npm-production"}},"1.6.44":{"name":"whitebrand","version":"1.6.44","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.44","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"5985e9b9fb301102d7cdf3611a8facbcb14c7db4","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.44.tgz","fileCount":19,"integrity":"sha512-NWR4iBE7cZCmPQQCJh/f7A+tNjFaDF2E23PmUIBVwjSLxI5WmsTH/3psuVZz7BWCoZV3jsK+FTvTnJluUJ14fA==","signatures":[{"sig":"MEUCIQCDjPa9iQWD6T3lyCqT5U129MUzqajLyzB9Hu6TbTP0tQIgLyDn6GPLXmkMwMh8Za9EZOnSGTsUMaKZQaba187F1fY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1705683},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.44_1780584129593_0.24035166692328636","host":"s3://npm-registry-packages-npm-production"}},"1.6.45":{"name":"whitebrand","version":"1.6.45","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.45","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"bc682649e230d7494b8e9a85aa118753dd8e262c","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.45.tgz","fileCount":19,"integrity":"sha512-ng+9d8v9qaIv4EZUzJkNBWb0ynFhgczwAN1ZLv8LqReUXLPV/3fCxzRwLZc0+2ZFvcX7APntXmaN0QLTjxXvog==","signatures":[{"sig":"MEUCIGNPuRGHeUVNlHrhYMq5Re3HaMT3/D0EUM9UrwJb/8p7AiEAg8fzRiNyuQahSCkOhLbtsDdwTRzq8i+hyhV/hOHE4Ic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1769052},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.45_1780585546573_0.6364021800034223","host":"s3://npm-registry-packages-npm-production"}},"1.6.46":{"name":"whitebrand","version":"1.6.46","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.46","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"cacf1d686cd86e6b59b5e89d2783885bcb733a0f","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.46.tgz","fileCount":19,"integrity":"sha512-MRHazMn40VAq2Jqj55STsafawHo5jsnUAKqNlw1PYhG9UBwBBLej4shq1XsGOdKdtSc8yuwyzYqFRga8RzBO2g==","signatures":[{"sig":"MEUCIQDJAhDfXeyT5LLN25Hut11yCf//SUPOD4lamVFfTd5jXgIgT3T8FF2bdqh5no3jwB5SomFZWAthnPZaodD/exYcRjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1732352},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.46_1780586102602_0.40606624405618974","host":"s3://npm-registry-packages-npm-production"}},"1.6.47":{"name":"whitebrand","version":"1.6.47","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.47","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"de2217bc2b4d840ebb3de36f2fea89ca019f0952","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.47.tgz","fileCount":19,"integrity":"sha512-o5yy+uIO3NZ8mlEy5iEWsAX0w5fr9rNW+mMm8hPQQVK0XN/p9gubuBr2J005B2K1P/Jihlk8M/eegvT7f/sMxw==","signatures":[{"sig":"MEYCIQDKlyKeZ1947XZv9JKrT+5crJ1jdpL2izhUqKOjNpH3YwIhAMfyCJ2DFISZS/emPHKzL428+m9lGSMFQkbZATTeU7SI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1745238},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.47_1780587013115_0.9450758313017973","host":"s3://npm-registry-packages-npm-production"}},"1.6.48":{"name":"whitebrand","version":"1.6.48","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.48","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"9f21d828b7c96b9e6881a3d1cd228a32ad836fa7","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.48.tgz","fileCount":19,"integrity":"sha512-Mwnn6oVSK8k7Z9x+a/PRETWuNDhHk4Ai2QmCa7FbIF9We8+uJm2f2nxEN/Prnx0IpeHWIzKueuw7mhSJH+UPOw==","signatures":[{"sig":"MEYCIQD2SsNCSW1LFsg1PtlMculsf6uXCJcBH1NeHwaZNHCfUQIhAPwqn06Y4tx9F1S8ryb2QU8cLNGLLMCb8ebJ1Lw6q6Ee","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1757920},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.48_1780593739372_0.17910081773757547","host":"s3://npm-registry-packages-npm-production"}},"1.6.49":{"name":"whitebrand","version":"1.6.49","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","_id":"whitebrand@1.6.49","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"bin":{"whitebrand":"dist/cli.js"},"dist":{"shasum":"05d9da8d5eac5f4e39e444581c904d83dd9b27e2","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.49.tgz","fileCount":19,"integrity":"sha512-s+neYft1vMlKKQkNdeBPWtzN/BL5Lbvp95dOSjFf4B7ml1e42oX4iArP4QxJIPXON7WDtvlVU5kQQAeMKsSD5A==","signatures":[{"sig":"MEUCIQDyFn5HGZaR3R6xs5Z/yr1anM4xrfac3Cjy7yDdaz0HXgIgCLO1v3T+7dFAvSALfO17l9Yq+44X4tx1eyUsK1Ua1PQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1755237},"main":"dist/index.js","type":"commonjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"}},"scripts":{"dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:ui":"cd ui && npm run build","prepublishOnly":"npm run build","build:obfuscate":"node scripts/obfuscate.js"},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"_npmVersion":"11.12.1","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ora":"^9.4.0","zod":"^4.4.3","cors":"^2.8.6","diff":"^9.0.0","jiti":"^2.7.0","open":"^8.4.2","chalk":"^4.1.2","express":"^5.2.1","fs-extra":"^11.3.5","ts-morph":"^28.0.0","commander":"^15.0.0","fast-glob":"^3.3.3","cross-spawn":"^7.0.6","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","@inquirer/confirm":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/cors":"^2.8.19","@types/diff":"^7.0.2","@types/node":"^25.9.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/cross-spawn":"^6.0.6","javascript-obfuscator":"^5.4.3"},"_npmOperationalInternal":{"tmp":"tmp/whitebrand_1.6.49_1780595294311_0.6522590045892456","host":"s3://npm-registry-packages-npm-production"}},"1.6.51":{"name":"whitebrand","version":"1.6.51","description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","main":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","default":"./dist/runtime/index.js"},"./expo-plugin":{"types":"./dist/adapters/expo-plugin.d.ts","default":"./dist/adapters/expo-plugin.js"},"./next":{"types":"./dist/adapters/next.d.ts","default":"./dist/adapters/next.js"},"./vite":{"types":"./dist/adapters/vite.d.ts","default":"./dist/adapters/vite.js"}},"bin":{"whitebrand":"dist/cli.js"},"scripts":{"build:ts":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --minify --dts","build:obfuscate":"node scripts/obfuscate.js","build:ui":"cd ui && npm run build","build":"npm run build:ts && npm run build:ui && npm run build:obfuscate","prepublishOnly":"npm run build","dev":"tsup src/index.ts src/cli.ts src/runtime/index.ts src/adapters/expo-plugin.ts src/adapters/next.ts src/adapters/vite.ts --format cjs --watch --dts","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","type":"commonjs","dependencies":{"@inquirer/confirm":"^6.1.1","@inquirer/input":"^5.1.2","@inquirer/select":"^5.2.1","chalk":"^4.1.2","commander":"^15.0.0","cors":"^2.8.6","cross-spawn":"^7.0.6","diff":"^9.0.0","express":"^5.2.1","fast-glob":"^3.3.3","fs-extra":"^11.3.5","jiti":"^2.7.0","open":"^8.4.2","ora":"^9.4.0","ts-morph":"^28.0.0","zod":"^4.4.3"},"devDependencies":{"@types/cors":"^2.8.19","@types/cross-spawn":"^6.0.6","@types/diff":"^7.0.2","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/node":"^25.9.1","javascript-obfuscator":"^5.4.3","tsup":"^8.5.1","typescript":"^6.0.3"},"types":"./dist/index.d.ts","_id":"whitebrand@1.6.51","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-eCGjVpoALdtsYEtmgIglftDFi5EvFyU57rw/q0R1q0Hq3oDc1kw1cwGM4E1imhXWMnELisi9Qmqj7IRh+IA+oA==","shasum":"cdd379ebe39298c583e2cb4aef8ac39b8337258c","tarball":"https://registry.npmjs.org/whitebrand/-/whitebrand-1.6.51.tgz","fileCount":19,"unpackedSize":1846990,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD+bv/6VKajrAN+K6TYBdiNsV/I5FMGQz1VnmnfySR2CQIgKzmeaxLcjJ4QtyO1HFia3BdqVPZ8gt+IZCT8iL22SWY="}]},"_npmUser":{"name":"ni3yyn","email":"ni3yyn@gmail.com"},"directories":{},"maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/whitebrand_1.6.51_1780671673960_0.9651618493476817"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-02T17:59:53.507Z","modified":"2026-06-05T15:01:14.228Z","1.0.0":"2026-06-02T17:59:53.697Z","1.0.2":"2026-06-02T18:12:05.689Z","1.0.7":"2026-06-02T18:32:42.512Z","1.0.8":"2026-06-03T10:48:11.905Z","1.3.0":"2026-06-03T13:00:19.273Z","1.4.0":"2026-06-03T13:15:56.698Z","1.4.1":"2026-06-03T13:43:07.220Z","1.4.4":"2026-06-03T14:08:20.175Z","1.4.5":"2026-06-03T14:36:50.970Z","1.4.6":"2026-06-03T14:39:49.498Z","1.4.9":"2026-06-03T14:49:22.492Z","1.4.10":"2026-06-03T15:00:21.767Z","1.5.0":"2026-06-03T16:16:54.837Z","1.5.1":"2026-06-03T16:41:38.924Z","1.6.0":"2026-06-03T18:10:03.074Z","1.6.4":"2026-06-03T18:35:53.797Z","1.6.7":"2026-06-03T19:15:16.842Z","1.6.8":"2026-06-03T19:42:15.417Z","1.6.9":"2026-06-03T19:46:52.632Z","1.6.11":"2026-06-03T19:53:17.615Z","1.6.21":"2026-06-03T22:00:20.041Z","1.6.29":"2026-06-03T22:33:17.862Z","1.6.31":"2026-06-03T22:56:45.982Z","1.6.32":"2026-06-03T23:07:35.925Z","1.6.33":"2026-06-03T23:15:11.443Z","1.6.34":"2026-06-03T23:19:55.501Z","1.6.37":"2026-06-03T23:50:27.239Z","1.6.38":"2026-06-04T00:08:59.923Z","1.6.39":"2026-06-04T00:17:37.586Z","1.6.40":"2026-06-04T00:38:38.909Z","1.6.41":"2026-06-04T14:05:37.596Z","1.6.42":"2026-06-04T14:26:32.377Z","1.6.44":"2026-06-04T14:42:09.792Z","1.6.45":"2026-06-04T15:05:46.813Z","1.6.46":"2026-06-04T15:15:02.775Z","1.6.47":"2026-06-04T15:30:13.354Z","1.6.48":"2026-06-04T17:22:19.619Z","1.6.49":"2026-06-04T17:48:14.518Z","1.6.51":"2026-06-05T15:01:14.117Z"},"author":{"name":"Alem Mohamed Sohaib"},"license":"MIT","keywords":["cli","whitelabel","multi-tenant","react-native","expo","nextjs","vite","saas"],"description":"Deterministic AST rewriting engine for multi-tenant whitelabeling","maintainers":[{"name":"ni3yyn","email":"ni3yyn@gmail.com"}],"readme":"# Whitebrand Enterprise CLI Documentation\n\n**Version:** 1.6.47  \n**Type:** Deterministic Build-Time Whitelabel Engine  \n**Supported Environments:** React (Vite), Next.js, React Native (Expo)  \n\nWhitebrand is a **PROJECT-LEVEL WHITELABELING CLI** and AST (Abstract Syntax Tree) rewriting engine. It is specifically engineered to convert rigid, single-tenant frontend codebases into dynamic, multi-tenant B2B architectures. \n\n## The Problem vs The Solution\n\n**The Problem:** Development agencies often build a successful platform and want to sell it to multiple distinct clients. Similarly, SaaS companies frequently land enterprise clients who demand their own fully branded, isolated version of the platform. Historically, developers have solved this by copy-pasting the entire source code into new repositories, creating an unmaintainable nightmare of divergent codebases (\"fork hell\"), or by manually hunting down hundreds of hardcoded colors, logos, and strings.\n\n**The Solution:** Whitebrand solves this by operating at the compiler level. Instead of duplicating the codebase, Whitebrand keeps your single source of truth intact. It deterministically abstracts all hardcoded literals (strings, colors, URLs) into strict JSON schemas, allowing a single codebase to serve infinite distinct branding and content profiles. When you need a new client version, you just add a new tenant configuration—no source code duplication required.\n\nUnlike traditional methods that rely on manual extraction or inherently unstable Generative AI rewrites, Whitebrand operates strictly on deterministic mathematical confidence algorithms to ensure zero runtime performance penalties and absolute code safety.\n\n---\n\n## 1. The Core Architectural Philosophy\n\n### 1.1 The Deterministic AST Mandate\nRelying on LLMs to parse, modify, and rewrite source code directly introduces catastrophic risks to production applications. LLMs frequently hallucinate syntax, destroy scope, misplace imports, or silently delete essential logic. \n\nWhitebrand explicitly forbids AI from modifying source code. The architecture strictly isolates intelligent abstraction from deterministic modification.\n\n### 1.2 The 3-Layer Pipeline\nThe system operates across three distinct, sandboxed layers:\n\n#### Layer 1: Extraction (AST)\nThe CLI recursively parses the target application utilizing the `ts-morph` compiler API. It identifies terminal literals and assigns a strict **Technical Semantic** (e.g., `TRANSLATION_TEXT`, `BRANDING_COLOR`, `API_ENDPOINT`) based exclusively on the AST context (JSX attribute type, variable declaration, property assignment). This layer executes with zero linguistic bias and outputs raw AST nodes to a `registry.json` file.\n\n#### Layer 2: Interpretation (AI / Manual)\nThe raw `registry.json` is provided to an LLM Copilot or a human engineer. The sole objective of this layer is to group technically identical values and assign them a **Business Semantic** (e.g., `PRIMARY_BUTTON_LABEL`, `CHECKOUT_HEADER`) and a **Domain** (e.g., `AUTH`, `DASHBOARD`). The output is a `.whitebrand/mapping.json` file. The AI has zero access to the actual source code files.\n\n#### Layer 3: Verification & Rewriting (Deterministic)\nBefore modifying the AST, Whitebrand normalizes the assigned domains and calculates an **Evidence-Based Confidence Score (0-100)** for each mapped semantic group. Confidence is derived exclusively from mathematical internal consistency:\n- **100 Score:** All nodes in a group share the exact same technical type, AST ancestor chain depth, and value profile.\n- **< 80 Score:** Nodes within the group exhibit disparate technical types (e.g., mapping a color literal and a URL string into the same business semantic).\n\nThe engine executes surgical AST substitutions via `ts-morph` only for high-confidence mappings. It explicitly avoids regex replacements.\n\n---\n\n## 2. Installation & Bootstrapping\n\nWhitebrand is designed to run seamlessly in local developer environments and headless CI pipelines.\n\n### 2.1 Global Installation\nFor utilizing the CLI across multiple repositories:\n```bash\nnpm install -g whitebrand\n```\n\n### 2.2 Local Dependency (Recommended)\nFor strict version locking within a team:\n```bash\nnpm install --save-dev whitebrand\n```\n\n### 2.3 Bootstrapping\nExecute the initialization protocol in the root of your frontend repository:\n```bash\nnpx whitebrand init\n```\n**Execution Flow:**\n1. **Framework Detection:** Scans `package.json` for Vite, Next.js, or Expo dependencies.\n2. **Directory Scaffolding:** Generates the `.whitebrand/` internal cache and `tenants/` configuration directories.\n3. **Runtime Injection:** Generates `src/whitebrand.tsx` (the Context Provider) and injects it into your root layout (`_app.tsx`, `layout.tsx`, `App.tsx`, or `main.tsx`).\n4. **Initial Extraction:** Automatically executes the `extract` pipeline to build the baseline `registry.json`.\n\n---\n\n## 3. The Data Schemas\n\nUnderstanding the JSON configurations generated by Whitebrand is essential for mastering the pipeline.\n\n### 3.1 `registry.json`\nGenerated by `whitebrand extract`. Represents raw, unopinionated AST nodes.\n```json\n{\n  \"projectStats\": {\n    \"filesScanned\": 142,\n    \"literalsFound\": 1054\n  },\n  \"nodes\": [\n    {\n      \"id\": \"node_7a8b9c\",\n      \"value\": \"#3B82F6\",\n      \"type\": \"StringLiteral\",\n      \"filePath\": \"src/components/Button.tsx\",\n      \"startLine\": 42,\n      \"endLine\": 42,\n      \"technicalSemantic\": \"BRANDING_COLOR\",\n      \"context\": \"JSXAttribute[name='color']\"\n    }\n  ]\n}\n```\n\n### 3.2 `mapping.json`\nGenerated by `whitebrand suggest` (via AI) or manually. Maps nodes to business logic.\n```json\n{\n  \"theme\": {\n    \"primaryColor\": {\n      \"nodes\": [\"node_7a8b9c\", \"node_1f2d3e\"],\n      \"value\": \"#3B82F6\"\n    }\n  },\n  \"copy\": {\n    \"loginTitle\": {\n      \"nodes\": [\"node_4x5y6z\"],\n      \"value\": \"Welcome Back\"\n    }\n  }\n}\n```\n\n### 3.3 Tenant `config.json`\nGenerated during `whitebrand rewrite`. This represents the actual runtime configuration injected into the application.\n```json\n{\n  \"$schema\": \"../schema.json\",\n  \"theme\": {\n    \"primaryColor\": \"#3B82F6\"\n  },\n  \"copy\": {\n    \"loginTitle\": \"Welcome Back\"\n  }\n}\n```\n\n---\n\n## 4. Comprehensive CLI Command Reference\n\nThe CLI is strictly segmented by operational lifecycle phases.\n\n### 4.1 Initialization & Analysis Commands\n\n#### `whitebrand init [options]`\nInitializes the system and scaffolds dependencies.\n| Flag | Description |\n|---|---|\n| `--force` | Bypasses all confirmation prompts and overwrites existing configurations. |\n| `--no-extract` | Halts execution after scaffolding, bypassing the heavy AST extraction phase. |\n| `--dir <path>` | Specifies a custom root directory (default: `.`) |\n\n#### `whitebrand extract [options]`\nExecutes the `ts-morph` AST scanner to rebuild `registry.json`.\n| Flag | Description |\n|---|---|\n| `--include <glob>` | Specifies strict inclusion paths (e.g., `src/components/**/*`). |\n| `--exclude <glob>` | Specifies strict exclusion paths (e.g., `tests/**/*, e2e/**/*`). |\n| `--verbose` | Outputs live AST parsing data to `stdout`. |\n\n#### `whitebrand suggest [options]`\nReads the `registry.json` and outputs a mathematically optimized prompt for an LLM to generate the `mapping.json`.\n| Flag | Description |\n|---|---|\n| `--clip` | Automatically copies the generated prompt to the system clipboard. |\n| `--context <text>`| Injects domain-specific context into the prompt (e.g., \"This is a healthcare app\"). |\n\n### 4.2 Rewriting & Restoration Commands\n\n#### `whitebrand rewrite [options]`\nThe most critical command. Applies the `mapping.json` to the source code, altering the AST, generating `schema.d.ts`, and scaffolding `tenants/default/config.json`.\n| Flag | Description |\n|---|---|\n| `--dry-run` | Executes the confidence scoring algorithm and outputs the proposed AST diffs without writing to disk. |\n| `--strict` | Enforces a minimum Evidence-Based Confidence Score of 80. Mappings scoring <80 will immediately fail the rewrite. |\n\n#### `whitebrand rollback [options]`\nRestores the source code to its exact state prior to the last `rewrite` execution.\n| Flag | Description |\n|---|---|\n| `--force` | Bypasses confirmation prompts. |\n| `--target <commit>`| Restores from a specific internal backup hash rather than the latest. |\n\n#### `whitebrand undo`\nSafely uninstalls the entire Whitebrand system. Removes the Context Provider, `.whitebrand/`, and `tenants/` directories. Restores the source code to the `default` tenant state.\n\n### 4.3 Tenant Management Lifecycle\n\n#### `whitebrand add [options] <tenant-id>`\nScaffolds a new tenant configuration directory, clones default assets (`icon.png`, `logo.png`), and actively locates and copies the `home.tsx` component from the `default` tenant to bootstrap the new environment.\n\n| Flag | Description |\n|---|---|\n| `-n, --name <string>` | Specifies the display name of the App. |\n| `-c, --color <hex>` | Instantly sets the primary branding color for the new tenant. |\n| `-m, --manual` | Skips automatic AST router injection and only generates the tenant configuration folders. |\n\n**The AI Escape Hatch & Strict Mode:**\nIf `whitebrand.config.ts` is set to `mode: 'strict'`, the CLI automatically forces `--manual` mode, preventing automated injection into highly complex or custom router files.\nIf automatic `patchRouter` fails due to an architectural mismatch, Whitebrand gracefully catches the exception and prints an **AI Escape Hatch**—a pre-written prompt designed for you to copy/paste directly into an AI Copilot (Cursor, Claude, Windsurf) for instant manual resolution.\n\n#### `whitebrand remove <tenant-id>`\nPermanently deletes a tenant directory and all associated assets.\n\n#### `whitebrand list`\nDisplays a tabulated list of all configured tenants, indicating their current validation status, schema compliance, and active dev server ports.\n\n### 4.4 Execution & Compilation\n\n#### `whitebrand dev [options] <tenant-id>`\nStarts the underlying framework's development server, binding the specified tenant's configuration to the environment.\n| Flag | Description |\n|---|---|\n| `--port <number>` | Overrides the default framework port. |\n| `--inspect` | Enables Node.js debugging. |\n\n#### `whitebrand build <tenant-id>`\nExecutes a production build for the specified tenant. The output artifacts are isolated to prevent cross-tenant contamination.\n\n#### `whitebrand build-all`\nSequentially executes production builds for every valid tenant in the `tenants/` directory.\n\n### 4.5 Diagnostics & Validation\n\n#### `whitebrand validate`\nParses every tenant `config.json` against the central `schema.json`. Throws a `1` exit code if any keys are missing, improperly typed, or extraneous.\n\n#### `whitebrand migrate [options]`\nWhen `mapping.json` is updated and a new `rewrite` is executed, the schema changes. `migrate` patches all existing tenant configurations with the new baseline default values to prevent runtime crashes.\n| Flag | Description |\n|---|---|\n| `--dry-run` | Outputs the JSON patches without writing them. |\n\n#### `whitebrand doctor`\nRuns aggressive internal diagnostics. Verifies framework adapter compatibility, identifies orphaned `.whitebrand/backups`, and validates the structural integrity of `registry.json`.\n\n#### `whitebrand generate`\nManually regenerates `schema.d.ts` from the `schema.json`. Useful if the schema was manually modified (not recommended).\n\n### 4.6 Graphical Interfaces\n\n#### `whitebrand studio [options]`\nBootstraps the local React-based management dashboard.\n| Flag | Description |\n|---|---|\n| `--port <number>` | Specifies the port for the dashboard (default: `3000`). |\n\n### 4.7 Enterprise Licensing & Free-Tier Limits\n\n**Free-Tier Tenant Cap:** The Whitebrand CLI actively enforces a maximum limit on the number of tenants you can manage under the Free Tier. Exceeding this limit via `whitebrand add` will exit the process and block creation.\n\n#### `whitebrand activate <key>`\nActivates the CLI for Enterprise features, unlocking unlimited tenants, deterministic AST ejection, and multi-threaded parallel building. Validates the key cryptographically against an offline authority or centralized server.\n\n#### `whitebrand status`\nOutputs the current license tier, active tenant count vs limit, expiration date, and enabled telemetry preferences.\n\n### 4.8 Artifact Delivery\n\n#### `whitebrand eject <tenant-id>`\nGenerates a standalone, completely vanilla copy of the repository for client handoff. Removes all traces of the Whitebrand engine, hardcoding the specific tenant's values directly into the AST.\n\n---\n\n## 5. Whitebrand Studio Internal Architecture\n\nWhitebrand Studio is a full-stack local application bundled within the CLI. It serves as a visual abstraction over the CLI commands.\n\n![Whitebrand Studio Interface](https://via.placeholder.com/800x400.png?text=Whitebrand+Studio+Dashboard)\n*(Note: To display your actual UI, place your screenshot at `./docs/studio.png` and update this link)*\n\n### 5.1 Technology Stack\n- **Frontend:** React, Vite, CSS Modules.\n- **Backend:** Express.js (runs internally within the CLI process).\n- **Communication:** Standard REST API.\n\n### 5.2 Core Capabilities\n- **Visual JSON Editing:** Enforces schema compliance during tenant configuration editing via graphical form inputs.\n- **Process Orchestration:** Spawns and manages child processes for `whitebrand dev` and `whitebrand build` directly from the UI.\n- **The Global Timeline Auditor:** Maintains an append-only JSON ledger (`.whitebrand/timeline.json`) powering the Studio's Timeline view. The CLI utilizes a global Commander hook (`program.hook('preAction')`) to silently intercept and log every single command executed by any developer on the repository, ensuring complete, auditable traceability of all multi-tenant operations.\n\n### 5.3 Security Profile\nThe Studio is bound strictly to `localhost` (`127.0.0.1`). It aggressively rejects connections originating from external interfaces to prevent arbitrary local execution attacks.\n\n---\n\n## 6. Runtime Provider Architecture\n\nWhitebrand operates entirely at build time, but it utilizes a highly optimized runtime singleton to expose the mapped configuration to the frontend components.\n\n### 6.1 The `getConfig()` Singleton\nDuring the `init` phase, Whitebrand generates a strict TypeScript provider.\n```typescript\nimport { getConfig } from 'whitebrand/runtime';\n\nexport function Button() {\n  const config = getConfig();\n  return (\n    <button style={{ backgroundColor: config.theme.primaryColor }}>\n      {config.copy.submitButton}\n    </button>\n  );\n}\n```\n`getConfig()` relies on a globally injected variable (`window.__WHITEBRAND_CONFIG__` in browsers, or `process.env.WHITEBRAND_CONFIG` in SSR environments) to read the active tenant data synchronously.\n\n### 6.2 Framework Injection Vectors\n\n#### 6.2.1 Vite Injection\nWhitebrand provides a custom Vite plugin (`whitebrand/adapters/vite`). When `whitebrand dev` is executed, the CLI dynamically modifies the Vite command to inject this plugin, which binds the tenant JSON to `import.meta.env`.\n\n#### 6.2.2 Next.js Webpack Hook\nFor Next.js, Whitebrand hooks into the `next.config.js` via `whitebrand/adapters/next`. It utilizes Webpack's `DefinePlugin` to serialize the tenant configuration and bypass Next.js's strict environment variable static replacement constraints.\n\n#### 6.2.3 Expo Dynamic Configuration\nFor React Native (Expo), Whitebrand utilizes the `app.config.js` dynamic configuration feature. It reads the tenant ID from the Node environment and injects tenant-specific bundle identifiers, names, icons, and splash screens directly into the Expo compilation lifecycle.\n\n---\n\n## 7. The Ejection Protocol (Deep Dive)\n\nEjection is a critical enterprise requirement for agencies handing off single-tenant repositories to end clients.\n\n**Workflow:**\n1. **Repository Cloning:** Whitebrand duplicates the current working directory to `../<app-name>-<tenant-id>-standalone`.\n2. **Reverse AST Traversal:** The `ts-morph` engine scans the cloned repository for all occurrences of `getConfig()`.\n3. **Property Resolution:** It traces the property access path (e.g., `config.theme.primaryColor`) back to the specific tenant's `config.json`.\n4. **Hardcoded Substitution:** The engine replaces the dynamic JSX attribute or variable with the hardcoded literal.\n5. **Dependency Purge:** `whitebrand/runtime` imports are deleted. `whitebrand` is removed from `package.json`. The `.whitebrand` directory is destroyed.\n6. **Delivery:** The resulting repository is a pristine, standard React/Vite/Next app with zero reliance on Whitebrand.\n\n---\n\n## 8. CI/CD Enterprise Integration\n\nImplementing Whitebrand in a continuous integration environment requires understanding the validation and loop sequences.\n\n### 8.1 GitHub Actions: Sequential Build Pipeline\n\n```yaml\nname: Whitebrand Multi-Tenant Pipeline\non:\n  push:\n    branches: [ \"main\" ]\n\njobs:\n  build-tenants:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      \n      - name: Setup Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: '20'\n          \n      - name: Install Dependencies\n        run: npm ci\n        \n      - name: Validate Tenant Schemas\n        run: npx whitebrand validate\n        \n      - name: Sequential Build Execution\n        run: npx whitebrand build-all\n        \n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v3\n        with:\n          name: tenant-builds\n          path: dist/\n```\n\n### 8.2 GitLab CI: Matrix Parallelization\n\nFor repositories with dozens of tenants, sequential building is too slow. Use parallel matrix jobs in GitLab:\n\n```yaml\nstages:\n  - validate\n  - build\n\nvalidate_schemas:\n  stage: validate\n  script:\n    - npm ci\n    - npx whitebrand validate\n\nbuild_tenant:\n  stage: build\n  parallel:\n    matrix:\n      - TENANT_ID: [\"acme\", \"globex\", \"soylent\", \"initech\"]\n  script:\n    - npm ci\n    - npx whitebrand build $TENANT_ID\n  artifacts:\n    paths:\n      - dist/$TENANT_ID/\n```\n*(Note: To automate matrix population, you can pipe `npx whitebrand list --json` into your CI orchestrator).*\n\n---\n\n## 9. Handling `@wb-ignore` Directives\n\nThe AST extraction engine relies on aggressive lexical analysis. Occasionally, developers use literals in complex logical evaluations that should *never* be abstracted into tenant configurations.\n\n**Example of Dangerous Extraction:**\n```typescript\nconst isDark = theme === 'dark'; // The string 'dark' should NOT be extracted.\n```\n\nTo prevent the AST scanner from capturing a node, the strict `@wb-ignore` directive must be placed on the line immediately preceding the node.\n\n```typescript\n// @wb-ignore\nconst isDark = theme === 'dark';\n```\n\nWhen the `ts-morph` engine encounters a node, it checks the leading trivia (comments). If `@wb-ignore` is detected, the node is pruned from the extraction tree entirely. It will not appear in `registry.json` and cannot be modified by `rewrite`.\n\n---\n\n## 10. Internationalization (i18n) & AST Pruning\n\nWhitebrand explicitly recognizes that it is **not** an i18n translation platform. If your codebase uses libraries like `react-i18next`, `next-intl`, or `lingui`, Whitebrand utilizes a smart pruning mechanism to avoid interfering with your existing localized translation logic.\n\n### 10.1 The Three Types of Literals\nWhitebrand's architecture semantically separates strings into three categories:\n1. **TRANSLATION_KEY (`t(\"auth.login\")`):** Pointers to translation dictionaries. These must be **skipped** to avoid polluting the AST config with useless keys and nesting pointers inside pointers.\n2. **BUSINESS_COPY (`\"Welcome to Acme\"`):** Hardcoded display text. These must be **extracted** and mapped to a tenant configuration.\n3. **TECHNICAL_LITERAL (`\"admin\"`, `\"dark\"`, `\"success\"`):** Internal state values or prop types. These must be **skipped**.\n\n### 10.2 Automatic AST Pruning\nDuring `whitebrand init`, the CLI automatically detects i18n libraries in your `package.json`. It will prompt you to provide your translation function signatures (e.g., `t, i18n.t, translate`) and append them to your `whitebrand.config.ts`:\n\n```typescript\nexport default defineConfig({\n  extractor: {\n    ignoreCallPatterns: [\"t\", \"i18n.t\", \"translate\"]\n  }\n});\n```\nWhen `whitebrand extract` runs, the AST scanner aggressively matches any `CallExpression` against these patterns. If a match is found, the literal argument is instantly pruned. Furthermore, JSX attributes named `i18nKey` (e.g., `<Trans i18nKey=\"login\" />`) are automatically bypassed.\n\n### 10.3 The Translation Asset Pipeline\nBecause Whitebrand ignores your translation keys, how do you provide different text for Tenant A vs Tenant B? \nYou utilize Whitebrand's **Asset Pipeline**. Simply place your custom tenant translation files inside the tenant's asset directory:\n```text\ntenants/\n ├─ client-a/\n │   └─ assets/\n │       └─ locales/\n │            └─ en.json\n```\nDuring `whitebrand build client-a`, Whitebrand seamlessly syncs the `locales/` directory into your framework's public output directory, overriding the baseline translations cleanly without tightly coupling to specific i18n frameworks.\n\n---\n\n## 11. Known Constraints & Strict Limitations\n\nWhitebrand is an exceptionally powerful tool, but it is bounded by its static analysis architecture. Violating these constraints will result in broken builds.\n\n### 11.1 Dynamic String Concatenation & Interpolation\nThe AST extraction engine strictly targets static `StringLiteral`, `NumericLiteral`, and static `TemplateLiteral` nodes. If your application computes values dynamically at runtime, Whitebrand cannot abstract them automatically.\n\n**Unsupported Architecture (Will NOT be abstracted):**\n```typescript\nconst environment = process.env.NODE_ENV;\nconst apiBase = `https://api.${environment}.com`; \n```\n\n**Required Manual Refactor:**\n```typescript\n// Define both explicit URLs in the tenant configuration\nconst apiBase = isProd ? getConfig().api.prod : getConfig().api.dev;\n```\n\n### 11.2 Divergent User Interfaces\nWhitebrand assumes that the logical underlying DOM tree and application state machine are identical across all tenants. It exists to abstract *data and styling*, not *component logic*.\n\nIf Tenant A requires a sidebar navigation model, and Tenant B requires a bottom-tab navigation model, Whitebrand is the wrong tool. In such cases, standard component-level branching or separate repositories should be utilized.\n\n### 11.3 Backend Multi-Tenancy\nWhitebrand is strictly a frontend compilation and runtime orchestration layer. It does not provide mechanisms for:\n- Database Sharding\n- Row-Level Security (RLS) policies\n- JWT Tenant Claims validation\n- Backend API tenancy isolation\n\nThese must be implemented independently in your backend architecture.\n\n---\n\n## 12. Troubleshooting & Support\n\nIf you encounter unexpected behavior during a `rewrite` or `dev` execution:\n\n1. **Check the Confidence Scores:** Run `whitebrand rewrite --dry-run` and inspect the output. Low confidence scores often indicate that the `mapping.json` grouped incompatible AST nodes together.\n2. **Execute Doctor:** Run `whitebrand doctor` to verify that your `.whitebrand/` internal cache hasn't been manually corrupted or modified.\n3. **Verify Git State:** Always ensure your working tree is clean before running `rewrite` so that `git checkout .` remains a viable fallback if `whitebrand rollback` fails.\n\n---\n\n## 13. Frequently Asked Questions (FAQ)\n\n### Performance: How does the engine handle massive codebases (10,000+ files)?\n**Honestly:** AST parsing via `ts-morph` is inherently memory-intensive. For enterprise codebases exceeding 10,000 files, running a global `whitebrand extract` in a single pass will likely exceed the default Node.js V8 memory limit. \n**Solution:** You must execute the process with expanded memory allocation (`NODE_OPTIONS=\"--max-old-space-size=8192\" npx whitebrand extract`) or utilize the `--include` flag to extract iteratively by bounded contexts (e.g., extracting `src/auth/` then `src/dashboard/`).\n\n### Monorepo Support: Does this work with Nx, Turborepo, or Lerna?\nYes, but with strict scoping rules. Whitebrand must be initialized (`npx whitebrand init`) inside the specific frontend application workspace (e.g., `apps/web`), **not** at the monorepo root. The Vite/Next.js runtime adapters and config generation rely on being adjacent to the actual framework's `package.json` and bundler configurations.\n\n### How does Whitebrand handle CSS-in-JS (styled-components, Emotion, Tailwind)?\nWhitebrand extracts based on the TypeScript AST. \n- **Styled-Components/Emotion:** It effortlessly parses and extracts literals inside tagged template literals (e.g., `` styled.div`color: #FFF;` ``) and object styles (`sx={{ color: \"#FFF\" }}`). \n- **Tailwind CSS:** Whitebrand *does not* extract Tailwind utility classes (e.g., `text-blue-500`). Tailwind relies on predefined classes, not string literals containing raw values. To whitelabel Tailwind, use Whitebrand to extract the values driving your `tailwind.config.js` theme file, not the inline classes themselves.\n\n### Is support for Vue.js or Angular planned?\n**No.** Whitebrand's extraction engine is deeply coupled to the internal TypeScript Compiler API via `ts-morph`. While this works flawlessly for React, Next.js, and React Native (where JSX/TSX is natively supported by the TS AST), Vue Single File Components (`.vue`) and Angular HTML templates utilize entirely distinct, proprietary template compilers. There is currently no roadmap to build custom AST parsers for Vue or Angular\n\n---\n\n## 14. Deep Technical Audit & Brutally Honest Q&A\n\nFor enterprise architects evaluating Whitebrand, here are the unfiltered, highly technical realities of the engine.\n\n### AST & Rewriting Mechanics\n\n**1. How do you handle static strings vs template literals?**\n- `const title = \"Login\";` -> **Supported.** Extracted as a `StringLiteral`.\n- `const title = \\`Login\\`;` -> **Supported.** Extracted as a `NoSubstitutionTemplateLiteral`.\n- `const title = \\`Login \\${name}\\`;` -> **UNSUPPORTED.** Dynamic template literals are skipped entirely. Whitebrand cannot deterministically abstract logic evaluated at runtime.\n\n**2. JSX Text vs JSX Expressions (`<Text>{\"Login\"}</Text>` vs `<Text>Login</Text>`)**\nThey produce the exact same fingerprint. `ts-morph` normalizes both as JSX string literals, resulting in identical technical semantics.\n\n**3. Object Key Collision (`{ title: \"Login\" }` vs `{ label: \"Login\" }`)**\nThey do **not** collide. The AST `ancestorChain` traces the exact property assignment (`PropertyAssignment[name='title']` vs `PropertyAssignment[name='label']`). They generate distinct fingerprints.\n\n**4. How does the engine handle massive collision (e.g., 50 `<Text>Save</Text>` components)?**\nFingerprint hashing includes the absolute file path, AST structure, and occurrence index. If `<Text>Save</Text>` appears 50 times in 50 different files, the unique `filePath` ensures 50 unique fingerprints. If it appears 50 times in the *same* file, the unique occurrence index differentiates them.\n\n**5. Does moving a string to a completely different file change its ID?**\n**Yes.** Because `filePath` is part of the hash, moving a string to a new file makes it a completely new node.\n\n**6. Does reordering components in the same file break the fingerprint?**\n**No.** Fingerprinting is resilient to vertical line shifts. The hash relies on the component's internal tree depth, not its visual line number.\n\n**7. Do you rely on line numbers at all?**\n**No.** Since v1.2, line numbers are completely removed from the matching mechanism. They are only saved in `registry.json` as metadata for the Studio UI so humans can click and find the string.\n\n**8. What is the rewrite success rate after running `prettier --write .`?**\n**100%.** Prettier only alters whitespace. It does not alter the underlying Abstract Syntax Tree structure. The ancestor chains remain mathematically identical.\n\n**9. What are `--include` and `--exclude`? How do they affect Cache Invalidation?**\nThe `--include` and `--exclude` flags allow you to run AST extraction on specific glob patterns (e.g., `--include src/auth/**/*`). \nWhen you run a partial extraction, Whitebrand performs **Intelligent Cache Invalidation**. It only purges nodes from `registry.json` that belong to the newly targeted files. Nodes from un-targeted files remain completely intact in the cache.\n\n**10. Is AST scanning single-threaded or does it use Parallel Scanning?**\n**Single-threaded.** `ts-morph` wraps the internal TypeScript compiler, which relies on a massive shared memory graph. It cannot be safely parallelized across threads without losing cross-file semantic context.\n\n**11. How does Incremental Scanning work?**\nWhen you modify a codebase and re-run `extract`, the engine doesn't blindly wipe the registry. It hashes the file contents. If a file's hash hasn't changed, it skips the file (**Incremental Scanning**). If the file changed, it surgically invalidates the old nodes from that specific file in `registry.json` and pushes the newly extracted nodes.\n\n**12. Is `rewrite` completely idempotent?**\n**Yes.** The AST extraction explicitly ignores nodes that are already MemberExpressions originating from a `getConfig()` call. Re-running `rewrite` twice will not rewrite already rewritten code.\n\n**13. Why use `ts-morph` over `@babel/parser` or `oxc` (which is 10x faster)?**\nWhile `oxc` and `swc` are vastly superior for raw parsing speed, their AST mutation APIs are extremely low-level and optimized for bundlers, not high-level refactoring. `ts-morph` provides an incredibly rich, mutable wrapper around the TypeScript compiler. It allows Whitebrand to surgically modify the AST and emit the code while perfectly preserving original formatting, whitespace, and comments. We chose mutation reliability and developer velocity over raw parsing speed. There are no current plans to rewrite the engine for `oxc`.\n\n### The Confidence Engine\n\n**14. How is Confidence actually calculated? Is there a real equation?**\nConfidence is calculated using strict weighting:\n- **50%:** Exact match of `technicalSemantic` (e.g., `JSXText` vs `StringLiteral`).\n- **30%:** Exact match of the immediate `parentKind` in the AST.\n- **20%:** Exact parity of the `ancestorChain` depth.\nIf nodes grouped by AI have wildly different technical semantics, the score drops drastically.\n\n**15. Give a real example of a 95 confidence mapping that was WRONG.**\nA user mapped the generic string `\"Cancel\"` to `BUTTON_LABELS`. However, `\"Cancel\"` was also used as a hidden internal state enum (`status === 'Cancel'`). Both were simple `StringLiterals` with similar depths. The engine gave it high confidence. It broke the app state when rewritten.\n\n**16. Is confidence actually used during rewrite?**\n**Yes.** When you run `whitebrand rewrite --strict`, the engine actively reads the confidence score. If any mapping group scores below 80, the CLI throws a fatal error and refuses to rewrite.\n\n### The AI Layer & Scale Constraints\n\n**17. How do you handle Context Overflow (e.g., 15,000 literals)?**\nIf you feed 15,000 literals to `suggest`, it will exceed standard LLM context windows. Whitebrand does **not** natively chunk AI prompts yet. You must chunk manually using the `--include` flag (e.g., extracting and mapping `src/auth` first, then `src/dashboard`).\n\n**18. What is the RAM usage during extraction?**\nParsing 300 files consumes approximately ~1.5GB of RAM. A 10,000-file project will crash standard Node memory limits unless executed with `NODE_OPTIONS=\"--max-old-space-size=8192\"`.\n\n### Tenant Architecture & Maintenance\n\n**19. How does `whitebrand migrate` actually work?**\nWhen your `mapping.json` changes (e.g., you extract a new color), the schema updates. `migrate` loops through all tenant `config.json` files and deep-merges them with `tenants/default/config.json`. The `default` tenant acts as the master fallback, providing the initial value for the new `secondaryColor` key.\n\n**20. What happens if a client manually deletes a key from their config?**\n`whitebrand validate` will throw a hard failure (Exit Code 1). However, at runtime, `getConfig()` does **NOT** deep merge with defaults for performance reasons. The app will likely crash. This is why `validate` must run strictly in your CI pipeline.\n\n**21. How do you prevent Config Drift across dozens of tenants over a year?**\nThere is no background auto-sync daemon. You must proactively run `whitebrand migrate` across your tenants whenever the central schema changes. \n\n**22. How does `build-all` execute locally? Sequential or Parallel?**\nThe CLI `build-all` command executes strictly **Sequentially** via a simple `for` loop to prevent RAM starvation locally. Parallelization must be handled by external CI matrix jobs (e.g., GitHub Actions / GitLab).\n\n**23. Is the tenant config lazy-loaded at runtime?**\n**No.** The entire `config.json` is bundled and injected synchronously into the frontend memory. If your config hits 5MB, you are misusing the tool to store database records instead of branding tokens.\n\n### Assets & Extensibility\n\n**24. Does the scanner extract static image imports like `<Image source={require('./hero.png')} />`?**\n**No.** The AST scanner does not abstract local file requires or imports. Whitebrand manages dynamic assets entirely at the file-system level by syncing files from `tenants/<id>/assets/` directly into the public directory at build time.\n\n**25. Is there a Plugin System (e.g., `whitebrand-plugin-shopify`)?**\n**No.** Whitebrand uses internal adapters for Vite, Next.js, and Expo, but there is currently no generic architecture to hook into third-party CMS providers or backend platforms.\n\n### Studio Dashboard\n\n**26. What exactly can Studio do?**\nStudio allows visual JSON editing of the tenant configs (enforcing schema compliance). It shows timeline logs and spawns dev/build processes. It does **not** visually edit the `mapping.json`, nor does it show test coverage or AST diffs.\n\n### The Ejection Protocol\n\n**27. How robust is Eject? Does it trace variables (`const theme = config.theme`)?**\n**No.** The current `eject` traversal algorithm expects inline resolution (`<Button color={getConfig().theme.primaryColor} />`). If you assign config values to intermediate variables, `eject` will fail to substitute them and leave dead code.\n\n**28. What is the actual success rate of `eject`?**\n~85% on standard projects. Deeply destructured variables will require manual cleanup post-ejection.\n\n### Business Realities\n\n**29. What is the biggest problem a real user faced?**\nNext.js App Router aggressively caching the `process.env.WHITEBRAND_TENANT` variable across dev server reloads, causing the wrong tenant branding to appear until the cache was wiped.\n\n**30. How long does it take to convert an existing project?**\nFor a 300-file SaaS app, expect **3 to 4 hours**. The AST extraction takes seconds, but cleaning up the AI's mapping, resolving dynamic string concatenations, and fixing broken variables takes hours of manual engineering work.\n\n---\n\n**License:** MIT License  \n**Maintainer:** Alem Mohamed Sohaib\n","readmeFilename":"README.md"}