@brytdesigns/shopify-utils 1.2.15 → 1.2.17

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.
@@ -1,7 +1,14 @@
1
1
  import * as Schema from 'effect/Schema';
2
+ import * as ParseResult from 'effect/ParseResult';
3
+ import 'effect/Function';
2
4
 
3
5
  const Input = Schema.Struct({
4
- sections: Schema.optional(Schema.String),
6
+ sections: Schema.optional(
7
+ Schema.transform(Schema.Array(Schema.String), Schema.String, {
8
+ decode: (sections) => sections.join(","),
9
+ encode: (str) => str.split(",")
10
+ })
11
+ ),
5
12
  sections_url: Schema.optional(Schema.String)
6
13
  });
7
14
  const parseKeys = (keys) => Array.from(
@@ -11,7 +18,24 @@ function makeResponseSchema(input) {
11
18
  const keys = parseKeys(input);
12
19
  return Schema.Record({
13
20
  key: Schema.Literal(...keys),
14
- value: Schema.NullOr(Schema.String)
21
+ value: Schema.transformOrFail(Schema.String, Schema.instanceOf(Element), {
22
+ decode: (htmlString, _, ast) => {
23
+ const parser = new DOMParser();
24
+ const doc = parser.parseFromString(htmlString, "text/html");
25
+ const root = doc.body.firstElementChild;
26
+ if (!root) {
27
+ return ParseResult.fail(
28
+ new ParseResult.Type(
29
+ ast,
30
+ htmlString,
31
+ "Failed to convert HTML string to Element"
32
+ )
33
+ );
34
+ }
35
+ return ParseResult.succeed(root);
36
+ },
37
+ encode: (element, options, ast) => ParseResult.succeed(element.outerHTML)
38
+ }).pipe(Schema.NullOr)
15
39
  });
16
40
  }
17
41
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/effect/Ajax/Sections/schema.ts"],"names":[],"mappings":";;AAGa,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAA;AAAA,EACjC,QAAU,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,EACvC,YAAc,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM;AAC7C,CAAC;AAOD,MAAM,SAAA,GAAY,CAAyB,IAAA,KACzC,KAAM,CAAA,IAAA;AAAA,EACJ,IAAI,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAK,EAAC,CAAC;AAClD,CAAA;AAEK,SAAS,mBAA2C,KAAU,EAAA;AACnE,EAAM,MAAA,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACnB,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,IAAI,CAAA;AAAA,IAC3B,KAAO,EAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,MAAM;AAAA,GACnC,CAAA;AACH","file":"schema.js","sourcesContent":["import * as Schema from \"effect/Schema\";\n\nexport type Input = typeof Input;\nexport const Input = Schema.Struct({\n sections: Schema.optional(Schema.String),\n sections_url: Schema.optional(Schema.String),\n});\n\n// Helper type to convert a string to a tuple of unique literals\ntype UniqueKeys<T extends string> = T extends `${infer K},${infer Rest}`\n ? K | UniqueKeys<Rest>\n : T;\n\nconst parseKeys = <const T extends string>(keys: T) =>\n Array.from(\n new Set(keys.split(\",\").map((key) => key.trim())),\n ) as UniqueKeys<T>[];\n\nexport function makeResponseSchema<const T extends string>(input: T) {\n const keys = parseKeys(input);\n return Schema.Record({\n key: Schema.Literal(...keys),\n value: Schema.NullOr(Schema.String),\n });\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/effect/Ajax/Sections/schema.ts"],"names":[],"mappings":";;;;AAKa,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAA;AAAA,EACjC,UAAU,MAAO,CAAA,QAAA;AAAA,IACf,MAAA,CAAO,UAAU,MAAO,CAAA,KAAA,CAAM,OAAO,MAAM,CAAA,EAAG,OAAO,MAAQ,EAAA;AAAA,MAC3D,MAAQ,EAAA,CAAC,QAAa,KAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,MACvC,MAAQ,EAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,MAAM,GAAG;AAAA,KAC/B;AAAA,GACH;AAAA,EACA,YAAc,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM;AAC7C,CAAC;AAOD,MAAM,SAAA,GAAY,CAAyB,IAAA,KACzC,KAAM,CAAA,IAAA;AAAA,EACJ,IAAI,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAK,EAAC,CAAC;AAClD,CAAA;AAEK,SAAS,mBAA2C,KAAU,EAAA;AACnE,EAAM,MAAA,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACnB,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,IAAI,CAAA;AAAA,IAC3B,KAAA,EAAO,OAAO,eAAgB,CAAA,MAAA,CAAO,QAAQ,MAAO,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AAAA,MACvE,MAAQ,EAAA,CAAC,UAAY,EAAA,CAAA,EAAG,GAAQ,KAAA;AAC9B,QAAM,MAAA,MAAA,GAAS,IAAI,SAAU,EAAA;AAC7B,QAAA,MAAM,GAAM,GAAA,MAAA,CAAO,eAAgB,CAAA,UAAA,EAAY,WAAW,CAAA;AAC1D,QAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,iBAAA;AACtB,QAAA,IAAI,CAAC,IAAM,EAAA;AACT,UAAA,OAAO,WAAY,CAAA,IAAA;AAAA,YACjB,IAAI,WAAY,CAAA,IAAA;AAAA,cACd,GAAA;AAAA,cACA,UAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA;AAEF,QAAO,OAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,OACjC;AAAA,MACA,MAAA,EAAQ,CAAC,OAAS,EAAA,OAAA,EAAS,QAAQ,WAAY,CAAA,OAAA,CAAQ,QAAQ,SAAS;AAAA,KACzE,CAAA,CAAE,IAAK,CAAA,MAAA,CAAO,MAAM;AAAA,GACtB,CAAA;AACH","file":"schema.js","sourcesContent":["import * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Function from \"effect/Function\";\n\nexport type Input = typeof Input;\nexport const Input = Schema.Struct({\n sections: Schema.optional(\n Schema.transform(Schema.Array(Schema.String), Schema.String, {\n decode: (sections) => sections.join(\",\"),\n encode: (str) => str.split(\",\"),\n }),\n ),\n sections_url: Schema.optional(Schema.String),\n});\n\n// Helper type to convert a string to a tuple of unique literals\ntype UniqueKeys<T extends string> = T extends `${infer K},${infer Rest}`\n ? K | UniqueKeys<Rest>\n : T;\n\nconst parseKeys = <const T extends string>(keys: T) =>\n Array.from(\n new Set(keys.split(\",\").map((key) => key.trim())),\n ) as UniqueKeys<T>[];\n\nexport function makeResponseSchema<const T extends string>(input: T) {\n const keys = parseKeys(input);\n return Schema.Record({\n key: Schema.Literal(...keys),\n value: Schema.transformOrFail(Schema.String, Schema.instanceOf(Element), {\n decode: (htmlString, _, ast) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, \"text/html\");\n const root = doc.body.firstElementChild;\n if (!root) {\n return ParseResult.fail(\n new ParseResult.Type(\n ast,\n htmlString,\n \"Failed to convert HTML string to Element\",\n ),\n );\n }\n return ParseResult.succeed(root);\n },\n encode: (element, options, ast) => ParseResult.succeed(element.outerHTML),\n }).pipe(Schema.NullOr),\n });\n}\n"]}
@@ -8,6 +8,8 @@ const Defaults = {
8
8
  account_register_url: "/account/register",
9
9
  account_url: "/account",
10
10
  all_products_collection_url: "/collections/all",
11
+ product_url: "/products/:handle",
12
+ products_url: "/products",
11
13
  cart_add_url: "/cart/add.js",
12
14
  cart_change_url: "/cart/change.js",
13
15
  cart_clear_url: "/cart/clear.js",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/effect/Ajax/Window/data/ShopifyRoutes.ts"],"names":[],"mappings":";;AAIO,MAAM,QAA2B,GAAA;AAAA,EACtC,qBAAuB,EAAA,oBAAA;AAAA,EACvB,iBAAmB,EAAA,gBAAA;AAAA,EACnB,kBAAoB,EAAA,iBAAA;AAAA,EACpB,mBAAqB,EAAA,kBAAA;AAAA,EACrB,oBAAsB,EAAA,mBAAA;AAAA,EACtB,WAAa,EAAA,UAAA;AAAA,EACb,2BAA6B,EAAA,kBAAA;AAAA,EAC7B,YAAc,EAAA,cAAA;AAAA,EACd,eAAiB,EAAA,iBAAA;AAAA,EACjB,cAAgB,EAAA,gBAAA;AAAA,EAChB,eAAiB,EAAA,iBAAA;AAAA,EACjB,QAAU,EAAA,UAAA;AAAA,EACV,eAAiB,EAAA,cAAA;AAAA,EACjB,qBAAuB,EAAA,iBAAA;AAAA,EACvB,2BAA6B,EAAA,2BAAA;AAAA,EAC7B,QAAU,EAAA,GAAA;AAAA,EACV,UAAY,EAAA,SAAA;AAAA,EACZ,oBACE,EAAA;AACJ;AAEO,MAAM,aAAA,SAAsB,KAAK,KAAsB,CAAA;AAAA,EAC5D,WAAc,GAAA;AACZ,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,QAAA;AAAA,MACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AAAC,KACrC,CAAA;AAAA;AAEL;AAEO,MAAM,IAAO,GAAA,MAClB,IAAK,CAAA,IAAA,EAAsB,CAAA;AAAA,EACzB,GAAG,QAAA;AAAA,EACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AACrC,CAAC","file":"ShopifyRoutes.js","sourcesContent":["import type { IShopifyRoutes } from \"./types.js\";\n\nimport * as Data from \"effect/Data\";\n\nexport const Defaults: IShopifyRoutes = {\n account_addresses_url: \"/account/addresses\",\n account_login_url: \"/account/login\",\n account_logout_url: \"/account/logout\",\n account_recover_url: \"/account/recover\",\n account_register_url: \"/account/register\",\n account_url: \"/account\",\n all_products_collection_url: \"/collections/all\",\n cart_add_url: \"/cart/add.js\",\n cart_change_url: \"/cart/change.js\",\n cart_clear_url: \"/cart/clear.js\",\n cart_update_url: \"/cart/update.js\",\n cart_url: \"/cart.js\",\n collections_url: \"/collections\",\n predictive_search_url: \"/search/suggest\",\n product_recommendations_url: \"/recommendations/products\",\n root_url: \"/\",\n search_url: \"/search\",\n storefront_login_url:\n \"/customer_authentication/login?return_to=%2Fservices%2Fliquid_rendering%2Fresource%3Ffast_storefront_renderer%3D1&locale=en\",\n};\n\nexport class ShopifyRoutes extends Data.Class<IShopifyRoutes> {\n constructor() {\n super({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n }\n}\n\nexport const make = () =>\n Data.case<ShopifyRoutes>()({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n"]}
