From 82ce4600b4782a4af70ff19bebd1b7d9a667da83 Mon Sep 17 00:00:00 2001 From: "Nichols, Kieran" Date: Mon, 3 Jun 2024 12:09:18 -0400 Subject: [PATCH 1/2] feat: update CEM analyzer to run from root of project, and rename "styles" directory in package format to "sass" --- config/schema.json | 5 +++++ src/commands/build/build-command-utils.ts | 13 +++++++------ src/core/definitions.ts | 1 + src/utils/manifest-utils.ts | 6 +++--- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/config/schema.json b/config/schema.json index 02888eb..a450c34 100644 --- a/config/schema.json +++ b/config/schema.json @@ -84,6 +84,11 @@ "type": "boolean", "description": "Disables automatic generation of the custom elements manifest as part of the build.", "default": "false" + }, + "outputPath": { + "type": "string", + "description": "The path to output the custom elements manifest to. This is relative to the project root.", + "default": "dist/cem" } } }, diff --git a/src/commands/build/build-command-utils.ts b/src/commands/build/build-command-utils.ts index 1ba5f63..22be7db 100644 --- a/src/commands/build/build-command-utils.ts +++ b/src/commands/build/build-command-utils.ts @@ -102,7 +102,7 @@ export async function build({ // Compile TypeScript to JavaScript ESM (includes bare module specifiers) await runTask('Compiling sources...', async () => { - await compileTypeScriptTask(config, stagingSrcDir, stagingSrcDir, esmBuildDir, ts.ScriptTarget.ES2017, ts.ModuleKind.ES2015, true, typingsDir); + await compileTypeScriptTask(config, stagingSrcDir, stagingSrcDir, esmBuildDir, ts.ScriptTarget.ES2020, ts.ModuleKind.ES2015, true, typingsDir); }, quiet); // Get the full library entry point @@ -150,7 +150,7 @@ export async function build({ // Generates Custom Elements Manifest file. if (!config.context.customElementsManifestConfig?.disableAutoGeneration) { await runTask('Generating custom elements manifest...', async () => { - await generateCustomElementsManifest(config.context, stagingSrcDir, { quiet }); + await generateCustomElementsManifest(config.context, config.context.paths.rootDir, { outDir: 'dist/cem', quiet }); }); } } @@ -170,7 +170,7 @@ export async function createDistributionPackage({ const releaseRootDir = join(config.paths.distReleaseDir, packageJson.name); const releaseDistDir = join(releaseRootDir, 'dist'); const releaseEsmDir = join(releaseRootDir, 'esm'); - const releaseStylesDir = join(releaseRootDir, 'styles'); + const releaseSassDir = join(releaseRootDir, 'sass'); const releaseDistEsmDir = join(releaseDistDir, 'esm'); const releaseTypingsDir = releaseEsmDir; const buildEsmDir = join(buildOutputDir, 'esm'); @@ -179,6 +179,7 @@ export async function createDistributionPackage({ const buildSrcDir = join(buildOutputDir, 'src'); const esbuildOutputDir = join(buildOutputDir, 'esbuild'); const bundleOutputDir = join(buildOutputDir, 'bundle'); + const customElementsOutputDir = join(config.paths.rootDir, config.context.customElementsManifestConfig.outputPath ?? 'dist/cem'); // Clean previous release build await deleteDir(config.paths.distReleaseDir); @@ -188,7 +189,7 @@ export async function createDistributionPackage({ await mkdirp(releaseDistDir); await mkdirp(releaseEsmDir); await mkdirp(releaseDistEsmDir); - await mkdirp(releaseStylesDir); + await mkdirp(releaseSassDir); await mkdirp(releaseTypingsDir); // Append license headers to all files in the package @@ -197,14 +198,14 @@ export async function createDistributionPackage({ // Copy files from build output to the package structure const customElementsFiles = config.context.customElementsManifestConfig?.disableAutoGeneration ? [] - : [{ path: join(buildSrcDir, 'custom-elements.json'), rootPath: buildSrcDir, outputPath: releaseRootDir }]; + : [{ path: join(customElementsOutputDir, 'custom-elements.json'), rootPath: customElementsOutputDir, outputPath: releaseRootDir }]; const fileConfigs: IFileCopyConfig[] = [ { path: join(buildEsmDir, '**/*.js*'), rootPath: buildEsmDir, outputPath: releaseEsmDir }, { path: join(esbuildOutputDir, '**/*.js*'), rootPath: esbuildOutputDir, outputPath: releaseDistEsmDir }, { path: join(bundleOutputDir, '**/*.js*'), rootPath: bundleOutputDir, outputPath: releaseDistDir }, { path: join(buildTypingsDir, '**/*.d.ts'), rootPath: buildTypingsDir, outputPath: releaseTypingsDir }, { path: join(buildCssDir, '**/*.css'), rootPath: buildCssDir, outputPath: releaseDistDir }, - { path: join(buildSrcDir, '**/*.scss'), rootPath: buildSrcDir, outputPath: releaseStylesDir }, + { path: join(buildSrcDir, '**/*.scss'), rootPath: buildSrcDir, outputPath: releaseSassDir }, { path: join(projectRootDir, 'README.md'), rootPath: projectRootDir, outputPath: releaseRootDir }, { path: join(projectRootDir, 'LICENSE'), rootPath: projectRootDir, outputPath: releaseRootDir }, ...customElementsFiles diff --git a/src/core/definitions.ts b/src/core/definitions.ts index 8ebce26..d674d5e 100644 --- a/src/core/definitions.ts +++ b/src/core/definitions.ts @@ -37,6 +37,7 @@ export interface IProjectConfig { export interface ICustomElementsManifestConfig { configFileName?: string; disableAutoGeneration?: boolean; + outputPath?: string; } export interface IProjectLicenseConfig { diff --git a/src/utils/manifest-utils.ts b/src/utils/manifest-utils.ts index bce58b7..b3dee7f 100644 --- a/src/utils/manifest-utils.ts +++ b/src/utils/manifest-utils.ts @@ -10,7 +10,7 @@ export interface IGenerateCustomElementsManifestOptions { export async function generateCustomElementsManifest( projectConfig: IProjectConfig, - srcDir: string, + cwd: string, { configFileName, outDir, quiet = true }: IGenerateCustomElementsManifestOptions = {} ): Promise { let cmd = 'npx custom-elements-manifest analyze'; @@ -23,8 +23,8 @@ export async function generateCustomElementsManifest( } if (outDir) { - cmd += ` --outdir ${cpath.relative(srcDir, outDir)}`; + cmd += ` --outdir ${cpath.relative(cwd, outDir)}`; } - return await runCommand(cmd, srcDir, !quiet); + return await runCommand(cmd, cwd, !quiet); } From 0d4ecda0c131ab5f2d6cc65fc3c24c2269a0d242 Mon Sep 17 00:00:00 2001 From: "Nichols, Kieran" Date: Mon, 3 Jun 2024 12:16:12 -0400 Subject: [PATCH 2/2] chore: set default output dir for CEM and allow for configuration --- src/commands/build/build-command-utils.ts | 3 ++- src/constants.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/commands/build/build-command-utils.ts b/src/commands/build/build-command-utils.ts index 22be7db..a0d3882 100644 --- a/src/commands/build/build-command-utils.ts +++ b/src/commands/build/build-command-utils.ts @@ -150,7 +150,8 @@ export async function build({ // Generates Custom Elements Manifest file. if (!config.context.customElementsManifestConfig?.disableAutoGeneration) { await runTask('Generating custom elements manifest...', async () => { - await generateCustomElementsManifest(config.context, config.context.paths.rootDir, { outDir: 'dist/cem', quiet }); + const outDir = config.context.customElementsManifestConfig.outputPath; + await generateCustomElementsManifest(config.context, config.context.paths.rootDir, { outDir, quiet }); }); } } diff --git a/src/constants.ts b/src/constants.ts index d7e43a6..07822f2 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -36,7 +36,9 @@ export const DEFAULT_PROJECT_CONFIG: IProjectConfig = { distributionBundleName: 'lib.js' }, packageConfig: {}, - customElementsManifestConfig: {}, + customElementsManifestConfig: { + outputPath: 'dist/cem' + }, karma: {}, paths: { rootDir: '.',