feat: Enhance JSBundle Api to declare auxiliary asset files required for extending components (#6308)
feat: add support for auxiliary asset files to jsBundle Signed-off-by: lingbo <lingbo@lingbohome.com>
This commit is contained in:
@@ -74,6 +74,24 @@ func (s *jsBundle) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if jsBundle.Status.State == extensionsv1alpha1.StateAvailable && jsBundle.Spec.Assets.Style != nil &&
|
||||
jsBundle.Spec.Assets.Style.Link == requestInfo.Path {
|
||||
s.rawFromRemote(jsBundle.Spec.Assets.Style.Endpoint, w, req)
|
||||
return
|
||||
}
|
||||
|
||||
if jsBundle.Status.State == extensionsv1alpha1.StateAvailable && jsBundle.Spec.Assets.Files != nil {
|
||||
for _, file := range jsBundle.Spec.Assets.Files {
|
||||
if file.Link == requestInfo.Path {
|
||||
if file.MIMEType != nil && *file.MIMEType != "" {
|
||||
w.Header().Set("Content-Type", *file.MIMEType)
|
||||
}
|
||||
s.rawFromRemote(file.Endpoint, w, req)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
s.next.ServeHTTP(w, req)
|
||||
}
|
||||
|
||||
@@ -77,7 +77,19 @@ func (r *JSBundleWebhook) validateJSBundle(ctx context.Context, jsBundle *extens
|
||||
}
|
||||
extensionName := jsBundle.Labels[v1alpha1.ExtensionReferenceLabel]
|
||||
if extensionName != "" && !strings.HasPrefix(jsBundle.Status.Link, fmt.Sprintf("/dist/%s", extensionName)) {
|
||||
return nil, fmt.Errorf("the prefix of status.link must be in the format /dist/%s/", extensionName)
|
||||
return nil, fmt.Errorf("the prefix of status.link must be in the format /dist/%s", extensionName)
|
||||
}
|
||||
|
||||
if jsBundle.Spec.Assets.Style != nil && extensionName != "" &&
|
||||
!strings.HasPrefix(jsBundle.Spec.Assets.Style.Link, fmt.Sprintf("/dist/%s", extensionName)) {
|
||||
return nil, fmt.Errorf("the prefix of assets style.link with %s must be in the format /dist/%s", jsBundle.Spec.Assets.Style.Link, extensionName)
|
||||
}
|
||||
if jsBundle.Spec.Assets.Files != nil && extensionName != "" {
|
||||
for _, file := range jsBundle.Spec.Assets.Files {
|
||||
if !strings.HasPrefix(file.Link, fmt.Sprintf("/dist/%s", extensionName)) {
|
||||
return nil, fmt.Errorf("the prefix of assets file.link with %s must be in the format /dist/%s", file.Link, extensionName)
|
||||
}
|
||||
}
|
||||
}
|
||||
jsBundles := &extensionsv1alpha1.JSBundleList{}
|
||||
if err := r.Client.List(ctx, jsBundles, &client.ListOptions{}); err != nil {
|
||||
@@ -88,6 +100,21 @@ func (r *JSBundleWebhook) validateJSBundle(ctx context.Context, jsBundle *extens
|
||||
item.Status.Link == jsBundle.Status.Link {
|
||||
return nil, fmt.Errorf("JSBundle %s is already exists", jsBundle.Status.Link)
|
||||
}
|
||||
|
||||
if jsBundle.Spec.Assets.Style != nil && item.Spec.Assets.Style != nil && item.Name != jsBundle.Name &&
|
||||
item.Spec.Assets.Style.Link == jsBundle.Spec.Assets.Style.Link {
|
||||
return nil, fmt.Errorf("JSBundle asstes style %s is already exists", jsBundle.Spec.Assets.Style.Link)
|
||||
}
|
||||
|
||||
if jsBundle.Spec.Assets.Files != nil && item.Spec.Assets.Files != nil && item.Name != jsBundle.Name {
|
||||
for _, assetsFile := range jsBundle.Spec.Assets.Files {
|
||||
for _, itemFile := range item.Spec.Assets.Files {
|
||||
if assetsFile.Link == itemFile.Link {
|
||||
return nil, fmt.Errorf("JSBundle asstes file %s is already exists", assetsFile.Link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user