@anker-in/shopify-next 0.1.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ var shopifyReact = require('@anker-in/shopify-react');
4
+ var router = require('next/router');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var cookie = require('cookie');
7
+
8
+ // src/provider/provider.tsx
9
+ function useNextRouterAdapter() {
10
+ const router$1 = router.useRouter();
11
+ return {
12
+ locale: router$1.locale || "us",
13
+ locales: router$1.locales,
14
+ pathname: router$1.pathname,
15
+ push: async (url) => {
16
+ await router$1.push(url);
17
+ },
18
+ replace: async (url) => {
19
+ await router$1.replace(url);
20
+ }
21
+ };
22
+ }
23
+ function ShopifyNextProvider({
24
+ locale: propLocale,
25
+ children,
26
+ ...props
27
+ }) {
28
+ const routerAdapter = useNextRouterAdapter();
29
+ const locale = propLocale || routerAdapter.locale;
30
+ return /* @__PURE__ */ jsxRuntime.jsx(
31
+ shopifyReact.ShopifyProvider,
32
+ {
33
+ ...props,
34
+ locale,
35
+ locales: routerAdapter.locales,
36
+ routerAdapter,
37
+ children
38
+ }
39
+ );
40
+ }
41
+ function createNextServerCookieAdapter(req, res) {
42
+ return {
43
+ get(key) {
44
+ const cookies = cookie.parse(req.headers.cookie || "");
45
+ return cookies[key];
46
+ },
47
+ set(key, value, options) {
48
+ const cookie$1 = cookie.serialize(key, value, {
49
+ path: options?.path || "/",
50
+ domain: options?.domain,
51
+ expires: options?.expires,
52
+ maxAge: options?.maxAge,
53
+ secure: options?.secure,
54
+ httpOnly: options?.httpOnly,
55
+ sameSite: options?.sameSite
56
+ });
57
+ const existing = res.getHeader("Set-Cookie") || [];
58
+ const cookies = Array.isArray(existing) ? existing : [existing.toString()];
59
+ res.setHeader("Set-Cookie", [...cookies, cookie$1]);
60
+ },
61
+ remove(key) {
62
+ this.set(key, "", { maxAge: -1 });
63
+ }
64
+ };
65
+ }
66
+
67
+ exports.ShopifyNextProvider = ShopifyNextProvider;
68
+ exports.createNextServerCookieAdapter = createNextServerCookieAdapter;
69
+ exports.useNextRouterAdapter = useNextRouterAdapter;
70
+ Object.keys(shopifyReact).forEach(function (k) {
71
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
72
+ enumerable: true,
73
+ get: function () { return shopifyReact[k]; }
74
+ });
75
+ });
76
+ //# sourceMappingURL=index.js.map
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/router.ts","../src/provider/provider.tsx","../src/adapters/cookie-server.ts"],"names":["router","useRouter","jsx","ShopifyProvider","parse","cookie","serialize"],"mappings":";;;;;;;;AAOO,SAAS,oBAAA,GAAsC;AACpD,EAAA,MAAMA,WAASC,gBAAA,EAAU;AAEzB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQD,SAAO,MAAA,IAAU,IAAA;AAAA,IACzB,SAASA,QAAA,CAAO,OAAA;AAAA,IAChB,UAAUA,QAAA,CAAO,QAAA;AAAA,IACjB,IAAA,EAAM,OAAO,GAAA,KAAgB;AAAE,MAAA,MAAMA,QAAA,CAAO,KAAK,GAAG,CAAA;AAAA,IAAE,CAAA;AAAA,IACtD,OAAA,EAAS,OAAO,GAAA,KAAgB;AAAE,MAAA,MAAMA,QAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,IAAE;AAAA,GAC9D;AACF;ACDO,SAAS,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,MAAM,gBAAgB,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,GAAS,cAAc,aAAA,CAAc,MAAA;AAE3C,EAAA,uBACEE,cAAA;AAAA,IAACC,4BAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,MAAA;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,aAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AC1BO,SAAS,6BAAA,CACd,KACA,GAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,EAAiC;AACnC,MAAA,MAAM,OAAA,GAAUC,YAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,UAAU,EAAE,CAAA;AAC9C,MAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,GAAA,CAAI,GAAA,EAAa,KAAA,EAAe,OAAA,EAA+B;AAC7D,MAAA,MAAMC,QAAA,GAASC,gBAAA,CAAU,GAAA,EAAK,KAAA,EAAO;AAAA,QACnC,IAAA,EAAM,SAAS,IAAA,IAAQ,GAAA;AAAA,QACvB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS,OAAA;AAAA,QAClB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,UAAU,OAAA,EAAS,QAAA;AAAA,QACnB,UAAU,OAAA,EAAS;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,YAAY,KAAK,EAAC;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,QAAQ,IAClC,QAAA,GACA,CAAC,QAAA,CAAS,QAAA,EAAU,CAAA;AAExB,MAAA,GAAA,CAAI,UAAU,YAAA,EAAc,CAAC,GAAG,OAAA,EAASD,QAAM,CAAC,CAAA;AAAA,IAClD,CAAA;AAAA,IAEA,OAAO,GAAA,EAAmB;AACxB,MAAA,IAAA,CAAK,IAAI,GAAA,EAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,IAAI,CAAA;AAAA,IAClC;AAAA,GACF;AACF","file":"index.js","sourcesContent":["import { useRouter } from 'next/router'\nimport type { RouterAdapter } from '@anker-in/shopify-react'\n\n/**\n * Next.js router adapter hook\n * Adapts Next.js router to RouterAdapter interface\n */\nexport function useNextRouterAdapter(): RouterAdapter {\n const router = useRouter()\n\n return {\n locale: router.locale || 'us',\n locales: router.locales,\n pathname: router.pathname,\n push: async (url: string) => { await router.push(url) },\n replace: async (url: string) => { await router.replace(url) },\n }\n}\n","import React from 'react'\nimport { ShopifyProvider, type ShopifyProviderProps } from '@anker-in/shopify-react'\nimport { useNextRouterAdapter } from '../adapters/router'\n\nexport interface ShopifyNextProviderProps\n extends Omit<ShopifyProviderProps, 'routerAdapter' | 'locale'> {\n /**\n * Locale override (optional, will use Next.js router locale by default)\n */\n locale?: string\n}\n\n/**\n * Next.js Shopify Provider\n * Automatically integrates with Next.js router\n */\nexport function ShopifyNextProvider({\n locale: propLocale,\n children,\n ...props\n}: ShopifyNextProviderProps) {\n const routerAdapter = useNextRouterAdapter()\n const locale = propLocale || routerAdapter.locale\n\n return (\n <ShopifyProvider\n {...props}\n locale={locale}\n locales={routerAdapter.locales}\n routerAdapter={routerAdapter}\n >\n {children}\n </ShopifyProvider>\n )\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport { parse, serialize } from 'cookie'\nimport type { CookieAdapter, CookieOptions } from '@anker-in/shopify-react'\n\n/**\n * Next.js server-side cookie adapter\n * For use in getServerSideProps, API routes, etc.\n */\nexport function createNextServerCookieAdapter(\n req: IncomingMessage,\n res: ServerResponse\n): CookieAdapter {\n return {\n get(key: string): string | undefined {\n const cookies = parse(req.headers.cookie || '')\n return cookies[key]\n },\n\n set(key: string, value: string, options?: CookieOptions): void {\n const cookie = serialize(key, value, {\n path: options?.path || '/',\n domain: options?.domain,\n expires: options?.expires as Date | undefined,\n maxAge: options?.maxAge,\n secure: options?.secure,\n httpOnly: options?.httpOnly,\n sameSite: options?.sameSite,\n })\n\n const existing = res.getHeader('Set-Cookie') || []\n const cookies = Array.isArray(existing)\n ? existing\n : [existing.toString()]\n\n res.setHeader('Set-Cookie', [...cookies, cookie])\n },\n\n remove(key: string): void {\n this.set(key, '', { maxAge: -1 })\n },\n }\n}\n"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,68 @@
1
+ import { ShopifyProvider } from '@anker-in/shopify-react';
2
+ export * from '@anker-in/shopify-react';
3
+ import { useRouter } from 'next/router';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { serialize, parse } from 'cookie';
6
+
7
+ // src/provider/provider.tsx
8
+ function useNextRouterAdapter() {
9
+ const router = useRouter();
10
+ return {
11
+ locale: router.locale || "us",
12
+ locales: router.locales,
13
+ pathname: router.pathname,
14
+ push: async (url) => {
15
+ await router.push(url);
16
+ },
17
+ replace: async (url) => {
18
+ await router.replace(url);
19
+ }
20
+ };
21
+ }
22
+ function ShopifyNextProvider({
23
+ locale: propLocale,
24
+ children,
25
+ ...props
26
+ }) {
27
+ const routerAdapter = useNextRouterAdapter();
28
+ const locale = propLocale || routerAdapter.locale;
29
+ return /* @__PURE__ */ jsx(
30
+ ShopifyProvider,
31
+ {
32
+ ...props,
33
+ locale,
34
+ locales: routerAdapter.locales,
35
+ routerAdapter,
36
+ children
37
+ }
38
+ );
39
+ }
40
+ function createNextServerCookieAdapter(req, res) {
41
+ return {
42
+ get(key) {
43
+ const cookies = parse(req.headers.cookie || "");
44
+ return cookies[key];
45
+ },
46
+ set(key, value, options) {
47
+ const cookie = serialize(key, value, {
48
+ path: options?.path || "/",
49
+ domain: options?.domain,
50
+ expires: options?.expires,
51
+ maxAge: options?.maxAge,
52
+ secure: options?.secure,
53
+ httpOnly: options?.httpOnly,
54
+ sameSite: options?.sameSite
55
+ });
56
+ const existing = res.getHeader("Set-Cookie") || [];
57
+ const cookies = Array.isArray(existing) ? existing : [existing.toString()];
58
+ res.setHeader("Set-Cookie", [...cookies, cookie]);
59
+ },
60
+ remove(key) {
61
+ this.set(key, "", { maxAge: -1 });
62
+ }
63
+ };
64
+ }
65
+
66
+ export { ShopifyNextProvider, createNextServerCookieAdapter, useNextRouterAdapter };
67
+ //# sourceMappingURL=index.mjs.map
68
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/router.ts","../src/provider/provider.tsx","../src/adapters/cookie-server.ts"],"names":[],"mappings":";;;;;;;AAOO,SAAS,oBAAA,GAAsC;AACpD,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,OAAO,MAAA,IAAU,IAAA;AAAA,IACzB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,IAAA,EAAM,OAAO,GAAA,KAAgB;AAAE,MAAA,MAAM,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,IAAE,CAAA;AAAA,IACtD,OAAA,EAAS,OAAO,GAAA,KAAgB;AAAE,MAAA,MAAM,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,IAAE;AAAA,GAC9D;AACF;ACDO,SAAS,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,MAAM,gBAAgB,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,GAAS,cAAc,aAAA,CAAc,MAAA;AAE3C,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,MAAA;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,aAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AC1BO,SAAS,6BAAA,CACd,KACA,GAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,EAAiC;AACnC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,UAAU,EAAE,CAAA;AAC9C,MAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,GAAA,CAAI,GAAA,EAAa,KAAA,EAAe,OAAA,EAA+B;AAC7D,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,EAAK,KAAA,EAAO;AAAA,QACnC,IAAA,EAAM,SAAS,IAAA,IAAQ,GAAA;AAAA,QACvB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS,OAAA;AAAA,QAClB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,UAAU,OAAA,EAAS,QAAA;AAAA,QACnB,UAAU,OAAA,EAAS;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,YAAY,KAAK,EAAC;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,QAAQ,IAClC,QAAA,GACA,CAAC,QAAA,CAAS,QAAA,EAAU,CAAA;AAExB,MAAA,GAAA,CAAI,UAAU,YAAA,EAAc,CAAC,GAAG,OAAA,EAAS,MAAM,CAAC,CAAA;AAAA,IAClD,CAAA;AAAA,IAEA,OAAO,GAAA,EAAmB;AACxB,MAAA,IAAA,CAAK,IAAI,GAAA,EAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,IAAI,CAAA;AAAA,IAClC;AAAA,GACF;AACF","file":"index.mjs","sourcesContent":["import { useRouter } from 'next/router'\nimport type { RouterAdapter } from '@anker-in/shopify-react'\n\n/**\n * Next.js router adapter hook\n * Adapts Next.js router to RouterAdapter interface\n */\nexport function useNextRouterAdapter(): RouterAdapter {\n const router = useRouter()\n\n return {\n locale: router.locale || 'us',\n locales: router.locales,\n pathname: router.pathname,\n push: async (url: string) => { await router.push(url) },\n replace: async (url: string) => { await router.replace(url) },\n }\n}\n","import React from 'react'\nimport { ShopifyProvider, type ShopifyProviderProps } from '@anker-in/shopify-react'\nimport { useNextRouterAdapter } from '../adapters/router'\n\nexport interface ShopifyNextProviderProps\n extends Omit<ShopifyProviderProps, 'routerAdapter' | 'locale'> {\n /**\n * Locale override (optional, will use Next.js router locale by default)\n */\n locale?: string\n}\n\n/**\n * Next.js Shopify Provider\n * Automatically integrates with Next.js router\n */\nexport function ShopifyNextProvider({\n locale: propLocale,\n children,\n ...props\n}: ShopifyNextProviderProps) {\n const routerAdapter = useNextRouterAdapter()\n const locale = propLocale || routerAdapter.locale\n\n return (\n <ShopifyProvider\n {...props}\n locale={locale}\n locales={routerAdapter.locales}\n routerAdapter={routerAdapter}\n >\n {children}\n </ShopifyProvider>\n )\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport { parse, serialize } from 'cookie'\nimport type { CookieAdapter, CookieOptions } from '@anker-in/shopify-react'\n\n/**\n * Next.js server-side cookie adapter\n * For use in getServerSideProps, API routes, etc.\n */\nexport function createNextServerCookieAdapter(\n req: IncomingMessage,\n res: ServerResponse\n): CookieAdapter {\n return {\n get(key: string): string | undefined {\n const cookies = parse(req.headers.cookie || '')\n return cookies[key]\n },\n\n set(key: string, value: string, options?: CookieOptions): void {\n const cookie = serialize(key, value, {\n path: options?.path || '/',\n domain: options?.domain,\n expires: options?.expires as Date | undefined,\n maxAge: options?.maxAge,\n secure: options?.secure,\n httpOnly: options?.httpOnly,\n sameSite: options?.sameSite,\n })\n\n const existing = res.getHeader('Set-Cookie') || []\n const cookies = Array.isArray(existing)\n ? existing\n : [existing.toString()]\n\n res.setHeader('Set-Cookie', [...cookies, cookie])\n },\n\n remove(key: string): void {\n this.set(key, '', { maxAge: -1 })\n },\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@anker-in/shopify-next",
3
+ "version": "0.1.1-beta.0",
4
+ "description": "Next.js adapter for Shopify React SDK",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist/**",
17
+ "README.md"
18
+ ],
19
+ "dependencies": {
20
+ "cookie": "^0.6.0",
21
+ "@anker-in/shopify-react": "0.1.1-beta.0"
22
+ },
23
+ "peerDependencies": {
24
+ "next": ">=14.0.0",
25
+ "react": ">=18.0.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/cookie": "^0.6.0",
29
+ "@types/react": "19.1.0",
30
+ "@types/react-dom": "19.1.1",
31
+ "next": "^14.2.3",
32
+ "react": "^19.1.0",
33
+ "tsup": "^8.0.0",
34
+ "typescript": "5.9.2",
35
+ "@repo/typescript-config": "0.0.0",
36
+ "@repo/eslint-config": "0.0.0"
37
+ },
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "keywords": [
42
+ "shopify",
43
+ "nextjs",
44
+ "react",
45
+ "adapter"
46
+ ],
47
+ "license": "MIT",
48
+ "scripts": {
49
+ "build": "tsup",
50
+ "dev": "tsup --watch",
51
+ "check-types": "tsc --noEmit",
52
+ "lint": "eslint . --max-warnings 0"
53
+ }
54
+ }