@webiny/app-admin 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base/Admin.js +3 -1
- package/base/Admin.js.map +1 -1
- package/base/Base/LexicalPreset.js +4 -5
- package/base/Base/LexicalPreset.js.map +1 -1
- package/base/Base/Menus.js +28 -18
- package/base/Base/Menus.js.map +1 -1
- package/base/Base.js +1 -2
- package/base/Base.js.map +1 -1
- package/components/DeveloperMode/DeveloperMode.d.ts +11 -0
- package/components/DeveloperMode/DeveloperMode.js +17 -0
- package/components/DeveloperMode/DeveloperMode.js.map +1 -0
- package/components/DeveloperMode/index.d.ts +2 -0
- package/components/DeveloperMode/index.js +3 -0
- package/components/DeveloperMode/index.js.map +1 -0
- package/components/LexicalEditor/LexicalLinkForm.d.ts +6 -0
- package/components/LexicalEditor/LexicalLinkForm.js +92 -0
- package/components/LexicalEditor/LexicalLinkForm.js.map +1 -0
- package/components/LexicalEditor/index.d.ts +1 -0
- package/components/LexicalEditor/index.js +1 -0
- package/components/LexicalEditor/index.js.map +1 -1
- package/components/Permissions/Permissions.d.ts +1 -3
- package/components/Permissions/Permissions.js +37 -31
- package/components/Permissions/Permissions.js.map +1 -1
- package/components/SimpleForm/SimpleForm.d.ts +1 -1
- package/components/Wcp.d.ts +2 -0
- package/components/Wcp.js +8 -1
- package/components/Wcp.js.map +1 -1
- package/components/index.d.ts +4 -1
- package/components/index.js +3 -1
- package/components/index.js.map +1 -1
- package/config/AdminConfig/Security.d.ts +3 -0
- package/config/AdminConfig/Security.js +6 -0
- package/config/AdminConfig/Security.js.map +1 -0
- package/config/AdminConfig/SecurityPermissions.d.ts +17 -0
- package/config/AdminConfig/SecurityPermissions.js +31 -0
- package/config/AdminConfig/SecurityPermissions.js.map +1 -0
- package/config/AdminConfig.d.ts +8 -1
- package/config/AdminConfig.js +8 -3
- package/config/AdminConfig.js.map +1 -1
- package/domain/Identity.js +1 -1
- package/domain/Identity.js.map +1 -1
- package/exports/admin/{buildParams.js → build-params.js} +1 -1
- package/exports/admin/build-params.js.map +1 -0
- package/exports/admin/form.d.ts +11 -0
- package/exports/admin/form.js +12 -0
- package/exports/admin/form.js.map +1 -0
- package/exports/admin/ui.d.ts +1 -0
- package/exports/admin/ui.js +1 -0
- package/exports/admin/ui.js.map +1 -1
- package/exports/admin.d.ts +4 -0
- package/exports/admin.js +4 -0
- package/exports/admin.js.map +1 -1
- package/features/wcp/ReactLicense.d.ts +1 -0
- package/features/wcp/ReactLicense.js +3 -0
- package/features/wcp/ReactLicense.js.map +1 -1
- package/index.d.ts +2 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/package.json +26 -29
- package/permissions/PermissionRenderer.d.ts +6 -0
- package/permissions/PermissionRenderer.js +219 -0
- package/permissions/PermissionRenderer.js.map +1 -0
- package/permissions/PermissionValueContext.d.ts +11 -0
- package/permissions/PermissionValueContext.js +23 -0
- package/permissions/PermissionValueContext.js.map +1 -0
- package/permissions/createHasPermission.d.ts +3 -0
- package/permissions/createHasPermission.js +36 -0
- package/permissions/createHasPermission.js.map +1 -0
- package/permissions/createPermissionSchema.d.ts +2 -0
- package/permissions/createPermissionSchema.js +8 -0
- package/permissions/createPermissionSchema.js.map +1 -0
- package/permissions/index.d.ts +8 -0
- package/permissions/index.js +8 -0
- package/permissions/index.js.map +1 -0
- package/permissions/types.d.ts +242 -0
- package/permissions/types.js +3 -0
- package/permissions/types.js.map +1 -0
- package/permissions/usePermissionForm.d.ts +17 -0
- package/permissions/usePermissionForm.js +256 -0
- package/permissions/usePermissionForm.js.map +1 -0
- package/permissions/usePermissions.d.ts +3 -0
- package/permissions/usePermissions.js +180 -0
- package/permissions/usePermissions.js.map +1 -0
- package/types.d.ts +0 -7
- package/types.js.map +1 -1
- package/base/Base/LexicalPreset/LinkEditForm.d.ts +0 -6
- package/base/Base/LexicalPreset/LinkEditForm.js +0 -63
- package/base/Base/LexicalPreset/LinkEditForm.js.map +0 -1
- package/exports/admin/buildParams.js.map +0 -1
- package/extensions/AdminBuildParam.d.ts +0 -11
- package/extensions/AdminBuildParam.js +0 -184
- package/extensions/AdminBuildParam.js.map +0 -1
- package/extensions/AdminExtension.d.ts +0 -11
- package/extensions/AdminExtension.js +0 -105
- package/extensions/AdminExtension.js.map +0 -1
- package/extensions/index.d.ts +0 -23
- package/extensions/index.js +0 -7
- package/extensions/index.js.map +0 -1
- package/plugins/PermissionRendererPlugin.d.ts +0 -22
- package/plugins/PermissionRendererPlugin.js +0 -19
- package/plugins/PermissionRendererPlugin.js.map +0 -1
- /package/exports/admin/{buildParams.d.ts → build-params.d.ts} +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { useIdentity } from "../presentation/security/hooks/useIdentity.js";
|
|
2
|
+
// Module-level cache: schema -> identityId -> result.
|
|
3
|
+
const cache = new WeakMap();
|
|
4
|
+
function buildEntityMap(schema) {
|
|
5
|
+
const map = new Map();
|
|
6
|
+
for (const entity of schema.entities ?? []) {
|
|
7
|
+
const actions = new Set();
|
|
8
|
+
for (const action of entity.actions ?? []) {
|
|
9
|
+
actions.add(action.name);
|
|
10
|
+
}
|
|
11
|
+
map.set(entity.id, {
|
|
12
|
+
permission: entity.permission,
|
|
13
|
+
actions,
|
|
14
|
+
hasOwn: entity.scopes.includes("own")
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return map;
|
|
18
|
+
}
|
|
19
|
+
function getEntity(entityMap, entityId) {
|
|
20
|
+
const entity = entityMap.get(entityId);
|
|
21
|
+
if (!entity) {
|
|
22
|
+
throw new Error(`Unknown entity "${entityId}" in permission schema.`);
|
|
23
|
+
}
|
|
24
|
+
return entity;
|
|
25
|
+
}
|
|
26
|
+
function buildResult(schema, identity) {
|
|
27
|
+
const fullAccessName = `${schema.prefix}.*`;
|
|
28
|
+
const hasFullAccess = !!identity.getPermission(fullAccessName);
|
|
29
|
+
const entityMap = buildEntityMap(schema);
|
|
30
|
+
const canAccess = entityId => {
|
|
31
|
+
if (hasFullAccess) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
const entity = getEntity(entityMap, entityId);
|
|
35
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
36
|
+
return permissions.length > 0;
|
|
37
|
+
};
|
|
38
|
+
const canRead = entityId => {
|
|
39
|
+
if (hasFullAccess) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const entity = getEntity(entityMap, entityId);
|
|
43
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
44
|
+
if (!permissions.length) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return permissions.some(permission => {
|
|
48
|
+
if (typeof permission.rwd !== "string") {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return permission.rwd.includes("r");
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
const canCreate = entityId => {
|
|
55
|
+
if (hasFullAccess) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const entity = getEntity(entityMap, entityId);
|
|
59
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
60
|
+
if (!permissions.length) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return permissions.some(permission => {
|
|
64
|
+
if (typeof permission.rwd !== "string") {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return permission.rwd.includes("w");
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const canEdit = (entityId, item) => {
|
|
71
|
+
if (hasFullAccess) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const entity = getEntity(entityMap, entityId);
|
|
75
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
76
|
+
if (!permissions.length) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return permissions.some(permission => {
|
|
80
|
+
if (permission.own) {
|
|
81
|
+
if (!item?.createdBy) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return item.createdBy.id === identity.id;
|
|
85
|
+
}
|
|
86
|
+
if (typeof permission.rwd !== "string") {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
return permission.rwd.includes("w");
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const canDelete = (entityId, item) => {
|
|
93
|
+
if (hasFullAccess) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
const entity = getEntity(entityMap, entityId);
|
|
97
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
98
|
+
if (!permissions.length) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return permissions.some(permission => {
|
|
102
|
+
if (permission.own) {
|
|
103
|
+
return item?.createdBy?.id === identity.id;
|
|
104
|
+
}
|
|
105
|
+
if (typeof permission.rwd !== "string") {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return permission.rwd.includes("d");
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
const canPublish = entityId => {
|
|
112
|
+
if (hasFullAccess) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
const entity = getEntity(entityMap, entityId);
|
|
116
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
117
|
+
if (!permissions.length) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return permissions.some(permission => {
|
|
121
|
+
return permission.pw?.includes("p");
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
const canUnpublish = entityId => {
|
|
125
|
+
if (hasFullAccess) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
const entity = getEntity(entityMap, entityId);
|
|
129
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
130
|
+
if (!permissions.length) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return permissions.some(permission => {
|
|
134
|
+
return permission.pw?.includes("u");
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
const canAction = (action, entityId) => {
|
|
138
|
+
if (hasFullAccess) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
const entity = getEntity(entityMap, entityId);
|
|
142
|
+
const permissions = identity.getPermissions(entity.permission);
|
|
143
|
+
if (!permissions.length) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return permissions.some(permission => {
|
|
147
|
+
return permission[action] === true;
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
return {
|
|
151
|
+
canAccess,
|
|
152
|
+
canRead,
|
|
153
|
+
canCreate,
|
|
154
|
+
canEdit,
|
|
155
|
+
canDelete,
|
|
156
|
+
canPublish,
|
|
157
|
+
canUnpublish,
|
|
158
|
+
canAction
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function createUsePermissions(schema) {
|
|
162
|
+
return function usePermissions() {
|
|
163
|
+
const {
|
|
164
|
+
identity
|
|
165
|
+
} = useIdentity();
|
|
166
|
+
let byIdentityId = cache.get(schema);
|
|
167
|
+
if (!byIdentityId) {
|
|
168
|
+
byIdentityId = new Map();
|
|
169
|
+
cache.set(schema, byIdentityId);
|
|
170
|
+
}
|
|
171
|
+
let result = byIdentityId.get(identity.id);
|
|
172
|
+
if (!result) {
|
|
173
|
+
result = buildResult(schema, identity);
|
|
174
|
+
byIdentityId.set(identity.id, result);
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=usePermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useIdentity","cache","WeakMap","buildEntityMap","schema","map","Map","entity","entities","actions","Set","action","add","name","set","id","permission","hasOwn","scopes","includes","getEntity","entityMap","entityId","get","Error","buildResult","identity","fullAccessName","prefix","hasFullAccess","getPermission","canAccess","permissions","getPermissions","length","canRead","some","rwd","canCreate","canEdit","item","own","createdBy","canDelete","canPublish","pw","canUnpublish","canAction","createUsePermissions","usePermissions","byIdentityId","result"],"sources":["usePermissions.ts"],"sourcesContent":["import { useIdentity } from \"~/presentation/security/hooks/useIdentity.js\";\nimport type { Identity } from \"~/domain/Identity.js\";\nimport type { PermissionSchemaConfig } from \"./types.js\";\nimport type { OwnableItem } from \"./types.js\";\nimport type { UsePermissionsResult } from \"./types.js\";\n\ninterface EntityLookup {\n permission: string;\n actions: Set<string>;\n hasOwn: boolean;\n}\n\n// Module-level cache: schema -> identityId -> result.\nconst cache = new WeakMap<PermissionSchemaConfig, Map<string, UsePermissionsResult<any>>>();\n\nfunction buildEntityMap(schema: PermissionSchemaConfig): Map<string, EntityLookup> {\n const map = new Map<string, EntityLookup>();\n for (const entity of schema.entities ?? []) {\n const actions = new Set<string>();\n for (const action of entity.actions ?? []) {\n actions.add(action.name);\n }\n map.set(entity.id, {\n permission: entity.permission,\n actions,\n hasOwn: entity.scopes.includes(\"own\")\n });\n }\n return map;\n}\n\nfunction getEntity(entityMap: Map<string, EntityLookup>, entityId: string): EntityLookup {\n const entity = entityMap.get(entityId);\n if (!entity) {\n throw new Error(`Unknown entity \"${entityId}\" in permission schema.`);\n }\n return entity;\n}\n\nfunction buildResult<S extends PermissionSchemaConfig>(\n schema: S,\n identity: Identity\n): UsePermissionsResult<S> {\n const fullAccessName = `${schema.prefix}.*`;\n const hasFullAccess = !!identity.getPermission(fullAccessName);\n const entityMap = buildEntityMap(schema);\n\n const canAccess = (entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n return permissions.length > 0;\n };\n\n const canRead = (entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"r\");\n });\n };\n\n const canCreate = (entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n };\n\n const canEdit = (entityId: string, item?: OwnableItem): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (permission.own) {\n if (!item?.createdBy) {\n return true;\n }\n return item.createdBy.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"w\");\n });\n };\n\n const canDelete = (entityId: string, item?: OwnableItem): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n if (permission.own) {\n return item?.createdBy?.id === identity.id;\n }\n if (typeof permission.rwd !== \"string\") {\n return true;\n }\n return permission.rwd.includes(\"d\");\n });\n };\n\n const canPublish = (entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"p\");\n });\n };\n\n const canUnpublish = (entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission.pw?.includes(\"u\");\n });\n };\n\n const canAction = (action: string, entityId: string): boolean => {\n if (hasFullAccess) {\n return true;\n }\n const entity = getEntity(entityMap, entityId);\n const permissions = identity.getPermissions(entity.permission);\n if (!permissions.length) {\n return false;\n }\n return permissions.some(permission => {\n return permission[action] === true;\n });\n };\n\n return {\n canAccess,\n canRead,\n canCreate,\n canEdit,\n canDelete,\n canPublish,\n canUnpublish,\n canAction\n } as UsePermissionsResult<S>;\n}\n\nexport function createUsePermissions<const S extends PermissionSchemaConfig>(\n schema: S\n): () => UsePermissionsResult<S> {\n return function usePermissions(): UsePermissionsResult<S> {\n const { identity } = useIdentity();\n\n let byIdentityId = cache.get(schema);\n if (!byIdentityId) {\n byIdentityId = new Map();\n cache.set(schema, byIdentityId);\n }\n\n let result = byIdentityId.get(identity.id) as UsePermissionsResult<S> | undefined;\n if (!result) {\n result = buildResult(schema, identity);\n byIdentityId.set(identity.id, result as UsePermissionsResult<any>);\n }\n\n return result;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
package/types.d.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type { ReactElement } from "react";
|
|
2
|
-
import type { Plugin } from "@webiny/plugins/types.js";
|
|
3
1
|
import { Identity } from "./domain/Identity.js";
|
|
4
2
|
export type { Icon } from "./components/IconPicker/types.js";
|
|
5
|
-
export type AdminAppPermissionRendererPlugin = Plugin & {
|
|
6
|
-
type: "admin-app-permissions-renderer";
|
|
7
|
-
system?: boolean;
|
|
8
|
-
render(params: any): ReactElement;
|
|
9
|
-
};
|
|
10
3
|
export interface FileManagerSecurityPermission extends Identity.Permission {
|
|
11
4
|
rwd?: string;
|
|
12
5
|
own?: boolean;
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Identity } from \"~/domain/Identity.js\";\n\nexport type { Icon } from \"~/components/IconPicker/types.js\";\n\nexport interface FileManagerSecurityPermission extends Identity.Permission {\n rwd?: string;\n own?: boolean;\n}\n\nexport type ComponentWithChildren = React.ComponentType<{ children?: React.ReactNode }>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { FloatingLinkEditorPlugin } from "@webiny/lexical-editor";
|
|
3
|
-
type LinkEditForm = NonNullable<React.ComponentProps<typeof FloatingLinkEditorPlugin>["LinkEditForm"]>;
|
|
4
|
-
type LinkEditFormProps = React.ComponentProps<LinkEditForm>;
|
|
5
|
-
export declare const LinkEditForm: ({ linkData, onSave, onCancel }: LinkEditFormProps) => React.JSX.Element;
|
|
6
|
-
export {};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Button, Grid, Input, Switch, Text } from "@webiny/admin-ui";
|
|
3
|
-
import { Bind, Form } from "@webiny/form";
|
|
4
|
-
import { validation } from "@webiny/validation";
|
|
5
|
-
export const LinkEditForm = ({
|
|
6
|
-
linkData,
|
|
7
|
-
onSave,
|
|
8
|
-
onCancel
|
|
9
|
-
}) => {
|
|
10
|
-
const onSubmit = data => {
|
|
11
|
-
onSave(data);
|
|
12
|
-
};
|
|
13
|
-
return /*#__PURE__*/React.createElement(Form, {
|
|
14
|
-
data: linkData,
|
|
15
|
-
onSubmit: onSubmit
|
|
16
|
-
}, form => /*#__PURE__*/React.createElement("div", {
|
|
17
|
-
className: "p-md"
|
|
18
|
-
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
19
|
-
span: 12
|
|
20
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
21
|
-
size: "lg"
|
|
22
|
-
}, "Edit Link")), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
23
|
-
span: 12
|
|
24
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
25
|
-
name: "url",
|
|
26
|
-
validate: validation.create("url")
|
|
27
|
-
}, /*#__PURE__*/React.createElement(Input, {
|
|
28
|
-
label: "URL",
|
|
29
|
-
variant: "secondary"
|
|
30
|
-
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
31
|
-
span: 12
|
|
32
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
33
|
-
name: "alt"
|
|
34
|
-
}, /*#__PURE__*/React.createElement(Input, {
|
|
35
|
-
label: "Alt text",
|
|
36
|
-
variant: "secondary"
|
|
37
|
-
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
38
|
-
span: 12
|
|
39
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
40
|
-
name: "target"
|
|
41
|
-
}, ({
|
|
42
|
-
value,
|
|
43
|
-
onChange
|
|
44
|
-
}) => /*#__PURE__*/React.createElement(Switch, {
|
|
45
|
-
checked: value === "_blank",
|
|
46
|
-
label: "Open link in a new tab",
|
|
47
|
-
onChange: value => {
|
|
48
|
-
onChange(value === true ? "_blank" : null);
|
|
49
|
-
}
|
|
50
|
-
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
51
|
-
span: 12,
|
|
52
|
-
className: "flex justify-end gap-sm"
|
|
53
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
54
|
-
variant: "secondary",
|
|
55
|
-
text: `Cancel`,
|
|
56
|
-
onClick: onCancel
|
|
57
|
-
}), /*#__PURE__*/React.createElement(Button, {
|
|
58
|
-
text: `Save`,
|
|
59
|
-
onClick: e => form.submit(e)
|
|
60
|
-
})))));
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=LinkEditForm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Button","Grid","Input","Switch","Text","Bind","Form","validation","LinkEditForm","linkData","onSave","onCancel","onSubmit","data","createElement","form","className","Column","span","size","name","validate","create","label","variant","value","onChange","checked","text","onClick","e","submit"],"sources":["LinkEditForm.tsx"],"sourcesContent":["import React from \"react\";\nimport type { FloatingLinkEditorPlugin } from \"@webiny/lexical-editor\";\nimport { Button, Grid, Input, Switch, Text } from \"@webiny/admin-ui\";\nimport { Bind, Form } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\n\ntype LinkEditForm = NonNullable<\n React.ComponentProps<typeof FloatingLinkEditorPlugin>[\"LinkEditForm\"]\n>;\ntype LinkEditFormProps = React.ComponentProps<LinkEditForm>;\n\nexport const LinkEditForm = ({ linkData, onSave, onCancel }: LinkEditFormProps) => {\n const onSubmit = (data: LinkEditFormProps[\"linkData\"]) => {\n onSave(data);\n };\n\n return (\n <Form data={linkData} onSubmit={onSubmit}>\n {form => (\n <div className={\"p-md\"}>\n <Grid>\n <Grid.Column span={12}>\n <Text size={\"lg\"}>Edit Link</Text>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"url\"} validate={validation.create(\"url\")}>\n <Input label={\"URL\"} variant={\"secondary\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"alt\"}>\n <Input label={\"Alt text\"} variant={\"secondary\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"target\"}>\n {({ value, onChange }) => (\n <Switch\n checked={value === \"_blank\"}\n label={\"Open link in a new tab\"}\n onChange={value => {\n onChange(value === true ? \"_blank\" : null);\n }}\n />\n )}\n </Bind>\n </Grid.Column>\n <Grid.Column span={12} className={\"flex justify-end gap-sm\"}>\n <Button variant={\"secondary\"} text={`Cancel`} onClick={onCancel} />\n <Button text={`Save`} onClick={e => form.submit(e)} />\n </Grid.Column>\n </Grid>\n </div>\n )}\n </Form>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,MAAM,EAAEC,IAAI,QAAQ,kBAAkB;AACpE,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,UAAU,QAAQ,oBAAoB;AAO/C,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,MAAM;EAAEC;AAA4B,CAAC,KAAK;EAC/E,MAAMC,QAAQ,GAAIC,IAAmC,IAAK;IACtDH,MAAM,CAACG,IAAI,CAAC;EAChB,CAAC;EAED,oBACId,KAAA,CAAAe,aAAA,CAACR,IAAI;IAACO,IAAI,EAAEJ,QAAS;IAACG,QAAQ,EAAEA;EAAS,GACpCG,IAAI,iBACDhB,KAAA,CAAAe,aAAA;IAAKE,SAAS,EAAE;EAAO,gBACnBjB,KAAA,CAAAe,aAAA,CAACb,IAAI,qBACDF,KAAA,CAAAe,aAAA,CAACb,IAAI,CAACgB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBnB,KAAA,CAAAe,aAAA,CAACV,IAAI;IAACe,IAAI,EAAE;EAAK,GAAC,WAAe,CACxB,CAAC,eACdpB,KAAA,CAAAe,aAAA,CAACb,IAAI,CAACgB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBnB,KAAA,CAAAe,aAAA,CAACT,IAAI;IAACe,IAAI,EAAE,KAAM;IAACC,QAAQ,EAAEd,UAAU,CAACe,MAAM,CAAC,KAAK;EAAE,gBAClDvB,KAAA,CAAAe,aAAA,CAACZ,KAAK;IAACqB,KAAK,EAAE,KAAM;IAACC,OAAO,EAAE;EAAY,CAAE,CAC1C,CACG,CAAC,eACdzB,KAAA,CAAAe,aAAA,CAACb,IAAI,CAACgB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBnB,KAAA,CAAAe,aAAA,CAACT,IAAI;IAACe,IAAI,EAAE;EAAM,gBACdrB,KAAA,CAAAe,aAAA,CAACZ,KAAK;IAACqB,KAAK,EAAE,UAAW;IAACC,OAAO,EAAE;EAAY,CAAE,CAC/C,CACG,CAAC,eACdzB,KAAA,CAAAe,aAAA,CAACb,IAAI,CAACgB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBnB,KAAA,CAAAe,aAAA,CAACT,IAAI;IAACe,IAAI,EAAE;EAAS,GAChB,CAAC;IAAEK,KAAK;IAAEC;EAAS,CAAC,kBACjB3B,KAAA,CAAAe,aAAA,CAACX,MAAM;IACHwB,OAAO,EAAEF,KAAK,KAAK,QAAS;IAC5BF,KAAK,EAAE,wBAAyB;IAChCG,QAAQ,EAAED,KAAK,IAAI;MACfC,QAAQ,CAACD,KAAK,KAAK,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC9C;EAAE,CACL,CAEH,CACG,CAAC,eACd1B,KAAA,CAAAe,aAAA,CAACb,IAAI,CAACgB,MAAM;IAACC,IAAI,EAAE,EAAG;IAACF,SAAS,EAAE;EAA0B,gBACxDjB,KAAA,CAAAe,aAAA,CAACd,MAAM;IAACwB,OAAO,EAAE,WAAY;IAACI,IAAI,EAAE,QAAS;IAACC,OAAO,EAAElB;EAAS,CAAE,CAAC,eACnEZ,KAAA,CAAAe,aAAA,CAACd,MAAM;IAAC4B,IAAI,EAAE,MAAO;IAACC,OAAO,EAAEC,CAAC,IAAIf,IAAI,CAACgB,MAAM,CAACD,CAAC;EAAE,CAAE,CAC5C,CACX,CACL,CAEP,CAAC;AAEf,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["BuildParam","BuildParams"],"sources":["buildParams.ts"],"sourcesContent":["export { BuildParam, BuildParams } from \"~/features/buildParams/index.js\";\n"],"mappings":"AAAA,SAASA,UAAU,EAAEC,WAAW","ignoreList":[]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const AdminBuildParam: import("@webiny/project/defineExtension").ExtensionComponent<z.ZodObject<{
|
|
3
|
-
paramName: z.ZodString;
|
|
4
|
-
value: z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>, z.ZodArray<z.ZodAny, "many">, z.ZodNumber, z.ZodBoolean]>;
|
|
5
|
-
}, "strip", z.ZodTypeAny, {
|
|
6
|
-
value: string | number | boolean | any[] | Record<string, any>;
|
|
7
|
-
paramName: string;
|
|
8
|
-
}, {
|
|
9
|
-
value: string | number | boolean | any[] | Record<string, any>;
|
|
10
|
-
paramName: string;
|
|
11
|
-
}>>;
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { defineExtension } from "@webiny/project/defineExtension";
|
|
3
|
-
import crypto from "crypto";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import fs from "fs";
|
|
6
|
-
import { Node, Project } from "ts-morph";
|
|
7
|
-
async function generateBuildParamsFeature(buildParamsDir, ctx) {
|
|
8
|
-
const featureFilePath = path.join(buildParamsDir, "feature.ts");
|
|
9
|
-
|
|
10
|
-
// Get all BuildParam_*.ts files.
|
|
11
|
-
const files = fs.readdirSync(buildParamsDir).filter(f => f.startsWith("BuildParam_") && f.endsWith(".ts") && f !== "feature.ts");
|
|
12
|
-
|
|
13
|
-
// Generate imports and registrations.
|
|
14
|
-
const imports = files.map(file => {
|
|
15
|
-
const className = path.parse(file).name;
|
|
16
|
-
return `import ${className} from "./${className}.js";`;
|
|
17
|
-
}).join("\n");
|
|
18
|
-
const registrations = files.map(file => {
|
|
19
|
-
const className = path.parse(file).name;
|
|
20
|
-
return ` container.register(${className});`;
|
|
21
|
-
}).join("\n");
|
|
22
|
-
const featureContent = `import { createFeature } from "@webiny/feature/admin";
|
|
23
|
-
import { Container } from "@webiny/di";
|
|
24
|
-
${imports}
|
|
25
|
-
|
|
26
|
-
export const BuildParamsInternalFeature = createFeature({
|
|
27
|
-
name: "BuildParamsInternal",
|
|
28
|
-
register(container: Container) {
|
|
29
|
-
${registrations}
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
`;
|
|
33
|
-
fs.writeFileSync(featureFilePath, featureContent, "utf8");
|
|
34
|
-
|
|
35
|
-
// Now we need to update Extensions.tsx to use RegisterFeature with this feature.
|
|
36
|
-
await updateExtensionsTsx(ctx);
|
|
37
|
-
}
|
|
38
|
-
async function updateExtensionsTsx(ctx) {
|
|
39
|
-
const extensionsTsxFilePath = ctx.project.paths.workspaceFolder.join("apps", "admin", "src", "Extensions.tsx").toString();
|
|
40
|
-
const project = new Project();
|
|
41
|
-
project.addSourceFileAtPath(extensionsTsxFilePath);
|
|
42
|
-
const source = project.getSourceFileOrThrow(extensionsTsxFilePath);
|
|
43
|
-
|
|
44
|
-
// Check if we already have the imports.
|
|
45
|
-
const buildParamsFeatureImport = "./buildParams/feature.js";
|
|
46
|
-
const existingFeatureImport = source.getImportDeclaration(buildParamsFeatureImport);
|
|
47
|
-
if (!existingFeatureImport) {
|
|
48
|
-
let index = 1;
|
|
49
|
-
const importDeclarations = source.getImportDeclarations();
|
|
50
|
-
if (importDeclarations.length) {
|
|
51
|
-
const last = importDeclarations[importDeclarations.length - 1];
|
|
52
|
-
index = last.getChildIndex() + 1;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Add import for BuildParamsInternalFeature.
|
|
56
|
-
source.insertImportDeclaration(index, {
|
|
57
|
-
namedImports: ["BuildParamsInternalFeature"],
|
|
58
|
-
moduleSpecifier: buildParamsFeatureImport
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// Add import for BuildParamsFeature.
|
|
62
|
-
const buildParamsFeatureImportPath = "@webiny/app-admin";
|
|
63
|
-
const existingBuildParamsImport = source.getImportDeclaration(buildParamsFeatureImportPath);
|
|
64
|
-
if (!existingBuildParamsImport) {
|
|
65
|
-
source.insertImportDeclaration(index, {
|
|
66
|
-
namedImports: ["BuildParamsFeature"],
|
|
67
|
-
moduleSpecifier: buildParamsFeatureImportPath
|
|
68
|
-
});
|
|
69
|
-
} else {
|
|
70
|
-
// Add to existing import if BuildParamsFeature not already there.
|
|
71
|
-
const namedImports = existingBuildParamsImport.getNamedImports();
|
|
72
|
-
const hasBuildParamsFeature = namedImports.some(ni => ni.getName() === "BuildParamsFeature");
|
|
73
|
-
if (!hasBuildParamsFeature) {
|
|
74
|
-
existingBuildParamsImport.addNamedImport("BuildParamsFeature");
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Add import for RegisterFeature if not present.
|
|
79
|
-
const registerFeatureImportPath = "@webiny/app-admin";
|
|
80
|
-
const existingRegisterFeatureImport = source.getImportDeclaration(registerFeatureImportPath);
|
|
81
|
-
if (existingRegisterFeatureImport) {
|
|
82
|
-
const namedImports = existingRegisterFeatureImport.getNamedImports();
|
|
83
|
-
const hasRegisterFeature = namedImports.some(ni => ni.getName() === "RegisterFeature");
|
|
84
|
-
if (!hasRegisterFeature) {
|
|
85
|
-
existingRegisterFeatureImport.addNamedImport("RegisterFeature");
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
source.insertImportDeclaration(index, {
|
|
89
|
-
namedImports: ["RegisterFeature"],
|
|
90
|
-
moduleSpecifier: registerFeatureImportPath
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Now add <RegisterFeature> components to the Extensions component.
|
|
96
|
-
const extensionsIdentifier = source.getFirstDescendant(node => {
|
|
97
|
-
if (!Node.isIdentifier(node)) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
return node.getText() === "Extensions";
|
|
101
|
-
});
|
|
102
|
-
if (!extensionsIdentifier) {
|
|
103
|
-
throw new Error(`Could not find the "Extensions" React component in "${extensionsTsxFilePath}".`);
|
|
104
|
-
}
|
|
105
|
-
const extensionsArrowFn = extensionsIdentifier.getNextSibling(node => Node.isArrowFunction(node));
|
|
106
|
-
if (!extensionsArrowFn) {
|
|
107
|
-
throw new Error(`Could not find the "Extensions" React component arrow function.`);
|
|
108
|
-
}
|
|
109
|
-
const extensionsArrowFnFragment = extensionsArrowFn.getFirstDescendant(node => {
|
|
110
|
-
return Node.isJsxFragment(node);
|
|
111
|
-
});
|
|
112
|
-
if (!extensionsArrowFnFragment) {
|
|
113
|
-
throw new Error(`Could not find JSX fragment in Extensions component.`);
|
|
114
|
-
}
|
|
115
|
-
const currentContent = extensionsArrowFnFragment.getFullText().replace("<>", "").replace("</>", "").trim();
|
|
116
|
-
|
|
117
|
-
// Check if we already have the RegisterFeature components.
|
|
118
|
-
if (!currentContent.includes("BuildParamsFeature")) {
|
|
119
|
-
const newContent = `<><RegisterFeature feature={BuildParamsFeature} /><RegisterFeature feature={BuildParamsInternalFeature} />${currentContent}</>`;
|
|
120
|
-
extensionsArrowFnFragment.replaceWithText(newContent);
|
|
121
|
-
}
|
|
122
|
-
await source.save();
|
|
123
|
-
}
|
|
124
|
-
export const AdminBuildParam = defineExtension({
|
|
125
|
-
type: "Admin/BuildParam",
|
|
126
|
-
tags: {
|
|
127
|
-
runtimeContext: "app-build",
|
|
128
|
-
appName: "admin"
|
|
129
|
-
},
|
|
130
|
-
description: "Add build-time parameter to Admin app.",
|
|
131
|
-
multiple: true,
|
|
132
|
-
paramsSchema: () => {
|
|
133
|
-
return z.object({
|
|
134
|
-
paramName: z.string(),
|
|
135
|
-
value: z.union([z.string(), z.record(z.any()), z.array(z.any()), z.number(), z.boolean()])
|
|
136
|
-
});
|
|
137
|
-
},
|
|
138
|
-
async build(params, ctx) {
|
|
139
|
-
const buildParamsDir = ctx.project.paths.workspaceFolder.join("apps", "admin", "src", "buildParams").toString();
|
|
140
|
-
const {
|
|
141
|
-
paramName,
|
|
142
|
-
value
|
|
143
|
-
} = params;
|
|
144
|
-
|
|
145
|
-
// Serialize value to a TypeScript literal.
|
|
146
|
-
const valueStr = JSON.stringify(value, null, 4);
|
|
147
|
-
|
|
148
|
-
// Generate a unique class name based on the paramName.
|
|
149
|
-
const hash = crypto.createHash("sha256").update(paramName).digest("hex");
|
|
150
|
-
const className = `BuildParam_${hash.slice(-10)}`;
|
|
151
|
-
const fileName = `${className}.ts`;
|
|
152
|
-
const filePath = path.join(buildParamsDir, fileName);
|
|
153
|
-
|
|
154
|
-
// Ensure buildParams directory exists.
|
|
155
|
-
if (!fs.existsSync(buildParamsDir)) {
|
|
156
|
-
fs.mkdirSync(buildParamsDir, {
|
|
157
|
-
recursive: true
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Check if file already exists.
|
|
162
|
-
if (!fs.existsSync(filePath)) {
|
|
163
|
-
// Create the BuildParam implementation file.
|
|
164
|
-
const fileContent = `import { BuildParam } from "webiny/admin/buildParams";
|
|
165
|
-
|
|
166
|
-
class ${className} implements BuildParam.Interface {
|
|
167
|
-
key = "${paramName}";
|
|
168
|
-
value = ${valueStr};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export default BuildParam.createImplementation({
|
|
172
|
-
implementation: ${className},
|
|
173
|
-
dependencies: []
|
|
174
|
-
});
|
|
175
|
-
`;
|
|
176
|
-
fs.writeFileSync(filePath, fileContent, "utf8");
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Now we need to generate/update the feature file that imports all BuildParams.
|
|
180
|
-
await generateBuildParamsFeature(buildParamsDir, ctx);
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
//# sourceMappingURL=AdminBuildParam.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["z","defineExtension","crypto","path","fs","Node","Project","generateBuildParamsFeature","buildParamsDir","ctx","featureFilePath","join","files","readdirSync","filter","f","startsWith","endsWith","imports","map","file","className","parse","name","registrations","featureContent","writeFileSync","updateExtensionsTsx","extensionsTsxFilePath","project","paths","workspaceFolder","toString","addSourceFileAtPath","source","getSourceFileOrThrow","buildParamsFeatureImport","existingFeatureImport","getImportDeclaration","index","importDeclarations","getImportDeclarations","length","last","getChildIndex","insertImportDeclaration","namedImports","moduleSpecifier","buildParamsFeatureImportPath","existingBuildParamsImport","getNamedImports","hasBuildParamsFeature","some","ni","getName","addNamedImport","registerFeatureImportPath","existingRegisterFeatureImport","hasRegisterFeature","extensionsIdentifier","getFirstDescendant","node","isIdentifier","getText","Error","extensionsArrowFn","getNextSibling","isArrowFunction","extensionsArrowFnFragment","isJsxFragment","currentContent","getFullText","replace","trim","includes","newContent","replaceWithText","save","AdminBuildParam","type","tags","runtimeContext","appName","description","multiple","paramsSchema","object","paramName","string","value","union","record","any","array","number","boolean","build","params","valueStr","JSON","stringify","hash","createHash","update","digest","slice","fileName","filePath","existsSync","mkdirSync","recursive","fileContent"],"sources":["AdminBuildParam.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { defineExtension } from \"@webiny/project/defineExtension\";\nimport crypto from \"crypto\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { Node, Project } from \"ts-morph\";\n\nasync function generateBuildParamsFeature(buildParamsDir: string, ctx: any) {\n const featureFilePath = path.join(buildParamsDir, \"feature.ts\");\n\n // Get all BuildParam_*.ts files.\n const files = fs\n .readdirSync(buildParamsDir)\n .filter(f => f.startsWith(\"BuildParam_\") && f.endsWith(\".ts\") && f !== \"feature.ts\");\n\n // Generate imports and registrations.\n const imports = files\n .map(file => {\n const className = path.parse(file).name;\n return `import ${className} from \"./${className}.js\";`;\n })\n .join(\"\\n\");\n\n const registrations = files\n .map(file => {\n const className = path.parse(file).name;\n return ` container.register(${className});`;\n })\n .join(\"\\n\");\n\n const featureContent = `import { createFeature } from \"@webiny/feature/admin\";\nimport { Container } from \"@webiny/di\";\n${imports}\n\nexport const BuildParamsInternalFeature = createFeature({\n name: \"BuildParamsInternal\",\n register(container: Container) {\n${registrations}\n }\n});\n`;\n\n fs.writeFileSync(featureFilePath, featureContent, \"utf8\");\n\n // Now we need to update Extensions.tsx to use RegisterFeature with this feature.\n await updateExtensionsTsx(ctx);\n}\n\nasync function updateExtensionsTsx(ctx: any) {\n const extensionsTsxFilePath = ctx.project.paths.workspaceFolder\n .join(\"apps\", \"admin\", \"src\", \"Extensions.tsx\")\n .toString();\n\n const project = new Project();\n project.addSourceFileAtPath(extensionsTsxFilePath);\n\n const source = project.getSourceFileOrThrow(extensionsTsxFilePath);\n\n // Check if we already have the imports.\n const buildParamsFeatureImport = \"./buildParams/feature.js\";\n const existingFeatureImport = source.getImportDeclaration(buildParamsFeatureImport);\n\n if (!existingFeatureImport) {\n let index = 1;\n const importDeclarations = source.getImportDeclarations();\n if (importDeclarations.length) {\n const last = importDeclarations[importDeclarations.length - 1];\n index = last.getChildIndex() + 1;\n }\n\n // Add import for BuildParamsInternalFeature.\n source.insertImportDeclaration(index, {\n namedImports: [\"BuildParamsInternalFeature\"],\n moduleSpecifier: buildParamsFeatureImport\n });\n\n // Add import for BuildParamsFeature.\n const buildParamsFeatureImportPath = \"@webiny/app-admin\";\n const existingBuildParamsImport = source.getImportDeclaration(buildParamsFeatureImportPath);\n\n if (!existingBuildParamsImport) {\n source.insertImportDeclaration(index, {\n namedImports: [\"BuildParamsFeature\"],\n moduleSpecifier: buildParamsFeatureImportPath\n });\n } else {\n // Add to existing import if BuildParamsFeature not already there.\n const namedImports = existingBuildParamsImport.getNamedImports();\n const hasBuildParamsFeature = namedImports.some(\n ni => ni.getName() === \"BuildParamsFeature\"\n );\n if (!hasBuildParamsFeature) {\n existingBuildParamsImport.addNamedImport(\"BuildParamsFeature\");\n }\n }\n\n // Add import for RegisterFeature if not present.\n const registerFeatureImportPath = \"@webiny/app-admin\";\n const existingRegisterFeatureImport =\n source.getImportDeclaration(registerFeatureImportPath);\n\n if (existingRegisterFeatureImport) {\n const namedImports = existingRegisterFeatureImport.getNamedImports();\n const hasRegisterFeature = namedImports.some(ni => ni.getName() === \"RegisterFeature\");\n if (!hasRegisterFeature) {\n existingRegisterFeatureImport.addNamedImport(\"RegisterFeature\");\n }\n } else {\n source.insertImportDeclaration(index, {\n namedImports: [\"RegisterFeature\"],\n moduleSpecifier: registerFeatureImportPath\n });\n }\n }\n\n // Now add <RegisterFeature> components to the Extensions component.\n const extensionsIdentifier = source.getFirstDescendant(node => {\n if (!Node.isIdentifier(node)) {\n return false;\n }\n return node.getText() === \"Extensions\";\n });\n\n if (!extensionsIdentifier) {\n throw new Error(\n `Could not find the \"Extensions\" React component in \"${extensionsTsxFilePath}\".`\n );\n }\n\n const extensionsArrowFn = extensionsIdentifier.getNextSibling(node =>\n Node.isArrowFunction(node)\n );\n\n if (!extensionsArrowFn) {\n throw new Error(`Could not find the \"Extensions\" React component arrow function.`);\n }\n\n const extensionsArrowFnFragment = extensionsArrowFn.getFirstDescendant(node => {\n return Node.isJsxFragment(node);\n });\n\n if (!extensionsArrowFnFragment) {\n throw new Error(`Could not find JSX fragment in Extensions component.`);\n }\n\n const currentContent = extensionsArrowFnFragment\n .getFullText()\n .replace(\"<>\", \"\")\n .replace(\"</>\", \"\")\n .trim();\n\n // Check if we already have the RegisterFeature components.\n if (!currentContent.includes(\"BuildParamsFeature\")) {\n const newContent = `<><RegisterFeature feature={BuildParamsFeature} /><RegisterFeature feature={BuildParamsInternalFeature} />${currentContent}</>`;\n extensionsArrowFnFragment.replaceWithText(newContent);\n }\n\n await source.save();\n}\n\nexport const AdminBuildParam = defineExtension({\n type: \"Admin/BuildParam\",\n tags: { runtimeContext: \"app-build\", appName: \"admin\" },\n description: \"Add build-time parameter to Admin app.\",\n multiple: true,\n paramsSchema: () => {\n return z.object({\n paramName: z.string(),\n value: z.union([\n z.string(),\n z.record(z.any()),\n z.array(z.any()),\n z.number(),\n z.boolean()\n ])\n });\n },\n async build(params, ctx) {\n const buildParamsDir = ctx.project.paths.workspaceFolder\n .join(\"apps\", \"admin\", \"src\", \"buildParams\")\n .toString();\n\n const { paramName, value } = params;\n\n // Serialize value to a TypeScript literal.\n const valueStr = JSON.stringify(value, null, 4);\n\n // Generate a unique class name based on the paramName.\n const hash = crypto.createHash(\"sha256\").update(paramName).digest(\"hex\");\n const className = `BuildParam_${hash.slice(-10)}`;\n const fileName = `${className}.ts`;\n const filePath = path.join(buildParamsDir, fileName);\n\n // Ensure buildParams directory exists.\n if (!fs.existsSync(buildParamsDir)) {\n fs.mkdirSync(buildParamsDir, { recursive: true });\n }\n\n // Check if file already exists.\n if (!fs.existsSync(filePath)) {\n // Create the BuildParam implementation file.\n const fileContent = `import { BuildParam } from \"webiny/admin/buildParams\";\n\nclass ${className} implements BuildParam.Interface {\n key = \"${paramName}\";\n value = ${valueStr};\n}\n\nexport default BuildParam.createImplementation({\n implementation: ${className},\n dependencies: []\n});\n`;\n fs.writeFileSync(filePath, fileContent, \"utf8\");\n }\n\n // Now we need to generate/update the feature file that imports all BuildParams.\n await generateBuildParamsFeature(buildParamsDir, ctx);\n }\n});\n"],"mappings":"AAAA,SAASA,CAAC,QAAQ,KAAK;AACvB,SAASC,eAAe,QAAQ,iCAAiC;AACjE,OAAOC,MAAM,MAAM,QAAQ;AAC3B,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AACnB,SAASC,IAAI,EAAEC,OAAO,QAAQ,UAAU;AAExC,eAAeC,0BAA0BA,CAACC,cAAsB,EAAEC,GAAQ,EAAE;EACxE,MAAMC,eAAe,GAAGP,IAAI,CAACQ,IAAI,CAACH,cAAc,EAAE,YAAY,CAAC;;EAE/D;EACA,MAAMI,KAAK,GAAGR,EAAE,CACXS,WAAW,CAACL,cAAc,CAAC,CAC3BM,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACC,UAAU,CAAC,aAAa,CAAC,IAAID,CAAC,CAACE,QAAQ,CAAC,KAAK,CAAC,IAAIF,CAAC,KAAK,YAAY,CAAC;;EAExF;EACA,MAAMG,OAAO,GAAGN,KAAK,CAChBO,GAAG,CAACC,IAAI,IAAI;IACT,MAAMC,SAAS,GAAGlB,IAAI,CAACmB,KAAK,CAACF,IAAI,CAAC,CAACG,IAAI;IACvC,OAAO,UAAUF,SAAS,YAAYA,SAAS,OAAO;EAC1D,CAAC,CAAC,CACDV,IAAI,CAAC,IAAI,CAAC;EAEf,MAAMa,aAAa,GAAGZ,KAAK,CACtBO,GAAG,CAACC,IAAI,IAAI;IACT,MAAMC,SAAS,GAAGlB,IAAI,CAACmB,KAAK,CAACF,IAAI,CAAC,CAACG,IAAI;IACvC,OAAO,8BAA8BF,SAAS,IAAI;EACtD,CAAC,CAAC,CACDV,IAAI,CAAC,IAAI,CAAC;EAEf,MAAMc,cAAc,GAAG;AAC3B;AACA,EAAEP,OAAO;AACT;AACA;AACA;AACA;AACA,EAAEM,aAAa;AACf;AACA;AACA,CAAC;EAEGpB,EAAE,CAACsB,aAAa,CAAChB,eAAe,EAAEe,cAAc,EAAE,MAAM,CAAC;;EAEzD;EACA,MAAME,mBAAmB,CAAClB,GAAG,CAAC;AAClC;AAEA,eAAekB,mBAAmBA,CAAClB,GAAQ,EAAE;EACzC,MAAMmB,qBAAqB,GAAGnB,GAAG,CAACoB,OAAO,CAACC,KAAK,CAACC,eAAe,CAC1DpB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAC9CqB,QAAQ,CAAC,CAAC;EAEf,MAAMH,OAAO,GAAG,IAAIvB,OAAO,CAAC,CAAC;EAC7BuB,OAAO,CAACI,mBAAmB,CAACL,qBAAqB,CAAC;EAElD,MAAMM,MAAM,GAAGL,OAAO,CAACM,oBAAoB,CAACP,qBAAqB,CAAC;;EAElE;EACA,MAAMQ,wBAAwB,GAAG,0BAA0B;EAC3D,MAAMC,qBAAqB,GAAGH,MAAM,CAACI,oBAAoB,CAACF,wBAAwB,CAAC;EAEnF,IAAI,CAACC,qBAAqB,EAAE;IACxB,IAAIE,KAAK,GAAG,CAAC;IACb,MAAMC,kBAAkB,GAAGN,MAAM,CAACO,qBAAqB,CAAC,CAAC;IACzD,IAAID,kBAAkB,CAACE,MAAM,EAAE;MAC3B,MAAMC,IAAI,GAAGH,kBAAkB,CAACA,kBAAkB,CAACE,MAAM,GAAG,CAAC,CAAC;MAC9DH,KAAK,GAAGI,IAAI,CAACC,aAAa,CAAC,CAAC,GAAG,CAAC;IACpC;;IAEA;IACAV,MAAM,CAACW,uBAAuB,CAACN,KAAK,EAAE;MAClCO,YAAY,EAAE,CAAC,4BAA4B,CAAC;MAC5CC,eAAe,EAAEX;IACrB,CAAC,CAAC;;IAEF;IACA,MAAMY,4BAA4B,GAAG,mBAAmB;IACxD,MAAMC,yBAAyB,GAAGf,MAAM,CAACI,oBAAoB,CAACU,4BAA4B,CAAC;IAE3F,IAAI,CAACC,yBAAyB,EAAE;MAC5Bf,MAAM,CAACW,uBAAuB,CAACN,KAAK,EAAE;QAClCO,YAAY,EAAE,CAAC,oBAAoB,CAAC;QACpCC,eAAe,EAAEC;MACrB,CAAC,CAAC;IACN,CAAC,MAAM;MACH;MACA,MAAMF,YAAY,GAAGG,yBAAyB,CAACC,eAAe,CAAC,CAAC;MAChE,MAAMC,qBAAqB,GAAGL,YAAY,CAACM,IAAI,CAC3CC,EAAE,IAAIA,EAAE,CAACC,OAAO,CAAC,CAAC,KAAK,oBAC3B,CAAC;MACD,IAAI,CAACH,qBAAqB,EAAE;QACxBF,yBAAyB,CAACM,cAAc,CAAC,oBAAoB,CAAC;MAClE;IACJ;;IAEA;IACA,MAAMC,yBAAyB,GAAG,mBAAmB;IACrD,MAAMC,6BAA6B,GAC/BvB,MAAM,CAACI,oBAAoB,CAACkB,yBAAyB,CAAC;IAE1D,IAAIC,6BAA6B,EAAE;MAC/B,MAAMX,YAAY,GAAGW,6BAA6B,CAACP,eAAe,CAAC,CAAC;MACpE,MAAMQ,kBAAkB,GAAGZ,YAAY,CAACM,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACC,OAAO,CAAC,CAAC,KAAK,iBAAiB,CAAC;MACtF,IAAI,CAACI,kBAAkB,EAAE;QACrBD,6BAA6B,CAACF,cAAc,CAAC,iBAAiB,CAAC;MACnE;IACJ,CAAC,MAAM;MACHrB,MAAM,CAACW,uBAAuB,CAACN,KAAK,EAAE;QAClCO,YAAY,EAAE,CAAC,iBAAiB,CAAC;QACjCC,eAAe,EAAES;MACrB,CAAC,CAAC;IACN;EACJ;;EAEA;EACA,MAAMG,oBAAoB,GAAGzB,MAAM,CAAC0B,kBAAkB,CAACC,IAAI,IAAI;IAC3D,IAAI,CAACxD,IAAI,CAACyD,YAAY,CAACD,IAAI,CAAC,EAAE;MAC1B,OAAO,KAAK;IAChB;IACA,OAAOA,IAAI,CAACE,OAAO,CAAC,CAAC,KAAK,YAAY;EAC1C,CAAC,CAAC;EAEF,IAAI,CAACJ,oBAAoB,EAAE;IACvB,MAAM,IAAIK,KAAK,CACX,uDAAuDpC,qBAAqB,IAChF,CAAC;EACL;EAEA,MAAMqC,iBAAiB,GAAGN,oBAAoB,CAACO,cAAc,CAACL,IAAI,IAC9DxD,IAAI,CAAC8D,eAAe,CAACN,IAAI,CAC7B,CAAC;EAED,IAAI,CAACI,iBAAiB,EAAE;IACpB,MAAM,IAAID,KAAK,CAAC,iEAAiE,CAAC;EACtF;EAEA,MAAMI,yBAAyB,GAAGH,iBAAiB,CAACL,kBAAkB,CAACC,IAAI,IAAI;IAC3E,OAAOxD,IAAI,CAACgE,aAAa,CAACR,IAAI,CAAC;EACnC,CAAC,CAAC;EAEF,IAAI,CAACO,yBAAyB,EAAE;IAC5B,MAAM,IAAIJ,KAAK,CAAC,sDAAsD,CAAC;EAC3E;EAEA,MAAMM,cAAc,GAAGF,yBAAyB,CAC3CG,WAAW,CAAC,CAAC,CACbC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACjBA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAClBC,IAAI,CAAC,CAAC;;EAEX;EACA,IAAI,CAACH,cAAc,CAACI,QAAQ,CAAC,oBAAoB,CAAC,EAAE;IAChD,MAAMC,UAAU,GAAG,6GAA6GL,cAAc,KAAK;IACnJF,yBAAyB,CAACQ,eAAe,CAACD,UAAU,CAAC;EACzD;EAEA,MAAMzC,MAAM,CAAC2C,IAAI,CAAC,CAAC;AACvB;AAEA,OAAO,MAAMC,eAAe,GAAG7E,eAAe,CAAC;EAC3C8E,IAAI,EAAE,kBAAkB;EACxBC,IAAI,EAAE;IAAEC,cAAc,EAAE,WAAW;IAAEC,OAAO,EAAE;EAAQ,CAAC;EACvDC,WAAW,EAAE,wCAAwC;EACrDC,QAAQ,EAAE,IAAI;EACdC,YAAY,EAAEA,CAAA,KAAM;IAChB,OAAOrF,CAAC,CAACsF,MAAM,CAAC;MACZC,SAAS,EAAEvF,CAAC,CAACwF,MAAM,CAAC,CAAC;MACrBC,KAAK,EAAEzF,CAAC,CAAC0F,KAAK,CAAC,CACX1F,CAAC,CAACwF,MAAM,CAAC,CAAC,EACVxF,CAAC,CAAC2F,MAAM,CAAC3F,CAAC,CAAC4F,GAAG,CAAC,CAAC,CAAC,EACjB5F,CAAC,CAAC6F,KAAK,CAAC7F,CAAC,CAAC4F,GAAG,CAAC,CAAC,CAAC,EAChB5F,CAAC,CAAC8F,MAAM,CAAC,CAAC,EACV9F,CAAC,CAAC+F,OAAO,CAAC,CAAC,CACd;IACL,CAAC,CAAC;EACN,CAAC;EACD,MAAMC,KAAKA,CAACC,MAAM,EAAExF,GAAG,EAAE;IACrB,MAAMD,cAAc,GAAGC,GAAG,CAACoB,OAAO,CAACC,KAAK,CAACC,eAAe,CACnDpB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAC3CqB,QAAQ,CAAC,CAAC;IAEf,MAAM;MAAEuD,SAAS;MAAEE;IAAM,CAAC,GAAGQ,MAAM;;IAEnC;IACA,MAAMC,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACX,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;IAE/C;IACA,MAAMY,IAAI,GAAGnG,MAAM,CAACoG,UAAU,CAAC,QAAQ,CAAC,CAACC,MAAM,CAAChB,SAAS,CAAC,CAACiB,MAAM,CAAC,KAAK,CAAC;IACxE,MAAMnF,SAAS,GAAG,cAAcgF,IAAI,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;IACjD,MAAMC,QAAQ,GAAG,GAAGrF,SAAS,KAAK;IAClC,MAAMsF,QAAQ,GAAGxG,IAAI,CAACQ,IAAI,CAACH,cAAc,EAAEkG,QAAQ,CAAC;;IAEpD;IACA,IAAI,CAACtG,EAAE,CAACwG,UAAU,CAACpG,cAAc,CAAC,EAAE;MAChCJ,EAAE,CAACyG,SAAS,CAACrG,cAAc,EAAE;QAAEsG,SAAS,EAAE;MAAK,CAAC,CAAC;IACrD;;IAEA;IACA,IAAI,CAAC1G,EAAE,CAACwG,UAAU,CAACD,QAAQ,CAAC,EAAE;MAC1B;MACA,MAAMI,WAAW,GAAG;AAChC;AACA,QAAQ1F,SAAS;AACjB,aAAakE,SAAS;AACtB,cAAcW,QAAQ;AACtB;AACA;AACA;AACA,sBAAsB7E,SAAS;AAC/B;AACA;AACA,CAAC;MACWjB,EAAE,CAACsB,aAAa,CAACiF,QAAQ,EAAEI,WAAW,EAAE,MAAM,CAAC;IACnD;;IAEA;IACA,MAAMxG,0BAA0B,CAACC,cAAc,EAAEC,GAAG,CAAC;EACzD;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const AdminExtension: import("@webiny/project/defineExtension/defineExtension").ExtensionComponent<z.ZodObject<{
|
|
3
|
-
src: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
4
|
-
exportName: z.ZodOptional<z.ZodString>;
|
|
5
|
-
}, "strip", z.ZodTypeAny, {
|
|
6
|
-
src: string;
|
|
7
|
-
exportName?: string | undefined;
|
|
8
|
-
}, {
|
|
9
|
-
src: string;
|
|
10
|
-
exportName?: string | undefined;
|
|
11
|
-
}>>;
|