@scayle/storefront-nuxt 7.71.1 → 7.72.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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @scayle/storefront-nuxt
2
2
 
3
+ ## 7.72.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Introduced a new feature that validates runtime configurations using Zod schemas upon server startup.
8
+ The server will exit if validation fails.
9
+ - We now log a warning when an RPC method from `@scayle/storefront-nuxt` is overridden by an RPC custom implementation.
10
+
11
+ If the override is intentional, we provide a new config option called `rpcMethodOverrides` to silence this warning.
12
+ In the future, the warning will become an error message if the RPC is not explicitly marked as an override.
13
+
14
+ ## 7.71.2
15
+
16
+ ### Patch Changes
17
+
18
+ - Provide new import alias `#storefront/composables` to allow for explicit imports of composables provided by the `@scayle/storefront-nuxt` package instead of only relying on the Nuxt auto-import functionality
19
+
3
20
  ## 7.71.1
4
21
 
5
22
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, M as ModuleOptions, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.b9f5584c.mjs';
1
+ export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, M as ModuleOptions, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.20d8641a.mjs';
2
2
  export { rpcCall } from './rpc.mjs';
3
3
  export * from '@scayle/storefront-core';
4
4
  export { LogLevel } from '@scayle/storefront-core';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, M as ModuleOptions, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.b9f5584c.js';
1
+ export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, M as ModuleOptions, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.20d8641a.js';
2
2
  export { rpcCall } from './rpc.js';
3
3
  export * from '@scayle/storefront-core';
4
4
  export { LogLevel } from '@scayle/storefront-core';
package/dist/module.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
- import { M as ModuleOptions } from './shared/storefront-nuxt.b9f5584c.mjs';
3
- export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.b9f5584c.mjs';
2
+ import { M as ModuleOptions } from './shared/storefront-nuxt.20d8641a.mjs';
3
+ export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.20d8641a.mjs';
4
4
  export { LogLevel } from '@scayle/storefront-core';
5
5
  import '@scayle/unstorage-compression-driver';
6
6
  import 'unstorage';
package/dist/module.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
- import { M as ModuleOptions } from './shared/storefront-nuxt.b9f5584c.js';
3
- export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.b9f5584c.js';
2
+ import { M as ModuleOptions } from './shared/storefront-nuxt.20d8641a.js';
3
+ export { f as AdditionalShopConfig, A as AppKeys, B as BapiConfig, b as CacheConfig, j as CheckoutEvent, C as CheckoutShopConfig, k as ModulePublicRuntimeConfig, O as OauthConfig, P as PublicShopConfig, e as RedirectsConfig, R as RedisConfig, a as SessionConfig, g as ShopConfig, h as ShopConfigIndexed, d as StorageConfig, c as StorageEntity, S as StorageProvider, i as StorefrontConfig } from './shared/storefront-nuxt.20d8641a.js';
4
4
  export { LogLevel } from '@scayle/storefront-core';
5
5
  import '@scayle/unstorage-compression-driver';
6
6
  import 'unstorage';
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scayle/storefront-nuxt",
3
- "version": "7.71.0",
3
+ "version": "7.71.2",
4
4
  "configKey": "storefront",
