fix: fix extension e2e flow (#35589)

Co-authored-by: Ville Brofeldt <v_brofeldt@apple.com>
This commit is contained in:
Ville Brofeldt
2025-10-11 11:31:44 -07:00
committed by GitHub
parent c38ba1daa8
commit 9d1d396a9b
7 changed files with 117 additions and 5 deletions

View File

@@ -0,0 +1 @@
print("{{ name }} extension registered")

View File

@@ -14,7 +14,7 @@
"license": "{{ license }}",
"description": "",
"peerDependencies": {
"@apache-superset/core": "file:../../../superset-frontend/packages/superset-core",
"@apache-superset/core": "*",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},

View File

@@ -0,0 +1,13 @@
import React from "react";
import { core } from "@apache-superset/core";
export const activate = (context: core.ExtensionContext) => {
context.disposables.push(
core.registerViewProvider("{{ id }}.example", () => <p>{{ name }}</p>)
);
console.log("{{ name }} extension activated");
};
export const deactivate = () => {
console.log("{{ name }} extension deactivated");
};

View File

@@ -0,0 +1,13 @@
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"moduleResolution": "node10",
"jsx": "react",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src"]
}

View File

@@ -0,0 +1,67 @@
const path = require("path");
const { ModuleFederationPlugin } = require("webpack").container;
const packageConfig = require("./package");
module.exports = (env, argv) => {
const isProd = argv.mode === "production";
return {
entry: isProd ? {} : "./src/index.tsx",
mode: isProd ? "production" : "development",
devServer: {
port: 3000,
headers: {
"Access-Control-Allow-Origin": "*",
},
},
output: {
clean: true,
filename: isProd ? undefined : "[name].[contenthash].js",
chunkFilename: "[name].[contenthash].js",
path: path.resolve(__dirname, "dist"),
publicPath: `/api/v1/extensions/${packageConfig.name}/`,
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".jsx"],
},
externalsType: "window",
externals: {
"@apache-superset/core": "superset",
},
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
],
},
plugins: [
new ModuleFederationPlugin({
name: "{{ id }}",
filename: "remoteEntry.[contenthash].js",
exposes: {
"./index": "./src/index.tsx",
},
shared: {
react: {
singleton: true,
requiredVersion: packageConfig.peerDependencies.react,
import: false,
},
"react-dom": {
singleton: true,
requiredVersion: packageConfig.peerDependencies["react-dom"],
import: false,
},
antd: {
singleton: true,
requiredVersion: packageConfig.peerDependencies["antd"],
import: false,
},
},
}),
],
};
};