Skip to content

Commit b67bcad

Browse files
committed
feat(external-router): add providers to magento drivers
1 parent 8511690 commit b67bcad

11 files changed

Lines changed: 155 additions & 31 deletions

File tree

libs/external-router/driver/magento/2.4.1/src/magento.module.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@ import {
44
ModuleWithProviders,
55
} from '@angular/core';
66

7-
import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento';
8-
import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver';
97

10-
import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.1';
11-
import { DaffExternalRouterMagentoDriver } from './magento.service';
8+
import { provideDaffExternalRouterMagentoDriver } from './provider';
129
/**
1310
* The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento.
1411
*
@@ -25,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service';
2522
* ```
2623
*
2724
* Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls.
25+
*
26+
* @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}.
2827
*/
2928
@NgModule({
3029
declarations: [],
@@ -39,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule {
3938
return {
4039
ngModule: DaffExternalRouterDriverMagentoModule,
4140
providers: [
42-
provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver),
43-
provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME),
41+
provideDaffExternalRouterMagentoDriver(),
4442
],
4543
};
4644
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { ApolloTestingModule } from 'apollo-angular/testing';
3+
4+
import { DaffExternalRouterDriver } from '@daffodil/external-router/driver';
5+
import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.1';
6+
7+
describe('@daffodil/external-router/driver/magento/2.4.1 | provideDaffExternalRouterMagentoDriver', () => {
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({
10+
imports: [ApolloTestingModule],
11+
providers: [
12+
provideDaffExternalRouterMagentoDriver(),
13+
],
14+
});
15+
});
16+
17+
it('should allow you to inject the driver', () => {
18+
expect(TestBed.inject(DaffExternalRouterDriver)).toBeTruthy();
19+
});
20+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {
2+
EnvironmentProviders,
3+
makeEnvironmentProviders,
4+
} from '@angular/core';
5+
6+
import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento';
7+
import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver';
8+
9+
import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.1';
10+
import { DaffExternalRouterMagentoDriver } from './magento.service';
11+
12+
/**
13+
* Provides a Magento v2.4.1 implementation of {@link DaffExternalRouterDriver}.
14+
*/
15+
export const provideDaffExternalRouterMagentoDriver = (
16+
): EnvironmentProviders => makeEnvironmentProviders([
17+
provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver),
18+
provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME),
19+
]);

libs/external-router/driver/magento/2.4.1/src/public_api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
export { DaffExternalRouterMagentoDriver } from './magento.service';
66
export { DaffExternalRouterDriverMagentoModule } from './magento.module';
7+
export { provideDaffExternalRouterMagentoDriver } from './provider';

libs/external-router/driver/magento/2.4.2/src/magento.module.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ import {
44
ModuleWithProviders,
55
} from '@angular/core';
66

7-
import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento';
8-
import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver';
9-
10-
import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.2';
11-
import { DaffExternalRouterMagentoDriver } from './magento.service';
7+
import { provideDaffExternalRouterMagentoDriver } from './provider';
128

139
/**
1410
* The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento.
@@ -26,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service';
2622
* ```
2723
*
2824
* Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls.
25+
*
26+
* @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}.
2927
*/
3028
@NgModule({
3129
declarations: [],
@@ -40,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule {
4038
return {
4139
ngModule: DaffExternalRouterDriverMagentoModule,
4240
providers: [
43-
provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver),
44-
provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME),
41+
provideDaffExternalRouterMagentoDriver(),
4542
],
4643
};
4744
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { ApolloTestingModule } from 'apollo-angular/testing';
3+
4+
import { DaffExternalRouterDriver } from '@daffodil/external-router/driver';
5+
import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.2';
6+
7+
describe('@daffodil/external-router/driver/magento/2.4.2 | provideDaffExternalRouterMagentoDriver', () => {
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({
10+
imports: [ApolloTestingModule],
11+
providers: [
12+
provideDaffExternalRouterMagentoDriver(),
13+
],
14+
});
15+
});
16+
17+
it('should allow you to inject the driver', () => {
18+
expect(TestBed.inject(DaffExternalRouterDriver)).toBeTruthy();
19+
});
20+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {
2+
EnvironmentProviders,
3+
makeEnvironmentProviders,
4+
} from '@angular/core';
5+
6+
import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento';
7+
import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver';
8+
9+
import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve-url-v2.4.2';
10+
import { DaffExternalRouterMagentoDriver } from './magento.service';
11+
12+
/**
13+
* Provides a Magento v2.4.2 implementation of {@link DaffExternalRouterDriver}.
14+
*/
15+
export const provideDaffExternalRouterMagentoDriver = (
16+
): EnvironmentProviders => makeEnvironmentProviders([
17+
provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver),
18+
provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME),
19+
]);

libs/external-router/driver/magento/2.4.2/src/public_api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
export { DaffExternalRouterMagentoDriver } from './magento.service';
66
export { DaffExternalRouterDriverMagentoModule } from './magento.module';
7+
export { provideDaffExternalRouterMagentoDriver } from './provider';

libs/external-router/driver/magento/2.4.3/src/magento.module.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ import {
44
ModuleWithProviders,
55
} from '@angular/core';
66

