{"_id":"@commerce-atoms/discounts","_rev":"3-eeafa9cf96e5696a7834851c84d6b3ca","name":"@commerce-atoms/discounts","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@commerce-atoms/discounts","version":"0.0.1","keywords":["shopify","hydrogen","discounts","promotions","ecommerce","utilities"],"author":{"name":"Commerce Atoms"},"license":"MIT","_id":"@commerce-atoms/discounts@0.0.1","maintainers":[{"name":"doctor.undefined","email":"contact@soundefined.com"}],"homepage":"https://github.com/commerce-atoms/shoppy/tree/main/packages/discounts","bugs":{"url":"https://github.com/commerce-atoms/shoppy/issues"},"dist":{"shasum":"69afddbbad4f2e9ee35c01ea2898787f0bb504eb","tarball":"https://registry.npmjs.org/@commerce-atoms/discounts/-/discounts-0.0.1.tgz","fileCount":19,"integrity":"sha512-+TtLCdg3M3taL8P7Lnh7hyStVJRuxb8ie7QSz60AZfyLGol+G39ysqTHNrCvzVB6ftyOjGz9qXDRXqw/HBVBpg==","signatures":[{"sig":"MEQCIBieftYZNcUb3/zkbMX0FHi9yMsAey6N30AOijmUh9eXAiAuDud9re2O7qV7JAa5Q9umEfOEmLDr7D7vn/95IjctUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@commerce-atoms%2fdiscounts@0.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12323},"type":"module","engines":{"node":">=18.0.0"},"exports":{"./package.json":"./package.json","./types/discount":{"types":"./dist/types/discount.d.ts","import":"./dist/types/discount.js"},"./types/discountRule":{"types":"./dist/types/discountRule.d.ts","import":"./dist/types/discountRule.js"},"./types/composeOptions":{"types":"./dist/types/composeOptions.d.ts","import":"./dist/types/composeOptions.js"},"./apply/applyFixedDiscount":{"types":"./dist/apply/applyFixedDiscount.d.ts","import":"./dist/apply/applyFixedDiscount.js"},"./compose/composeDiscounts":{"types":"./dist/compose/composeDiscounts.d.ts","import":"./dist/compose/composeDiscounts.js"},"./apply/applyPercentageDiscount":{"types":"./dist/apply/applyPercentageDiscount.d.ts","import":"./dist/apply/applyPercentageDiscount.js"},"./validate/validateDiscountRule":{"types":"./dist/validate/validateDiscountRule.d.ts","import":"./dist/validate/validateDiscountRule.js"},"./apply/calculateDiscountedAmount":{"types":"./dist/apply/calculateDiscountedAmount.d.ts","import":"./dist/apply/calculateDiscountedAmount.js"}},"gitHead":"aad0c0352718bf059706547692bab550e44b087d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run --silent","prepublishOnly":"npm run build"},"_npmUser":{"name":"doctor.undefined","email":"contact@soundefined.com"},"repository":{"url":"git+https://github.com/commerce-atoms/shoppy.git","type":"git","directory":"packages/discounts"},"_npmVersion":"10.9.4","description":"Pure promotion logic engine for Shopify storefronts","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/discounts_0.0.1_1766431525280_0.03516534249602277","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@commerce-atoms/discounts","version":"0.0.2","keywords":["shopify","hydrogen","discounts","promotions","ecommerce","utilities"],"author":{"name":"Commerce Atoms"},"license":"MIT","_id":"@commerce-atoms/discounts@0.0.2","maintainers":[{"name":"doctor.undefined","email":"contact@soundefined.com"}],"homepage":"https://github.com/commerce-atoms/shoppy/tree/main/packages/discounts","bugs":{"url":"https://github.com/commerce-atoms/shoppy/issues"},"dist":{"shasum":"f4b566363fe9f81c1398c2fb03082e838b42c8d1","tarball":"https://registry.npmjs.org/@commerce-atoms/discounts/-/discounts-0.0.2.tgz","fileCount":19,"integrity":"sha512-mmVcsrj//vxJd/kcpCPPpnA7HVuE+C9XZM5H+Np7+XcfArRCoCt6hpFszy+jgwpl2t1ORjrDtdMoi4FPwdI15w==","signatures":[{"sig":"MEUCIQCb644/4Ckj6WVHREw4MvBHg13kTb+VejlNOiqg7FWPOwIgIDQZylp0xS6wwlfiCl7Rcb/3lviHW6ekQUB3ehU91kw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@commerce-atoms%2fdiscounts@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12323},"type":"module","engines":{"node":">=18.0.0"},"exports":{"./package.json":"./package.json","./types/discount":{"types":"./dist/types/discount.d.ts","import":"./dist/types/discount.js"},"./types/discountRule":{"types":"./dist/types/discountRule.d.ts","import":"./dist/types/discountRule.js"},"./types/composeOptions":{"types":"./dist/types/composeOptions.d.ts","import":"./dist/types/composeOptions.js"},"./apply/applyFixedDiscount":{"types":"./dist/apply/applyFixedDiscount.d.ts","import":"./dist/apply/applyFixedDiscount.js"},"./compose/composeDiscounts":{"types":"./dist/compose/composeDiscounts.d.ts","import":"./dist/compose/composeDiscounts.js"},"./apply/applyPercentageDiscount":{"types":"./dist/apply/applyPercentageDiscount.d.ts","import":"./dist/apply/applyPercentageDiscount.js"},"./validate/validateDiscountRule":{"types":"./dist/validate/validateDiscountRule.d.ts","import":"./dist/validate/validateDiscountRule.js"},"./apply/calculateDiscountedAmount":{"types":"./dist/apply/calculateDiscountedAmount.d.ts","import":"./dist/apply/calculateDiscountedAmount.js"}},"gitHead":"c8d7b03c7ec07aca93250f377e5da0bbc4090d29","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","pack:check":"npm pack --dry-run --silent","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7a5f607-7989-4b1c-80ee-8359d8438e99"}},"repository":{"url":"git+https://github.com/commerce-atoms/shoppy.git","type":"git","directory":"packages/discounts"},"_npmVersion":"11.7.0","description":"Pure promotion logic engine for Shopify storefronts","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/discounts_0.0.2_1766434569343_0.4949399762856139","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@commerce-atoms/discounts","version":"0.0.3","description":"Pure promotion logic engine for Shopify storefronts","type":"module","sideEffects":false,"keywords":["shopify","hydrogen","discounts","promotions","ecommerce","utilities"],"author":{"name":"Commerce Atoms"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/commerce-atoms/shoppy.git","directory":"packages/discounts"},"homepage":"https://github.com/commerce-atoms/shoppy/tree/main/packages/discounts","bugs":{"url":"https://github.com/commerce-atoms/shoppy/issues"},"publishConfig":{"access":"public","provenance":true},"exports":{"./package.json":"./package.json","./apply/applyPercentageDiscount":{"types":"./dist/apply/applyPercentageDiscount.d.ts","import":"./dist/apply/applyPercentageDiscount.js"},"./apply/applyFixedDiscount":{"types":"./dist/apply/applyFixedDiscount.d.ts","import":"./dist/apply/applyFixedDiscount.js"},"./apply/calculateDiscountedAmount":{"types":"./dist/apply/calculateDiscountedAmount.d.ts","import":"./dist/apply/calculateDiscountedAmount.js"},"./compose/composeDiscounts":{"types":"./dist/compose/composeDiscounts.d.ts","import":"./dist/compose/composeDiscounts.js"},"./validate/validateDiscountRule":{"types":"./dist/validate/validateDiscountRule.d.ts","import":"./dist/validate/validateDiscountRule.js"},"./types/composeOptions":{"types":"./dist/types/composeOptions.d.ts","import":"./dist/types/composeOptions.js"},"./types/discount":{"types":"./dist/types/discount.d.ts","import":"./dist/types/discount.js"},"./types/discountRule":{"types":"./dist/types/discountRule.d.ts","import":"./dist/types/discountRule.js"}},"dependencies":{},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run","pack:check":"npm pack --dry-run --silent","prepublishOnly":"npm run build"},"gitHead":"cb71c4946a520552b92a61c1cf54fe03eefdd1c6","_id":"@commerce-atoms/discounts@0.0.3","_nodeVersion":"22.21.1","_npmVersion":"11.7.0","dist":{"integrity":"sha512-Pfkl0ZaLDAzX+8mu61c6DdHN3w6ig7MHYKWf5CmGoufOlsdq3xCxnt/3OfdtG5DuHPZgIJ3sqFfgwx+/afLBag==","shasum":"fc9f25b93a0abdf16d10659f7b605c27643fd4a1","tarball":"https://registry.npmjs.org/@commerce-atoms/discounts/-/discounts-0.0.3.tgz","fileCount":19,"unpackedSize":12323,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@commerce-atoms%2fdiscounts@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAMYD4FINKiNqkgKCT/JN0uK0zwVYDRWwak6Ad1LN1tdAiEAhY3dnzAVPIOm2QWbzzGOPDkfMceDhVt5a7Cn5T2YLy8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f7a5f607-7989-4b1c-80ee-8359d8438e99"}},"directories":{},"maintainers":[{"name":"doctor.undefined","email":"contact@soundefined.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/discounts_0.0.3_1766434703438_0.8293992806230375"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-22T19:25:25.187Z","modified":"2025-12-22T20:18:23.962Z","0.0.1":"2025-12-22T19:25:25.520Z","0.0.2":"2025-12-22T20:16:09.488Z","0.0.3":"2025-12-22T20:18:23.575Z"},"bugs":{"url":"https://github.com/commerce-atoms/shoppy/issues"},"author":{"name":"Commerce Atoms"},"license":"MIT","homepage":"https://github.com/commerce-atoms/shoppy/tree/main/packages/discounts","keywords":["shopify","hydrogen","discounts","promotions","ecommerce","utilities"],"repository":{"type":"git","url":"git+https://github.com/commerce-atoms/shoppy.git","directory":"packages/discounts"},"description":"Pure promotion logic engine for Shopify storefronts","maintainers":[{"name":"doctor.undefined","email":"contact@soundefined.com"}],"readme":"# @commerce-atoms/discounts\n\n**Pure promotion logic engine for Shopify storefronts.**\n\n## Purpose\n\nProvides utilities for discount and promotion calculations that are framework-agnostic:\n\n- Apply percentage or fixed discounts\n- Validate discount rule sets (minimum spend, expiry dates)\n- Compose multiple discount applications\n- Calculate final discounted amounts\n\n## Non-goals\n\nThis package explicitly does **NOT**:\n\n- ❌ Fetch discounts from Shopify\n- ❌ Provide UI components\n- ❌ Manage React state or context\n- ❌ Handle currency conversion\n- ❌ Include routing logic\n\n## API\n\n### Core Functions\n\n```typescript\n// Apply a percentage discount\nimport { applyPercentageDiscount } from \"@commerce-atoms/discounts/apply/applyPercentageDiscount\";\n\nconst discountedAmount = applyPercentageDiscount(100, 20);\n// Returns: 80\n\n// Apply a fixed discount\nimport { applyFixedDiscount } from \"@commerce-atoms/discounts/apply/applyFixedDiscount\";\n\nconst discountedAmount = applyFixedDiscount(100, 15);\n// Returns: 85\n\n// Validate discount rules\nimport { validateDiscountRule } from \"@commerce-atoms/discounts/validate/validateDiscountRule\";\n\nconst isValid = validateDiscountRule(100, {\n  minSpend: 50,\n  expiresAt: new Date(\"2025-12-31\"),\n});\n\n// Compose multiple discounts\nimport { composeDiscounts } from \"@commerce-atoms/discounts/compose/composeDiscounts\";\n\nconst finalAmount = composeDiscounts(100, [\n  { type: \"percent\", value: 10 },\n  { type: \"fixed\", value: 5 },\n]);\n```\n\n## Types\n\n```typescript\nimport type { Discount } from \"@commerce-atoms/discounts/types/discount\";\nimport type { DiscountRule } from \"@commerce-atoms/discounts/types/discountRule\";\n```\n","readmeFilename":"README.md"}