Skip to content
Merged
39 changes: 38 additions & 1 deletion src/Umbraco.Web.UI.Client/devops/publish/cleanse-pkg.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { readFileSync, writeFileSync } from 'fs';
import { readFileSync, writeFileSync, existsSync } from 'fs';
import { join } from 'path';
import glob from 'tiny-glob'

console.log('[Prepublish] Cleansing package.json');

Expand All @@ -12,5 +14,40 @@ delete packageJson.devDependencies;
packageJson.peerDependencies = { ...packageJson.dependencies };
delete packageJson.dependencies;

// Iterate all workspaces and hoist the dependencies to the root package.json
const workspaces = packageJson.workspaces || [];
const workspacePromises = workspaces.map(async workspaceGlob => {
// Use glob to find the workspace path
const localWorkspace = workspaceGlob.replace(/\.\/src/, './dist-cms');
const workspacePaths = await glob(localWorkspace, { cwd: './', absolute: true });

workspacePaths.forEach(workspace => {
const workspacePackageFile = join(workspace, 'package.json');

// Ensure the workspace package.json exists
if (!existsSync(workspacePackageFile)) {
// If the package.json does not exist, log a warning and continue
console.warn(`No package.json found in workspace: ${workspace}`);
return;
}

const workspacePackageJson = JSON.parse(readFileSync(workspacePackageFile, 'utf8'));

// Move dependencies from the workspace to the root package.json
if (workspacePackageJson.dependencies) {
Object.entries(workspacePackageJson.dependencies).forEach(([key, value]) => {
console.log('Hoisting dependency:', key, 'from workspace:', workspace, 'with version:', value);
packageJson.peerDependencies[key] = value;
});
}
})
});

// Wait for all workspace processing to complete
await Promise.all(workspacePromises);

// Remove the workspaces field from the root package.json
delete packageJson.workspaces;

// Write the package.json back to disk
writeFileSync(packageFile, JSON.stringify(packageJson, null, 2), 'utf8');
21 changes: 21 additions & 0 deletions src/Umbraco.Web.UI.Client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions src/Umbraco.Web.UI.Client/src/packages/segment/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "@umbraco-backoffice/segment",
"private": true,
"type": "module",
"scripts": {
"build": "vite build"
}
}
8 changes: 8 additions & 0 deletions src/Umbraco.Web.UI.Client/src/packages/settings/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "@umbraco-backoffice/settings",
"private": true,
"type": "module",
"scripts": {
"build": "vite build"
}
}
14 changes: 14 additions & 0 deletions src/Umbraco.Web.UI.Client/src/packages/settings/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { defineConfig } from 'vite';
import { rmSync } from 'fs';
import { getDefaultConfig } from '../../vite-config-base';

const dist = '../../../dist-cms/packages/settings';

// delete the unbundled dist folder
rmSync(dist, { recursive: true, force: true });

export default defineConfig({
...getDefaultConfig({
dist,
}),
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "@umbraco-backoffice/translation",
"private": true,
"type": "module",
"scripts": {
"build": "vite build"
}
}
Loading