@shamar/adonis 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/assets/admin.css +2 -0
- package/assets/alpine.min.js +5 -0
- package/assets/input.css +2286 -0
- package/assets/shamar-ui.js +3658 -0
- package/dist/assets-controller.d.ts +12 -0
- package/dist/assets-controller.d.ts.map +1 -0
- package/dist/assets-controller.js +32 -0
- package/dist/assets-controller.js.map +1 -0
- package/dist/config.d.ts +79 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +38 -0
- package/dist/config.js.map +1 -0
- package/dist/configure.d.ts +21 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +20 -0
- package/dist/configure.js.map +1 -0
- package/dist/context.d.ts +22 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/controller.d.ts +31 -0
- package/dist/controller.d.ts.map +1 -0
- package/dist/controller.js +45 -0
- package/dist/controller.js.map +1 -0
- package/dist/controllers/admin_controller.d.ts +72 -0
- package/dist/controllers/admin_controller.d.ts.map +1 -0
- package/dist/controllers/admin_controller.js +1075 -0
- package/dist/controllers/admin_controller.js.map +1 -0
- package/dist/discover.d.ts +7 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +50 -0
- package/dist/discover.js.map +1 -0
- package/dist/form-state.d.ts +41 -0
- package/dist/form-state.d.ts.map +1 -0
- package/dist/form-state.js +74 -0
- package/dist/form-state.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/require_api_key_middleware.d.ts +30 -0
- package/dist/middleware/require_api_key_middleware.d.ts.map +1 -0
- package/dist/middleware/require_api_key_middleware.js +59 -0
- package/dist/middleware/require_api_key_middleware.js.map +1 -0
- package/dist/provider.d.ts +9 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +66 -0
- package/dist/provider.js.map +1 -0
- package/dist/resources/api_key_resource.d.ts +35 -0
- package/dist/resources/api_key_resource.d.ts.map +1 -0
- package/dist/resources/api_key_resource.js +225 -0
- package/dist/resources/api_key_resource.js.map +1 -0
- package/dist/routes.d.ts +5 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +97 -0
- package/dist/routes.js.map +1 -0
- package/dist/runtime.d.ts +27 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +74 -0
- package/dist/runtime.js.map +1 -0
- package/dist/shamar/auth.d.ts +30 -0
- package/dist/shamar/auth.d.ts.map +1 -0
- package/dist/shamar/auth.js +218 -0
- package/dist/shamar/auth.js.map +1 -0
- package/dist/shamar/branding.d.ts +24 -0
- package/dist/shamar/branding.d.ts.map +1 -0
- package/dist/shamar/branding.js +91 -0
- package/dist/shamar/branding.js.map +1 -0
- package/dist/shamar/display-relations.d.ts +7 -0
- package/dist/shamar/display-relations.d.ts.map +1 -0
- package/dist/shamar/display-relations.js +89 -0
- package/dist/shamar/display-relations.js.map +1 -0
- package/dist/shamar/list-headers.d.ts +38 -0
- package/dist/shamar/list-headers.d.ts.map +1 -0
- package/dist/shamar/list-headers.js +218 -0
- package/dist/shamar/list-headers.js.map +1 -0
- package/dist/shamar/list-query.d.ts +229 -0
- package/dist/shamar/list-query.d.ts.map +1 -0
- package/dist/shamar/list-query.js +564 -0
- package/dist/shamar/list-query.js.map +1 -0
- package/dist/shamar/menu.d.ts +48 -0
- package/dist/shamar/menu.d.ts.map +1 -0
- package/dist/shamar/menu.js +93 -0
- package/dist/shamar/menu.js.map +1 -0
- package/dist/shamar/paths.d.ts +5 -0
- package/dist/shamar/paths.d.ts.map +1 -0
- package/dist/shamar/paths.js +16 -0
- package/dist/shamar/paths.js.map +1 -0
- package/dist/shamar/relation-fields.d.ts +54 -0
- package/dist/shamar/relation-fields.d.ts.map +1 -0
- package/dist/shamar/relation-fields.js +94 -0
- package/dist/shamar/relation-fields.js.map +1 -0
- package/dist/shamar/resource-actions.d.ts +9 -0
- package/dist/shamar/resource-actions.d.ts.map +1 -0
- package/dist/shamar/resource-actions.js +42 -0
- package/dist/shamar/resource-actions.js.map +1 -0
- package/dist/shamar/view-context.d.ts +79 -0
- package/dist/shamar/view-context.d.ts.map +1 -0
- package/dist/shamar/view-context.js +74 -0
- package/dist/shamar/view-context.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +67 -0
- package/resources/views/shamar/dashboard.edge +24 -0
- package/resources/views/shamar/form.edge +87 -0
- package/resources/views/shamar/index.edge +149 -0
- package/resources/views/shamar/partials/boolean-value.edge +25 -0
- package/resources/views/shamar/partials/csrf.edge +1 -0
- package/resources/views/shamar/partials/detail-entry.edge +72 -0
- package/resources/views/shamar/partials/dialog-host.edge +125 -0
- package/resources/views/shamar/partials/field-affix-icon.edge +23 -0
- package/resources/views/shamar/partials/field-input.edge +585 -0
- package/resources/views/shamar/partials/field-relation-checkbox.edge +104 -0
- package/resources/views/shamar/partials/field-relation-m2m.edge +110 -0
- package/resources/views/shamar/partials/field-relation-m2o.edge +116 -0
- package/resources/views/shamar/partials/field-relation-table.edge +139 -0
- package/resources/views/shamar/partials/form-container.edge +82 -0
- package/resources/views/shamar/partials/icon.edge +14 -0
- package/resources/views/shamar/partials/list-row.edge +73 -0
- package/resources/views/shamar/partials/list-toolbar.edge +269 -0
- package/resources/views/shamar/partials/nav-mobile.edge +21 -0
- package/resources/views/shamar/partials/nav.edge +58 -0
- package/resources/views/shamar/partials/page-heading.edge +130 -0
- package/resources/views/shamar/partials/pagination.edge +73 -0
- package/resources/views/shamar/partials/record-pager.edge +37 -0
- package/resources/views/shamar/partials/schema-node.edge +289 -0
- package/resources/views/shamar/partials/shell-close.edge +20 -0
- package/resources/views/shamar/partials/shell-open.edge +51 -0
- package/resources/views/shamar/partials/toast.edge +5 -0
- package/resources/views/shamar/partials/topbar.edge +115 -0
- package/resources/views/shamar/show.edge +17 -0
- package/stubs/config/shamar.stub +29 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
2
|
+
import type { ShamarConfig } from './config.js';
|
|
3
|
+
export declare class AssetsController {
|
|
4
|
+
private readonly config;
|
|
5
|
+
private readonly panelBranding?;
|
|
6
|
+
constructor(config: ShamarConfig, panelBranding?: ShamarConfig['branding']);
|
|
7
|
+
adminCss({ response }: HttpContext): void;
|
|
8
|
+
shamarUi({ response }: HttpContext): void;
|
|
9
|
+
alpineJs({ response }: HttpContext): void;
|
|
10
|
+
brandingCss({ response }: HttpContext): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=assets-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets-controller.d.ts","sourceRoot":"","sources":["../src/assets-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBADd,MAAM,EAAE,YAAY,EACpB,aAAa,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC;IAG3D,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;IAMlC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;IAMlC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;IAMlC,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW;CAOtC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { buildBrandingCss, resolveBranding } from './shamar/branding.js';
|
|
3
|
+
import { shamarAdminCssPath, shamarAlpineJsPath, shamarUiJsPath, } from './shamar/paths.js';
|
|
4
|
+
export class AssetsController {
|
|
5
|
+
config;
|
|
6
|
+
panelBranding;
|
|
7
|
+
constructor(config, panelBranding) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.panelBranding = panelBranding;
|
|
10
|
+
}
|
|
11
|
+
adminCss({ response }) {
|
|
12
|
+
response.header('Content-Type', 'text/css; charset=utf-8');
|
|
13
|
+
response.header('Cache-Control', 'public, max-age=3600');
|
|
14
|
+
return response.send(readFileSync(shamarAdminCssPath(), 'utf8'));
|
|
15
|
+
}
|
|
16
|
+
shamarUi({ response }) {
|
|
17
|
+
response.header('Content-Type', 'application/javascript; charset=utf-8');
|
|
18
|
+
response.header('Cache-Control', 'no-cache');
|
|
19
|
+
return response.send(readFileSync(shamarUiJsPath(), 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
alpineJs({ response }) {
|
|
22
|
+
response.header('Content-Type', 'application/javascript; charset=utf-8');
|
|
23
|
+
response.header('Cache-Control', 'public, max-age=3600');
|
|
24
|
+
return response.send(readFileSync(shamarAlpineJsPath(), 'utf8'));
|
|
25
|
+
}
|
|
26
|
+
brandingCss({ response }) {
|
|
27
|
+
response.header('Content-Type', 'text/css; charset=utf-8');
|
|
28
|
+
response.header('Cache-Control', 'no-cache');
|
|
29
|
+
return response.send(buildBrandingCss(resolveBranding(this.panelBranding ?? this.config.branding)));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=assets-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets-controller.js","sourceRoot":"","sources":["../src/assets-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,MAAM,OAAO,gBAAgB;IAER;IACA;IAFnB,YACmB,MAAoB,EACpB,aAAwC;QADxC,WAAM,GAAN,MAAM,CAAc;QACpB,kBAAa,GAAb,aAAa,CAA2B;IACxD,CAAC;IAEJ,QAAQ,CAAC,EAAE,QAAQ,EAAe;QAChC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;QAC3D,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ,CAAC,EAAE,QAAQ,EAAe;QAChC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QACzE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,QAAQ,CAAC,EAAE,QAAQ,EAAe;QAChC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QACzE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,EAAE,QAAQ,EAAe;QACnC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;QAC3D,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,IAAI,CAClB,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC9E,CAAC;IACJ,CAAC;CACF"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { AuthorizerOptions, CherubimUser, RoleResolver } from '@shamar/cherubim';
|
|
2
|
+
import type { PolicyClass } from '@shamar/core';
|
|
3
|
+
import type { DataAdapter, PanelConfig, Resource } from '@shamar/core';
|
|
4
|
+
import { panel as createPanel, type PanelBuilder } from '@shamar/core';
|
|
5
|
+
import type { ShamarHttpContext } from './context.js';
|
|
6
|
+
export type ShamarOrm = 'lucid' | 'mongoose';
|
|
7
|
+
export interface ShamarConfig {
|
|
8
|
+
/** @deprecated Prefer `panels`. Kept for single-panel apps. */
|
|
9
|
+
path?: string;
|
|
10
|
+
/** JSON API prefix (default `/api/shamar`). */
|
|
11
|
+
apiPrefix?: string;
|
|
12
|
+
/** Default ORM for panels that omit `orm` (default `lucid`). */
|
|
13
|
+
orm?: ShamarOrm;
|
|
14
|
+
/** Escape hatch: supply your own DataAdapter (applies to every panel). */
|
|
15
|
+
adapter?: DataAdapter | (() => DataAdapter);
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Prefer `panels[].resources` / `discoverResources`.
|
|
18
|
+
* Used when `panels` is omitted (single default panel).
|
|
19
|
+
*/
|
|
20
|
+
resources?: Array<typeof Resource>;
|
|
21
|
+
/** Filament-style multi-panel registration. */
|
|
22
|
+
panels?: Array<PanelConfig | PanelBuilder>;
|
|
23
|
+
auth?: {
|
|
24
|
+
model?: () => Promise<{
|
|
25
|
+
default: unknown;
|
|
26
|
+
}>;
|
|
27
|
+
/** Redirect target when a panel route requires auth (default `/login`). */
|
|
28
|
+
loginPath?: string;
|
|
29
|
+
/** POST target for sign-out (shown in the admin shell when set). */
|
|
30
|
+
logoutPath?: string;
|
|
31
|
+
/** Adonis auth guard name (default `web`). */
|
|
32
|
+
guard?: string;
|
|
33
|
+
/**
|
|
34
|
+
* When `true`, panel routes require authentication.
|
|
35
|
+
* Defaults to `true` when `guard` or `resolveUser` is set.
|
|
36
|
+
*/
|
|
37
|
+
required?: boolean;
|
|
38
|
+
/** Cherubim strict permission mode (default `true`). */
|
|
39
|
+
strictPermissions?: boolean;
|
|
40
|
+
/** Users matching this predicate bypass all authorization checks. */
|
|
41
|
+
superUser?: AuthorizerOptions['superUser'];
|
|
42
|
+
/** Merge role ids into user permissions. */
|
|
43
|
+
roleResolver?: RoleResolver;
|
|
44
|
+
/** Policy classes keyed by resource slug (Laravel / Adonis style). */
|
|
45
|
+
policies?: Record<string, PolicyClass>;
|
|
46
|
+
/**
|
|
47
|
+
* API credentials (PATs + machine keys).
|
|
48
|
+
*
|
|
49
|
+
* Dual-header mode (recommended for mobile / public APIs):
|
|
50
|
+
* - `X-Api-Key` — machine gateway key (overall API access)
|
|
51
|
+
* - `Authorization: Bearer` — user PAT (endpoint identity)
|
|
52
|
+
*
|
|
53
|
+
* Single-credential mode still works: Bearer or X-Api-Key alone.
|
|
54
|
+
*/
|
|
55
|
+
apiKeys?: {
|
|
56
|
+
resolve: (plainText: string, ctx: ShamarHttpContext) => CherubimUser | null | Promise<CherubimUser | null>;
|
|
57
|
+
/**
|
|
58
|
+
* When `true`, apply {@link RequireApiKeyMiddleware} to the `/api/shamar`
|
|
59
|
+
* route group. Omit (or `false`) so API keys are only required on routes
|
|
60
|
+
* that explicitly use the middleware.
|
|
61
|
+
*/
|
|
62
|
+
protectApi?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* When both gateway key and user are present, intersect the user’s
|
|
65
|
+
* permissions with the machine key’s abilities (default `true`).
|
|
66
|
+
*/
|
|
67
|
+
intersectGatewayAbilities?: boolean;
|
|
68
|
+
};
|
|
69
|
+
/** Custom principal resolver (overrides guard-based mapping). */
|
|
70
|
+
resolveUser?: (ctx: ShamarHttpContext) => CherubimUser | null | Promise<CherubimUser | null>;
|
|
71
|
+
};
|
|
72
|
+
/** Default branding inherited by panels without their own. */
|
|
73
|
+
branding?: PanelConfig['branding'];
|
|
74
|
+
}
|
|
75
|
+
export declare function defineConfig(config: ShamarConfig): ShamarConfig & {
|
|
76
|
+
panels: PanelConfig[];
|
|
77
|
+
};
|
|
78
|
+
export { createPanel as panel };
|
|
79
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EAET,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;IACnC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAC5C,2EAA2E;QAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,oEAAoE;QACpE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,wDAAwD;QACxD,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,qEAAqE;QACrE,SAAS,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC3C,4CAA4C;QAC5C,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvC;;;;;;;;WAQG;QACH,OAAO,CAAC,EAAE;YACR,OAAO,EAAE,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,iBAAiB,KACnB,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;YACxD;;;;eAIG;YACH,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB;;;eAGG;YACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;SACrC,CAAC;QACF,iEAAiE;QACjE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;KAC9F,CAAC;IACF,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;CACpC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG;IAAE,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAU3F;AAED,OAAO,EAAE,WAAW,IAAI,KAAK,EAAE,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { panel as createPanel } from '@shamar/core';
|
|
2
|
+
export function defineConfig(config) {
|
|
3
|
+
const panels = normalizePanels(config);
|
|
4
|
+
return {
|
|
5
|
+
path: panels[0]?.path ?? '/admin',
|
|
6
|
+
apiPrefix: '/api/shamar',
|
|
7
|
+
orm: 'lucid',
|
|
8
|
+
resources: panels[0]?.resources ?? [],
|
|
9
|
+
...config,
|
|
10
|
+
panels,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export { createPanel as panel };
|
|
14
|
+
function normalizePanels(config) {
|
|
15
|
+
if (config.panels && config.panels.length > 0) {
|
|
16
|
+
return config.panels.map((entry) => {
|
|
17
|
+
const built = typeof entry.build === 'function'
|
|
18
|
+
? entry.build()
|
|
19
|
+
: entry;
|
|
20
|
+
return {
|
|
21
|
+
...built,
|
|
22
|
+
orm: built.orm ?? config.orm,
|
|
23
|
+
branding: built.branding ?? config.branding,
|
|
24
|
+
resources: [...(built.resources ?? [])],
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
{
|
|
30
|
+
id: 'admin',
|
|
31
|
+
path: config.path ?? '/admin',
|
|
32
|
+
orm: config.orm,
|
|
33
|
+
branding: config.branding,
|
|
34
|
+
resources: [...(config.resources ?? [])],
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAqB,MAAM,cAAc,CAAC;AA2EvE,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ;QACjC,SAAS,EAAE,aAAa;QACxB,GAAG,EAAE,OAAO;QACZ,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE;QACrC,GAAG,MAAM;QACT,MAAM;KACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,IAAI,KAAK,EAAE,CAAC;AAEhC,SAAS,eAAe,CAAC,MAAoB;IAC3C,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,OAAQ,KAAsB,CAAC,KAAK,KAAK,UAAU;gBAC/D,CAAC,CAAE,KAAsB,CAAC,KAAK,EAAE;gBACjC,CAAC,CAAE,KAAqB,CAAC;YAC3B,OAAO;gBACL,GAAG,KAAK;gBACR,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;gBAC3C,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SACzC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const stubsRoot: string;
|
|
2
|
+
interface ConfigureCommand {
|
|
3
|
+
prompt: {
|
|
4
|
+
choice(message: string, choices: Array<string | {
|
|
5
|
+
name: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}>, options?: {
|
|
8
|
+
default?: number;
|
|
9
|
+
name?: string;
|
|
10
|
+
}): Promise<string>;
|
|
11
|
+
};
|
|
12
|
+
createCodemods(): Promise<{
|
|
13
|
+
updateRcFile(callback: (rcFile: {
|
|
14
|
+
addProvider(provider: string): void;
|
|
15
|
+
}) => void): Promise<void>;
|
|
16
|
+
makeUsingStub(root: string, stub: string, data: Record<string, unknown>): Promise<void>;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export declare function configure(command: ConfigureCommand): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=configure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAAsD,CAAC;AAE7E,UAAU,gBAAgB;IACxB,MAAM,EAAE;QACN,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,EAC1D,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,GAC5C,OAAO,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;IACF,cAAc,IAAI,OAAO,CAAC;QACxB,YAAY,CACV,QAAQ,EAAE,CAAC,MAAM,EAAE;YAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,KAAK,IAAI,GAClE,OAAO,CAAC,IAAI,CAAC,CAAC;QACjB,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
export const stubsRoot = fileURLToPath(new URL('../stubs', import.meta.url));
|
|
3
|
+
export async function configure(command) {
|
|
4
|
+
const orm = await command.prompt.choice('Which ORM should Shamar use for resources?', [
|
|
5
|
+
{
|
|
6
|
+
name: 'lucid',
|
|
7
|
+
message: 'Lucid (SQL — PostgreSQL, MySQL, SQLite, …)',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
name: 'mongoose',
|
|
11
|
+
message: 'Mongoose (MongoDB)',
|
|
12
|
+
},
|
|
13
|
+
], { default: 0, name: 'orm' });
|
|
14
|
+
const codemods = await command.createCodemods();
|
|
15
|
+
await codemods.updateRcFile((rcFile) => {
|
|
16
|
+
rcFile.addProvider('@shamar/adonis/provider');
|
|
17
|
+
});
|
|
18
|
+
await codemods.makeUsingStub(stubsRoot, 'config/shamar.stub', { orm });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAsB7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAyB;IACvD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CACrC,4CAA4C,EAC5C;QACE;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4CAA4C;SACtD;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,oBAAoB;SAC9B;KACF,EACD,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAC5B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,oBAAoB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
2
|
+
export interface ShamarHttpContext extends HttpContext {
|
|
3
|
+
view: {
|
|
4
|
+
render(template: string, data?: Record<string, unknown>): Promise<unknown>;
|
|
5
|
+
};
|
|
6
|
+
session: {
|
|
7
|
+
flash(key: string, value: unknown): void;
|
|
8
|
+
flashMessages?: {
|
|
9
|
+
has(key: string): boolean;
|
|
10
|
+
get(key: string): unknown;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export type AuthCapableContext = ShamarHttpContext & {
|
|
15
|
+
auth?: {
|
|
16
|
+
use(guard: string): {
|
|
17
|
+
check(): Promise<boolean>;
|
|
18
|
+
user?: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE;QACJ,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5E,CAAC;IACF,OAAO,EAAE;QACP,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;QACzC,aAAa,CAAC,EAAE;YACd,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;YAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SAC3B,CAAC;KACH,CAAC;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG;YAClB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAChC,CAAC;KACH,CAAC;CACH,CAAC"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DataAdapter, ListFilter, ResourceMeta } from '@shamar/core';
|
|
2
|
+
/**
|
|
3
|
+
* Resource controller that handles admin CRUD for a single resource.
|
|
4
|
+
*
|
|
5
|
+
* In a real Adonis app this would use `HttpContext` from `@adonisjs/core/http`.
|
|
6
|
+
* For now the contract is duck-typed so it compiles standalone.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ResourceController {
|
|
9
|
+
private adapter;
|
|
10
|
+
constructor(adapter: DataAdapter);
|
|
11
|
+
/** GET /admin/:slug — list page or JSON. */
|
|
12
|
+
index(meta: ResourceMeta, query: {
|
|
13
|
+
page?: number;
|
|
14
|
+
perPage?: number;
|
|
15
|
+
search?: string;
|
|
16
|
+
sort?: string;
|
|
17
|
+
direction?: 'asc' | 'desc';
|
|
18
|
+
scope?: Record<string, unknown>;
|
|
19
|
+
filters?: ListFilter[];
|
|
20
|
+
groupBy?: string;
|
|
21
|
+
}): Promise<import("@shamar/core").PaginatedResult<Record<string, unknown>>>;
|
|
22
|
+
/** GET /admin/:slug/:id — detail. */
|
|
23
|
+
show(meta: ResourceMeta, id: string): Promise<Record<string, unknown>>;
|
|
24
|
+
/** POST /admin/:slug — create. */
|
|
25
|
+
store(meta: ResourceMeta, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
26
|
+
/** PUT /admin/:slug/:id — update. */
|
|
27
|
+
update(meta: ResourceMeta, id: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
28
|
+
/** DELETE /admin/:slug/:id — delete. */
|
|
29
|
+
destroy(meta: ResourceMeta, id: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1E;;;;;GAKG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAG9B,4CAA4C;IACtC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAaD,qCAAqC;IAC/B,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM;IAIzC,kCAAkC;IAC5B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK7D,qCAAqC;IAC/B,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK1E,wCAAwC;IAClC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM;CAG7C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { validateFormData } from '@shamar/core';
|
|
2
|
+
/**
|
|
3
|
+
* Resource controller that handles admin CRUD for a single resource.
|
|
4
|
+
*
|
|
5
|
+
* In a real Adonis app this would use `HttpContext` from `@adonisjs/core/http`.
|
|
6
|
+
* For now the contract is duck-typed so it compiles standalone.
|
|
7
|
+
*/
|
|
8
|
+
export class ResourceController {
|
|
9
|
+
adapter;
|
|
10
|
+
constructor(adapter) {
|
|
11
|
+
this.adapter = adapter;
|
|
12
|
+
}
|
|
13
|
+
/** GET /admin/:slug — list page or JSON. */
|
|
14
|
+
async index(meta, query) {
|
|
15
|
+
return this.adapter.list(meta, {
|
|
16
|
+
page: query.page ?? 1,
|
|
17
|
+
perPage: query.perPage ?? 15,
|
|
18
|
+
search: query.search,
|
|
19
|
+
sort: query.sort,
|
|
20
|
+
direction: query.direction,
|
|
21
|
+
scope: query.scope,
|
|
22
|
+
filters: query.filters,
|
|
23
|
+
groupBy: query.groupBy,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** GET /admin/:slug/:id — detail. */
|
|
27
|
+
async show(meta, id) {
|
|
28
|
+
return this.adapter.findOne(meta, id);
|
|
29
|
+
}
|
|
30
|
+
/** POST /admin/:slug — create. */
|
|
31
|
+
async store(meta, data) {
|
|
32
|
+
await validateFormData(meta, data, this.adapter);
|
|
33
|
+
return this.adapter.create(meta, data);
|
|
34
|
+
}
|
|
35
|
+
/** PUT /admin/:slug/:id — update. */
|
|
36
|
+
async update(meta, id, data) {
|
|
37
|
+
await validateFormData(meta, data, this.adapter, { recordId: id });
|
|
38
|
+
return this.adapter.update(meta, id, data);
|
|
39
|
+
}
|
|
40
|
+
/** DELETE /admin/:slug/:id — delete. */
|
|
41
|
+
async destroy(meta, id) {
|
|
42
|
+
return this.adapter.delete(meta, id);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAEnB;IADV,YACU,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAC3B,CAAC;IAEJ,4CAA4C;IAC5C,KAAK,CAAC,KAAK,CAAC,IAAkB,EAAE,KAS/B;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;YACrB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;YAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,IAAI,CAAC,IAAkB,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,KAAK,CAAC,IAAkB,EAAE,IAA6B;QAC3D,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,MAAM,CAAC,IAAkB,EAAE,EAAU,EAAE,IAA6B;QACxE,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,OAAO,CAAC,IAAkB,EAAE,EAAU;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ShamarHttpContext } from '../context.js';
|
|
2
|
+
import type { Authorizer } from '@shamar/cherubim';
|
|
3
|
+
import type { ShamarConfig } from '../config.js';
|
|
4
|
+
import type { PanelRuntime } from '../runtime.js';
|
|
5
|
+
export declare class AdminController {
|
|
6
|
+
private readonly panel;
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly resources;
|
|
9
|
+
private readonly basePath;
|
|
10
|
+
private readonly registry;
|
|
11
|
+
private readonly panelBranding;
|
|
12
|
+
private readonly authorizer;
|
|
13
|
+
constructor(panel: PanelRuntime, config: ShamarConfig, authorizer?: Authorizer);
|
|
14
|
+
private isAuthContext;
|
|
15
|
+
private resolveAuth;
|
|
16
|
+
private ensureAuthenticated;
|
|
17
|
+
private ensureResourceAction;
|
|
18
|
+
private shellOpts;
|
|
19
|
+
dashboard(ctx: ShamarHttpContext): Promise<unknown>;
|
|
20
|
+
index(ctx: ShamarHttpContext, options?: {
|
|
21
|
+
asJson?: boolean;
|
|
22
|
+
}): Promise<unknown>;
|
|
23
|
+
create(ctx: ShamarHttpContext, options?: {
|
|
24
|
+
asJson?: boolean;
|
|
25
|
+
}): Promise<unknown>;
|
|
26
|
+
store(ctx: ShamarHttpContext, options?: {
|
|
27
|
+
asJson?: boolean;
|
|
28
|
+
}): Promise<unknown>;
|
|
29
|
+
show(ctx: ShamarHttpContext, options?: {
|
|
30
|
+
asJson?: boolean;
|
|
31
|
+
}): Promise<unknown>;
|
|
32
|
+
edit(ctx: ShamarHttpContext, options?: {
|
|
33
|
+
asJson?: boolean;
|
|
34
|
+
}): Promise<unknown>;
|
|
35
|
+
formState(ctx: ShamarHttpContext): Promise<unknown>;
|
|
36
|
+
summary(ctx: ShamarHttpContext): Promise<unknown>;
|
|
37
|
+
relationSearch(ctx: ShamarHttpContext): Promise<unknown>;
|
|
38
|
+
relationQuickCreate(ctx: ShamarHttpContext): Promise<unknown>;
|
|
39
|
+
relationAttach(ctx: ShamarHttpContext): Promise<unknown>;
|
|
40
|
+
relationDetach(ctx: ShamarHttpContext): Promise<unknown>;
|
|
41
|
+
update(ctx: ShamarHttpContext, options?: {
|
|
42
|
+
asJson?: boolean;
|
|
43
|
+
}): Promise<unknown>;
|
|
44
|
+
destroy(ctx: ShamarHttpContext, options?: {
|
|
45
|
+
asJson?: boolean;
|
|
46
|
+
}): Promise<unknown>;
|
|
47
|
+
/** POST /:slug/bulk — bulk delete or custom bulk actions. */
|
|
48
|
+
bulk(ctx: ShamarHttpContext, options?: {
|
|
49
|
+
asJson?: boolean;
|
|
50
|
+
}): Promise<unknown>;
|
|
51
|
+
/** POST /:slug/:id/action/:action — single-record custom action. */
|
|
52
|
+
recordAction(ctx: ShamarHttpContext, options?: {
|
|
53
|
+
asJson?: boolean;
|
|
54
|
+
}): Promise<unknown>;
|
|
55
|
+
private actionAuthGate;
|
|
56
|
+
private collectBulkIds;
|
|
57
|
+
private runCustomAction;
|
|
58
|
+
private requireResource;
|
|
59
|
+
private withPolicyScope;
|
|
60
|
+
private listQuery;
|
|
61
|
+
private wantsJson;
|
|
62
|
+
private isEmbed;
|
|
63
|
+
private redirectAfterSave;
|
|
64
|
+
private handleFormValidationError;
|
|
65
|
+
private renderForm;
|
|
66
|
+
private resolveRecordPager;
|
|
67
|
+
private applyCreateQueryDefaults;
|
|
68
|
+
private initialFormState;
|
|
69
|
+
private buildRelationUiMap;
|
|
70
|
+
private resourcePayload;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=admin_controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin_controller.d.ts","sourceRoot":"","sources":["../../src/controllers/admin_controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAwDlD,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAGrB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACrC,UAAU,CAAC,EAAE,UAAU;IASzB,OAAO,CAAC,aAAa;YAMP,WAAW;YAIX,mBAAmB;YAanB,oBAAoB;IAiClC,OAAO,CAAC,SAAS;IAsDX,SAAS,CAAC,GAAG,EAAE,iBAAiB;IAchC,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IA4F5D,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAgD7D,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAmD5D,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAgD3D,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IA0D3D,SAAS,CAAC,GAAG,EAAE,iBAAiB;IA4ChC,OAAO,CAAC,GAAG,EAAE,iBAAiB;IAa9B,cAAc,CAAC,GAAG,EAAE,iBAAiB;IA0CrC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB;IAiD1C,cAAc,CAAC,GAAG,EAAE,iBAAiB;IA6CrC,cAAc,CAAC,GAAG,EAAE,iBAAiB;IAyCrC,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAiD7D,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAuBpE,6DAA6D;IACvD,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAgFjE,oEAAoE;IAC9D,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAwCzE,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;YAWR,eAAe;IAyD7B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,iBAAiB;YAuDX,yBAAyB;YAqCzB,UAAU;YAqFV,kBAAkB;IAoChC,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,gBAAgB;YAmCV,kBAAkB;IAoEhC,OAAO,CAAC,eAAe;CA2DxB"}
|