UNPKG

72.8 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var path_1 = require("path");
4var ts = require("typescript");
5var util = require("./util");
6var Constants = require("../util/constants");
7var file_cache_1 = require("../util/file-cache");
8var helpers = require("../util/helpers");
9var tsUtils = require("../util/typescript-utils");
10describe('util', function () {
11 describe('filterTypescriptFilesForDeepLinks', function () {
12 it('should return a list of files that are in the directory specified for deeplinking', function () {
13 var pagesDir = path_1.join(process.cwd(), 'myApp', 'src', 'pages');
14 var knownFileContent = 'Some string';
15 var pageOneTs = path_1.join(pagesDir, 'page-one', 'page-one.ts');
16 var pageOneHtml = path_1.join(pagesDir, 'page-one', 'page-one.html');
17 var pageOneModule = path_1.join(pagesDir, 'page-one', 'page-one.module.ts');
18 var pageTwoTs = path_1.join(pagesDir, 'page-two', 'page-two.ts');
19 var pageTwoHtml = path_1.join(pagesDir, 'page-two', 'page-two.html');
20 var pageTwoModule = path_1.join(pagesDir, 'page-two', 'page-two.module.ts');
21 var pageThreeTs = path_1.join(pagesDir, 'page-three', 'page-three.ts');
22 var pageThreeHtml = path_1.join(pagesDir, 'page-three', 'page-three.html');
23 var pageThreeModule = path_1.join(pagesDir, 'page-three', 'page-three.module.ts');
24 var someOtherFile = path_1.join('Users', 'hans-gruber', 'test.ts');
25 var fileCache = new file_cache_1.FileCache();
26 fileCache.set(pageOneTs, { path: pageOneTs, content: knownFileContent });
27 fileCache.set(pageOneHtml, { path: pageOneHtml, content: knownFileContent });
28 fileCache.set(pageOneModule, { path: pageOneModule, content: knownFileContent });
29 fileCache.set(pageTwoTs, { path: pageTwoTs, content: knownFileContent });
30 fileCache.set(pageTwoHtml, { path: pageTwoHtml, content: knownFileContent });
31 fileCache.set(pageTwoModule, { path: pageTwoModule, content: knownFileContent });
32 fileCache.set(pageThreeTs, { path: pageThreeTs, content: knownFileContent });
33 fileCache.set(pageThreeHtml, { path: pageThreeHtml, content: knownFileContent });
34 fileCache.set(pageThreeModule, { path: pageThreeModule, content: knownFileContent });
35 fileCache.set(someOtherFile, { path: someOtherFile, content: knownFileContent });
36 spyOn(helpers, helpers.getStringPropertyValue.name).and.callFake(function (input) {
37 if (input === Constants.ENV_VAR_DEEPLINKS_DIR) {
38 return pagesDir;
39 }
40 return '.module.ts';
41 });
42 var results = util.filterTypescriptFilesForDeepLinks(fileCache);
43 expect(results.length).toEqual(3);
44 expect(results[0].path).toEqual(pageOneTs);
45 expect(results[1].path).toEqual(pageTwoTs);
46 expect(results[2].path).toEqual(pageThreeTs);
47 });
48 });
49 describe('parseDeepLinkDecorator', function () {
50 it('should return the decorator content from fully hydrated decorator', function () {
51 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n name: 'someName',\n segment: 'someSegmentBro',\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
52 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
53 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
54 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
55 expect(result.name).toEqual('someName');
56 expect(result.segment).toEqual('someSegmentBro');
57 expect(result.defaultHistory[0]).toEqual('page-one');
58 expect(result.defaultHistory[1]).toEqual('page-two');
59 expect(result.priority).toEqual('high');
60 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
61 });
62 it('should default to using class name when name is missing', function () {
63 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n segment: 'someSegmentBro',\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
64 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
65 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
66 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
67 expect(result.name).toEqual('HomePage');
68 expect(result.segment).toEqual('someSegmentBro');
69 expect(result.defaultHistory[0]).toEqual('page-one');
70 expect(result.defaultHistory[1]).toEqual('page-two');
71 expect(result.priority).toEqual('high');
72 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
73 });
74 it('should return null segment when not in decorator', function () {
75 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
76 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
77 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
78 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
79 expect(result.name).toEqual('HomePage');
80 expect(result.segment).toEqual('path');
81 expect(result.defaultHistory[0]).toEqual('page-one');
82 expect(result.defaultHistory[1]).toEqual('page-two');
83 expect(result.priority).toEqual('high');
84 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
85 });
86 it('should return empty array for defaultHistory when not in decorator', function () {
87 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n priority: 'high'\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
88 var knownPath = path_1.join(process.cwd(), 'myApp', 'src', 'pages', 'about.ts');
89 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
90 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
91 expect(result.name).toEqual('HomePage');
92 expect(result.segment).toEqual('about');
93 expect(result.defaultHistory).toBeTruthy();
94 expect(result.defaultHistory.length).toEqual(0);
95 expect(result.priority).toEqual('high');
96 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
97 });
98 it('should return priority of low when not in decorator', function () {
99 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
100 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
101 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
102 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
103 expect(result.name).toEqual('HomePage');
104 expect(result.segment).toEqual('path');
105 expect(result.defaultHistory).toBeTruthy();
106 expect(result.defaultHistory.length).toEqual(0);
107 expect(result.priority).toEqual('low');
108 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
109 });
110 it('should return correct defaults when no param passed to decorator', function () {
111 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
112 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path.ts');
113 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
114 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
115 expect(result.name).toEqual('HomePage');
116 expect(result.segment).toEqual('path');
117 expect(result.defaultHistory).toBeTruthy();
118 expect(result.defaultHistory.length).toEqual(0);
119 expect(result.priority).toEqual('low');
120 expect(knownContent.indexOf(result.rawString)).toBeGreaterThan(-1);
121 });
122 it('should throw an error when multiple deeplink decorators are found', function () {
123 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n})\n@IonicPage({\n})\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
124 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
125 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
126 var knownErrorMsg = 'Should never get here';
127 try {
128 util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
129 throw new Error(knownErrorMsg);
130 }
131 catch (ex) {
132 expect(ex.message).not.toEqual(knownErrorMsg);
133 }
134 });
135 it('should return null when no deeplink decorator is found', function () {
136 var knownContent = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-home',\n template: `\n <ion-header>\n <ion-navbar>\n <ion-title>\n Ionic Blank\n </ion-title>\n </ion-navbar>\n </ion-header>\n\n <ion-content padding>\n The world is your oyster.\n <p>\n If you get lost, the <a href=\"http://ionicframework.com/docs/v2\">docs</a> will be your guide.\n </p>\n <button ion-button (click)=\"nextPage()\">Next Page</button>\n </ion-content>\n `\n})\nexport class HomePage {\n\n constructor(public navCtrl: NavController) {\n }\n\n nextPage() {\n this.navCtrl.push('PageOne');\n console.log()\n }\n}\n\n ";
137 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
138 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
139 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
140 expect(result).toEqual(null);
141 });
142 it('should return null when there isn\'t a class declaration', function () {
143 var knownContent = "\nimport {\n CallExpression,\n createSourceFile,\n Identifier,\n ImportClause,\n ImportDeclaration,\n ImportSpecifier,\n NamedImports,\n Node,\n ScriptTarget,\n SourceFile,\n StringLiteral,\n SyntaxKind\n} from 'typescript';\n\nimport { rangeReplace, stringSplice } from './helpers';\n\nexport function getTypescriptSourceFile(filePath: string, fileContent: string, languageVersion: ScriptTarget = ScriptTarget.Latest, setParentNodes: boolean = false): SourceFile {\n return createSourceFile(filePath, fileContent, languageVersion, setParentNodes);\n}\n\nexport function removeDecorators(fileName: string, source: string): string {\n const sourceFile = createSourceFile(fileName, source, ScriptTarget.Latest);\n const decorators = findNodes(sourceFile, sourceFile, SyntaxKind.Decorator, true);\n decorators.sort((a, b) => b.pos - a.pos);\n decorators.forEach(d => {\n source = source.slice(0, d.pos) + source.slice(d.end);\n });\n\n return source;\n}\n\n ";
144 var knownPath = path_1.join(process.cwd(), 'some', 'fake', 'path');
145 var sourceFile = tsUtils.getTypescriptSourceFile(knownPath, knownContent);
146 var result = util.getDeepLinkDecoratorContentForSourceFile(sourceFile);
147 expect(result).toEqual(null);
148 });
149 });
150 describe('getNgModuleDataFromCorrespondingPage', function () {
151 it('should call the file cache with the path to an ngmodule', function () {
152 var basePath = path_1.join(process.cwd(), 'some', 'fake', 'path');
153 var pagePath = path_1.join(basePath, 'my-page', 'my-page.ts');
154 var ngModulePath = path_1.join(basePath, 'my-page', 'my-page.module.ts');
155 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
156 var result = util.getNgModulePathFromCorrespondingPage(pagePath);
157 expect(result).toEqual(ngModulePath);
158 });
159 });
160 describe('getRelativePathToPageNgModuleFromAppNgModule', function () {
161 it('should return the relative path', function () {
162 var prefix = path_1.join(process.cwd(), 'myApp', 'src');
163 var appNgModulePath = path_1.join(prefix, 'app', 'app.module.ts');
164 var pageNgModulePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.module.ts');
165 var result = util.getRelativePathToPageNgModuleFromAppNgModule(appNgModulePath, pageNgModulePath);
166 expect(result).toEqual(path_1.join('..', 'pages', 'page-one', 'page-one.module.ts'));
167 });
168 });
169 describe('getNgModuleDataFromPage', function () {
170 it('should throw when NgModule is not in cache and create default ngModule flag is off', function () {
171 var prefix = path_1.join(process.cwd(), 'myApp', 'src');
172 var appNgModulePath = path_1.join(prefix, 'app', 'app.module.ts');
173 var pagePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.ts');
174 var knownClassName = 'PageOne';
175 var fileCache = new file_cache_1.FileCache();
176 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
177 var knownErrorMsg = 'Should never happen';
178 try {
179 util.getNgModuleDataFromPage(appNgModulePath, pagePath, knownClassName, fileCache, false);
180 throw new Error(knownErrorMsg);
181 }
182 catch (ex) {
183 expect(ex.message).not.toEqual(knownErrorMsg);
184 }
185 });
186 it('should return non-aot adjusted paths when not in AoT', function () {
187 var pageNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { IonicPageModule } from 'ionic-angular';\n\nimport { HomePage } from './home';\n\n@NgModule({\n declarations: [\n HomePage,\n ],\n imports: [\n IonicPageModule.forChild(HomePage),\n ]\n})\nexport class HomePageModule {}\n ";
188 var prefix = path_1.join(process.cwd(), 'myApp', 'src');
189 var appNgModulePath = path_1.join(prefix, 'app', 'app.module.ts');
190 var pageNgModulePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.module.ts');
191 var pagePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.ts');
192 var knownClassName = 'PageOne';
193 var fileCache = new file_cache_1.FileCache();
194 fileCache.set(pageNgModulePath, { path: pageNgModulePath, content: pageNgModuleContent });
195 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
196 var result = util.getNgModuleDataFromPage(appNgModulePath, pagePath, knownClassName, fileCache, false);
197 expect(result.absolutePath).toEqual(pageNgModulePath);
198 expect(result.userlandModulePath).toEqual('../pages/page-one/page-one.module');
199 expect(result.className).toEqual('HomePageModule');
200 });
201 it('should return adjusted paths to account for AoT', function () {
202 var pageNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { IonicPageModule } from 'ionic-angular';\n\nimport { HomePage } from './home';\n\n@NgModule({\n declarations: [\n HomePage,\n ],\n imports: [\n IonicPageModule.forChild(HomePage),\n ]\n})\nexport class HomePageModule {}\n ";
203 var prefix = path_1.join(process.cwd(), 'myApp', 'src');
204 var appNgModulePath = path_1.join(prefix, 'app', 'app.module.ts');
205 var pageNgModulePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.module.ts');
206 var pagePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.ts');
207 var knownClassName = 'PageOne';
208 var fileCache = new file_cache_1.FileCache();
209 fileCache.set(pageNgModulePath, { path: pageNgModulePath, content: pageNgModuleContent });
210 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
211 var result = util.getNgModuleDataFromPage(appNgModulePath, pagePath, knownClassName, fileCache, true);
212 expect(result.absolutePath).toEqual(helpers.changeExtension(pageNgModulePath, '.ngfactory.js'));
213 expect(result.userlandModulePath).toEqual('../pages/page-one/page-one.module.ngfactory');
214 expect(result.className).toEqual('HomePageModuleNgFactory');
215 });
216 });
217 describe('getDeepLinkData', function () {
218 it('should return an empty list when no deep link decorators are found', function () {
219 var pageOneContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n\n@Component({\n selector: 'page-page-one',\n templateUrl: './page-one.html'\n})\nexport class PageOne {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n nextPage() {\n this.navCtrl.push('PageTwo');\n }\n\n previousPage() {\n this.navCtrl.pop();\n }\n\n}\n ";
220 var pageOneNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageOne } from './page-one';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageOne,\n ],\n imports: [\n IonicPageModule.forChild(PageOne)\n ],\n entryComponents: [\n PageOne\n ]\n})\nexport class PageOneModule {}\n\n ";
221 var pageTwoContent = "\nimport { Component } from '@angular/core';\nimport { LoadingController, ModalController, NavController, PopoverController } from 'ionic-angular';\n\n\n@Component({\n selector: 'page-page-two',\n templateUrl: './page-two.html'\n})\nexport class PageTwo {\n\n constructor(public loadingController: LoadingController, public modalController: ModalController, public navCtrl: NavController, public popoverCtrl: PopoverController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n showLoader() {\n const viewController = this.loadingController.create({\n duration: 2000\n });\n\n viewController.present();\n }\n\n openModal() {\n /*const viewController = this.modalController.create('PageThree');\n viewController.present();\n */\n\n const viewController = this.popoverCtrl.create('PageThree');\n viewController.present();\n\n\n //this.navCtrl.push('PageThree');\n }\n}\n\n ";
222 var pageTwoNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageTwo } from './page-two';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageTwo,\n ],\n imports: [\n IonicPageModule.forChild(PageTwo)\n ]\n})\nexport class PageTwoModule {\n\n}\n ";
223 var pageSettingsContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n/*\n Generated class for the PageTwo page.\n\n See http://ionicframework.com/docs/v2/components/#navigation for more info on\n Ionic pages and navigation.\n*/\n@Component({\n selector: 'page-three',\n templateUrl: './page-three.html'\n})\nexport class PageThree {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n}\n\n ";
224 var pageSettingsNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageThree } from './page-three';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageThree,\n ],\n imports: [\n IonicPageModule.forChild(PageThree)\n ]\n})\nexport class PageThreeModule {\n\n}\n\n ";
225 var prefix = path_1.join(process.cwd(), 'myApp', 'src');
226 var appNgModulePath = path_1.join(prefix, 'app', 'app.module.ts');
227 var pageOneNgModulePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.module.ts');
228 var pageOnePath = path_1.join(prefix, 'pages', 'page-one', 'page-one.ts');
229 var pageTwoNgModulePath = path_1.join(prefix, 'pages', 'page-two', 'page-two.module.ts');
230 var pageTwoPath = path_1.join(prefix, 'pages', 'page-two', 'page-two.ts');
231 var pageSettingsNgModulePath = path_1.join(prefix, 'pages', 'settings-page', 'settings-page.module.ts');
232 var pageSettingsPath = path_1.join(prefix, 'pages', 'settings-page', 'settings-page.ts');
233 var fileCache = new file_cache_1.FileCache();
234 fileCache.set(pageOnePath, { path: pageOnePath, content: pageOneContent });
235 fileCache.set(pageOneNgModulePath, { path: pageOneNgModulePath, content: pageOneNgModuleContent });
236 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
237 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
238 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
239 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
240 fileCache.set(pageSettingsPath, { path: pageSettingsPath, content: pageSettingsContent });
241 fileCache.set(pageSettingsNgModulePath, { path: pageSettingsNgModulePath, content: pageSettingsNgModuleContent });
242 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
243 var map = util.getDeepLinkData(appNgModulePath, fileCache, false);
244 expect(map.size).toEqual(0);
245 });
246 it('should return an a list of deeplink configs from all pages that have them, and not include pages that dont', function () {
247 var pageOneContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n\n@IonicPage({\n name: 'SomeOtherName'\n})\n@Component({\n selector: 'page-page-one',\n templateUrl: './page-one.html'\n})\nexport class PageOne {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n nextPage() {\n this.navCtrl.push('PageTwo');\n }\n\n previousPage() {\n this.navCtrl.pop();\n }\n\n}\n ";
248 var pageOneNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageOne } from './page-one';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageOne,\n ],\n imports: [\n IonicPageModule.forChild(PageOne)\n ],\n entryComponents: [\n PageOne\n ]\n})\nexport class PageOneModule {}\n\n ";
249 var pageTwoContent = "\nimport { Component } from '@angular/core';\nimport { LoadingController, ModalController, NavController, PopoverController } from 'ionic-angular';\n\n\n@Component({\n selector: 'page-page-two',\n templateUrl: './page-two.html'\n})\nexport class PageTwo {\n\n constructor(public loadingController: LoadingController, public modalController: ModalController, public navCtrl: NavController, public popoverCtrl: PopoverController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n showLoader() {\n const viewController = this.loadingController.create({\n duration: 2000\n });\n\n viewController.present();\n }\n\n openModal() {\n /*const viewController = this.modalController.create('PageThree');\n viewController.present();\n */\n\n const viewController = this.popoverCtrl.create('PageThree');\n viewController.present();\n\n\n //this.navCtrl.push('PageThree');\n }\n}\n\n ";
250 var pageTwoNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageTwo } from './page-two';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageTwo,\n ],\n imports: [\n IonicPageModule.forChild(PageTwo)\n ]\n})\nexport class PageTwoModule {\n\n}\n ";
251 var pageSettingsContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n segment: 'someSegmentBro',\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-three',\n templateUrl: './page-three.html'\n})\nexport class PageThree {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n}\n\n ";
252 var pageSettingsNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageThree } from './page-three';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageThree,\n ],\n imports: [\n IonicPageModule.forChild(PageThree)\n ]\n})\nexport class PageThreeModule {\n\n}\n\n ";
253 var srcDir = path_1.join(process.cwd(), 'myApp', 'src');
254 var appNgModulePath = path_1.join(srcDir, 'app', 'app.module.ts');
255 var pageOneNgModulePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.module.ts');
256 var pageOnePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.ts');
257 var pageTwoNgModulePath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.module.ts');
258 var pageTwoPath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.ts');
259 var pageSettingsNgModulePath = path_1.join(srcDir, 'pages', 'settings-page', 'settings-page.module.ts');
260 var pageSettingsPath = path_1.join(srcDir, 'pages', 'settings-page', 'settings-page.ts');
261 var fileCache = new file_cache_1.FileCache();
262 fileCache.set(pageOnePath, { path: pageOnePath, content: pageOneContent });
263 fileCache.set(pageOneNgModulePath, { path: pageOneNgModulePath, content: pageOneNgModuleContent });
264 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
265 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
266 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
267 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
268 fileCache.set(pageSettingsPath, { path: pageSettingsPath, content: pageSettingsContent });
269 fileCache.set(pageSettingsNgModulePath, { path: pageSettingsNgModulePath, content: pageSettingsNgModuleContent });
270 spyOn(helpers, helpers.getStringPropertyValue.name).and.callFake(function (input) {
271 if (input === Constants.ENV_VAR_DEEPLINKS_DIR) {
272 return srcDir;
273 }
274 else {
275 return '.module.ts';
276 }
277 });
278 var map = util.getDeepLinkData(appNgModulePath, fileCache, false);
279 expect(map.size).toEqual(2);
280 });
281 it('should return an a list of deeplink configs from all pages that have them', function () {
282 var pageOneContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n\n@IonicPage({\n name: 'SomeOtherName'\n})\n@Component({\n selector: 'page-page-one',\n templateUrl: './page-one.html'\n})\nexport class PageOne {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n nextPage() {\n this.navCtrl.push('PageTwo');\n }\n\n previousPage() {\n this.navCtrl.pop();\n }\n\n}\n ";
283 var pageOneNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageOne } from './page-one';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageOne,\n ],\n imports: [\n IonicPageModule.forChild(PageOne)\n ],\n entryComponents: [\n PageOne\n ]\n})\nexport class PageOneModule {}\n\n ";
284 var pageTwoContent = "\nimport { Component } from '@angular/core';\nimport { LoadingController, ModalController, NavController, PopoverController } from 'ionic-angular';\n\n\n\n@Component({\n selector: 'page-page-two',\n templateUrl: './page-two.html'\n})\n@IonicPage()\nexport class PageTwo {\n\n constructor(public loadingController: LoadingController, public modalController: ModalController, public navCtrl: NavController, public popoverCtrl: PopoverController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n showLoader() {\n const viewController = this.loadingController.create({\n duration: 2000\n });\n\n viewController.present();\n }\n\n openModal() {\n /*const viewController = this.modalController.create('PageThree');\n viewController.present();\n */\n\n const viewController = this.popoverCtrl.create('PageThree');\n viewController.present();\n\n\n //this.navCtrl.push('PageThree');\n }\n}\n\n ";
285 var pageTwoNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageTwo } from './page-two';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageTwo,\n ],\n imports: [\n IonicPageModule.forChild(PageTwo)\n ]\n})\nexport class PageTwoModule {\n\n}\n ";
286 var pageSettingsContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n segment: 'someSegmentBro',\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-three',\n templateUrl: './page-three.html'\n})\nexport class PageThree {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n}\n\n ";
287 var pageSettingsNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageThree } from './page-three';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageThree,\n ],\n imports: [\n IonicPageModule.forChild(PageThree)\n ]\n})\nexport class PageThreeModule {\n\n}\n\n ";
288 var srcDir = path_1.join(process.cwd(), 'myApp', 'src');
289 var appNgModulePath = path_1.join(srcDir, 'app', 'app.module.ts');
290 var pageOneNgModulePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.module.ts');
291 var pageOnePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.ts');
292 var pageTwoNgModulePath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.module.ts');
293 var pageTwoPath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.ts');
294 var pageSettingsNgModulePath = path_1.join(srcDir, 'pages', 'settings-page', 'fake-dir', 'settings-page.module.ts');
295 var pageSettingsPath = path_1.join(srcDir, 'pages', 'settings-page', 'fake-dir', 'settings-page.ts');
296 var fileCache = new file_cache_1.FileCache();
297 fileCache.set(pageOnePath, { path: pageOnePath, content: pageOneContent });
298 fileCache.set(pageOneNgModulePath, { path: pageOneNgModulePath, content: pageOneNgModuleContent });
299 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
300 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
301 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
302 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
303 fileCache.set(pageSettingsPath, { path: pageSettingsPath, content: pageSettingsContent });
304 fileCache.set(pageSettingsNgModulePath, { path: pageSettingsNgModulePath, content: pageSettingsNgModuleContent });
305 spyOn(helpers, helpers.getStringPropertyValue.name).and.callFake(function (input) {
306 if (input === Constants.ENV_VAR_DEEPLINKS_DIR) {
307 return srcDir;
308 }
309 else {
310 return '.module.ts';
311 }
312 });
313 var map = util.getDeepLinkData(appNgModulePath, fileCache, false);
314 expect(map.size).toEqual(3);
315 var entryOne = map.get('SomeOtherName');
316 expect(entryOne.name).toEqual('SomeOtherName');
317 expect(entryOne.segment).toEqual('page-one');
318 expect(entryOne.priority).toEqual('low');
319 expect(entryOne.defaultHistory.length).toEqual(0);
320 expect(entryOne.absolutePath).toEqual(path_1.join(srcDir, 'pages', 'page-one', 'page-one.module.ts'));
321 expect(entryOne.userlandModulePath).toEqual('../pages/page-one/page-one.module');
322 expect(entryOne.className).toEqual('PageOneModule');
323 var entryTwo = map.get('PageTwo');
324 expect(entryTwo.name).toEqual('PageTwo');
325 expect(entryTwo.segment).toEqual('page-two');
326 expect(entryTwo.priority).toEqual('low');
327 expect(entryTwo.defaultHistory.length).toEqual(0);
328 expect(entryTwo.absolutePath).toEqual(path_1.join(srcDir, 'pages', 'page-two', 'page-two.module.ts'));
329 expect(entryTwo.userlandModulePath).toEqual('../pages/page-two/page-two.module');
330 expect(entryTwo.className).toEqual('PageTwoModule');
331 var entryThree = map.get('PageThree');
332 expect(entryThree.name).toEqual('PageThree');
333 expect(entryThree.segment).toEqual('someSegmentBro');
334 expect(entryThree.priority).toEqual('high');
335 expect(entryThree.defaultHistory.length).toEqual(2);
336 expect(entryThree.defaultHistory[0]).toEqual('page-one');
337 expect(entryThree.defaultHistory[1]).toEqual('page-two');
338 expect(entryThree.absolutePath).toEqual(path_1.join(srcDir, 'pages', 'settings-page', 'fake-dir', 'settings-page.module.ts'));
339 expect(entryThree.userlandModulePath).toEqual('../pages/settings-page/fake-dir/settings-page.module');
340 expect(entryThree.className).toEqual('PageThreeModule');
341 });
342 it('should throw when it cant find an NgModule as a peer to the page with a deep link config', function () {
343 var pageOneContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n\n@IonicPage({\n name: 'SomeOtherName'\n})\n@Component({\n selector: 'page-page-one',\n templateUrl: './page-one.html'\n})\nexport class PageOne {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n nextPage() {\n this.navCtrl.push('PageTwo');\n }\n\n previousPage() {\n this.navCtrl.pop();\n }\n\n}\n ";
344 var pageOneNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageOne } from './page-one';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageOne,\n ],\n imports: [\n IonicPageModule.forChild(PageOne)\n ],\n entryComponents: [\n PageOne\n ]\n})\nexport class PageOneModule {}\n\n ";
345 var pageTwoContent = "\nimport { Component } from '@angular/core';\nimport { LoadingController, ModalController, NavController, PopoverController } from 'ionic-angular';\n\n\n\n@Component({\n selector: 'page-page-two',\n templateUrl: './page-two.html'\n})\n@IonicPage()\nexport class PageTwo {\n\n constructor(public loadingController: LoadingController, public modalController: ModalController, public navCtrl: NavController, public popoverCtrl: PopoverController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n showLoader() {\n const viewController = this.loadingController.create({\n duration: 2000\n });\n\n viewController.present();\n }\n\n openModal() {\n /*const viewController = this.modalController.create('PageThree');\n viewController.present();\n */\n\n const viewController = this.popoverCtrl.create('PageThree');\n viewController.present();\n\n\n //this.navCtrl.push('PageThree');\n }\n}\n\n ";
346 var pageTwoNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageTwo } from './page-two';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageTwo,\n ],\n imports: [\n IonicPageModule.forChild(PageTwo)\n ]\n})\nexport class PageTwoModule {\n\n}\n ";
347 var pageSettingsContent = "\nimport { Component } from '@angular/core';\nimport { IonicPage, NavController } from 'ionic-angular';\n\n@IonicPage({\n segment: 'someSegmentBro',\n defaultHistory: ['page-one', 'page-two'],\n priority: 'high'\n})\n@Component({\n selector: 'page-three',\n templateUrl: './page-three.html'\n})\nexport class PageThree {\n\n constructor(public navCtrl: NavController) {}\n\n ionViewDidLoad() {\n }\n\n goBack() {\n this.navCtrl.pop();\n }\n\n}\n\n ";
348 var pageSettingsNgModuleContent = "\nimport { NgModule } from '@angular/core';\nimport { PageThree } from './page-three';\nimport { IonicPageModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n PageThree,\n ],\n imports: [\n IonicPageModule.forChild(PageThree)\n ]\n})\nexport class PageThreeModule {\n\n}\n\n ";
349 var srcDir = path_1.join(process.cwd(), 'myApp', 'src');
350 var appNgModulePath = path_1.join(srcDir, 'app', 'app.module.ts');
351 var pageOneNgModulePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.not-module.ts');
352 var pageOnePath = path_1.join(srcDir, 'pages', 'page-one', 'page-one.ts');
353 var pageTwoNgModulePath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.module.ts');
354 var pageTwoPath = path_1.join(srcDir, 'pages', 'page-two', 'page-two.ts');
355 var pageSettingsNgModulePath = path_1.join(srcDir, 'pages', 'settings-page', 'fake-dir', 'settings-page.module.ts');
356 var pageSettingsPath = path_1.join(srcDir, 'pages', 'settings-page', 'fake-dir', 'settings-page.ts');
357 var fileCache = new file_cache_1.FileCache();
358 fileCache.set(pageOnePath, { path: pageOnePath, content: pageOneContent });
359 fileCache.set(pageOneNgModulePath, { path: pageOneNgModulePath, content: pageOneNgModuleContent });
360 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
361 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
362 fileCache.set(pageTwoPath, { path: pageTwoPath, content: pageTwoContent });
363 fileCache.set(pageTwoNgModulePath, { path: pageTwoNgModulePath, content: pageTwoNgModuleContent });
364 fileCache.set(pageSettingsPath, { path: pageSettingsPath, content: pageSettingsContent });
365 fileCache.set(pageSettingsNgModulePath, { path: pageSettingsNgModulePath, content: pageSettingsNgModuleContent });
366 spyOn(helpers, helpers.getStringPropertyValue.name).and.callFake(function (input) {
367 if (input === Constants.ENV_VAR_DEEPLINKS_DIR) {
368 return srcDir;
369 }
370 else {
371 return '.module.ts';
372 }
373 });
374 var knownError = 'should never get here';
375 try {
376 util.getDeepLinkData(appNgModulePath, fileCache, false);
377 throw new Error(knownError);
378 }
379 catch (ex) {
380 expect(ex.message).not.toEqual(knownError);
381 }
382 });
383 });
384 describe('hasExistingDeepLinkConfig', function () {
385 it('should return true when there is an existing deep link config', function () {
386 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, {\n links: [\n { loadChildren: '../pages/page-one/page-one.module#PageOneModule', name: 'PageOne' },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo' },\n { loadChildren: '../pages/page-three/page-three.module#PageThreeModule', name: 'PageThree' }\n ]\n }),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
387 var knownPath = '/idk/yo/some/path';
388 var result = util.hasExistingDeepLinkConfig(knownPath, knownContent);
389 expect(result).toEqual(true);
390 });
391 it('should return false when there isnt a deeplink config', function () {
392 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
393 var knownPath = path_1.join(process.cwd(), 'idk', 'some', 'fake', 'path');
394 var result = util.hasExistingDeepLinkConfig(knownPath, knownContent);
395 expect(result).toEqual(false);
396 });
397 it('should return false when null/undefined is passed in place on deeplink config', function () {
398 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, null),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
399 var knownPath = path_1.join(process.cwd(), 'idk', 'some', 'fake', 'path');
400 var result = util.hasExistingDeepLinkConfig(knownPath, knownContent);
401 expect(result).toEqual(false);
402 });
403 it('should return true where there is an existing deep link config associated with a variable', function () {
404 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\nconst deepLinkConfig = {\n links: [\n { loadChildren: '../pages/page-one/page-one.module#PageOneModule', name: 'PageOne' },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo' },\n { loadChildren: '../pages/page-three/page-three.module#PageThreeModule', name: 'PageThree' }\n ]\n};\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, deepLinkConfig),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
405 var knownPath = path_1.join(process.cwd(), 'idk', 'some', 'fake', 'path');
406 var result = util.hasExistingDeepLinkConfig(knownPath, knownContent);
407 expect(result).toEqual(true);
408 });
409 });
410 describe('convertDeepLinkEntryToJsObjectString', function () {
411 it('should convert to a flat string format', function () {
412 var entry = {
413 name: 'HomePage',
414 segment: null,
415 defaultHistory: [],
416 priority: 'low',
417 rawString: 'irrelevant for this test',
418 absolutePath: path_1.join(process.cwd(), 'myApp', 'pages', 'home-page', 'home-page.module.ts'),
419 userlandModulePath: '../pages/home-page/home-page.module',
420 className: 'HomePageModule'
421 };
422 var result = util.convertDeepLinkEntryToJsObjectString(entry);
423 expect(result).toEqual("{ loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: null, priority: 'low', defaultHistory: [] }");
424 });
425 it('should handle defaultHistory entries and segment', function () {
426 var entry = {
427 name: 'HomePage',
428 segment: 'idkMan',
429 defaultHistory: ['page-two', 'page-three', 'page-four'],
430 priority: 'low',
431 rawString: 'irrelevant for this test',
432 absolutePath: path_1.join(process.cwd(), 'myApp', 'pages', 'home-page', 'home-page.module.ts'),
433 userlandModulePath: '../pages/home-page/home-page.module',
434 className: 'HomePageModule'
435 };
436 var result = util.convertDeepLinkEntryToJsObjectString(entry);
437 expect(result).toEqual("{ loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] }");
438 });
439 });
440 describe('convertDeepLinkConfigEntriesToString', function () {
441 it('should convert list of decorator data to legacy ionic data structure as a string', function () {
442 var map = new Map();
443 map.set('HomePage', {
444 name: 'HomePage',
445 segment: 'idkMan',
446 defaultHistory: ['page-two', 'page-three', 'page-four'],
447 priority: 'low',
448 rawString: 'irrelevant for this test',
449 absolutePath: path_1.join(process.cwd(), 'myApp', 'pages', 'home-page', 'home-page.module.ts'),
450 userlandModulePath: '../pages/home-page/home-page.module',
451 className: 'HomePageModule'
452 });
453 map.set('PageTwo', {
454 name: 'PageTwo',
455 segment: null,
456 defaultHistory: [],
457 priority: 'low',
458 rawString: 'irrelevant for this test',
459 absolutePath: path_1.join(process.cwd(), 'myApp', 'pages', 'home-page', 'home-page.module.ts'),
460 userlandModulePath: '../pages/page-two/page-two.module',
461 className: 'PageTwoModule'
462 });
463 map.set('SettingsPage', {
464 name: 'SettingsPage',
465 segment: null,
466 defaultHistory: [],
467 priority: 'low',
468 rawString: 'irrelevant for this test',
469 absolutePath: path_1.join(process.cwd(), 'myApp', 'pages', 'home-page', 'home-page.module.ts'),
470 userlandModulePath: '../pages/settings-page/setting-page.module',
471 className: 'SettingsPageModule'
472 });
473 var result = util.convertDeepLinkConfigEntriesToString(map);
474 expect(result.indexOf('links: [')).toBeGreaterThanOrEqual(0);
475 expect(result.indexOf("{ loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },")).toBeGreaterThanOrEqual(0);
476 expect(result.indexOf("{ loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },")).toBeGreaterThanOrEqual(0);
477 expect(result.indexOf("{ loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }")).toBeGreaterThanOrEqual(0);
478 });
479 });
480 describe('getUpdatedAppNgModuleContentWithDeepLinkConfig', function () {
481 it('should add a default argument for the second param of forRoot, then add the deeplink config', function () {
482 var knownStringToInject = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
483 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
484 var expectedResult = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, {\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
485 var knownPath = path_1.join('some', 'fake', 'path');
486 var result = util.getUpdatedAppNgModuleContentWithDeepLinkConfig(knownPath, knownContent, knownStringToInject);
487 expect(result).toEqual(expectedResult);
488 });
489 it('should append the deeplink config as the third argument when second arg is null', function () {
490 var knownStringToInject = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
491 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, null),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
492 var expectedResult = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, null, {\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
493 var knownPath = path_1.join('some', 'fake', 'path');
494 var result = util.getUpdatedAppNgModuleContentWithDeepLinkConfig(knownPath, knownContent, knownStringToInject);
495 expect(result).toEqual(expectedResult);
496 });
497 it('should append the deeplink config as the third argument when second arg is object', function () {
498 var knownStringToInject = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
499 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
500 var expectedResult = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, {\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
501 var knownPath = path_1.join('some', 'fake', 'path');
502 var result = util.getUpdatedAppNgModuleContentWithDeepLinkConfig(knownPath, knownContent, knownStringToInject);
503 expect(result).toEqual(expectedResult);
504 });
505 it('should replace the third argument with deeplink config', function () {
506 var knownStringToInject = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
507 var knownContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, null),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
508 var expectedResult = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, {\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n ";
509 var knownPath = path_1.join('some', 'fake', 'path');
510 var result = util.getUpdatedAppNgModuleContentWithDeepLinkConfig(knownPath, knownContent, knownStringToInject);
511 expect(result).toEqual(expectedResult);
512 });
513 });
514 describe('generateDefaultDeepLinkNgModuleContent', function () {
515 it('should generate a default NgModule for a DeepLinked component', function () {
516 var knownFileContent = "\nimport { NgModule } from '@angular/core';\nimport { IonicPageModule } from 'ionic-angular';\nimport { PageOne } from './page-one';\n\n@NgModule({\n declarations: [\n PageOne,\n ],\n imports: [\n IonicPageModule.forChild(PageOne)\n ]\n})\nexport class PageOneModule {}\n\n";
517 var knownFilePath = path_1.join(process.cwd(), 'myApp', 'src', 'pages', 'page-one', 'page-one.ts');
518 var knownClassName = 'PageOne';
519 var fileContent = util.generateDefaultDeepLinkNgModuleContent(knownFilePath, knownClassName);
520 expect(fileContent).toEqual(knownFileContent);
521 });
522 });
523 describe('updateAppNgModuleWithDeepLinkConfig', function () {
524 it('should throw when app ng module is not in cache', function () {
525 var fileCache = new file_cache_1.FileCache();
526 var knownContext = {
527 fileCache: fileCache
528 };
529 var knownDeepLinkString = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
530 var knownAppNgModulePath = path_1.join(process.cwd(), 'myApp', 'src', 'app.module.ts');
531 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(knownAppNgModulePath);
532 spyOn(fileCache, 'get').and.callThrough();
533 var knownErrorMsg = 'should never get here';
534 try {
535 util.updateAppNgModuleWithDeepLinkConfig(knownContext, knownDeepLinkString, null);
536 throw new Error(knownErrorMsg);
537 }
538 catch (ex) {
539 expect(ex.message).not.toEqual(knownErrorMsg);
540 expect(fileCache.get).toHaveBeenCalledWith(knownAppNgModulePath);
541 }
542 });
543 it('should update the cache with updated ts file', function () {
544 var fileCache = new file_cache_1.FileCache();
545 var knownContext = {
546 fileCache: fileCache
547 };
548 var knownDeepLinkString = "{\n links: [\n { loadChildren: '../pages/home-page/home-page.module#HomePageModule', name: 'HomePage', segment: 'idkMan', priority: 'low', defaultHistory: ['page-two', 'page-three', 'page-four'] },\n { loadChildren: '../pages/page-two/page-two.module#PageTwoModule', name: 'PageTwo', segment: null, priority: 'low', defaultHistory: [] },\n { loadChildren: '../pages/settings-page/setting-page.module#SettingsPageModule', name: 'SettingsPage', segment: null, priority: 'low', defaultHistory: [] }\n ]\n}\n";
549 var ngModuleContent = "\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { IonicApp, IonicModule } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { HomePageModule } from '../pages/home/home.module';\n\n@NgModule({\n declarations: [\n MyApp,\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp, {}, null),\n HomePageModule,\n ],\n bootstrap: [IonicApp],\n providers: []\n})\nexport class AppModule {}\n";
550 var knownAppNgModulePath = path_1.join(process.cwd(), 'myApp', 'src', 'app.module.ts');
551 fileCache.set(knownAppNgModulePath, { path: knownAppNgModulePath, content: ngModuleContent });
552 spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(knownAppNgModulePath);
553 var changedFiles = [];
554 util.updateAppNgModuleWithDeepLinkConfig(knownContext, knownDeepLinkString, changedFiles);
555 expect(fileCache.getAll().length).toEqual(1);
556 expect(fileCache.get(knownAppNgModulePath).content.indexOf(knownDeepLinkString)).toBeGreaterThanOrEqual(0);
557 expect(changedFiles.length).toEqual(1);
558 expect(changedFiles[0].event).toEqual('change');
559 expect(changedFiles[0].ext).toEqual('.ts');
560 expect(changedFiles[0].filePath).toEqual(knownAppNgModulePath);
561 });
562 });
563 describe('purgeDeepLinkDecorator', function () {
564 it('should remove the IonicPage decorator from the ts source', function () {
565 var input = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, PopoverController } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
566 var expectedContent = "\nimport { Component } from '@angular/core';\n\nimport { PopoverController } from 'ionic-angular';\n\n\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
567 var result = util.purgeDeepLinkDecorator(input);
568 expect(result).toEqual(expectedContent);
569 });
570 });
571 describe('purgeDeepLinkImport', function () {
572 it('should remove the IonicPage decorator but preserve others', function () {
573 var input = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage, PopoverController } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
574 var expectedText = "\nimport { Component } from '@angular/core';\n\nimport { PopoverController } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
575 var result = util.purgeDeepLinkImport(input);
576 expect(result).toEqual(expectedText);
577 });
578 it('should remove the entire import statement', function () {
579 var input = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
580 var expectedText = "\nimport { Component } from '@angular/core';\n\n\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
581 var result = util.purgeDeepLinkImport(input);
582 expect(result).toEqual(expectedText);
583 });
584 });
585 describe('purgeDeepLinkDecoratorTSTransform', function () {
586 it('should do something', function () {
587 var input = "\nimport { Component } from '@angular/core';\n\nimport { IonicPage } from 'ionic-angular';\n\n@IonicPage()\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n conferenceDate = '2047-05-17';\n\n constructor(public popoverCtrl: PopoverController) { }\n\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create('PopoverPage');\n popover.present({ ev: event });\n }\n}\n";
588 var expected = "import { Component } from \"@angular/core\";\nimport { } from \"ionic-angular\";\n@Component({\n selector: \"page-about\",\n templateUrl: \"about.html\"\n})\nexport class AboutPage {\n conferenceDate = \"2047-05-17\";\n constructor(public popoverCtrl: PopoverController) { }\n presentPopover(event: Event) {\n let popover = this.popoverCtrl.create(\"PopoverPage\");\n popover.present({ ev: event });\n }\n}\n";
589 var result = transformSourceFile(input, [util.purgeDeepLinkDecoratorTSTransformImpl]);
590 expect(result).toEqual(expected);
591 });
592 });
593});
594function transformSourceFile(sourceText, transformers) {
595 var transformed = ts.transform(ts.createSourceFile('source.ts', sourceText, ts.ScriptTarget.ES2015), transformers);
596 var printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }, {
597 onEmitNode: transformed.emitNodeWithNotification,
598 substituteNode: transformed.substituteNode
599 });
600 var result = printer.printBundle(ts.createBundle(transformed.transformed));
601 transformed.dispose();
602 return result;
603}
604exports.transformSourceFile = transformSourceFile;