diff --git a/gulpfile.js b/gulpfile.js index 7d6d5d1f8..0e9eaef01 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -19,6 +19,7 @@ const { generateLiveEditing } = require('igniteui-live-editing'); const argv = yargs(hideBin(process.argv)).parse(); const submodule = "igniteui-live-editing-samples"; +const mainPkgDevDeps = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8')).devDependencies; gulp.task("generate-live-editing", async () => { var appDv = argv.appDv !== undefined && argv.appDv.toLowerCase().trim() === "true"; @@ -54,6 +55,38 @@ gulp.task("generate-live-editing", async () => { additionalSharedStyles: ["_variables.scss", "_app-layout.scss"] }) await generateLiveEditing(liveEditingOptions); + + const sharedJsonPath = path.resolve(liveEditingOptions.samplesDir, 'shared.json'); + if (fs.existsSync(sharedJsonPath)) { + const sharedJson = JSON.parse(fs.readFileSync(sharedJsonPath, 'utf8')); + const stylesFile = sharedJson.files && sharedJson.files.find(f => f.path === 'src/styles.scss'); + if (stylesFile) { + const stylesWithTailwind = stylesFile.content.includes('@import "tailwindcss"') + ? stylesFile.content + : stylesFile.content.replace(/((?:@use [^\n]+\n)+)/, '$1@import "tailwindcss";\n'); + stylesFile.content = stylesFile.content.replace(/@import ["']tailwindcss["'];?\r?\n?/g, ''); + fs.writeFileSync(sharedJsonPath, JSON.stringify(sharedJson)); + + const samplesDir = liveEditingOptions.samplesDir; + fs.readdirSync(samplesDir) + .filter(f => f.endsWith('.json') && f !== 'shared.json' && f !== 'meta.json') + .forEach(f => { + const samplePath = path.join(samplesDir, f); + const sample = JSON.parse(fs.readFileSync(samplePath, 'utf8')); + const deps = JSON.parse(sample.sampleDependencies || '{}'); + if (deps['tailwindcss']) { + const existing = sample.sampleFiles.findIndex(sf => sf.path === 'src/styles.scss'); + const styleEntry = { path: 'src/styles.scss', hasRelativeAssetsUrls: false, content: stylesWithTailwind }; + if (existing !== -1) { + sample.sampleFiles[existing] = styleEntry; + } else { + sample.sampleFiles.push(styleEntry); + } + fs.writeFileSync(samplePath, JSON.stringify(sample)); + } + }); + } + } }); gulp.task("overwrite-package-json", (done) => { @@ -116,8 +149,15 @@ const processApp = (projectPath, dest, directoriesToExclude) => { "path": "package.json", "hasRelativeAssetsUrls": false, "content": JSON.stringify({ - "dependencies": JSON.parse(jsonObj.sampleDependencies), - "devDependencies": sharedJson.devDependencies + "name": "example-app", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng serve", + "build": "node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng build" + }, + "dependencies": Object.fromEntries(Object.entries(JSON.parse(jsonObj.sampleDependencies)).map(([pkg, ver]) => [pkg, /^[\^~><=*]/.test(ver) ? ver : '^' + ver])), + "devDependencies": Object.fromEntries(Object.keys(sharedJson.devDependencies).map(pkg => [pkg, mainPkgDevDeps[pkg] || sharedJson.devDependencies[pkg]])) }, null, 2) } additionals.push(packageJson); @@ -153,6 +193,14 @@ const processApp = (projectPath, dest, directoriesToExclude) => { } else { sampleContent = sampleFile.content; } + if (sampleFile.path === 'src/styles.scss') { + const deps = JSON.parse(jsonObj.sampleDependencies); + if (deps['tailwindcss'] && !sampleContent.includes('@import "tailwindcss"')) { + sampleContent = sampleContent.replace(/((?:@use [^\n]+\n)+)/, '$1@import "tailwindcss";\n'); + } else if (!deps['tailwindcss']) { + sampleContent = sampleContent.replace(/@import ["']tailwindcss["'];?\r?\n?/g, ''); + } + } const paths = sampleFile.path.replace("./", "").split("/"); let tempPath = ""; paths.forEach(p => { diff --git a/package-lock.json b/package-lock.json index 0ace0a091..f5f3228aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "igniteui-dockmanager": "^1.17.0", "igniteui-grid-lite": "^0.6.0", "igniteui-i18n-resources": "^1.0.2", - "igniteui-live-editing": "^3.4.0", + "igniteui-live-editing": "file:../../igniteui-live-editing-0.0.1.tgz", "igniteui-webcomponents": "^7.0.0", "marked": "^17.0.1", "marked-shiki": "^1.2.1", @@ -2113,6 +2113,24 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@igniteui/angular-schematics/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@igniteui/angular-schematics/node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -2272,6 +2290,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@igniteui/angular-schematics/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@igniteui/angular-schematics/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -12073,9 +12107,9 @@ } }, "node_modules/igniteui-live-editing": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/igniteui-live-editing/-/igniteui-live-editing-3.4.0.tgz", - "integrity": "sha512-+SiEuHHkSP6fgTO4aA0kK4wjo6cNOdDqpEKspzE58A+3OE0Ldpd7x6xQ0ehR+xjsjgGG8QNXuBYWxB0hyulIDQ==", + "version": "0.0.1", + "resolved": "file:../../igniteui-live-editing-0.0.1.tgz", + "integrity": "sha512-4Eu87FIpUUHfMcPJQFyXc5Sf7QxAAmU8LtWonzk+O+915bLO/56GvTtqjzO1rtjSxtv0tNhP9rhWmHhjh6x9Jw==", "license": "MIT" }, "node_modules/igniteui-theming": { diff --git a/package.json b/package.json index df4a003f6..6a8e56678 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "igniteui-dockmanager": "^1.17.0", "igniteui-grid-lite": "^0.6.0", "igniteui-i18n-resources": "^1.0.2", - "igniteui-live-editing": "^3.4.0", + "igniteui-live-editing": "file:../../igniteui-live-editing-0.0.1.tgz", "igniteui-webcomponents": "^7.0.0", "marked": "^17.0.1", "marked-shiki": "^1.2.1",