From 3aed458f3d79ea64f1d89e8380a64b1d49dbc0a6 Mon Sep 17 00:00:00 2001 From: Martin Dragnev Date: Mon, 7 Apr 2025 16:53:50 +0300 Subject: [PATCH] fix(WC): update themes import paths to licensed version --- packages/core/update/Update.ts | 38 ++++++++++++++++++++++-- spec/unit/update-spec.ts | 54 ++++++++++++++++++++++++++++++---- 2 files changed, 85 insertions(+), 7 deletions(-) diff --git a/packages/core/update/Update.ts b/packages/core/update/Update.ts index 0e61eca7f..5b25396f4 100644 --- a/packages/core/update/Update.ts +++ b/packages/core/update/Update.ts @@ -13,6 +13,7 @@ export async function updateWorkspace(rootPath: string): Promise { let guideLink = ""; let logicFilesExtension = ""; let styleExtensions = []; + let shouldUpgradeHTML = false; const config = ProjectConfig.getConfig(); const framework = config.project.framework; @@ -31,6 +32,7 @@ export async function updateWorkspace(rootPath: string): Promise { case "webcomponents": guideLink = "https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/general-licensing"; logicFilesExtension = "ts"; + shouldUpgradeHTML = true; break; default: break; @@ -61,8 +63,16 @@ export async function updateWorkspace(rootPath: string): Promise { const logicFiles = []; const styleFiles = []; const pkgJsonFiles = []; + const htmlFiles = []; pkgJsonFiles.push(...fs.glob(rootPath, `package.json`, ['node_modules', 'dist'])); + if (shouldUpgradeHTML) { + const filePaths = fs.glob(rootPath, `*.html`, ['node_modules', 'dist']); + if (filePaths && filePaths.length > 0) { + htmlFiles.push(...filePaths); + } + } + let workspaceConfig = null; switch (framework.toLowerCase()) { case "angular": @@ -106,6 +116,9 @@ export async function updateWorkspace(rootPath: string): Promise { } updateFileImports(logicFiles, styleFiles, upgradeable, fs); + if (shouldUpgradeHTML) { + updateHTMLImports(htmlFiles, upgradeable, fs); + } updatePackageJsonFiles(pkgJsonFiles, upgradeable, fs); createNpmrc(rootPath, fs); updateWorkflows(fs); @@ -149,8 +162,11 @@ function updateFileImports( let fileChange = false; for (const packageDef of packageDefs) { if (fileContent.includes(packageDef.trial)) { - const newContent = updateFileContent(fileContent, - createExpressions(RegularExpressionType.LOGIC, packageDef.trial), packageDef.licensed); + // Because when including a theme inside a WC render method we need to update its import path too #1386 + const regExpressions = [...createExpressions(RegularExpressionType.LOGIC, packageDef.trial), + ...createExpressions(RegularExpressionType.STYLE, packageDef.trial) + ] + const newContent = updateFileContent(fileContent, regExpressions, packageDef.licensed); fileChange = fileContent !== newContent; fileContent = newContent; } @@ -231,3 +247,21 @@ function createNpmrc( fs.writeFile(npmrcPath, fileContent); } } + +function updateHTMLImports(htmlFiles: string[], packageDefs: PackageDefinition[], fs: IFileSystem): void { + for (const file of htmlFiles) { + let fileContent = fs.readFile(file); + let fileChange = false; + for (const packageDef of packageDefs) { + if (fileContent.includes(packageDef.trial)) { + const newContent = updateFileContent(fileContent, + createExpressions(RegularExpressionType.STYLE, packageDef.trial), packageDef.licensed); + fileChange = fileContent !== newContent; + fileContent = newContent; + } + } + if (fileChange) { + fs.writeFile(file, fileContent); + } + } +} diff --git a/spec/unit/update-spec.ts b/spec/unit/update-spec.ts index 889c1fead..3ce6dbf44 100644 --- a/spec/unit/update-spec.ts +++ b/spec/unit/update-spec.ts @@ -806,6 +806,7 @@ export default function Home() { (fsSpy.fileExists as jasmine.Spy).and.returnValue(true); (fsSpy.glob as jasmine.Spy).and.returnValues // per workspace ([ "package.json" ], // root package.json + [], //index.html [], // logic files [ "./project/package.json" ]); // inner package.json files (fsSpy.readFile as jasmine.Spy).and.callFake((filePath: string) => { @@ -827,7 +828,7 @@ export default function Home() { } })); expect(fsSpy.writeFile).toHaveBeenCalledTimes(2); - expect(fsSpy.glob).toHaveBeenCalledTimes(3); + expect(fsSpy.glob).toHaveBeenCalledTimes(4); }); it("Should update import paths in files correctly", async () => { @@ -839,6 +840,7 @@ export default function Home() { "dependencies": { "igniteui-webcomponents": "^4.7.0", "igniteui-webcomponents-core": "^4.7.0", + "igniteui-webcomponents-grids": "^4.7.0", "igniteui-dockmanager": "^1.0.0", "some-package": "^0.0.0" } @@ -849,6 +851,7 @@ export default function Home() { "dependencies": { "@infragistics/igniteui-dockmanager": "^1.0.0", "@infragistics/igniteui-webcomponents-core": "^4.7.0", + "@infragistics/igniteui-webcomponents-grids": "^4.7.0", "igniteui-webcomponents": "^4.7.0", "some-package": "^0.0.0" } @@ -874,7 +877,8 @@ import { ModuleManager } from '@infragistics/igniteui-webcomponents-core'; export default class App extends LitElement { const title = 'igniteui-webcomponents example'; -}`}, { +}`}, +{ path: ".github/workflows/node.js.yml", content: `# start content @@ -903,9 +907,48 @@ export default class App extends LitElement { - run: echo "//packages.infragistics.com/npm/js-licensed/:always-auth=true" >> ~/.npmrc - run: npm i # replace with 'npm ci' after committing lock file from first install # end content -`}]; +`}, +{ + path: "index.html", + content: + ` + + + + + Ignite UI for Web Components + + + + + + + + + + `, + expected: + ` + + + + + Ignite UI for Web Components + + + + + + + + + + ` + +},]; (fsSpy.glob as jasmine.Spy).and.returnValues // per workspace ([ "package.json" ], // root package.json + ["index.html"], // html file ["src/app.ts"], // logic files []); // inner package.json files (fsSpy.readFile as jasmine.Spy).and.callFake((filePath: string) => { @@ -921,7 +964,7 @@ export default class App extends LitElement { for (const fileEntry of mockFileArray) { expect((fsSpy.writeFile as jasmine.Spy)).toHaveBeenCalledWith(fileEntry.path, fileEntry.expected); } - expect(fsSpy.glob).toHaveBeenCalledTimes(3); + expect(fsSpy.glob).toHaveBeenCalledTimes(4); }); it("Should update package.json files from workspaces", async () => { @@ -1012,6 +1055,7 @@ export default class App extends LitElement { (fsSpy.fileExists as jasmine.Spy).and.returnValue(true); (fsSpy.glob as jasmine.Spy).and.returnValues // per workspace ([ "package.json" ], // root package.json + [], //index.html [], // projectA logic files [ "./projectA/package.json" ], // projectA package.json [], // projectB logic files @@ -1031,7 +1075,7 @@ export default class App extends LitElement { for (const fileEntry of mockFileArray) { expect((fsSpy.writeFile as jasmine.Spy)).toHaveBeenCalledWith(fileEntry.path, fileEntry.expected); } - expect(fsSpy.glob).toHaveBeenCalledTimes(5); + expect(fsSpy.glob).toHaveBeenCalledTimes(6); }); }); });