Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit a7df816

Browse files
committed
fix(deep-links): handle configs with internal arrays
handle configs with internal arrays
1 parent 3a8eef9 commit a7df816

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

src/deep-linking/util.spec.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,102 @@ export function getSharedIonicModule() {
7070
expect(results[4].namedExport).toBe(null);
7171
});
7272

73+
it('should handle configs with arrays in them', () => {
74+
const knownContent = `
75+
@NgModule({
76+
declarations: [
77+
E2EApp,
78+
FirstPage,
79+
RedirectPage,
80+
AnotherPage,
81+
MyCmpTest,
82+
MyCmpTest2,
83+
PrimaryHeaderPage,
84+
TabsPage,
85+
Tab1,
86+
Tab2,
87+
Tab3,
88+
TabItemPage
89+
],
90+
imports: [
91+
BrowserModule,
92+
IonicModule.forRoot(E2EApp, {
93+
swipeBackEnabled: true
94+
}, {
95+
links: [
96+
{ component: FirstPage, name: 'first-page' },
97+
{ component: AnotherPage, name: 'another-page' },
98+
{ component: MyCmpTest, name: 'tab1-page1' },
99+
100+
{ loadChildren: './pages/full-page/full-page.module#LinkModule', name: 'full-page', defaultHistory: ['first-page', 'another-page'] },
101+
102+
{ component: PrimaryHeaderPage, name: 'primary-header-page', defaultHistory: ['first-page', 'full-page'] },
103+
{ component: Tabs, name: 'tabs' },
104+
{ component: Tab1, name: 'tab1' },
105+
{ component: TabItemPage, name: 'item' }
106+
]
107+
})
108+
],
109+
bootstrap: [IonicApp],
110+
entryComponents: [
111+
E2EApp,
112+
FirstPage,
113+
RedirectPage,
114+
AnotherPage,
115+
PrimaryHeaderPage,
116+
TabsPage,
117+
Tab1,
118+
Tab2,
119+
Tab3,
120+
TabItemPage
121+
]
122+
})
123+
export class AppModule {}
124+
`;
125+
126+
const results = util.extractDeepLinkPathData(knownContent);
127+
128+
expect(results[0].component).toEqual('FirstPage');
129+
expect(results[0].name).toEqual('first-page');
130+
expect(results[0].modulePath).toEqual(null);
131+
expect(results[0].namedExport).toEqual(null);
132+
133+
expect(results[1].component).toEqual('AnotherPage');
134+
expect(results[1].name).toEqual('another-page');
135+
expect(results[1].modulePath).toEqual(null);
136+
expect(results[1].namedExport).toEqual(null);
137+
138+
expect(results[2].component).toEqual('MyCmpTest');
139+
expect(results[2].name).toEqual('tab1-page1');
140+
expect(results[2].modulePath).toEqual(null);
141+
expect(results[2].namedExport).toEqual(null);
142+
143+
expect(results[3].component).toEqual(null);
144+
expect(results[3].name).toEqual('full-page');
145+
expect(results[3].modulePath).toEqual('./pages/full-page/full-page.module');
146+
expect(results[3].namedExport).toEqual('LinkModule');
147+
148+
expect(results[4].component).toEqual('PrimaryHeaderPage');
149+
expect(results[4].name).toEqual('primary-header-page');
150+
expect(results[4].modulePath).toEqual(null);
151+
expect(results[4].namedExport).toEqual(null);
152+
153+
expect(results[5].component).toEqual('Tabs');
154+
expect(results[5].name).toEqual('tabs');
155+
expect(results[5].modulePath).toEqual(null);
156+
expect(results[5].namedExport).toEqual(null);
157+
158+
expect(results[6].component).toEqual('Tab1');
159+
expect(results[6].name).toEqual('tab1');
160+
expect(results[6].modulePath).toEqual(null);
161+
expect(results[6].namedExport).toEqual(null);
162+
163+
expect(results[7].component).toEqual('TabItemPage');
164+
expect(results[7].name).toEqual('item');
165+
expect(results[7].modulePath).toEqual(null);
166+
expect(results[7].namedExport).toEqual(null);
167+
});
168+
73169
it('should throw an exception when there is an invalid deep link config', () => {
74170
// arrange
75171
const fileContent = `

src/deep-linking/util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const LOAD_CHILDREN_SPLIT_TOKEN = '#';
66
/* this is a very temporary approach to extracting deeplink data since the Angular compiler API has changed a bit */
77

88
function getLinksArrayContent(appNgModuleFileContent: string) {
9-
const LINKS_REGEX = /links\s*?:\s*\[([\s|\S]*?)\]/igm;
9+
const LINKS_REGEX = /links\s*?:\s*\[([\s\S]*?)}\)/igm;
1010
const deepLinksContentMatches = LINKS_REGEX.exec(appNgModuleFileContent.toString());
1111
if (deepLinksContentMatches && deepLinksContentMatches.length === 2) {
1212
return deepLinksContentMatches[1];

0 commit comments

Comments
 (0)