@oktis-works/plugin-sdk 0.0.0-stage → 0.1.0
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/dist/admin.d.ts +78 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +55 -0
- package/dist/admin.js.map +1 -0
- package/dist/hooks.d.ts +66 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +50 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/style-isolation.d.ts +8 -0
- package/dist/style-isolation.d.ts.map +1 -0
- package/dist/style-isolation.js +73 -0
- package/dist/style-isolation.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -4
- package/README.md +0 -3
package/dist/admin.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export interface AdminMenuPage {
|
|
2
|
+
slug: string;
|
|
3
|
+
label: string;
|
|
4
|
+
capability?: string;
|
|
5
|
+
icon?: string;
|
|
6
|
+
position?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AdminSubmenuPage {
|
|
9
|
+
parentSlug: string;
|
|
10
|
+
slug: string;
|
|
11
|
+
label: string;
|
|
12
|
+
capability?: string;
|
|
13
|
+
position?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface DashboardWidget {
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
render: 'component';
|
|
19
|
+
componentId: string;
|
|
20
|
+
columnsSpan?: 1 | 2 | 3 | 4;
|
|
21
|
+
}
|
|
22
|
+
export interface MetaBox {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
/** Tipos de conteúdo onde a caixa aparece (ex.: ['post', 'page']). */
|
|
26
|
+
screens: string[];
|
|
27
|
+
context: 'normal' | 'side' | 'advanced';
|
|
28
|
+
priority: 'high' | 'default' | 'low';
|
|
29
|
+
componentId: string;
|
|
30
|
+
}
|
|
31
|
+
export interface AdminNotice {
|
|
32
|
+
id: string;
|
|
33
|
+
level: 'info' | 'success' | 'warning' | 'error';
|
|
34
|
+
message: string;
|
|
35
|
+
dismissible?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface ColumnDefinition {
|
|
38
|
+
key: string;
|
|
39
|
+
label: string;
|
|
40
|
+
position?: 'before_title' | 'after_title' | 'end';
|
|
41
|
+
}
|
|
42
|
+
export interface PluginAdminApi {
|
|
43
|
+
addMenuPage(page: AdminMenuPage): void;
|
|
44
|
+
addSubmenuPage(page: AdminSubmenuPage): void;
|
|
45
|
+
addDashboardWidget(widget: DashboardWidget): void;
|
|
46
|
+
addMetaBox(box: MetaBox): void;
|
|
47
|
+
addNotice(notice: Omit<AdminNotice, 'id'> & {
|
|
48
|
+
id?: string;
|
|
49
|
+
}): void;
|
|
50
|
+
removeNotice(noticeId: string): void;
|
|
51
|
+
manageColumns(contentType: string, column: ColumnDefinition): void;
|
|
52
|
+
renderColumn(contentType: string, columnKey: string, componentId: string): void;
|
|
53
|
+
addActionLinks(links: Array<{
|
|
54
|
+
label: string;
|
|
55
|
+
url: string;
|
|
56
|
+
}>): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Estado declarativo coletado pelos pontos de extensão e consumido
|
|
60
|
+
* pelo app admin via slots nomeados (FEAT-098 / DECI-027).
|
|
61
|
+
*/
|
|
62
|
+
export interface AdminExtensionsState {
|
|
63
|
+
menuPages: AdminMenuPage[];
|
|
64
|
+
submenuPages: AdminSubmenuPage[];
|
|
65
|
+
dashboardWidgets: DashboardWidget[];
|
|
66
|
+
metaBoxes: MetaBox[];
|
|
67
|
+
notices: AdminNotice[];
|
|
68
|
+
columns: Record<string, ColumnDefinition[]>;
|
|
69
|
+
columnRenderers: Record<string, Record<string, string>>;
|
|
70
|
+
actionLinks: Array<{
|
|
71
|
+
label: string;
|
|
72
|
+
url: string;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
export declare function createPluginAdminApi(pluginId: string, state?: AdminExtensionsState): PluginAdminApi & {
|
|
76
|
+
state: AdminExtensionsState;
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/admin.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// @oktis-works/plugin-sdk - Admin UI Extension Points (declarative slots)
|
|
2
|
+
export function createPluginAdminApi(pluginId, state = emptyState()) {
|
|
3
|
+
const api = {
|
|
4
|
+
state,
|
|
5
|
+
addMenuPage(page) {
|
|
6
|
+
if (!page.capability || page.capability.length === 0) {
|
|
7
|
+
throw new Error(`[${pluginId}] addMenuPage exige uma capability explícita`);
|
|
8
|
+
}
|
|
9
|
+
state.menuPages.push(page);
|
|
10
|
+
},
|
|
11
|
+
addSubmenuPage(page) {
|
|
12
|
+
if (!page.capability || page.capability.length === 0) {
|
|
13
|
+
throw new Error(`[${pluginId}] addSubmenuPage exige uma capability explícita`);
|
|
14
|
+
}
|
|
15
|
+
state.submenuPages.push(page);
|
|
16
|
+
},
|
|
17
|
+
addDashboardWidget(widget) {
|
|
18
|
+
state.dashboardWidgets.push(widget);
|
|
19
|
+
},
|
|
20
|
+
addMetaBox(box) {
|
|
21
|
+
state.metaBoxes.push(box);
|
|
22
|
+
},
|
|
23
|
+
addNotice(notice) {
|
|
24
|
+
state.notices.push({ ...notice, id: notice.id ?? `${pluginId}:${Date.now().toString(36)}:${state.notices.length}` });
|
|
25
|
+
},
|
|
26
|
+
removeNotice(noticeId) {
|
|
27
|
+
state.notices = state.notices.filter((notice) => notice.id !== noticeId);
|
|
28
|
+
},
|
|
29
|
+
manageColumns(contentType, column) {
|
|
30
|
+
const list = state.columns[contentType] ?? [];
|
|
31
|
+
list.push(column);
|
|
32
|
+
state.columns[contentType] = list;
|
|
33
|
+
},
|
|
34
|
+
renderColumn(contentType, columnKey, componentId) {
|
|
35
|
+
state.columnRenderers[contentType] = { ...(state.columnRenderers[contentType] ?? {}), [columnKey]: componentId };
|
|
36
|
+
},
|
|
37
|
+
addActionLinks(links) {
|
|
38
|
+
state.actionLinks.push(...links);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
return api;
|
|
42
|
+
}
|
|
43
|
+
function emptyState() {
|
|
44
|
+
return {
|
|
45
|
+
menuPages: [],
|
|
46
|
+
submenuPages: [],
|
|
47
|
+
dashboardWidgets: [],
|
|
48
|
+
metaBoxes: [],
|
|
49
|
+
notices: [],
|
|
50
|
+
columns: {},
|
|
51
|
+
columnRenderers: {},
|
|
52
|
+
actionLinks: [],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,0EAA0E;AA4E1E,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,QAA8B,UAAU,EAAE;IAC/F,MAAM,GAAG,GAAqD;QAC5D,KAAK;QACL,WAAW,CAAC,IAAI;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,IAAI,QAAQ,8CAA8C,CAAC,CAAC;YAC9E,CAAC;YACD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,IAAI;YACjB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,IAAI,QAAQ,iDAAiD,CAAC,CAAC;YACjF,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,kBAAkB,CAAC,MAAM;YACvB,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,UAAU,CAAC,GAAG;YACZ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,SAAS,CAAC,MAAM;YACd,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,YAAY,CAAC,QAAQ;YACnB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC3E,CAAC;QACD,aAAa,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC;QACD,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW;YAC9C,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;QACnH,CAAC;QACD,cAAc,CAAC,KAAK;YAClB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,gBAAgB,EAAE,EAAE;QACpB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface HookRegistration {
|
|
2
|
+
action: string;
|
|
3
|
+
callback: (...args: unknown[]) => unknown;
|
|
4
|
+
priority: number;
|
|
5
|
+
acceptedArgs: number;
|
|
6
|
+
}
|
|
7
|
+
export interface PluginHooksApi {
|
|
8
|
+
addAction(action: string, callback: (...args: unknown[]) => unknown, options?: {
|
|
9
|
+
priority?: number;
|
|
10
|
+
acceptedArgs?: number;
|
|
11
|
+
}): void;
|
|
12
|
+
addFilter(filter: string, callback: (value: unknown, ...args: unknown[]) => unknown, options?: {
|
|
13
|
+
priority?: number;
|
|
14
|
+
acceptedArgs?: number;
|
|
15
|
+
}): void;
|
|
16
|
+
removeAction(action: string, callback: (...args: unknown[]) => unknown, priority?: number): boolean;
|
|
17
|
+
removeFilter(filter: string, callback: (...args: unknown[]) => unknown, priority?: number): boolean;
|
|
18
|
+
hasAction(action: string): boolean;
|
|
19
|
+
hasFilter(filter: string): boolean;
|
|
20
|
+
didAction(action: string): number;
|
|
21
|
+
currentHook(): string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Nomes de pontos de extensão admin disponíveis para plugins (FEAT-098).
|
|
25
|
+
*/
|
|
26
|
+
export declare const ADMIN_HOOK_POINTS: {
|
|
27
|
+
readonly MENU: "blacklotus.admin.menu";
|
|
28
|
+
readonly DASHBOARD_WIDGETS: "plugin.admin:dashboard:setup";
|
|
29
|
+
readonly METABOXES: "plugin.admin:metaboxes";
|
|
30
|
+
readonly NOTICES: "admin:notices";
|
|
31
|
+
readonly COLUMNS: "manage:{type}:columns";
|
|
32
|
+
readonly COLUMN_CONTENT: "manage:{type}:custom-column";
|
|
33
|
+
readonly ACTION_LINKS: "plugin.action:links";
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Contrato estrutural do registry (implementado por @oktis-works/plugin-runtime).
|
|
37
|
+
* Evita dependência cíclica entre os pacotes.
|
|
38
|
+
*/
|
|
39
|
+
export interface HookRegistryLike {
|
|
40
|
+
addAction(action: string, callback: (...args: unknown[]) => unknown, options?: {
|
|
41
|
+
priority?: number;
|
|
42
|
+
acceptedArgs?: number;
|
|
43
|
+
sourceId?: string;
|
|
44
|
+
sourceType?: 'core' | 'plugin';
|
|
45
|
+
}): void;
|
|
46
|
+
addFilter(filter: string, callback: (value: unknown, ...args: unknown[]) => unknown, options?: {
|
|
47
|
+
priority?: number;
|
|
48
|
+
acceptedArgs?: number;
|
|
49
|
+
sourceId?: string;
|
|
50
|
+
sourceType?: 'core' | 'plugin';
|
|
51
|
+
}): void;
|
|
52
|
+
removeAction(action: string, callback: (...args: unknown[]) => unknown, priority?: number): boolean;
|
|
53
|
+
removeFilter(filter: string, callback: (...args: unknown[]) => unknown, priority?: number): boolean;
|
|
54
|
+
hasAction(action: string, callback?: (...args: unknown[]) => unknown): boolean;
|
|
55
|
+
hasFilter(filter: string, callback?: (...args: unknown[]) => unknown): boolean;
|
|
56
|
+
didAction(action: string): number;
|
|
57
|
+
getCurrentHook(): string | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fábrica da API pública de hooks exposta a um plugin específico.
|
|
61
|
+
* Todos os registros são atribuídos ao sourceId do plugin (BUSI-032/BUSI-033).
|
|
62
|
+
*/
|
|
63
|
+
export declare function createPluginHooksApi(pluginId: string, registry: HookRegistryLike): PluginHooksApi & {
|
|
64
|
+
registrations: HookRegistration[];
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// @oktis-works/plugin-sdk - WordPress-style Hooks API
|
|
2
|
+
/**
|
|
3
|
+
* Nomes de pontos de extensão admin disponíveis para plugins (FEAT-098).
|
|
4
|
+
*/
|
|
5
|
+
export const ADMIN_HOOK_POINTS = {
|
|
6
|
+
MENU: 'blacklotus.admin.menu',
|
|
7
|
+
DASHBOARD_WIDGETS: 'plugin.admin:dashboard:setup',
|
|
8
|
+
METABOXES: 'plugin.admin:metaboxes',
|
|
9
|
+
NOTICES: 'admin:notices',
|
|
10
|
+
COLUMNS: 'manage:{type}:columns',
|
|
11
|
+
COLUMN_CONTENT: 'manage:{type}:custom-column',
|
|
12
|
+
ACTION_LINKS: 'plugin.action:links',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Fábrica da API pública de hooks exposta a um plugin específico.
|
|
16
|
+
* Todos os registros são atribuídos ao sourceId do plugin (BUSI-032/BUSI-033).
|
|
17
|
+
*/
|
|
18
|
+
export function createPluginHooksApi(pluginId, registry) {
|
|
19
|
+
const sourceId = pluginId;
|
|
20
|
+
return {
|
|
21
|
+
registrations: [],
|
|
22
|
+
addAction(action, callback, options) {
|
|
23
|
+
this.registrations.push({ action, callback, priority: options?.priority ?? 10, acceptedArgs: options?.acceptedArgs ?? callback.length });
|
|
24
|
+
registry.addAction(action, callback, { ...options, sourceId, sourceType: 'plugin' });
|
|
25
|
+
},
|
|
26
|
+
addFilter(filter, callback, options) {
|
|
27
|
+
this.registrations.push({ action: filter, callback: callback, priority: options?.priority ?? 10, acceptedArgs: options?.acceptedArgs ?? callback.length });
|
|
28
|
+
registry.addFilter(filter, callback, { ...options, sourceId, sourceType: 'plugin' });
|
|
29
|
+
},
|
|
30
|
+
removeAction(action, callback, priority) {
|
|
31
|
+
return registry.removeAction(action, callback, priority);
|
|
32
|
+
},
|
|
33
|
+
removeFilter(filter, callback, priority) {
|
|
34
|
+
return registry.removeFilter(filter, callback, priority);
|
|
35
|
+
},
|
|
36
|
+
hasAction(action) {
|
|
37
|
+
return registry.hasAction(action);
|
|
38
|
+
},
|
|
39
|
+
hasFilter(filter) {
|
|
40
|
+
return registry.hasFilter(filter);
|
|
41
|
+
},
|
|
42
|
+
didAction(action) {
|
|
43
|
+
return registry.didAction(action);
|
|
44
|
+
},
|
|
45
|
+
currentHook() {
|
|
46
|
+
return registry.getCurrentHook();
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAoBtD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,uBAAuB;IAC7B,iBAAiB,EAAE,8BAA8B;IACjD,SAAS,EAAE,wBAAwB;IACnC,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,uBAAuB;IAChC,cAAc,EAAE,6BAA6B;IAC7C,YAAY,EAAE,qBAAqB;CAC3B,CAAC;AAiBX;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,QAA0B;IAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAE1B,OAAO;QACL,aAAa,EAAE,EAAE;QACjB,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACzI,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAA2C,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9L,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YACrC,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YACrC,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;QACD,SAAS,CAAC,MAAM;YACd,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,SAAS,CAAC,MAAM;YACd,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,SAAS,CAAC,MAAM;YACd,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,WAAW;YACT,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { HookType, type PluginManifest, type PluginDependency, type PluginHook, type PluginHookHandler, type ContentField, type PluginContext, type PluginAPI, type RouteDefinition, type TenantInfo, type UserInfo, } from './types.js';
|
|
2
|
+
export { createPluginHooksApi, ADMIN_HOOK_POINTS, } from './hooks.js';
|
|
3
|
+
export type { PluginHooksApi, HookRegistration } from './hooks.js';
|
|
4
|
+
export { createPluginAdminApi, } from './admin.js';
|
|
5
|
+
export type { PluginAdminApi, AdminExtensionsState, AdminMenuPage, AdminSubmenuPage, DashboardWidget, MetaBox, AdminNotice, ColumnDefinition, } from './admin.js';
|
|
6
|
+
export { scopePluginCss, getPluginScopeAttribute, wrapWithPluginScope, } from './style-isolation.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EACL,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HookType, } from './types.js';
|
|
2
|
+
export { createPluginHooksApi, ADMIN_HOOK_POINTS, } from './hooks.js';
|
|
3
|
+
export { createPluginAdminApi, } from './admin.js';
|
|
4
|
+
// Style isolation helpers (re-export do plugin-runtime para uso sem dependência circular)
|
|
5
|
+
export { scopePluginCss, getPluginScopeAttribute, wrapWithPluginScope, } from './style-isolation.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAWT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAYpB,0FAA0F;AAC1F,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function scopePluginCss(css: string, pluginName: string, prefix?: string): string;
|
|
2
|
+
export declare function getPluginScopeAttribute(pluginName: string): {
|
|
3
|
+
attr: string;
|
|
4
|
+
selector: string;
|
|
5
|
+
dataAttr: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function wrapWithPluginScope(html: string, pluginName: string): string;
|
|
8
|
+
//# sourceMappingURL=style-isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-isolation.d.ts","sourceRoot":"","sources":["../src/style-isolation.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAkC,GAAG,MAAM,CA2BhH;AACD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM;;;;EAA4I;AACtM,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAiI"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// @oktis-works/plugin-sdk - Style Isolation helpers (thin wrapper para evitar ciclo)
|
|
2
|
+
// Implementação canônica em @oktis-works/plugin-runtime/src/style-isolation.ts
|
|
3
|
+
export function scopePluginCss(css, pluginName, prefix = `[data-plugin="${pluginName}"]`) {
|
|
4
|
+
// delega para runtime quando disponível; fallback inline idem ao runtime
|
|
5
|
+
const isExcluded = (s) => s.trim().startsWith('@keyframes') || s.trim().startsWith('@font-face');
|
|
6
|
+
let out = '';
|
|
7
|
+
let i = 0;
|
|
8
|
+
const len = css.length;
|
|
9
|
+
while (i < len) {
|
|
10
|
+
if (css[i]?.trim() === '') {
|
|
11
|
+
out += css[i++];
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (css.startsWith('/*', i)) {
|
|
15
|
+
const end = css.indexOf('*/', i + 2);
|
|
16
|
+
const c = end === -1 ? css.slice(i) : css.slice(i, end + 2);
|
|
17
|
+
out += c;
|
|
18
|
+
i += c.length;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (css[i] === '@') {
|
|
22
|
+
const semi = css.indexOf(';', i), brace = css.indexOf('{', i);
|
|
23
|
+
if (semi !== -1 && (brace === -1 || semi < brace)) {
|
|
24
|
+
out += css.slice(i, semi + 1);
|
|
25
|
+
i = semi + 1;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const braceIdx = css.indexOf('{', i);
|
|
30
|
+
if (braceIdx === -1) {
|
|
31
|
+
out += css.slice(i);
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
const selectorPart = css.slice(i, braceIdx).trim();
|
|
35
|
+
let depth = 0, endIdx = -1;
|
|
36
|
+
for (let k = braceIdx; k < len; k++) {
|
|
37
|
+
if (css[k] === '{')
|
|
38
|
+
depth++;
|
|
39
|
+
else if (css[k] === '}') {
|
|
40
|
+
depth--;
|
|
41
|
+
if (depth === 0) {
|
|
42
|
+
endIdx = k;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (endIdx === -1) {
|
|
48
|
+
out += css.slice(i);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
const body = css.slice(braceIdx, endIdx + 1);
|
|
52
|
+
if (isExcluded(selectorPart)) {
|
|
53
|
+
out += css.slice(i, endIdx + 1);
|
|
54
|
+
}
|
|
55
|
+
else if (selectorPart.startsWith('@media') || selectorPart.startsWith('@supports')) {
|
|
56
|
+
const inner = css.slice(braceIdx + 1, endIdx);
|
|
57
|
+
out += `${selectorPart} {${scopePluginCss(inner, pluginName, prefix)}}`;
|
|
58
|
+
}
|
|
59
|
+
else if (selectorPart.startsWith('@')) {
|
|
60
|
+
out += `${selectorPart} {${css.slice(braceIdx + 1, endIdx)}}`;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const sels = selectorPart.split(',').map(s => s.trim()).filter(Boolean);
|
|
64
|
+
const scoped = sels.map(sel => sel.includes(prefix) ? sel : (sel === ':root' || sel === 'html' || sel === 'body' ? prefix : sel.match(/:root|\bhtml\b|\bbody\b/) ? sel.replace(':root', prefix).replace(/\bhtml\b/, prefix).replace(/\bbody\b/, prefix) : `${prefix} ${sel}`));
|
|
65
|
+
out += `${scoped.join(', ')}${body}`;
|
|
66
|
+
}
|
|
67
|
+
i = endIdx + 1;
|
|
68
|
+
}
|
|
69
|
+
return out || css;
|
|
70
|
+
}
|
|
71
|
+
export function getPluginScopeAttribute(pluginName) { const e = pluginName.replace(/"/g, '"'); return { attr: `data-plugin="${e}"`, selector: `[data-plugin="${e}"]`, dataAttr: 'data-plugin' }; }
|
|
72
|
+
export function wrapWithPluginScope(html, pluginName) { const { attr } = getPluginScopeAttribute(pluginName); return html.includes('data-plugin=') ? html : `<div ${attr}>${html}</div>`; }
|
|
73
|
+
//# sourceMappingURL=style-isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-isolation.js","sourceRoot":"","sources":["../src/style-isolation.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export declare enum HookType {
|
|
2
|
+
BEFORE_CONTENT_CREATE = "beforeContentCreate",
|
|
3
|
+
AFTER_CONTENT_CREATE = "afterContentCreate",
|
|
4
|
+
BEFORE_CONTENT_UPDATE = "beforeContentUpdate",
|
|
5
|
+
AFTER_CONTENT_UPDATE = "afterContentUpdate",
|
|
6
|
+
BEFORE_CONTENT_DELETE = "beforeContentDelete",
|
|
7
|
+
AFTER_CONTENT_DELETE = "afterContentDelete",
|
|
8
|
+
ON_CONTENT_PUBLISH = "onContentPublish",
|
|
9
|
+
ON_CONTENT_UNPUBLISH = "onContentUnpublish",
|
|
10
|
+
ON_INSTALL = "onInstall",
|
|
11
|
+
ON_ACTIVATE = "onActivate",
|
|
12
|
+
ON_DEACTIVATE = "onDeactivate",
|
|
13
|
+
ON_UNINSTALL = "onUninstall",
|
|
14
|
+
ON_SETTINGS_PAGE = "onSettingsPage",
|
|
15
|
+
ON_ADMIN_MENU = "onAdminMenu"
|
|
16
|
+
}
|
|
17
|
+
export interface PluginManifest {
|
|
18
|
+
name: string;
|
|
19
|
+
version: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
main: string;
|
|
22
|
+
hooks?: PluginHook[];
|
|
23
|
+
permissions?: string[];
|
|
24
|
+
dependencies?: PluginDependency[];
|
|
25
|
+
}
|
|
26
|
+
export interface PluginDependency {
|
|
27
|
+
name: string;
|
|
28
|
+
version: string;
|
|
29
|
+
required?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface PluginHook {
|
|
32
|
+
type: HookType;
|
|
33
|
+
handler: PluginHookHandler;
|
|
34
|
+
}
|
|
35
|
+
export type PluginHookHandler = (context: PluginContext, payload: unknown) => void | Promise<void>;
|
|
36
|
+
export interface ContentField {
|
|
37
|
+
name: string;
|
|
38
|
+
type: string;
|
|
39
|
+
label: string;
|
|
40
|
+
required?: boolean;
|
|
41
|
+
options?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export interface PluginContext {
|
|
44
|
+
tenantId: string;
|
|
45
|
+
userId: string;
|
|
46
|
+
requestId: string;
|
|
47
|
+
api: PluginAPI;
|
|
48
|
+
}
|
|
49
|
+
export interface PluginAPI {
|
|
50
|
+
registerHook(type: HookType, handler: PluginHookHandler): void;
|
|
51
|
+
addRoute(route: RouteDefinition): void;
|
|
52
|
+
addContentField(field: ContentField): void;
|
|
53
|
+
getSetting(key: string): Promise<unknown>;
|
|
54
|
+
setSetting(key: string, value: unknown): Promise<void>;
|
|
55
|
+
getTenant(): Promise<TenantInfo>;
|
|
56
|
+
getUser(): Promise<UserInfo>;
|
|
57
|
+
query<T>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
58
|
+
emit(event: string, payload: unknown): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
export interface RouteDefinition {
|
|
61
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
62
|
+
path: string;
|
|
63
|
+
handler: (context: PluginContext, request: unknown) => Promise<unknown>;
|
|
64
|
+
}
|
|
65
|
+
export interface TenantInfo {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
slug: string;
|
|
69
|
+
}
|
|
70
|
+
export interface UserInfo {
|
|
71
|
+
id: string;
|
|
72
|
+
email: string;
|
|
73
|
+
name: string;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,qBAAqB,wBAAwB;IAC7C,oBAAoB,uBAAuB;IAC3C,qBAAqB,wBAAwB;IAC7C,oBAAoB,uBAAuB;IAC3C,qBAAqB,wBAAwB;IAC7C,oBAAoB,uBAAuB;IAC3C,kBAAkB,qBAAqB;IACvC,oBAAoB,uBAAuB;IAC3C,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,aAAa,iBAAiB;IAC9B,YAAY,gBAAgB;IAC5B,gBAAgB,mBAAmB;IACnC,aAAa,gBAAgB;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export var HookType;
|
|
2
|
+
(function (HookType) {
|
|
3
|
+
HookType["BEFORE_CONTENT_CREATE"] = "beforeContentCreate";
|
|
4
|
+
HookType["AFTER_CONTENT_CREATE"] = "afterContentCreate";
|
|
5
|
+
HookType["BEFORE_CONTENT_UPDATE"] = "beforeContentUpdate";
|
|
6
|
+
HookType["AFTER_CONTENT_UPDATE"] = "afterContentUpdate";
|
|
7
|
+
HookType["BEFORE_CONTENT_DELETE"] = "beforeContentDelete";
|
|
8
|
+
HookType["AFTER_CONTENT_DELETE"] = "afterContentDelete";
|
|
9
|
+
HookType["ON_CONTENT_PUBLISH"] = "onContentPublish";
|
|
10
|
+
HookType["ON_CONTENT_UNPUBLISH"] = "onContentUnpublish";
|
|
11
|
+
HookType["ON_INSTALL"] = "onInstall";
|
|
12
|
+
HookType["ON_ACTIVATE"] = "onActivate";
|
|
13
|
+
HookType["ON_DEACTIVATE"] = "onDeactivate";
|
|
14
|
+
HookType["ON_UNINSTALL"] = "onUninstall";
|
|
15
|
+
HookType["ON_SETTINGS_PAGE"] = "onSettingsPage";
|
|
16
|
+
HookType["ON_ADMIN_MENU"] = "onAdminMenu";
|
|
17
|
+
})(HookType || (HookType = {}));
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAeX;AAfD,WAAY,QAAQ;IAClB,yDAA6C,CAAA;IAC7C,uDAA2C,CAAA;IAC3C,yDAA6C,CAAA;IAC7C,uDAA2C,CAAA;IAC3C,yDAA6C,CAAA;IAC7C,uDAA2C,CAAA;IAC3C,mDAAuC,CAAA;IACvC,uDAA2C,CAAA;IAC3C,oCAAwB,CAAA;IACxB,sCAA0B,CAAA;IAC1B,0CAA8B,CAAA;IAC9B,wCAA4B,CAAA;IAC5B,+CAAmC,CAAA;IACnC,yCAA6B,CAAA;AAC/B,CAAC,EAfW,QAAQ,KAAR,QAAQ,QAenB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oktis-works/plugin-sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@oktis-works/types": "0.1.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "5.7.3",
|
|
23
|
+
"@oktis-works/plugin-runtime": "0.1.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public",
|
|
30
|
+
"registry": "https://registry.npmjs.org/"
|
|
31
|
+
},
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/blacklotus/blacklotus-cms",
|
|
36
|
+
"directory": "packages/plugin-sdk"
|
|
37
|
+
}
|
|
38
|
+
}
|
package/README.md
DELETED