1
+ {"version":3,"sources":["../../../../../src/effect/Ajax/Window/data/ShopifyRoutes.ts"],"names":[],"mappings":";;AAIO,MAAM,QAA2B,GAAA;AAAA,EACtC,qBAAuB,EAAA,oBAAA;AAAA,EACvB,iBAAmB,EAAA,gBAAA;AAAA,EACnB,kBAAoB,EAAA,iBAAA;AAAA,EACpB,mBAAqB,EAAA,kBAAA;AAAA,EACrB,oBAAsB,EAAA,mBAAA;AAAA,EACtB,WAAa,EAAA,UAAA;AAAA,EACb,2BAA6B,EAAA,kBAAA;AAAA,EAC7B,WAAa,EAAA,mBAAA;AAAA,EACb,YAAc,EAAA,WAAA;AAAA,EACd,YAAc,EAAA,cAAA;AAAA,EACd,eAAiB,EAAA,iBAAA;AAAA,EACjB,cAAgB,EAAA,gBAAA;AAAA,EAChB,eAAiB,EAAA,iBAAA;AAAA,EACjB,QAAU,EAAA,UAAA;AAAA,EACV,eAAiB,EAAA,cAAA;AAAA,EACjB,qBAAuB,EAAA,iBAAA;AAAA,EACvB,2BAA6B,EAAA,2BAAA;AAAA,EAC7B,QAAU,EAAA,GAAA;AAAA,EACV,UAAY,EAAA,SAAA;AAAA,EACZ,oBACE,EAAA;AACJ;AAEO,MAAM,aAAA,SAAsB,KAAK,KAAsB,CAAA;AAAA,EAC5D,WAAc,GAAA;AACZ,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,QAAA;AAAA,MACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AAAC,KACrC,CAAA;AAAA;AAEL;AAEO,MAAM,IAAO,GAAA,MAClB,IAAK,CAAA,IAAA,EAAsB,CAAA;AAAA,EACzB,GAAG,QAAA;AAAA,EACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AACrC,CAAC","file":"ShopifyRoutes.js","sourcesContent":["import type { IShopifyRoutes } from \"./types.js\";\n\nimport * as Data from \"effect/Data\";\n\nexport const Defaults: IShopifyRoutes = {\n account_addresses_url: \"/account/addresses\",\n account_login_url: \"/account/login\",\n account_logout_url: \"/account/logout\",\n account_recover_url: \"/account/recover\",\n account_register_url: \"/account/register\",\n account_url: \"/account\",\n all_products_collection_url: \"/collections/all\",\n product_url: \"/products/:handle\",\n products_url: \"/products\",\n cart_add_url: \"/cart/add.js\",\n cart_change_url: \"/cart/change.js\",\n cart_clear_url: \"/cart/clear.js\",\n cart_update_url: \"/cart/update.js\",\n cart_url: \"/cart.js\",\n collections_url: \"/collections\",\n predictive_search_url: \"/search/suggest\",\n product_recommendations_url: \"/recommendations/products\",\n root_url: \"/\",\n search_url: \"/search\",\n storefront_login_url:\n \"/customer_authentication/login?return_to=%2Fservices%2Fliquid_rendering%2Fresource%3Ffast_storefront_renderer%3D1&locale=en\",\n};\n\nexport class ShopifyRoutes extends Data.Class<IShopifyRoutes> {\n constructor() {\n super({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n }\n}\n\nexport const make = () =>\n Data.case<ShopifyRoutes>()({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n"]}
@@ -16,7 +16,7 @@ const format = ({
16
16
  return `gid://shopify/${actualType}/${actualId}`;
17
17
  });