7-
import { provideDaffMagentoCacheableOperation } from '@daffodil/driver/magento';
8-
import { provideDaffExternalRouterDriver } from '@daffodil/external-router/driver';
9-
10-
import { DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME } from './graphql/queries/resolve';
11-
import { DaffExternalRouterMagentoDriver } from './magento.service';
7+
import { provideDaffExternalRouterMagentoDriver } from './provider';
128

139
/**
1410
* The module used to configure the {@link DaffExternalRouterDriver} for usage with Magento.
@@ -26,6 +22,8 @@ import { DaffExternalRouterMagentoDriver } from './magento.service';
2622
* ```
2723
*
2824
* Note that this package depends upon ApolloClient, as the Magento driver uses GraphQl to make it's API calls.
25+
*
26+
* @deprecated prefer {@link provideDaffExternalRouterMagentoDriver}.
2927
*/
3028
@NgModule({
3129
declarations: [],
@@ -40,8 +38,7 @@ export class DaffExternalRouterDriverMagentoModule {
4038
return {
4139
ngModule: DaffExternalRouterDriverMagentoModule,
4240
providers: [
43-
provideDaffExternalRouterDriver(DaffExternalRouterMagentoDriver),
44-
provideDaffMagentoCacheableOperation(DAFF_MAGENTO_RESOLVE_URL_QUERY_NAME),
41+
provideDaffExternalRouterMagentoDriver(),
4542
],
4643
};
4744
}
Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Magento
22

3-
This guide provides instructions on how to use various Magento drivers with `@daffodil/external-router`.
3+
This guide provides instructions on how to use the Magento driver with `@daffodil/external-router`.
44

55
## Installation
66

@@ -10,29 +10,58 @@ npm install @daffodil/external-router --save
1010

1111
## Getting started
1212

13-
To use the Magento drivers, you need to import and configure the appropriate modules and services in your Angular application.
13+
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`.
1414

1515
Magento's GraphQl API has changed with its various versions, with the most recent versions of Magento supporting the `routes` GraphQl query.
1616

17-
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`.
17+
As such, most recent versions of Magento should use the driver version which first introduced support for this: `v2.4.3`
1818

19-
| Magento Version | Module | Package | SEO Data Support |
20-
| --------------- | ---------------------------------------- | ------------------------------------------------ | ---------------- |
21-
| v2.4.1 | `DaffExternalRouterDriverMagentoModule` | `@daffodil/external-router/driver/magento/2.4.1` | No |
22-
| v2.4.2 | `DaffExternalRouterDriverMagentoModule` | `@daffodil/external-router/driver/magento/2.4.2` | No |
23-
| v2.4.3+ | `provideDaffExternalRouterMagentoDriver` | `@daffodil/external-router/driver/magento/2.4.3` | Yes |
19+
The driver version is selected at build time via Angular CLI's `conditions` — only the selected version's code is included in the bundle.
20+
21+
| Magento Version | `conditions` value | SEO Data Support |
22+
| --------------- | ------------------------ | ---------------- |
23+
| v2.4.1 | `magento-2.4.1` | No |
24+
| v2.4.2 | `magento-2.4.2` | No |
25+
| v2.4.3+ | `magento-2.4.3` | Yes |
26+
27+
If `customConditions` is not set, the driver defaults to v2.4.3.
2428

2529
## Usage
2630

27-
To use the Magento driver for external router with the latest version of Magento:
31+
### Step 1 — Set your Magento version in `angular.json`
32+
33+
Set these once. Only change them when you upgrade your Magento version.
34+
35+
```jsonc
36+
// angular.json
37+
{
38+
"projects": {
39+
"my-app": {
40+
"architect": {
41+
"build": {
42+
"configurations": {
43+
"production": {
44+
"conditions": ["magento-2.4.3"]
45+
}
46+
}
47+
}
48+
}
49+
}
50+
}
51+
}
52+
```
53+
54+
### Step 2 — Configure the provider in `app.config.ts`
55+
56+
This import never changes, regardless of which Magento version you use.
2857

2958
```ts
3059
import { ApplicationConfig } from '@angular/core';
3160
import { provideClientHydration } from '@angular/platform-browser';
3261
import { provideRouter } from '@angular/router';
3362

3463
import { provideExternalRouter } from '@daffodil/external-router';
35-
import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.3';
64+
import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento';
3665

3766
export const appConfig: ApplicationConfig = {
3867
providers: [
@@ -43,3 +72,23 @@ export const appConfig: ApplicationConfig = {
4372
],
4473
};
4574
```
75+
76+
When you upgrade Magento, only `angular.json` need to change — `app.config.ts` stays the same.
77+
78+
## Tree-shaking
79+
80+
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.
81+
82+
## Alternative: version-specific sub-package import
83+
84+
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:
85+
86+
```ts
87+
import { provideDaffExternalRouterMagentoDriver } from '@daffodil/external-router/driver/magento/2.4.3';
88+
```
89+
90+
| Magento Version | Package | SEO Data Support |
91+
| --------------- | ------------------------------------------------ | ---------------- |
92+
| v2.4.1 | `@daffodil/external-router/driver/magento/2.4.1` | No |
93+
| v2.4.2 | `@daffodil/external-router/driver/magento/2.4.2` | No |
94+
| v2.4.3+ | `@daffodil/external-router/driver/magento/2.4.3` | Yes |

0 commit comments

Comments
 (0)