From 8511690cba47a04a8c1eee11ff112f581db0a85f Mon Sep 17 00:00:00 2001 From: Peter Ashwood Date: Thu, 30 Jul 2026 23:14:37 +0000 Subject: [PATCH 1/3] feat(external-router): add magento driver auto entrypoint --- .../driver/magento/auto/ng-package.json | 6 +++++ .../driver/magento/auto/src/index.ts | 1 + libs/external-router/package.json | 22 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 libs/external-router/driver/magento/auto/ng-package.json create mode 100644 libs/external-router/driver/magento/auto/src/index.ts diff --git a/libs/external-router/driver/magento/auto/ng-package.json b/libs/external-router/driver/magento/auto/ng-package.json new file mode 100644 index 0000000000..b761d7b2e2 --- /dev/null +++ b/libs/external-router/driver/magento/auto/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../../../node_modules/ng-packagr/ng-entrypoint.schema.json", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/external-router/driver/magento/auto/src/index.ts b/libs/external-router/driver/magento/auto/src/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/libs/external-router/driver/magento/auto/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/libs/external-router/package.json b/libs/external-router/package.json index c5d25dc065..098c34c8fa 100644 --- a/libs/external-router/package.json +++ b/libs/external-router/package.json @@ -42,5 +42,25 @@ "optionalDependencies": { "apollo-angular": "0.0.0-PLACEHOLDER", "@daffodil/driver": "0.0.0-PLACEHOLDER" - } + }, + "exports": { + "./driver/magento/auto": { + "external-router-magento-2.4.1": { + "types": "./driver/magento/2.4.1/index.d.ts", + "default": "./fesm2022/daffodil-external-router-driver-magento-2.4.1.mjs" + }, + "external-router-magento-2.4.2": { + "types": "./driver/magento/2.4.2/index.d.ts", + "default": "./fesm2022/daffodil-external-router-driver-magento-2.4.2.mjs" + }, + "external-router-magento-2.4.3": { + "types": "./driver/magento/2.4.3/index.d.ts", + "default": "./fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs" + }, + "default": { + "types": "./driver/magento/2.4.3/index.d.ts", + "default": "./fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs" + } + } + } } From b67bcad86d39038c8d42ea2e01b6e7823f9ac8f3 Mon Sep 17 00:00:00 2001 From: Peter Ashwood Date: Thu, 30 Jul 2026 23:14:38 +0000 Subject: [PATCH 2/3] feat(external-router): add providers to magento drivers --- .../magento/2.4.1/src/magento.module.ts | 10 ++- .../driver/magento/2.4.1/src/provider.spec.ts | 20 ++++++ .../driver/magento/2.4.1/src/provider.ts | 19 +++++ .../driver/magento/2.4.1/src/public_api.ts | 1 + .../magento/2.4.2/src/magento.module.ts | 11 ++- .../driver/magento/2.4.2/src/provider.spec.ts | 20 ++++++ .../driver/magento/2.4.2/src/provider.ts | 19 +++++ .../driver/magento/2.4.2/src/public_api.ts | 1 + .../magento/2.4.3/src/magento.module.ts | 11 ++- .../external-router/guides/drivers/magento.md | 69 ++++++++++++++++--- libs/external-router/tsconfig.json | 5 +- 11 files changed, 155 insertions(+), 31 deletions(-) create mode 100644 libs/external-router/driver/magento/2.4.1/src/provider.spec.ts create mode 100644 libs/external-router/driver/magento/2.4.1/src/provider.ts create mode 100644 libs/external-router/driver/magento/2.4.2/src/provider.spec.ts create mode 100644 libs/external-router/driver/magento/2.4.2/src/provider.ts diff --git a/libs/external-router/driver/magento/2.4.1/src/magento.module.ts b/libs/external-router/driver/magento/2.4.1/src/magento.module.ts index 51db157058..a1ed3ab4e3 100644 --- a/libs/external-router/driver/magento/2.4.1/src/magento.module.ts +++ b/libs/external-router/driver/magento/2.4.1/src/magento.module.ts @@ -4,11 +4,8 @@ import { ModuleWithProviders, } from '@angular/core'; -import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento'; -import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver'; -import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.1'; -import { DaffExternalRouterMagentoDriver } from './magento.service'; +import { provideDaffExternalRouterMagentoDriver } from './provider'; /** * The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento. * @@ -25,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service'; * ``` * * Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls. + * + * @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}. */ @NgModule({ declarations: [], @@ -39,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule { return { ngModule: DaffExternalRouterDriverMagentoModule, providers: [ - provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver), - provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME), + provideDaffExternalRouterMagentoDriver(), ], }; } diff --git a/libs/external-router/driver/magento/2.4.1/src/provider.spec.ts b/libs/external-router/driver/magento/2.4.1/src/provider.spec.ts new file mode 100644 index 0000000000..67b2947677 --- /dev/null +++ b/libs/external-router/driver/magento/2.4.1/src/provider.spec.ts @@ -0,0 +1,20 @@ +import { TestBed } from '@angular/core/testing'; +import { ApolloTestingModule } from 'apollo-angular/testing'; + +import { DaffExternalRouterDriver } from '@daffodil/external-router/driver'; +import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.1'; + +describe('@daffodil/external-router/driver/magento/2.4.1 | provideDaffExternalRouterMagentoDriver', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ApolloTestingModule], + providers: [ + provideDaffExternalRouterMagentoDriver(), + ], + }); + }); + + it('should allow you to inject the driver', () => { + expect(TestBed.inject(DaffExternalRouterDriver)).toBeTruthy(); + }); +}); diff --git a/libs/external-router/driver/magento/2.4.1/src/provider.ts b/libs/external-router/driver/magento/2.4.1/src/provider.ts new file mode 100644 index 0000000000..1e0d9099f1 --- /dev/null +++ b/libs/external-router/driver/magento/2.4.1/src/provider.ts @@ -0,0 +1,19 @@ +import { + EnvironmentProviders, + makeEnvironmentProviders, +} from '@angular/core'; + +import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento'; +import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver'; + +import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.1'; +import { DaffExternalRouterMagentoDriver } from './magento.service'; + +/** + * Provides a Magento v2.4.1 implementation of {@link DaffExternalRouterDriver}. + */ +export const provideDaffExternalRouterMagentoDriver = ( +): EnvironmentProviders => makeEnvironmentProviders([ + provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver), + provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME), +]); diff --git a/libs/external-router/driver/magento/2.4.1/src/public_api.ts b/libs/external-router/driver/magento/2.4.1/src/public_api.ts index bcc3c98fb8..9b8356ecbf 100644 --- a/libs/external-router/driver/magento/2.4.1/src/public_api.ts +++ b/libs/external-router/driver/magento/2.4.1/src/public_api.ts @@ -4,3 +4,4 @@ export { DaffExternalRouterMagentoDriver } from './magento.service'; export { DaffExternalRouterDriverMagentoModule } from './magento.module'; +export { provideDaffExternalRouterMagentoDriver } from './provider'; diff --git a/libs/external-router/driver/magento/2.4.2/src/magento.module.ts b/libs/external-router/driver/magento/2.4.2/src/magento.module.ts index b947e5f049..0ec1f47b35 100644 --- a/libs/external-router/driver/magento/2.4.2/src/magento.module.ts +++ b/libs/external-router/driver/magento/2.4.2/src/magento.module.ts @@ -4,11 +4,7 @@ import { ModuleWithProviders, } from '@angular/core'; -import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento'; -import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver'; - -import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.2'; -import { DaffExternalRouterMagentoDriver } from './magento.service'; +import { provideDaffExternalRouterMagentoDriver } from './provider'; /** * The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento. @@ -26,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service'; * ``` * * Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls. + * + * @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}. */ @NgModule({ declarations: [], @@ -40,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule { return { ngModule: DaffExternalRouterDriverMagentoModule, providers: [ - provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver), - provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME), + provideDaffExternalRouterMagentoDriver(), ], }; } diff --git a/libs/external-router/driver/magento/2.4.2/src/provider.spec.ts b/libs/external-router/driver/magento/2.4.2/src/provider.spec.ts new file mode 100644 index 0000000000..689440bd3e --- /dev/null +++ b/libs/external-router/driver/magento/2.4.2/src/provider.spec.ts @@ -0,0 +1,20 @@ +import { TestBed } from '@angular/core/testing'; +import { ApolloTestingModule } from 'apollo-angular/testing'; + +import { DaffExternalRouterDriver } from '@daffodil/external-router/driver'; +import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.2'; + +describe('@daffodil/external-router/driver/magento/2.4.2 | provideDaffExternalRouterMagentoDriver', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ApolloTestingModule], + providers: [ + provideDaffExternalRouterMagentoDriver(), + ], + }); + }); + + it('should allow you to inject the driver', () => { + expect(TestBed.inject(DaffExternalRouterDriver)).toBeTruthy(); + }); +}); diff --git a/libs/external-router/driver/magento/2.4.2/src/provider.ts b/libs/external-router/driver/magento/2.4.2/src/provider.ts new file mode 100644 index 0000000000..c3103ccedf --- /dev/null +++ b/libs/external-router/driver/magento/2.4.2/src/provider.ts @@ -0,0 +1,19 @@ +import { + EnvironmentProviders, + makeEnvironmentProviders, +} from '@angular/core'; + +import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento'; +import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver'; + +import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.2'; +import { DaffExternalRouterMagentoDriver } from './magento.service'; + +/** + * Provides a Magento v2.4.2 implementation of {@link DaffExternalRouterDriver}. + */ +export const provideDaffExternalRouterMagentoDriver = ( +): EnvironmentProviders => makeEnvironmentProviders([ + provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver), + provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME), +]); diff --git a/libs/external-router/driver/magento/2.4.2/src/public_api.ts b/libs/external-router/driver/magento/2.4.2/src/public_api.ts index a5987f40e3..0f5e0bd907 100644 --- a/libs/external-router/driver/magento/2.4.2/src/public_api.ts +++ b/libs/external-router/driver/magento/2.4.2/src/public_api.ts @@ -4,3 +4,4 @@ export { DaffExternalRouterMagentoDriver } from './magento.service'; export { DaffExternalRouterDriverMagentoModule } from './magento.module'; +export { provideDaffExternalRouterMagentoDriver } from './provider'; diff --git a/libs/external-router/driver/magento/2.4.3/src/magento.module.ts b/libs/external-router/driver/magento/2.4.3/src/magento.module.ts index acc4285d74..0ec1f47b35 100644 --- a/libs/external-router/driver/magento/2.4.3/src/magento.module.ts +++ b/libs/external-router/driver/magento/2.4.3/src/magento.module.ts @@ -4,11 +4,7 @@ import { ModuleWithProviders, } from '@angular/core'; -import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento'; -import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver'; - -import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve'; -import { DaffExternalRouterMagentoDriver } from './magento.service'; +import { provideDaffExternalRouterMagentoDriver } from './provider'; /** * The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento. @@ -26,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service'; * ``` * * Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls. + * + * @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}. */ @NgModule({ declarations: [], @@ -40,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule { return { ngModule: DaffExternalRouterDriverMagentoModule, providers: [ - provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver), - provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME), + provideDaffExternalRouterMagentoDriver(), ], }; } diff --git a/libs/external-router/guides/drivers/magento.md b/libs/external-router/guides/drivers/magento.md index 4f8e42db3c..c05e1a82bb 100644 --- a/libs/external-router/guides/drivers/magento.md +++ b/libs/external-router/guides/drivers/magento.md @@ -1,6 +1,6 @@ # Magento -This guide provides instructions on how to use various Magento drivers with `@daffodil/external-router`. +This guide provides instructions on how to use the Magento driver with `@daffodil/external-router`. ## Installation @@ -10,21 +10,50 @@ npm install @daffodil/external-router --save ## Getting started -To use the Magento drivers, you need to import and configure the appropriate modules and services in your Angular application. +To use the Magento drivers, you need to import and configure the appropriate modules and services in your Angular application, and set your Magento version in `angular.json`. Magento's GraphQl API has changed with its various versions, with the most recent versions of Magento supporting the `routes` GraphQl query. -As such, most recent versions of Magento should use the driver version which first introduced support for this: `DaffExternalRouterDriverMagentoModule` from `@daffodil/external-router/driver/magento/2.4.3`. +As such, most recent versions of Magento should use the driver version which first introduced support for this: `v2.4.3` -| Magento Version | Module | Package | SEO Data Support | -| --------------- | ---------------------------------------- | ------------------------------------------------ | ---------------- | -| v2.4.1 | `DaffExternalRouterDriverMagentoModule` | `@daffodil/external-router/driver/magento/2.4.1` | No | -| v2.4.2 | `DaffExternalRouterDriverMagentoModule` | `@daffodil/external-router/driver/magento/2.4.2` | No | -| v2.4.3+ | `provideDaffExternalRouterMagentoDriver` | `@daffodil/external-router/driver/magento/2.4.3` | Yes | +The driver version is selected at build time via Angular CLI's `conditions` — only the selected version's code is included in the bundle. + +| Magento Version | `conditions` value | SEO Data Support | +| --------------- | ------------------------ | ---------------- | +| v2.4.1 | `magento-2.4.1` | No | +| v2.4.2 | `magento-2.4.2` | No | +| v2.4.3+ | `magento-2.4.3` | Yes | + +If `customConditions` is not set, the driver defaults to v2.4.3. ## Usage -To use the Magento driver for external router with the latest version of Magento: +### Step 1 — Set your Magento version in `angular.json` + +Set these once. Only change them when you upgrade your Magento version. + +```jsonc +// angular.json +{ + "projects": { + "my-app": { + "architect": { + "build": { + "configurations": { + "production": { + "conditions": ["magento-2.4.3"] + } + } + } + } + } + } +} +``` + +### Step 2 — Configure the provider in `app.config.ts` + +This import never changes, regardless of which Magento version you use. ```ts import { ApplicationConfig } from '@angular/core'; @@ -32,7 +61,7 @@ import { provideClientHydration } from '@angular/platform-browser'; import { provideRouter } from '@angular/router'; import { provideExternalRouter } from '@daffodil/external-router'; -import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.3'; +import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento'; export const appConfig: ApplicationConfig = { providers: [ @@ -43,3 +72,23 @@ export const appConfig: ApplicationConfig = { ], }; ``` + +When you upgrade Magento, only `angular.json` need to change — `app.config.ts` stays the same. + +## Tree-shaking + +The `conditions` approach means the bundler resolves `@daffodil/external-router/driver/magento` to exactly one version bundle. The other version bundles are never imported and are not included in the final output. + +## Alternative: version-specific sub-package import + +If you are not using Angular CLI (esbuild), you can import `provideDaffExternalRouterMagentoDriver` and `DaffExternalRouterMagentoDriver` directly from the version-specific sub-package. This also guarantees tree-shaking: + +```ts +import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.3'; +``` + +| Magento Version | Package | SEO Data Support | +| --------------- | ------------------------------------------------ | ---------------- | +| v2.4.1 | `@daffodil/external-router/driver/magento/2.4.1` | No | +| v2.4.2 | `@daffodil/external-router/driver/magento/2.4.2` | No | +| v2.4.3+ | `@daffodil/external-router/driver/magento/2.4.3` | Yes | diff --git a/libs/external-router/tsconfig.json b/libs/external-router/tsconfig.json index 4d85d4e7ce..511f083966 100644 --- a/libs/external-router/tsconfig.json +++ b/libs/external-router/tsconfig.json @@ -15,9 +15,12 @@ "@daffodil/external-router/driver/magento": [ "libs/external-router/driver/magento/src" ], + "@daffodil/external-router/driver/magento/auto": [ + "libs/external-router/driver/magento/auto/src" + ], "@daffodil/external-router/driver/magento/2.4.1": [ "libs/external-router/driver/magento/2.4.1/src" - ], + ], "@daffodil/external-router/driver/magento/2.4.2": [ "libs/external-router/driver/magento/2.4.2/src" ], From c2842c06c7c3f298cb44e4e780960d67b613fc8a Mon Sep 17 00:00:00 2001 From: Peter Ashwood Date: Mon, 3 Aug 2026 18:52:07 +0000 Subject: [PATCH 3/3] update schematic --- tools/schematics/utils/module-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/schematics/utils/module-utils.ts b/tools/schematics/utils/module-utils.ts index 1f5da22e41..61b2da65e5 100644 --- a/tools/schematics/utils/module-utils.ts +++ b/tools/schematics/utils/module-utils.ts @@ -230,8 +230,8 @@ function getPackageForProvider(providerName: string): string { provideDaffNavigationDriver: '@daffodil/navigation/driver', provideExternalRouter: '@daffodil/external-router', provideDaffExternalRouterInMemoryDriver: '@daffodil/external-router/driver/in-memory', - provideDaffExternalRouterMagentoDriver: '@daffodil/external-router/driver/magento/2.4.3', - DaffExternalRouterMagentoDriver: '@daffodil/external-router/driver/magento/2.4.3', + provideDaffExternalRouterMagentoDriver: '@daffodil/external-router/driver/magento/auto', + DaffExternalRouterMagentoDriver: '@daffodil/external-router/driver/magento/auto', provideDaffExternalRouterShopifyDriver: '@daffodil/external-router/driver/shopify', DaffExternalRouterShopifyDriver: '@daffodil/external-router/driver/shopify', provideDaffExternalRouterDriver: '@daffodil/external-router/driver',