18
18
  const parse = (input) => Schema.decode(
19
- Schema.transformOrFail(ID, GID, {
19
+ Schema.transformOrFail(GID, ID, {
20
20
  encode: (value, _, ast) => ParseResult.fail(
21
21
  new ParseResult.Forbidden(
22
22
  ast,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/effect/Resource/data.ts"],"names":[],"mappings":";;;;;AAYO,MAAM,SAAS,CAA2C;AAAA,EAC/D,EAAA;AAAA,EACA;AACF,CAKE,KAAA,MAAA,CAAO,IAAI,aAAa;AACtB,EAAA,MAAM,CAAC,QAAA,EAAU,UAAU,CAAA,GAAI,OAAO,MAAO,CAAA,GAAA;AAAA,IAC3C,CAAC,MAAA,CAAO,MAAO,CAAA,EAAE,CAAE,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,MAAO,CAAA,IAAI,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,IACjD;AAAA,MACE,WAAa,EAAA;AAAA;AACf,GACF;AACA,EAAO,OAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAChD,CAAC;AAEU,MAAA,KAAA,GAAQ,CAAC,KAAA,KACpB,MAAO,CAAA,MAAA;AAAA,EACL,MAAA,CAAO,eAAgB,CAAA,EAAA,EAAI,GAAK,EAAA;AAAA,IAC9B,MAAQ,EAAA,CAAC,KAAO,EAAA,CAAA,EAAG,QACjB,WAAY,CAAA,IAAA;AAAA,MACV,IAAI,WAAY,CAAA,SAAA;AAAA,QACd,GAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,MAAQ,EAAA,CAAC,KAAU,KAAA,WAAA,CAAY,OAAQ,CAAA,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,EAAM;AAAA,GACpE;AACH,CAAA,CAAE,KAAK","file":"data.js","sourcesContent":["import type { ParseError } from \"effect/ParseResult\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport { ID, GID, Type } from \"./schema.js\";\n\ntype FormatOptions<T extends ID, R extends Type> = {\n id: T;\n type: R;\n};\n\nexport const format = <const T extends ID, const R extends Type>({\n id,\n type,\n}: FormatOptions<T, R>): Effect.Effect<\n `gid://shopify/${R}/${T}`,\n ParseError,\n never\n> =>\n Effect.gen(function* () {\n const [actualId, actualType] = yield* Effect.all(\n [Schema.decode(ID)(id), Schema.decode(Type)(type)],\n {\n concurrency: \"unbounded\",\n },\n );\n return `gid://shopify/${actualType}/${actualId}` as `gid://shopify/${R}/${T}`;\n });\n\nexport const parse = (input: string) =>\n Schema.decode(\n Schema.transformOrFail(ID, GID, {\n encode: (value, _, ast) =>\n ParseResult.fail(\n new ParseResult.Forbidden(\n ast,\n value,\n \"Encoding an ID to a GID is not allowed. Use the format function to convert IDs to GIDs.\",\n ),\n ),\n decode: (value) => ParseResult.succeed(`${value}`.split(\"/\").pop()!),\n }),\n )(input);\n"]}
1
+ {"version":3,"sources":["../../../src/effect/Resource/data.ts"],"names":[],"mappings":";;;;;AAYO,MAAM,SAAS,CAA2C;AAAA,EAC/D,EAAA;AAAA,EACA;AACF,CAKE,KAAA,MAAA,CAAO,IAAI,aAAa;AACtB,EAAA,MAAM,CAAC,QAAA,EAAU,UAAU,CAAA,GAAI,OAAO,MAAO,CAAA,GAAA;AAAA,IAC3C,CAAC,MAAA,CAAO,MAAO,CAAA,EAAE,CAAE,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,MAAO,CAAA,IAAI,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,IACjD;AAAA,MACE,WAAa,EAAA;AAAA;AACf,GACF;AACA,EAAO,OAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAChD,CAAC;AAEU,MAAA,KAAA,GAAQ,CAAC,KAAA,KACpB,MAAO,CAAA,MAAA;AAAA,EACL,MAAA,CAAO,eAAgB,CAAA,GAAA,EAAK,EAAI,EAAA;AAAA,IAC9B,MAAQ,EAAA,CAAC,KAAO,EAAA,CAAA,EAAG,QACjB,WAAY,CAAA,IAAA;AAAA,MACV,IAAI,WAAY,CAAA,SAAA;AAAA,QACd,GAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,MAAQ,EAAA,CAAC,KAAU,KAAA,WAAA,CAAY,OAAQ,CAAA,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,EAAM;AAAA,GACpE;AACH,CAAA,CAAE,KAAK","file":"data.js","sourcesContent":["import type { ParseError } from \"effect/ParseResult\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport { ID, GID, Type } from \"./schema.js\";\n\ntype FormatOptions<T extends ID, R extends Type> = {\n id: T;\n type: R;\n};\n\nexport const format = <const T extends ID, const R extends Type>({\n id,\n type,\n}: FormatOptions<T, R>): Effect.Effect<\n `gid://shopify/${R}/${T}`,\n ParseError,\n never\n> =>\n Effect.gen(function* () {\n const [actualId, actualType] = yield* Effect.all(\n [Schema.decode(ID)(id), Schema.decode(Type)(type)],\n {\n concurrency: \"unbounded\",\n },\n );\n return `gid://shopify/${actualType}/${actualId}` as `gid://shopify/${R}/${T}`;\n });\n\nexport const parse = (input: string) =>\n Schema.decode(\n Schema.transformOrFail(GID, ID, {\n encode: (value, _, ast) =>\n ParseResult.fail(\n new ParseResult.Forbidden(\n ast,\n value,\n \"Encoding an ID to a GID is not allowed. Use the format function to convert IDs to GIDs.\",\n ),\n ),\n decode: (value) => ParseResult.succeed(`${value}`.split(\"/\").pop()!),\n }),\n )(input);\n"]}
@@ -55,7 +55,7 @@ export type FormatOptions<T extends ID, R extends Type> = {
55
55
  type: R;
56
56
  };
57
57
  declare const format: <const T extends ID, const R extends Type>({ id, type, }: FormatOptions<T, R>) => Effect.Effect<`gid://shopify/${R}/${T}`, ParseError, never>;
58
- declare const parse: (input: string) => Effect.Effect<string, ParseError, never>;
58
+ declare const parse: (input: string) => Effect.Effect<string | number, ParseError, never>;
59
59
  export interface IShopifyRoutes {
60
60
  readonly account_addresses_url: string;
61
61
  readonly account_login_url: string;
@@ -64,6 +64,8 @@ export interface IShopifyRoutes {
64
64
  readonly account_register_url: string;
65
65
  readonly account_url: string;
66
66
  readonly all_products_collection_url: string;
67
+ readonly product_url: string;
68
+ readonly products_url: string;
67
69
  readonly cart_add_url: string;
68
70
  readonly cart_change_url: string;
69
71
  readonly cart_clear_url: string;
@@ -92,11 +94,11 @@ declare class StorefrontClientConfig extends Data.Class<IStorefrontClientConfig>
92
94
  declare const make$1: () => StorefrontClientConfig;
93
95
  export type Input = typeof Input;
94
96
  declare const Input: Schema.Struct<{
95
- sections: Schema.optional<typeof Schema.String>;
97
+ sections: Schema.optional<Schema.transform<Schema.Array$<typeof Schema.String>, typeof Schema.String>>;
96
98
  sections_url: Schema.optional<typeof Schema.String>;
97
99
  }>;
98
100
  export type UniqueKeys<T extends string> = T extends `${infer K},${infer Rest}` ? K | UniqueKeys<Rest> : T;
99
- declare function makeResponseSchema<const T extends string>(input: T): Schema.Record$<Schema.SchemaClass<UniqueKeys<T>, UniqueKeys<T>, never>, Schema.NullOr<typeof Schema.String>>;
101
+ declare function makeResponseSchema<const T extends string>(input: T): Schema.Record$<Schema.SchemaClass<UniqueKeys<T>, UniqueKeys<T>, never>, Schema.NullOr<Schema.transformOrFail<typeof Schema.String, Schema.instanceOf<Element>, never>>>;
100
102
  declare const filterLevelOrNever: <A, E, R>(level: LogLevel.LogLevel, effect: Effect.Effect<A, E, R>) => Effect.Effect<A | undefined, E, R>;
101
103
  declare const makeNamespacedLogSpan: (prefix: string) => (label: string) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
102
104
 
@@ -1,7 +1,14 @@
1
1
  import * as Schema from 'effect/Schema';
2
+ import * as ParseResult from 'effect/ParseResult';
3
+ import 'effect/Function';
2
4
 
3
5
  const Input = Schema.Struct({
4
- sections: Schema.optional(Schema.String),
6
+ sections: Schema.optional(
7
+ Schema.transform(Schema.Array(Schema.String), Schema.String, {
8
+ decode: (sections) => sections.join(","),
9
+ encode: (str) => str.split(",")
10
+ })
11
+ ),
5
12
  sections_url: Schema.optional(Schema.String)
6
13
  });
7
14
  const parseKeys = (keys) => Array.from(
@@ -11,7 +18,24 @@ function makeResponseSchema(input) {
11
18
  const keys = parseKeys(input);
12
19
  return Schema.Record({
13
20
  key: Schema.Literal(...keys),
14
- value: Schema.NullOr(Schema.String)
21
+ value: Schema.transformOrFail(Schema.String, Schema.instanceOf(Element), {
22
+ decode: (htmlString, _, ast) => {
23
+ const parser = new DOMParser();
24
+ const doc = parser.parseFromString(htmlString, "text/html");
25
+ const root = doc.body.firstElementChild;
26
+ if (!root) {
27
+ return ParseResult.fail(
28
+ new ParseResult.Type(
29
+ ast,
30
+ htmlString,
31
+ "Failed to convert HTML string to Element"
32
+ )
33
+ );
34
+ }
35
+ return ParseResult.succeed(root);
36
+ },
37
+ encode: (element, options, ast) => ParseResult.succeed(element.outerHTML)
38
+ }).pipe(Schema.NullOr)
15
39
  });
16
40
  }
17
41
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/effect/Ajax/Sections/schema.ts"],"names":[],"mappings":";;AAGa,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAA;AAAA,EACjC,QAAU,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,EACvC,YAAc,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM;AAC7C,CAAC;AAOD,MAAM,SAAA,GAAY,CAAyB,IAAA,KACzC,KAAM,CAAA,IAAA;AAAA,EACJ,IAAI,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAK,EAAC,CAAC;AAClD,CAAA;AAEK,SAAS,mBAA2C,KAAU,EAAA;AACnE,EAAM,MAAA,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACnB,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,IAAI,CAAA;AAAA,IAC3B,KAAO,EAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,MAAM;AAAA,GACnC,CAAA;AACH","file":"schema.js","sourcesContent":["import * as Schema from \"effect/Schema\";\n\nexport type Input = typeof Input;\nexport const Input = Schema.Struct({\n sections: Schema.optional(Schema.String),\n sections_url: Schema.optional(Schema.String),\n});\n\n// Helper type to convert a string to a tuple of unique literals\ntype UniqueKeys<T extends string> = T extends `${infer K},${infer Rest}`\n ? K | UniqueKeys<Rest>\n : T;\n\nconst parseKeys = <const T extends string>(keys: T) =>\n Array.from(\n new Set(keys.split(\",\").map((key) => key.trim())),\n ) as UniqueKeys<T>[];\n\nexport function makeResponseSchema<const T extends string>(input: T) {\n const keys = parseKeys(input);\n return Schema.Record({\n key: Schema.Literal(...keys),\n value: Schema.NullOr(Schema.String),\n });\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/effect/Ajax/Sections/schema.ts"],"names":[],"mappings":";;;;AAKa,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAA;AAAA,EACjC,UAAU,MAAO,CAAA,QAAA;AAAA,IACf,MAAA,CAAO,UAAU,MAAO,CAAA,KAAA,CAAM,OAAO,MAAM,CAAA,EAAG,OAAO,MAAQ,EAAA;AAAA,MAC3D,MAAQ,EAAA,CAAC,QAAa,KAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,MACvC,MAAQ,EAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,MAAM,GAAG;AAAA,KAC/B;AAAA,GACH;AAAA,EACA,YAAc,EAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,MAAM;AAC7C,CAAC;AAOD,MAAM,SAAA,GAAY,CAAyB,IAAA,KACzC,KAAM,CAAA,IAAA;AAAA,EACJ,IAAI,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAK,EAAC,CAAC;AAClD,CAAA;AAEK,SAAS,mBAA2C,KAAU,EAAA;AACnE,EAAM,MAAA,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACnB,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,IAAI,CAAA;AAAA,IAC3B,KAAA,EAAO,OAAO,eAAgB,CAAA,MAAA,CAAO,QAAQ,MAAO,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AAAA,MACvE,MAAQ,EAAA,CAAC,UAAY,EAAA,CAAA,EAAG,GAAQ,KAAA;AAC9B,QAAM,MAAA,MAAA,GAAS,IAAI,SAAU,EAAA;AAC7B,QAAA,MAAM,GAAM,GAAA,MAAA,CAAO,eAAgB,CAAA,UAAA,EAAY,WAAW,CAAA;AAC1D,QAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,iBAAA;AACtB,QAAA,IAAI,CAAC,IAAM,EAAA;AACT,UAAA,OAAO,WAAY,CAAA,IAAA;AAAA,YACjB,IAAI,WAAY,CAAA,IAAA;AAAA,cACd,GAAA;AAAA,cACA,UAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA;AAEF,QAAO,OAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,OACjC;AAAA,MACA,MAAA,EAAQ,CAAC,OAAS,EAAA,OAAA,EAAS,QAAQ,WAAY,CAAA,OAAA,CAAQ,QAAQ,SAAS;AAAA,KACzE,CAAA,CAAE,IAAK,CAAA,MAAA,CAAO,MAAM;AAAA,GACtB,CAAA;AACH","file":"schema.js","sourcesContent":["import * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Function from \"effect/Function\";\n\nexport type Input = typeof Input;\nexport const Input = Schema.Struct({\n sections: Schema.optional(\n Schema.transform(Schema.Array(Schema.String), Schema.String, {\n decode: (sections) => sections.join(\",\"),\n encode: (str) => str.split(\",\"),\n }),\n ),\n sections_url: Schema.optional(Schema.String),\n});\n\n// Helper type to convert a string to a tuple of unique literals\ntype UniqueKeys<T extends string> = T extends `${infer K},${infer Rest}`\n ? K | UniqueKeys<Rest>\n : T;\n\nconst parseKeys = <const T extends string>(keys: T) =>\n Array.from(\n new Set(keys.split(\",\").map((key) => key.trim())),\n ) as UniqueKeys<T>[];\n\nexport function makeResponseSchema<const T extends string>(input: T) {\n const keys = parseKeys(input);\n return Schema.Record({\n key: Schema.Literal(...keys),\n value: Schema.transformOrFail(Schema.String, Schema.instanceOf(Element), {\n decode: (htmlString, _, ast) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, \"text/html\");\n const root = doc.body.firstElementChild;\n if (!root) {\n return ParseResult.fail(\n new ParseResult.Type(\n ast,\n htmlString,\n \"Failed to convert HTML string to Element\",\n ),\n );\n }\n return ParseResult.succeed(root);\n },\n encode: (element, options, ast) => ParseResult.succeed(element.outerHTML),\n }).pipe(Schema.NullOr),\n });\n}\n"]}
@@ -8,6 +8,8 @@ const Defaults = {
8
8
  account_register_url: "/account/register",
9
9
  account_url: "/account",
10
10
  all_products_collection_url: "/collections/all",
11
+ product_url: "/products/:handle",
12
+ products_url: "/products",
11
13
  cart_add_url: "/cart/add.js",
12
14
  cart_change_url: "/cart/change.js",
13
15
  cart_clear_url: "/cart/clear.js",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/effect/Ajax/Window/data/ShopifyRoutes.ts"],"names":[],"mappings":";;AAIO,MAAM,QAA2B,GAAA;AAAA,EACtC,qBAAuB,EAAA,oBAAA;AAAA,EACvB,iBAAmB,EAAA,gBAAA;AAAA,EACnB,kBAAoB,EAAA,iBAAA;AAAA,EACpB,mBAAqB,EAAA,kBAAA;AAAA,EACrB,oBAAsB,EAAA,mBAAA;AAAA,EACtB,WAAa,EAAA,UAAA;AAAA,EACb,2BAA6B,EAAA,kBAAA;AAAA,EAC7B,YAAc,EAAA,cAAA;AAAA,EACd,eAAiB,EAAA,iBAAA;AAAA,EACjB,cAAgB,EAAA,gBAAA;AAAA,EAChB,eAAiB,EAAA,iBAAA;AAAA,EACjB,QAAU,EAAA,UAAA;AAAA,EACV,eAAiB,EAAA,cAAA;AAAA,EACjB,qBAAuB,EAAA,iBAAA;AAAA,EACvB,2BAA6B,EAAA,2BAAA;AAAA,EAC7B,QAAU,EAAA,GAAA;AAAA,EACV,UAAY,EAAA,SAAA;AAAA,EACZ,oBACE,EAAA;AACJ;AAEO,MAAM,aAAA,SAAsB,KAAK,KAAsB,CAAA;AAAA,EAC5D,WAAc,GAAA;AACZ,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,QAAA;AAAA,MACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AAAC,KACrC,CAAA;AAAA;AAEL;AAEO,MAAM,IAAO,GAAA,MAClB,IAAK,CAAA,IAAA,EAAsB,CAAA;AAAA,EACzB,GAAG,QAAA;AAAA,EACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AACrC,CAAC","file":"ShopifyRoutes.js","sourcesContent":["import type { IShopifyRoutes } from \"./types.js\";\n\nimport * as Data from \"effect/Data\";\n\nexport const Defaults: IShopifyRoutes = {\n account_addresses_url: \"/account/addresses\",\n account_login_url: \"/account/login\",\n account_logout_url: \"/account/logout\",\n account_recover_url: \"/account/recover\",\n account_register_url: \"/account/register\",\n account_url: \"/account\",\n all_products_collection_url: \"/collections/all\",\n cart_add_url: \"/cart/add.js\",\n cart_change_url: \"/cart/change.js\",\n cart_clear_url: \"/cart/clear.js\",\n cart_update_url: \"/cart/update.js\",\n cart_url: \"/cart.js\",\n collections_url: \"/collections\",\n predictive_search_url: \"/search/suggest\",\n product_recommendations_url: \"/recommendations/products\",\n root_url: \"/\",\n search_url: \"/search\",\n storefront_login_url:\n \"/customer_authentication/login?return_to=%2Fservices%2Fliquid_rendering%2Fresource%3Ffast_storefront_renderer%3D1&locale=en\",\n};\n\nexport class ShopifyRoutes extends Data.Class<IShopifyRoutes> {\n constructor() {\n super({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n }\n}\n\nexport const make = () =>\n Data.case<ShopifyRoutes>()({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n"]}
1
+ {"version":3,"sources":["../../../../../../src/effect/Ajax/Window/data/ShopifyRoutes.ts"],"names":[],"mappings":";;AAIO,MAAM,QAA2B,GAAA;AAAA,EACtC,qBAAuB,EAAA,oBAAA;AAAA,EACvB,iBAAmB,EAAA,gBAAA;AAAA,EACnB,kBAAoB,EAAA,iBAAA;AAAA,EACpB,mBAAqB,EAAA,kBAAA;AAAA,EACrB,oBAAsB,EAAA,mBAAA;AAAA,EACtB,WAAa,EAAA,UAAA;AAAA,EACb,2BAA6B,EAAA,kBAAA;AAAA,EAC7B,WAAa,EAAA,mBAAA;AAAA,EACb,YAAc,EAAA,WAAA;AAAA,EACd,YAAc,EAAA,cAAA;AAAA,EACd,eAAiB,EAAA,iBAAA;AAAA,EACjB,cAAgB,EAAA,gBAAA;AAAA,EAChB,eAAiB,EAAA,iBAAA;AAAA,EACjB,QAAU,EAAA,UAAA;AAAA,EACV,eAAiB,EAAA,cAAA;AAAA,EACjB,qBAAuB,EAAA,iBAAA;AAAA,EACvB,2BAA6B,EAAA,2BAAA;AAAA,EAC7B,QAAU,EAAA,GAAA;AAAA,EACV,UAAY,EAAA,SAAA;AAAA,EACZ,oBACE,EAAA;AACJ;AAEO,MAAM,aAAA,SAAsB,KAAK,KAAsB,CAAA;AAAA,EAC5D,WAAc,GAAA;AACZ,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,QAAA;AAAA,MACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AAAC,KACrC,CAAA;AAAA;AAEL;AAEO,MAAM,IAAO,GAAA,MAClB,IAAK,CAAA,IAAA,EAAsB,CAAA;AAAA,EACzB,GAAG,QAAA;AAAA,EACH,GAAI,MAAA,EAAQ,WAAa,EAAA,MAAA,IAAU;AACrC,CAAC","file":"ShopifyRoutes.js","sourcesContent":["import type { IShopifyRoutes } from \"./types.js\";\n\nimport * as Data from \"effect/Data\";\n\nexport const Defaults: IShopifyRoutes = {\n account_addresses_url: \"/account/addresses\",\n account_login_url: \"/account/login\",\n account_logout_url: \"/account/logout\",\n account_recover_url: \"/account/recover\",\n account_register_url: \"/account/register\",\n account_url: \"/account\",\n all_products_collection_url: \"/collections/all\",\n product_url: \"/products/:handle\",\n products_url: \"/products\",\n cart_add_url: \"/cart/add.js\",\n cart_change_url: \"/cart/change.js\",\n cart_clear_url: \"/cart/clear.js\",\n cart_update_url: \"/cart/update.js\",\n cart_url: \"/cart.js\",\n collections_url: \"/collections\",\n predictive_search_url: \"/search/suggest\",\n product_recommendations_url: \"/recommendations/products\",\n root_url: \"/\",\n search_url: \"/search\",\n storefront_login_url:\n \"/customer_authentication/login?return_to=%2Fservices%2Fliquid_rendering%2Fresource%3Ffast_storefront_renderer%3D1&locale=en\",\n};\n\nexport class ShopifyRoutes extends Data.Class<IShopifyRoutes> {\n constructor() {\n super({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n }\n}\n\nexport const make = () =>\n Data.case<ShopifyRoutes>()({\n ...Defaults,\n ...(window?.BrytDesigns?.routes || {}),\n });\n"]}
@@ -16,7 +16,7 @@ const format = ({
16
16
  return `gid://shopify/${actualType}/${actualId}`;
17
17
  });
18
18
  const parse = (input) => Schema.decode(
19
- Schema.transformOrFail(ID, GID, {
19
+ Schema.transformOrFail(GID, ID, {
20
20
  encode: (value, _, ast) => ParseResult.fail(
21
21
  new ParseResult.Forbidden(
22
22
  ast,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/effect/Resource/data.ts"],"names":[],"mappings":";;;;;AAYO,MAAM,SAAS,CAA2C;AAAA,EAC/D,EAAA;AAAA,EACA;AACF,CAKE,KAAA,MAAA,CAAO,IAAI,aAAa;AACtB,EAAA,MAAM,CAAC,QAAA,EAAU,UAAU,CAAA,GAAI,OAAO,MAAO,CAAA,GAAA;AAAA,IAC3C,CAAC,MAAA,CAAO,MAAO,CAAA,EAAE,CAAE,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,MAAO,CAAA,IAAI,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,IACjD;AAAA,MACE,WAAa,EAAA;AAAA;AACf,GACF;AACA,EAAO,OAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAChD,CAAC;AAEU,MAAA,KAAA,GAAQ,CAAC,KAAA,KACpB,MAAO,CAAA,MAAA;AAAA,EACL,MAAA,CAAO,eAAgB,CAAA,EAAA,EAAI,GAAK,EAAA;AAAA,IAC9B,MAAQ,EAAA,CAAC,KAAO,EAAA,CAAA,EAAG,QACjB,WAAY,CAAA,IAAA;AAAA,MACV,IAAI,WAAY,CAAA,SAAA;AAAA,QACd,GAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,MAAQ,EAAA,CAAC,KAAU,KAAA,WAAA,CAAY,OAAQ,CAAA,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,EAAM;AAAA,GACpE;AACH,CAAA,CAAE,KAAK","file":"data.js","sourcesContent":["import type { ParseError } from \"effect/ParseResult\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport { ID, GID, Type } from \"./schema.js\";\n\ntype FormatOptions<T extends ID, R extends Type> = {\n id: T;\n type: R;\n};\n\nexport const format = <const T extends ID, const R extends Type>({\n id,\n type,\n}: FormatOptions<T, R>): Effect.Effect<\n `gid://shopify/${R}/${T}`,\n ParseError,\n never\n> =>\n Effect.gen(function* () {\n const [actualId, actualType] = yield* Effect.all(\n [Schema.decode(ID)(id), Schema.decode(Type)(type)],\n {\n concurrency: \"unbounded\",\n },\n );\n return `gid://shopify/${actualType}/${actualId}` as `gid://shopify/${R}/${T}`;\n });\n\nexport const parse = (input: string) =>\n Schema.decode(\n Schema.transformOrFail(ID, GID, {\n encode: (value, _, ast) =>\n ParseResult.fail(\n new ParseResult.Forbidden(\n ast,\n value,\n \"Encoding an ID to a GID is not allowed. Use the format function to convert IDs to GIDs.\",\n ),\n ),\n decode: (value) => ParseResult.succeed(`${value}`.split(\"/\").pop()!),\n }),\n )(input);\n"]}
1
+ {"version":3,"sources":["../../../../src/effect/Resource/data.ts"],"names":[],"mappings":";;;;;AAYO,MAAM,SAAS,CAA2C;AAAA,EAC/D,EAAA;AAAA,EACA;AACF,CAKE,KAAA,MAAA,CAAO,IAAI,aAAa;AACtB,EAAA,MAAM,CAAC,QAAA,EAAU,UAAU,CAAA,GAAI,OAAO,MAAO,CAAA,GAAA;AAAA,IAC3C,CAAC,MAAA,CAAO,MAAO,CAAA,EAAE,CAAE,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,MAAO,CAAA,IAAI,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,IACjD;AAAA,MACE,WAAa,EAAA;AAAA;AACf,GACF;AACA,EAAO,OAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAChD,CAAC;AAEU,MAAA,KAAA,GAAQ,CAAC,KAAA,KACpB,MAAO,CAAA,MAAA;AAAA,EACL,MAAA,CAAO,eAAgB,CAAA,GAAA,EAAK,EAAI,EAAA;AAAA,IAC9B,MAAQ,EAAA,CAAC,KAAO,EAAA,CAAA,EAAG,QACjB,WAAY,CAAA,IAAA;AAAA,MACV,IAAI,WAAY,CAAA,SAAA;AAAA,QACd,GAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACF,MAAQ,EAAA,CAAC,KAAU,KAAA,WAAA,CAAY,OAAQ,CAAA,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,EAAM;AAAA,GACpE;AACH,CAAA,CAAE,KAAK","file":"data.js","sourcesContent":["import type { ParseError } from \"effect/ParseResult\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport { ID, GID, Type } from \"./schema.js\";\n\ntype FormatOptions<T extends ID, R extends Type> = {\n id: T;\n type: R;\n};\n\nexport const format = <const T extends ID, const R extends Type>({\n id,\n type,\n}: FormatOptions<T, R>): Effect.Effect<\n `gid://shopify/${R}/${T}`,\n ParseError,\n never\n> =>\n Effect.gen(function* () {\n const [actualId, actualType] = yield* Effect.all(\n [Schema.decode(ID)(id), Schema.decode(Type)(type)],\n {\n concurrency: \"unbounded\",\n },\n );\n return `gid://shopify/${actualType}/${actualId}` as `gid://shopify/${R}/${T}`;\n });\n\nexport const parse = (input: string) =>\n Schema.decode(\n Schema.transformOrFail(GID, ID, {\n encode: (value, _, ast) =>\n ParseResult.fail(\n new ParseResult.Forbidden(\n ast,\n value,\n \"Encoding an ID to a GID is not allowed. Use the format function to convert IDs to GIDs.\",\n ),\n ),\n decode: (value) => ParseResult.succeed(`${value}`.split(\"/\").pop()!),\n }),\n )(input);\n"]}
@@ -54,8 +54,8 @@ export type FormatOptions<T extends ID, R extends Type> = {
54
54
  type: R;
55
55
  };
56
56
  declare const format: <const T extends ID, const R extends Type>({ id, type, }: FormatOptions<T, R>) => Effect.Effect<`gid://shopify/${R}/${T}`, ParseError, never>;
57
- declare const parse: (input: string) => Effect.Effect<string, ParseError, never>;
58
- export declare const parseResource: (gid: Resource.GID) => string;
57
+ declare const parse: (input: string) => Effect.Effect<string | number, ParseError, never>;
58
+ export declare const parseResource: (gid: Resource.GID) => string | number;
59
59
  export type FormatResourceOptions<T extends Resource.ID, R extends Resource.Type> = {
60
60
  id: T;
61
61
  type: R;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brytdesigns/shopify-utils",
3
- "version": "1.2.15",
3
+ "version": "1.2.17",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/main/index.js",
@@ -22,7 +22,7 @@
22
22
  "author": "",
23
23
  "license": "ISC",
24
24
  "dependencies": {
25
- "effect": "3.16.13"
25
+ "effect": "3.17.2"
26
26
  },
27
27
  "devDependencies": {
28
28
  "dts-bundle-generator": "^9.5.1",