5
5
  "compatibility": {
6
6
  "nuxt": "^3.9.0"
package/dist/module.mjs CHANGED
@@ -4,6 +4,7 @@ import { rpcMethods } from '@scayle/storefront-core';
4
4
  import { defu } from 'defu';
5
5
  import { genImport, genSafeVariableName } from 'knitwork';
6
6
  import { builtinDrivers } from 'unstorage';
7
+ import { createConsola } from 'consola';
7
8
  import 'h3';
8
9
 
9
10
  const convertShopsToList = (stores) => {
@@ -60,7 +61,17 @@ export default {
60
61
  }`;
61
62
  }
62
63
  const PACKAGE_NAME = "@scayle/storefront-nuxt";
63
- const PACKAGE_VERSION = "7.71.0";
64
+ const PACKAGE_VERSION = "7.71.2";
65
+ const logger = createConsola({
66
+ fancy: true,
67
+ formatOptions: {
68
+ colors: true
69
+ },
70
+ level: 1,
71
+ defaults: {
72
+ tag: PACKAGE_NAME
73
+ }
74
+ });
64
75
  const module = defineNuxtModule({
65
76
  meta: {
66
77
  name: PACKAGE_NAME,
@@ -133,10 +144,30 @@ const module = defineNuxtModule({
133
144
  handler: resolve("./runtime/server/middleware/bootstrap")
134
145
  });
135
146
  const apiBasePath = nuxt.options.runtimeConfig.storefront.apiBasePath || "/api";
136
- const rpcMethodNames = /* @__PURE__ */ new Set([
137
- ...Object.keys(rpcMethods),
138
- ...options.rpcMethodNames ?? []
139
- ]);
147
+ const rpcMethodNames = new Set(Object.keys(rpcMethods));
148
+ const overridenRPCMethodNames = new Set(options.rpcMethodOverrides);
149
+ for (const rpcMethodName of options.rpcMethodNames ?? []) {
150
+ if (rpcMethodNames.has(rpcMethodName) && !overridenRPCMethodNames.has(rpcMethodName)) {
151
+ logger.warn(`
152
+ Overriding RPC method '${rpcMethodName}' from '@scayle/storefront-nuxt' with a local custom implementation.
153
+
154
+ Should this be done on purpose, please be aware that this can lead to unexpected issues since the '@scayle/storefront-nuxt' package also uses this RPC method internally.
155
+ To silence this warning, you can add '${rpcMethodName}' to 'rpcMethodOverrides' in the '@scayle/storefront-nuxt' config.
156
+
157
+ In the future this will become an error where overrides need to be explicitly defined as an override.
158
+ `);
159
+ } else {
160
+ overridenRPCMethodNames.delete(rpcMethodName);
161
+ }
162
+ rpcMethodNames.add(rpcMethodName);
163
+ }
164
+ if (overridenRPCMethodNames.size > 0) {
165
+ logger.warn(`
166
+ Specified RPC which were supposed to be overriden but are not. This indicates and outdated config and should be adjusted.
167
+
168
+ Missing RPC Overrides: ${Array.from(overridenRPCMethodNames).map((name) => `'${name}'`).join(", ")}
169
+ `);
170
+ }
140
171
  function addRPCServerHandlers(base) {
141
172
  rpcMethodNames.forEach((methodName) => {
142
173
  addServerHandler({
@@ -201,6 +232,7 @@ const module = defineNuxtModule({
201
232
  resolve("./runtime/nitro/plugins/nitroRuntimeStorageConfig")
202
233
  );
203
234
  addServerPlugin(resolve("./runtime/nitro/plugins/nitroSetXPoweredByHeader"));
235
+ addServerPlugin(resolve("./runtime/nitro/plugins/configValidation"));
204
236
  nuxt.hooks.hook("nitro:config", (nitroConfig) => {
205
237
  nitroConfig.externals = nitroConfig.externals || {};
206
238
  nitroConfig.externals.inline = nitroConfig.externals.inline || [];
@@ -218,9 +250,11 @@ const module = defineNuxtModule({
218
250
  "server/middleware/redirects",
219
251
  "server/middleware/cache",
220
252
  "server/utils/cacheStorage",
253
+ "utils/zodSchema",
221
254
  "nitro/plugins/nitroLogger",
222
255
  "nitro/plugins/nitroRuntimeStorageConfig",
223
- "nitro/plugins/nitroSetXPoweredByHeader"
256
+ "nitro/plugins/nitroSetXPoweredByHeader",
257
+ "nitro/plugins/configValidation"
224
258
  ];
225
259
  runtimePaths.forEach((path) => {
226
260
  const file = resolve(`./runtime/${path}`);
@@ -256,6 +290,9 @@ const module = defineNuxtModule({
256
290
  nuxt.options.alias["#rpcMethods"] = appResolve(
257
291
  options.rpcDir ?? "./rpcMethods"
258
292
  );
293
+ nuxt.options.alias["#storefront/composables"] = resolve(
294
+ "./runtime/composables"
295
+ );
259
296
  addPlugin(resolve("./runtime/plugin/shop"));
260
297
  addPlugin({
261
298
  src: resolve("./runtime/plugin/log.client"),
package/dist/rpc.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { RpcMethodName, RpcMethodParameters, RpcMethodReturnType, RpcContext } from '@scayle/storefront-core';
2
2
  import { NuxtApp } from 'nuxt/app';
3
- import { P as PublicShopConfig } from './shared/storefront-nuxt.b9f5584c.mjs';
3
+ import { P as PublicShopConfig } from './shared/storefront-nuxt.20d8641a.mjs';
4
4
  import '@nuxt/schema';
5
5
  import '@scayle/unstorage-compression-driver';
6
6
  import 'unstorage';
package/dist/rpc.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { RpcMethodName, RpcMethodParameters, RpcMethodReturnType, RpcContext } from '@scayle/storefront-core';
2
2
  import { NuxtApp } from 'nuxt/app';
3
- import { P as PublicShopConfig } from './shared/storefront-nuxt.b9f5584c.js';
3
+ import { P as PublicShopConfig } from './shared/storefront-nuxt.20d8641a.js';
4
4
  import '@nuxt/schema';
5
5
  import '@scayle/unstorage-compression-driver';
6
6
  import 'unstorage';
@@ -0,0 +1,35 @@
1
+ export * from './core/useAvailableShops';
2
+ export * from './core/useCurrentShop';
3
+ export * from './core/useFormatHelpers';
4
+ export * from './core/useIDP';
5
+ export * from './core/useLog';
6
+ export * from './core/useRpc';
7
+ export * from './core/useSession';
8
+ export * from './core/useUser';
9
+ export * from './storefront/useBasket';
10
+ export * from './storefront/useBrand';
11
+ export * from './storefront/useBrands';
12
+ export * from './storefront/useCategories';
13
+ export * from './storefront/useCategoryById';
14
+ export * from './storefront/useCategoryByPath';
15
+ export * from './storefront/useCurrentPromotions';
16
+ export * from './storefront/useFacet';
17
+ export * from './storefront/useFilters';
18
+ export * from './storefront/useNavigationTree';
19
+ export * from './storefront/useNavigationTrees';
20
+ export * from './storefront/useOrder';
21
+ export * from './storefront/useOrderConfirmation';
22
+ export * from './storefront/useProduct';
23
+ export * from './storefront/useProducts';
24
+ export * from './storefront/useProductsByIds';
25
+ export * from './storefront/useProductsByReferenceKeys';
26
+ export * from './storefront/useProductsCount';
27
+ export * from './storefront/usePromotions';
28
+ export * from './storefront/usePromotionsByIds';
29
+ export * from './storefront/useQueryFilterState';
30
+ export * from './storefront/useSearch';
31
+ export * from './storefront/useShopConfiguration';
32
+ export * from './storefront/useStorefrontSearch';
33
+ export * from './storefront/useUserAddresses';
34
+ export * from './storefront/useVariant';
35
+ export * from './storefront/useWishlist';
@@ -0,0 +1,35 @@
1
+ export * from "./core/useAvailableShops.mjs";
2
+ export * from "./core/useCurrentShop.mjs";
3
+ export * from "./core/useFormatHelpers.mjs";
4
+ export * from "./core/useIDP.mjs";
5
+ export * from "./core/useLog.mjs";
6
+ export * from "./core/useRpc.mjs";
7
+ export * from "./core/useSession.mjs";
8
+ export * from "./core/useUser.mjs";
9
+ export * from "./storefront/useBasket.mjs";
10
+ export * from "./storefront/useBrand.mjs";
11
+ export * from "./storefront/useBrands.mjs";
12
+ export * from "./storefront/useCategories.mjs";
13
+ export * from "./storefront/useCategoryById.mjs";
14
+ export * from "./storefront/useCategoryByPath.mjs";
15
+ export * from "./storefront/useCurrentPromotions.mjs";
16
+ export * from "./storefront/useFacet.mjs";
17
+ export * from "./storefront/useFilters.mjs";
18
+ export * from "./storefront/useNavigationTree.mjs";
19
+ export * from "./storefront/useNavigationTrees.mjs";
20
+ export * from "./storefront/useOrder.mjs";
21
+ export * from "./storefront/useOrderConfirmation.mjs";
22
+ export * from "./storefront/useProduct.mjs";
23
+ export * from "./storefront/useProducts.mjs";
24
+ export * from "./storefront/useProductsByIds.mjs";
25
+ export * from "./storefront/useProductsByReferenceKeys.mjs";
26
+ export * from "./storefront/useProductsCount.mjs";
27
+ export * from "./storefront/usePromotions.mjs";
28
+ export * from "./storefront/usePromotionsByIds.mjs";
29
+ export * from "./storefront/useQueryFilterState.mjs";
30
+ export * from "./storefront/useSearch.mjs";
31
+ export * from "./storefront/useShopConfiguration.mjs";
32
+ export * from "./storefront/useStorefrontSearch.mjs";
33
+ export * from "./storefront/useUserAddresses.mjs";
34
+ export * from "./storefront/useVariant.mjs";
35
+ export * from "./storefront/useWishlist.mjs";
@@ -17,7 +17,7 @@ export declare function useFacet({ key, params, }?: Options): Promise<{
17
17
  filters: import("vue").ComputedRef<import("@scayle/storefront-api").FiltersEndpointResponseData | undefined>;
18
18
  filtersFetching: import("vue").Ref<boolean>;
19
19
  unfilteredCount: import("vue").ComputedRef<number | undefined>;
20
- filterStatus: import("vue").Ref<import("../core/useRpc").Status>;
20
+ filterStatus: import("vue").Ref<import("..").Status>;
21
21
  filterError: import("vue").Ref<import("nuxt/app").NuxtError<unknown> | undefined>;
22
22
  productCountData: import("vue").Ref<{
23
23
  count: number;
@@ -25,7 +25,7 @@ export declare function useFacet({ key, params, }?: Options): Promise<{
25
25
  refreshProductCount: ({ where, }?: FilterParams) => Promise<void>;
26
26
  productCountFetching: import("vue").Ref<boolean>;
27
27
  productCountError: import("vue").Ref<import("nuxt/app").NuxtError<unknown> | undefined>;
28
- productCountStatus: import("vue").Ref<import("../core/useRpc").Status>;
28
+ productCountStatus: import("vue").Ref<import("..").Status>;
29
29
  products: import("vue").ComputedRef<import("@scayle/storefront-api").Product[] | undefined>;
30
30
  pagination: import("vue").ComputedRef<{
31
31
  current: number;
@@ -40,12 +40,12 @@ export declare function useFacet({ key, params, }?: Options): Promise<{
40
40
  productsFetching: import("vue").Ref<boolean>;
41
41
  filterProducts: ({ where, page, sort, orFiltersOperator, }: FilterParams) => Promise<void>;
42
42
  productError: import("vue").Ref<import("nuxt/app").NuxtError<unknown> | undefined>;
43
- productStatus: import("vue").Ref<import("../core/useRpc").Status>;
43
+ productStatus: import("vue").Ref<import("..").Status>;
44
44
  categories: import("vue").ComputedRef<import("@scayle/storefront-api").Category | import("@scayle/storefront-api").Category[] | undefined>;
45
45
  selectedCategory: import("vue").ComputedRef<import("@scayle/storefront-api").Category | undefined>;
46
46
  categoriesFetching: import("vue").Ref<boolean>;
47
47
  categoriesError: import("vue").Ref<import("nuxt/app").NuxtError<unknown> | undefined>;
48
- categoriesStatus: import("vue").Ref<import("../core/useRpc").Status>;
48
+ categoriesStatus: import("vue").Ref<import("..").Status>;
49
49
  fetchProducts: ({ path, page, perPage, where, sort, pricePromotionKey, cache, orFiltersOperator, }: FilterParams & {
50
50
  path: string;
51
51
  pricePromotionKey?: string | undefined;
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,17 @@
1
+ import { defineNitroPlugin, useRuntimeConfig } from "#imports";
2
+ import { runtimeConfigSchema } from "../../utils/zodSchema.mjs";
3
+ export default defineNitroPlugin(() => {
4
+ const runtimeConfig = useRuntimeConfig();
5
+ const { success, error } = runtimeConfigSchema.safeParse(runtimeConfig);
6
+ if (!success) {
7
+ error.errors.forEach((e) => {
8
+ console.error("[storefront-nuxt] configValidation:", {
9
+ code: e.code,
10
+ path: e.path.join("."),
11
+ message: e.message
12
+ });
13
+ });
14
+ throw Error("[storefront-nuxt] configValidation: Runtime config invalid");
15
+ }
16
+ console.log("[storefront-nuxt] configValidation: Runtime config valid");
17
+ });