- Additional Q&A about breaking changes can be found here
- To ask a question about breaking changes use this
1711235 | [EV2] Add configurable bake time The Content Unbundler EV2 template files that are shipped are now formatted to accept customized monitor durations (the time to wait between each stage of a deployment, also known as bake time). To accommodate this, the files have been renamed from: Blackforest.RolloutParameters.PT6H.json to: Blackforest.RolloutParameters.{MonitorDuration}.json You can specify the monitor duration by updating your ServiceGroupRootReplacements.json file to include a new array called "MonitorDuration". EG:
If no monitor durations are specified then the content unbundler ev2 generation will default to 6 hours (PT6H) and 1 day (P1D) |
1711235 | [EV2] Add configurable bake time The Content Unbundler EV2 template files that are shipped are now formatted to accept customized monitor durations (the time to wait between each stage of a deployment, also known as bake time). To accommodate this, the files have been renamed from: Blackforest.RolloutParameters.PT6H.json to: Blackforest.RolloutParameters.{MonitorDuration}.json You can specify the monitor duration by updating your ServiceGroupRootReplacements.json file to include a new array called "MonitorDuration". EG:
If no monitor durations are specified then the content unbundler ev2 generation will default to 6 hours (PT6H) and 1 day (P1D) |
8393815 | [Perf] Implement way to prevent us & extension authors to use CSS selectors ending with tags A new PDL warning has been added to warn developers when they are using CSS selectors ending with generic HTML tags.
This has been added because of performance reasons; we've noticed some extensions had "Recalculate Styles" events during their loading process caused by such CSS selectors, which can spike the CPU for hundreds of milliseconds. The fix to get rid of this warning is to replace all instances of generic HTML tags by classes and apply such classes to the targeted elements in your templates; for example : \HubsExtension\Deployments\Templates\TemplateViewer.html - <a href="#" data-bind="text: templateTab.title, css: templateTab.css, click: templateClick"></a> - <a href="#" data-bind="text: parametersTab.title, css: parametersTab.css, click: parametersClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: templateTab.title, css: templateTab.css, click: templateClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: parametersTab.title, css: parametersTab.css, click: parametersClick"></a> <!-- ko if: showLanguageOptions() --> - <a href="#" data-bind="text: cliTab.title, css: cliTab.css, click: cliClick"></a> - <a href="#" data-bind="text: cli2Tab.title, css: cli2Tab.css, click: cli2Click"></a> - <a href="#" data-bind="text: powershellTab.title, css: powershellTab.css, click: powershellClick"></a> - <a href="#" data-bind="text: dotNetTab.title, css: dotNetTab.css, click: dotNetClick"></a> - <a href="#" data-bind="text: rubyTab.title, css: rubyTab.css, click: rubyClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: cliTab.title, css: cliTab.css, click: cliClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: cli2Tab.title, css: cli2Tab.css, click: cli2Click"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: powershellTab.title, css: powershellTab.css, click: powershellClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: dotNetTab.title, css: dotNetTab.css, click: dotNetClick"></a> + <a class="ext-hubs-tabssection-tab" href="#" data-bind="text: rubyTab.title, css: rubyTab.css, click: rubyClick"></a> \HubsExtension\Deployments\TemplateViewer.css - .ext-hubs-tabssection a { + .ext-hubs-tabssection-tab { padding: 4px 10px 8px; text-decoration: none; display: inline-block; |
1667478 | [Hosting Service] Add support for creating removeFriendlyName templates in ContentUnbundler The Content Unbundler/Express V2 Deployment Template Generator has been updated to support generating templates to remove friendly names from Hosting Service deployments. In order to support this feature, the friendlyname template file names were renamed to specify the action they were performing (SetFriendlyName vs RemoveFriendlyName). EG: Old friendlyname template file name: Test.RolloutSpec.friendlyname1.json New friendlyname template file name(s): Test.RolloutSpec.RemoveFriendlyName.friendlyname1.json Test.RolloutSpec.SetFriendlyName.friendlyname1.json |
1652963 | Remove Fx/Internal modules The portal modules under "Fx/Internal" have been removed. These modules are internal details of the portal that extensions should not use. Extensions using these internal modules will no longer compile. |
1633894 | Upgrade PortalFx.TypeScript package to exclude ambient length property from .d.ts and avoid scoping issues when converting from var to let/const With JavaScript in a browser, properties of the Window object are ambiently available in the global context. One such property is length, a common variable name used in many other contexts. This behavior can introduce bugs when converting from var to let/const. In the following example code, the scope of the length variable used by the for loop is hoisted by JavaScript so it is visible to the entire function: for (var i = 0, length = something ; i < length ; i++) { ... } doSomethingWith(length); Converting that code from var to let changes the scope of the length variable to just the for loop, meaning the subsequent use of length references Window.length instead (which will have the value 0 in extension IFRAMEs): for (let i = 0 ; length = something ; i < length ; i++) { ... } doSomethingWith(length); To avoid bugs like this, we have removed the ambient definition of length from TypeScript's definition files in order to generate a compile error in the code above. To fix the new error when converting code, change the scope of the length variable as follows: const length = something; for (let i = 0 ; i < length ; i++) { ... } doSomethingWith(length); |
1579900 | [Uservoice] Set multiple ranges for DateTime picker i.e.) dateTimePickerViewModel.enabledDateTimeRange() gets a compile error. Now the "enabledDateTimeRange" can be both KnockoutObservable<MsPortalFx.DateUtil.DateTimeRange> and KnockoutObservableArray<MsPortalFx.DateUtil.DateTimeRange>. To resolve the compile error for exising code, explicitly cast the type of the "enabledDateTimeRange()". i.e.) (<MsPortalFx.DateUtil.DateTimeRange>dateTimePickerViewModel.enabledDateTimeRange()) |
1577034 | [Essentials] Essentials' Promises should be typed as Q.Promise instead of FxBase.PromiseV If you encounter compile errors using the Promise returned from 'foobar', be aware that the Promise type returned from 'foobar' has been changed to the Q Promise type. When you see these compile errors, update your extension code to use this returned Promise according to the Q Promise APIs all FxBase.PromiseV / Promise types are changed to Q.Promise |
1503823 | Portal/Shell Move the KnockoutComputed without lifetimeManger to unsafeAPI
|
8904521 | [Editor] suggestions and error pop ups are not visible for large typescript files in the editor
The enum value for "Jade" has been changed to "Pub" under MsPortalFx.ViewModels.Controls.Documents.Editor.ContentType. Additionally, the enum has now been changed from a regular enum to a const enum in order to reduce the JavaScript file size.
|
1526900 | Move Fx/Controls/Toolbar/MoveResourceToolbarButton to approved module path Fx/Controls/Toolbar.MoveResourceButton The MoveResourceToolbarButton module has been moved. Update any imports of "Fx/Controls/Toolbar/MoveResourceToolbarButton" to be "Fx/Controls/Toolbar.MoveResourceButton" |
1526899 | Move Fx/Base/Base.Net.Batch.ts to approved module path Fx/Net.Batch.ts The Base.Net.Batch module has been moved. Update any imports of "Fx/Base/Base.Net.Batch" to be "Fx/Net.Batch" |
1512165 | [SDK] Add build check so that extensions get an error when the framework dll is included in extension A build error has been added when extensions directly reference to Microsoft.Portal.Framework.Client.dll. This assembly should not be referenced directly by extensions and should be removed. The TypeScript Definitions for Microsoft.Portal.Framework.Client.dll are shipped in the Microsoft.Portal.Tools NuGet package. and exist under /Client/Definition/Fx.d.ts. If you have a scenario where you need Microsoft.Portal.Framework.Client.dll please let us know. Microsoft.Portal.Tools.targets target named CheckTypeScriptToolsVersion has been renamed to ExtensionConfigHealthChecks. if you have and explicit override this then you will need to also change the name. |
10234363 | Specify TypeConverter for AppRelativePath A TypeConverter has been added to the AppRelativePath type. This changes will the way objects of that type are serialized and deserialized. |
10233552 | ICM 46833682: [parseResourceDescriptor] API caches results - so if result is modified it results in
Background: Performance background: In many blade open, paresResourceDescriptor is been call about 3-6x time per resource ID. For example, this parser been executed 4500 times when open a VM on a customer with 400 virtual machine. |
10227953 | _addProperty method of the Properties Part ViewModel is inefficient Extensions using the _addProperty method of the Properties Part ViewModel must switch to setProperties method. |