@micro-cms/resource-module 1.0.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.
@@ -0,0 +1,5 @@
1
+ import { CmsModule } from '@micro-cms/types';
2
+
3
+ declare const createResourceModule: () => CmsModule;
4
+
5
+ export { createResourceModule };
@@ -0,0 +1,5 @@
1
+ import { CmsModule } from '@micro-cms/types';
2
+
3
+ declare const createResourceModule: () => CmsModule;
4
+
5
+ export { createResourceModule };
package/dist/index.js ADDED
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createResourceModule: () => createResourceModule
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+ var createResourceModule = () => {
27
+ return {
28
+ manifest: {
29
+ name: "@micro-cms/resource-module",
30
+ version: "1.0.0",
31
+ provides: ["route-provider"],
32
+ requires: ["database-adapter"]
33
+ },
34
+ async load(context) {
35
+ const db = context.runtime.getCapability("database-adapter");
36
+ if (!db) {
37
+ console.error("Resource Module failed to load: database-adapter not found");
38
+ return;
39
+ }
40
+ const routes = [
41
+ // Introspection
42
+ {
43
+ method: "GET",
44
+ path: "/api/schema",
45
+ handler: async (req, res) => {
46
+ const schema = await db.introspect();
47
+ res.json(schema);
48
+ },
49
+ middleware: ["admin-auth"]
50
+ },
51
+ // Generic List
52
+ {
53
+ method: "GET",
54
+ path: "/api/resources/:resource",
55
+ handler: async (req, res) => {
56
+ const { resource } = req.params;
57
+ const { page, limit, sort, ...filter } = req.query;
58
+ const result = await db.find(resource, {
59
+ page: Number(page) || 1,
60
+ limit: Number(limit) || 10,
61
+ sort,
62
+ filter
63
+ });
64
+ res.json(result);
65
+ },
66
+ middleware: ["admin-auth"]
67
+ },
68
+ // Generic Get One
69
+ {
70
+ method: "GET",
71
+ path: "/api/resources/:resource/:id",
72
+ handler: async (req, res) => {
73
+ const { resource, id } = req.params;
74
+ const item = await db.findById(resource, id);
75
+ if (!item) return res.status(404).json({ error: "Not found" });
76
+ res.json(item);
77
+ },
78
+ middleware: ["admin-auth"]
79
+ },
80
+ // Generic Create
81
+ {
82
+ method: "POST",
83
+ path: "/api/resources/:resource",
84
+ handler: async (req, res) => {
85
+ const { resource } = req.params;
86
+ const item = await db.create(resource, req.body);
87
+ res.status(201).json(item);
88
+ },
89
+ middleware: ["admin-auth"]
90
+ }
91
+ ];
92
+ context.runtime.register("route-provider", {
93
+ getRoutes: () => routes
94
+ });
95
+ console.log("Resource Module loaded and registered routes.");
96
+ }
97
+ };
98
+ };
99
+ // Annotate the CommonJS export names for ESM import in node:
100
+ 0 && (module.exports = {
101
+ createResourceModule
102
+ });
package/dist/index.mjs ADDED
@@ -0,0 +1,77 @@
1
+ // src/index.ts
2
+ var createResourceModule = () => {
3
+ return {
4
+ manifest: {
5
+ name: "@micro-cms/resource-module",
6
+ version: "1.0.0",
7
+ provides: ["route-provider"],
8
+ requires: ["database-adapter"]
9
+ },
10
+ async load(context) {
11
+ const db = context.runtime.getCapability("database-adapter");
12
+ if (!db) {
13
+ console.error("Resource Module failed to load: database-adapter not found");
14
+ return;
15
+ }
16
+ const routes = [
17
+ // Introspection
18
+ {
19
+ method: "GET",
20
+ path: "/api/schema",
21
+ handler: async (req, res) => {
22
+ const schema = await db.introspect();
23
+ res.json(schema);
24
+ },
25
+ middleware: ["admin-auth"]
26
+ },
27
+ // Generic List
28
+ {
29
+ method: "GET",
30
+ path: "/api/resources/:resource",
31
+ handler: async (req, res) => {
32
+ const { resource } = req.params;
33
+ const { page, limit, sort, ...filter } = req.query;
34
+ const result = await db.find(resource, {
35
+ page: Number(page) || 1,
36
+ limit: Number(limit) || 10,
37
+ sort,
38
+ filter
39
+ });
40
+ res.json(result);
41
+ },
42
+ middleware: ["admin-auth"]
43
+ },
44
+ // Generic Get One
45
+ {
46
+ method: "GET",
47
+ path: "/api/resources/:resource/:id",
48
+ handler: async (req, res) => {
49
+ const { resource, id } = req.params;
50
+ const item = await db.findById(resource, id);
51
+ if (!item) return res.status(404).json({ error: "Not found" });
52
+ res.json(item);
53
+ },
54
+ middleware: ["admin-auth"]
55
+ },
56
+ // Generic Create
57
+ {
58
+ method: "POST",
59
+ path: "/api/resources/:resource",
60
+ handler: async (req, res) => {
61
+ const { resource } = req.params;
62
+ const item = await db.create(resource, req.body);
63
+ res.status(201).json(item);
64
+ },
65
+ middleware: ["admin-auth"]
66
+ }
67
+ ];
68
+ context.runtime.register("route-provider", {
69
+ getRoutes: () => routes
70
+ });
71
+ console.log("Resource Module loaded and registered routes.");
72
+ }
73
+ };
74
+ };
75
+ export {
76
+ createResourceModule
77
+ };
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@micro-cms/resource-module",
3
+ "version": "1.0.0",
4
+ "description": "Standardized CRUD and Schema routes for Micro-CMS",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsup src/index.ts --format cjs,esm --dts"
9
+ },
10
+ "peerDependencies": {
11
+ "@micro-cms/types": "workspace:*",
12
+ "@micro-cms/core": "workspace:*"
13
+ },
14
+ "devDependencies": {
15
+ "typescript": "^5.3.3",
16
+ "tsup": "^8.0.2"
17
+ }
18
+ }
package/src/index.ts ADDED
@@ -0,0 +1,80 @@
1
+ import { CmsModule, CmsContext, RouteProvider, RouteDefinition, DataProvider } from '@micro-cms/types';
2
+
3
+ export const createResourceModule = (): CmsModule => {
4
+ return {
5
+ manifest: {
6
+ name: '@micro-cms/resource-module',
7
+ version: '1.0.0',
8
+ provides: ['route-provider'],
9
+ requires: ['database-adapter']
10
+ },
11
+ async load(context: CmsContext) {
12
+ const db = context.runtime.getCapability<DataProvider>('database-adapter');
13
+
14
+ if (!db) {
15
+ console.error('Resource Module failed to load: database-adapter not found');
16
+ return;
17
+ }
18
+
19
+ const routes: RouteDefinition[] = [
20
+ // Introspection
21
+ {
22
+ method: 'GET',
23
+ path: '/api/schema',
24
+ handler: async (req, res) => {
25
+ const schema = await db.introspect();
26
+ res.json(schema);
27
+ },
28
+ middleware: ['admin-auth']
29
+ },
30
+ // Generic List
31
+ {
32
+ method: 'GET',
33
+ path: '/api/resources/:resource',
34
+ handler: async (req, res) => {
35
+ const { resource } = req.params;
36
+ const { page, limit, sort, ...filter } = req.query;
37
+ const result = await db.find(resource, {
38
+ page: Number(page) || 1,
39
+ limit: Number(limit) || 10,
40
+ sort: sort as string,
41
+ filter
42
+ });
43
+ res.json(result);
44
+ },
45
+ middleware: ['admin-auth']
46
+ },
47
+ // Generic Get One
48
+ {
49
+ method: 'GET',
50
+ path: '/api/resources/:resource/:id',
51
+ handler: async (req, res) => {
52
+ const { resource, id } = req.params;
53
+ const item = await db.findById(resource, id);
54
+ if (!item) return res.status(404).json({ error: 'Not found' });
55
+ res.json(item);
56
+ },
57
+ middleware: ['admin-auth']
58
+ },
59
+ // Generic Create
60
+ {
61
+ method: 'POST',
62
+ path: '/api/resources/:resource',
63
+ handler: async (req, res) => {
64
+ const { resource } = req.params;
65
+ const item = await db.create(resource, req.body);
66
+ res.status(201).json(item);
67
+ },
68
+ middleware: ['admin-auth']
69
+ }
70
+ ];
71
+
72
+ // Register the routes as a capability
73
+ context.runtime.register('route-provider', {
74
+ getRoutes: () => routes
75
+ } as RouteProvider);
76
+
77
+ console.log('Resource Module loaded and registered routes.');
78
+ }
79
+ };
80
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "outDir": "./dist",
6
+ "rootDir": "./src"
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "exclude": ["node_modules", "dist"]
10
+ }