{"_id":"@a5it/sku-generator","_rev":"20-7cb957a9e05127563fbd66ba632d68ac","name":"@a5it/sku-generator","dist-tags":{"latest":"1.1.10"},"versions":{"1.1.0":{"name":"@a5it/sku-generator","version":"1.1.0","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.0","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"13be256783a5519f3ea8c954e7b890e7967481a8","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.0.tgz","fileCount":2,"integrity":"sha512-nAlSfEQdDjlB5ImyfRH2Q+FOiYPKgFYa2BxckzcNMF+lqJRL1I354rG5er04kCBZd9bLHQc25z6t2uQ9dzdIQw==","signatures":[{"sig":"MEQCIBCVuqpSsvKRRHWl+vOlk7G565dUsZaqdMCTjusEwqDCAiB1bKDHyZusqX54N1OhbA9OOMTpYVNWkXTWaQ8J2UxJuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8420},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d98ccd8911bc3c3481e35c692fdb252e2afc10d6","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.0_1740474816896_0.8213545004143559","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@a5it/sku-generator","version":"1.1.1","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.1","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"2423927d218b050fb5fbd5a3c1a84efd1ae9976e","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.1.tgz","fileCount":2,"integrity":"sha512-/yRzoZuucSFhlc73bc8fj1qU9MDZIx5Tq4CvcRPKVcx3ayMAG24YkBKVRAhEDDtmpwK75dCU4h4R1Hilop2YlQ==","signatures":[{"sig":"MEUCIAozpKcgBaQ6h8OTidF5a/gEyD3uayMDG68Qo8+6BbWgAiEA5wu8cM4ueUT/exIanyVIuPfVDXFdBOVWD92PtOY6WPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8411},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"467e10559d16e24a16f419a83c582e724077ed94","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.1_1740475054829_0.7878246277543242","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@a5it/sku-generator","version":"1.1.2","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.2","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"796a60eeae51fded149cce96a666fe12a79d4d89","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.2.tgz","fileCount":12,"integrity":"sha512-Wr9Rv2I2Amw4W0xXuqXf3D1ejIl8f3MQeVwz0w0TucprepHOhWa76yHM2K7ULTna2B4gijfdFfdJiaLZd4kR1g==","signatures":[{"sig":"MEQCIC+WElK7xknDyA0cpX7By286+I2S8uiK15Q+8Q28VQ3kAiBYX3XK18+FPM0AB8J7JwezRvEVN09Tx14P3n+xqQLh2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24061},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"21602a97436d49413de168ee8066c635eb5dc561","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.2_1740478944292_0.7923012783771908","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@a5it/sku-generator","version":"1.1.3","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.3","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"e4f72643c4315f597e0b16b36ef2ec0fe5b930b6","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.3.tgz","fileCount":12,"integrity":"sha512-SEKha7l+0GLGLVzqW7i123Ym9wDS7RcfBMryyhp9TXjhAQK3vJqA8M+96w8Md8cCa8tcetznsthdOyu/UTsLIQ==","signatures":[{"sig":"MEUCID8LAUjc5zrP3B8bA0e4ikdBO2fbiGGbvgHR0sGAqsacAiEAki8VMfSu6Qgl7ITNEFDLvj9d/Xxz0+nRRbIEBzO53lM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25695},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f7ae4a25eea12aa43b3dc13aaacd59a4fa5ea360","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.3_1740576126589_0.9896990077523338","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@a5it/sku-generator","version":"1.1.4","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.4","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"e50c803663fe5a147cdfac2553f25e8055b44a0f","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.4.tgz","fileCount":12,"integrity":"sha512-+qgdjTVgss4rU274YAQABE/vRcxz0hJqSR4G09HWuAQfbDx/sM4dOZtnWqwes0XEoqdaVDtwZWQEpnmXU7z59w==","signatures":[{"sig":"MEUCIQCTsPNuupuKouwiCyeyuZ2CBims3Ru22uQfBOOWhYVXagIgGuchwaqSTiCIApiZ29G7x5j/AiLrATsi1Py2R4WCRGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25334},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f7ae4a25eea12aa43b3dc13aaacd59a4fa5ea360","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.4_1740578246763_0.2784537491294301","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@a5it/sku-generator","version":"1.1.5","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.5","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"671458e889d9bfd949f9e5dc1aefd1779e054bde","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.5.tgz","fileCount":12,"integrity":"sha512-xTMYm/bFMVtHRyDl5VJ8SMXqcjyRywCd2WCAlcUNkFEJXXbMXkcyUoPBo7R6tq/8javj2kIvyUukQPcU/8pSyg==","signatures":[{"sig":"MEUCIEil34aOHr2o+k2/Dh3V3w2LiQLjOfwoiWg8XS8pO5mjAiEAif9JoL2sPlQU3idGyBZ5bjr0+lzk8Mph1uGhGOk3kgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26916},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c6426b31c6957eb1474d7b4cc80970cfddb98aa4","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.5_1740579022956_0.21116302408456167","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@a5it/sku-generator","version":"1.1.6","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.6","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"59c5a477bcbbf764905c78dce15bf6c9665136d6","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.6.tgz","fileCount":12,"integrity":"sha512-FvKWaIN+DL/MuOSwzBUnPAAfN5cqc+EKh0c241k+MTKah2Xa7TcYvjE9ILcLY1iXHIz1Ba2mEL7a0eauVPaNMw==","signatures":[{"sig":"MEQCICRc1rENKdbCCtcefeG1gDlTGNEv7xyGgyNXxS8caVP7AiABkNpR8lj6q4u69Mw9i4X6kg7QwXtJnIWmljvWeD0SNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26565},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6e69945b33129e9cb1c55e6337b4c9c92e848e7b","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.6_1740579668536_0.09269756363773718","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@a5it/sku-generator","version":"1.1.7","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.7","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"6ea19b297f7b16c7be28628a46f283556663afa3","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.7.tgz","fileCount":12,"integrity":"sha512-maIE6pAs8kcQcOyXGspXSJh4DeyyFaQSUrI5GfmRyR09QnpSZ6QcFfzgr6emqo5ugu+fJzTW5IZtRCsnQsB9lA==","signatures":[{"sig":"MEUCIQDzA3buy6m97YYekxQ66ZuIg22n+8XV2pjesPhpJg9RRQIgfWiH5CRNzynwH7cuwE+9HdHtEQP1svdv4iA8i8JVXno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25894},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c92f19931f9afb9e90e57602e5c5d064785dc2b2","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.7_1740585055167_0.8703895063874265","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@a5it/sku-generator","version":"1.1.8","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.8","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"415a3dd19c96ec8924780f8f0aa4567e133b6e50","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.8.tgz","fileCount":12,"integrity":"sha512-Z5QmWsdhpqjbq3OkbfvqR9ltbS6NbChx0PYkp+9rv0TKxRVQR9bVF5oxRL8aaweBevYeUVTC6DSqMntdNhM6nQ==","signatures":[{"sig":"MEYCIQCI6QQFDqs/HPMT0W7/cKsLdm/AcRfMOBCW4N150GeNjQIhAIItfJ7vVxk9OTHJJEi77A5Rc/Z5vNzY6yUo2yqRYAmA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26792},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c92f19931f9afb9e90e57602e5c5d064785dc2b2","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.8_1740585737597_0.9728184644177873","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@a5it/sku-generator","version":"1.1.9","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.9","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"e4ea41d00c8fce024ec0c7eb7d95e7c24d5df6ba","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.9.tgz","fileCount":12,"integrity":"sha512-k7KtfH8rkMTx89cOSeoEisDTRWygo8LkusYzv4jigFJNV8SzO/z1dSep7mtGsFUpvPHePAJA9CCT5w8B5wfVFw==","signatures":[{"sig":"MEUCIQCQ5j1i0a4nv+auHWUrTA38MnppMWwnUxTTEo/2bOOzOQIgc/irpbAx+eImL631PH3Q2Gp+MI35zzH9Ku8Ve91S/Ic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30545},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"fad7f99095988b0893cd5198f09d760731bb3567","scripts":{"build":"tsc"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.0.0","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.9_1740585912239_0.8217753011443298","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"@a5it/sku-generator","version":"1.1.10","keywords":["sku","postgres","typeorm","a5it"],"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","_id":"@a5it/sku-generator@1.1.10","maintainers":[{"name":"bipin0x01","email":"bt.kaji@gmail.com"}],"dist":{"shasum":"c5abd136b6af02fbe86a54f88115a85a07d4d037","tarball":"https://registry.npmjs.org/@a5it/sku-generator/-/sku-generator-1.1.10.tgz","fileCount":14,"integrity":"sha512-4RvcQFm6ncwbClKrQT9SGGInM8zg4ib0QazVeDmjSXxK5StZYsAdJ6Ok2ulpjy4BaqZnAebocp5uRr+R1lUKdw==","signatures":[{"sig":"MEYCIQC5pNfT/CPfZ9UCBwx1u4quCN4hla2jI2v+OJ2smQpGBgIhAI3WTRrmdnvqqH/oX0VZw1E6H+Gs/wfumUD9ikmpJK5H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31125},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0c7f77c869946ea4f1634237ea88465724033816","scripts":{"test":"jest","build":"tsc","test:watch":"jest --watch"},"_npmUser":{"name":"bipin0x01","email":"bt.kaji@gmail.com"},"_npmVersion":"11.1.0","description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.8.0","typeorm":"^0.3.12","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.2.6","typescript":"^4.0.0","@types/jest":"^29.5.14","@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/sku-generator_1.1.10_1740590809509_0.9083121399793066","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-02-25T09:13:36.787Z","modified":"2026-05-14T02:07:52.924Z","1.1.0":"2025-02-25T09:13:37.068Z","1.1.1":"2025-02-25T09:17:35.012Z","1.1.2":"2025-02-25T10:22:24.494Z","1.1.3":"2025-02-26T13:22:06.769Z","1.1.4":"2025-02-26T13:57:26.960Z","1.1.5":"2025-02-26T14:10:23.111Z","1.1.6":"2025-02-26T14:21:08.755Z","1.1.7":"2025-02-26T15:50:55.336Z","1.1.8":"2025-02-26T16:02:17.762Z","1.1.9":"2025-02-26T16:05:12.417Z","1.1.10":"2025-02-26T17:26:49.674Z"},"author":{"name":"A5IT | info@a5it.com"},"license":"MIT","keywords":["sku","postgres","typeorm","a5it"],"description":"TypeORM + PostgreSQL library for generating SKUs for A5IT","maintainers":[{"email":"development@a5it.com","name":"a5sync-dev"}],"readme":"# SKU Generator (TypeORM + PostgreSQL)\n\nA lightweight utility for generating and retrieving SKUs (Stock Keeping Units) stored in a PostgreSQL database using TypeORM. This library:\n\n- Connects to PostgreSQL once and reuses the same connection until explicitly closed.  \n- Checks if a SKU already exists for a given manufacturer and part number.  \n- Creates a new SKU if none exists.  \n- Stores and retrieves SKUs in a database table (named `skus` by default if using `@Entity('skus')`).\n- Supports efficient batch processing of multiple SKUs.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Constructor Parameters](#constructor-parameters)\n  - [Basic Example](#basic-example)\n  - [Batch Processing Example](#batch-processing-example)\n  - [Multiple Calls Example](#multiple-calls-example)\n- [Methods](#methods)\n  - [`init()`](#init)\n  - [`getOrCreateSKU(params)`](#getorcreateskuparams)\n  - [`generateBatch(params)`](#generatebatchparams)\n  - [`getBatch(items)`](#getbatchitems)\n  - [`close()`](#close)\n- [Environment Variables](#environment-variables)\n- [License](#license)\n\n---\n\n## Installation\n\n```bash\nnpm install @a5it/sku-generator\n```\n---\n\n## Usage\n\n### Constructor Parameters\n\n```ts\n/**\n * The options you can pass to the constructor:\n * {\n *   database: {\n *     url: string;          // PostgreSQL connection string\n *     synchronize: boolean; // Whether to auto-sync the database schema\n *     logging: boolean;     // Enable TypeORM query logging\n *     extra: {\n *       max: number;                  // Max DB connections in the pool\n *       idleTimeoutMillis: number;    // Idle timeout in ms\n *       connectionTimeoutMillis: number; // Connection timeout in ms\n *     };\n *   },\n *   skuFormat?: {\n *     prefix: string;              // SKU prefix (default: 'A5')\n *     digitLength: number;         // Length of random digits (default: 3)\n *     manufacturerNameChars: number; // Characters from manufacturer name (default: 2)\n *     partNumberChars: number;     // Characters from part number (default: 1)\n *   }\n * }\n */\n```\n\n### Basic Usage\n\n```ts\nimport { SKUGenerator } from \"@nishanprime/sku-generator\";\n\nconst skuGen = new SKUGenerator({\n  database: {\n    url: \"postgres://user:password@localhost:5432/mydb\",\n    synchronize: true,  // For dev only\n    logging: false\n  },\n  skuFormat: {\n    prefix: \"B7\",           // Custom prefix (default: 'A5')\n    digitLength: 4,         // Use 4 random digits (default: 3)\n    manufacturerNameChars: 2, // Use 2 chars from mfg name (default: 2)\n    partNumberChars: 1      // Use 1 char from part number (default: 1)\n  }\n});\n\nawait skuGen.init();\n\n// Single SKU generation\nconst sku = await skuGen.getOrCreateSKU({\n  manufacturerName: \"Apple\",\n  manufacturerPartNumber: \"M1Chip\"\n});\n// Result: \"B71234APM\"\n\n// Lookup existing SKU\nconst existingSku = await skuGen.getSKU(\"Apple\", \"M1Chip\");\n// Result: \"B71234APM\" if exists, null if not found\n\n// Get details from SKU\nconst details = await skuGen.getDetails(\"B71234APM\");\n// Result: { manufacturerName: \"apple\", manufacturerPartNumber: \"m1chip\" } or null\n```\n\n### Batch Processing\n\n```ts\nimport { SKUGenerator } from \"@nishanprime/sku-generator\";\n\nconst skuGen = new SKUGenerator();\nawait skuGen.init();\n\n// 1. Generate/Retrieve Multiple SKUs\nconst batchResults = await skuGen.generateBatch({\n  items: [\n    { manufacturerName: \"Apple\", manufacturerPartNumber: \"M1Chip\" },\n    { manufacturerName: \"Intel\", manufacturerPartNumber: \"i7-12700\" },\n    { manufacturerName: \"AMD\", manufacturerPartNumber: \"Ryzen-7600\" }\n  ],\n  skipExisting: false  // Include existing SKUs in results\n});\n\n/* Result example:\n[\n  { \n    sku: \"a5123apm\", \n    manufacturerName: \"apple\",\n    manufacturerPartNumber: \"m1chip\",\n    isNew: true      // This SKU was newly generated\n  },\n  { \n    sku: \"a5456ini\", \n    manufacturerName: \"intel\",\n    manufacturerPartNumber: \"i7-12700\",\n    isNew: false     // This SKU already existed\n  },\n  {\n    sku: \"a5789amr\",\n    manufacturerName: \"amd\",\n    manufacturerPartNumber: \"ryzen-7600\",\n    isNew: true\n  }\n]\n*/\n\n// 2. Lookup Multiple Existing SKUs\nconst existingSkus = await skuGen.getBatch([\n  { manufacturerName: \"Apple\", manufacturerPartNumber: \"M1Chip\" },\n  { manufacturerName: \"Intel\", manufacturerPartNumber: \"i7-12700\" }\n]);\n\n/* Result example (only returns existing SKUs):\n[\n  { \n    sku: \"a5123apm\", \n    manufacturerName: \"apple\",\n    manufacturerPartNumber: \"m1chip\",\n    isNew: false\n  }\n]\n*/\n\n// 3. Process Large Batches\nconst largeBatch = await skuGen.generateBatch({\n  items: Array.from({ length: 1000 }, (_, i) => ({\n    manufacturerName: `Manufacturer${i}`,\n    manufacturerPartNumber: `Part${i}`\n  })),\n  skipExisting: true  // Only generate new SKUs\n});\n// Processes in chunks of 100 items for optimal performance\n```\n\n### Error Handling\n\n```ts\nimport { SKUGenerator } from \"@nishanprime/sku-generator\";\n\ntry {\n  const skuGen = new SKUGenerator({\n    database: {\n      url: \"postgres://user:password@localhost:5432/mydb\"\n    }\n  });\n\n  await skuGen.init();  // Throws if connection fails\n\n  const results = await skuGen.generateBatch({\n    items: [\n      { manufacturerName: \"Apple\", manufacturerPartNumber: \"M1Chip\" },\n      { manufacturerName: \"\", manufacturerPartNumber: \"\" }  // Invalid input\n    ]\n  });\n} catch (error) {\n  if (error instanceof Error) {\n    console.error(\"SKU Generation failed:\", error.message);\n  }\n} finally {\n  await skuGen.close();  // Always close the connection\n}\n```\n\n### Performance Tips\n\n```ts\n// 1. Reuse the SKUGenerator instance\nconst skuGen = new SKUGenerator({\n  database: {\n    url: process.env.POSTGRES_CONNECTION_STRING,\n    extra: {\n      max: 20,  // Increase pool size for batch operations\n      idleTimeoutMillis: 30000\n    }\n  }\n});\n\n// 2. Use batch operations instead of loops\n// ❌ Avoid this:\nfor (const item of items) {\n  await skuGen.getOrCreateSKU(item);\n}\n\n// ✅ Do this instead:\nconst results = await skuGen.generateBatch({ items });\n\n// 3. Use skipExisting when appropriate\nconst newSkusOnly = await skuGen.generateBatch({\n  items,\n  skipExisting: true  // Don't include existing SKUs in results\n});\n\n// 4. Close when done\nawait skuGen.close();\n```\n\n---\n\n## Methods\n\n### `init()`\n\n```ts\npublic async init(): Promise<void>;\n```\n\nEnsures the data source is initialized **exactly once**.  \n\n### `getOrCreateSKU(params)`\n\n```ts\npublic async getOrCreateSKU(params: SKUParams): Promise<string>;\n```\n\nReturns an existing SKU or creates a new one.\n\n### `generateBatch(params)`\n\n```ts\npublic async generateBatch(params: SKUBatchParams): Promise<SKUBatchResult[]>;\n```\n\nEfficiently processes multiple SKUs in batch.\n- **Params**:\n  ```ts\n  interface SKUBatchParams {\n    items: SKUParams[];      // Array of items to process\n    skipExisting?: boolean;  // Whether to exclude existing SKUs from results\n  }\n  ```\n- **Returns**: Array of `SKUBatchResult` objects containing generated/existing SKUs and their status.\n- **Features**:\n  - Processes items in chunks to prevent memory issues\n  - Handles existing SKUs efficiently\n  - Parallel processing of new SKU generation\n  - Returns detailed results including whether each SKU is new or existing\n\n### `getBatch(items)`\n\n```ts\npublic async getBatch(items: SKUParams[]): Promise<SKUBatchResult[]>;\n```\n\nRetrieves multiple existing SKUs efficiently.\n- **Params**: Array of `SKUParams` to look up\n- **Returns**: Array of found SKUs with their details\n- **Note**: Only returns existing SKUs, does not generate new ones\n\n### `close()`\n\n```ts\npublic async close(): Promise<void>;\n```\n\nCloses the database connection.\n\n---\n\n## Environment Variables\n\n- **`SKU_DB_CONNECTION_STRING`**: Default database connection string if not provided in constructor options.\n\n---\n\n## License\n\n[MIT](./LICENSE)","readmeFilename":"Readme.md"}