express-speed 1.0.5 → 1.0.7

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/README.md CHANGED
@@ -21,9 +21,45 @@ npm install express-speed
21
21
 
22
22
  ---
23
23
 
24
- ## Basic Usage
24
+ ## Quick Start
25
25
 
26
- Creating a simple page:
26
+ ```js
27
+ import { expressSpeed } from "express-speed";
28
+
29
+ expressSpeed.listen(80, {
30
+ page: {
31
+ render: ["./page/**/*.js"],
32
+ exclude: [],
33
+ nodir: true,
34
+ },
35
+ use: [
36
+ (req, res, next) => {
37
+ console.log("request received");
38
+ next();
39
+ },
40
+ ],
41
+ settings: {
42
+ "view engine": "pug",
43
+ views: "./pug",
44
+ },
45
+ });
46
+ ```
47
+
48
+ ### `expressSpeed.listen` Options
49
+
50
+ | Key | Type | Description |
51
+ |-----|------|-------------|
52
+ | `page.render` | `string[]` | Glob patterns to match page files |
53
+ | `page.exclude` | `string[]` | Glob patterns to exclude |
54
+ | `page.nodir` | `boolean` | Skip directories |
55
+ | `use` | `function[]` | Global middleware applied to all routes |
56
+ | `settings` | `object` | Express app settings (`view engine`, `views`, etc.) |
57
+
58
+ ---
59
+
60
+ ## Usage
61
+
62
+ ### Basic Page
27
63
 
28
64
  ```js
29
65
  import { pager } from "express-speed";
@@ -39,9 +75,7 @@ let page = pager
39
75
  export default page;
40
76
  ```
41
77
 
42
- ---
43
-
44
- ## Multiple GET Handlers
78
+ ### Multiple Handlers
45
79
 
46
80
  You can define multiple handlers for the same route.
47
81
 
@@ -60,48 +94,7 @@ export default pager
60
94
  .build();
61
95
  ```
62
96
 
63
- This pattern works in line with Express middleware logic.
64
-
65
- ---
66
-
67
- ## Sub Path Routes
68
-
69
- Use `get(path, handler)` to create different endpoints within the same pager. Sub paths must be written as full paths.
70
-
71
- ```js
72
- import { pager } from "express-speed";
73
-
74
- export default pager
75
- .url("/blog")
76
-
77
- .get((req, res) => {
78
- res.send("Blog Home");
79
- })
80
-
81
- .get("/blog/post/:id", (req, res) => {
82
- res.send(`Post ${req.params.id}`);
83
- })
84
-
85
- .get("/blog/latest", (req, res) => {
86
- res.send("Latest posts");
87
- })
88
-
89
- .build();
90
- ```
91
-
92
- Generated routes:
93
-
94
- ```
95
- /blog
96
- /blog/post/:id
97
- /blog/latest
98
- ```
99
-
100
- ---
101
-
102
- ## Middleware Usage
103
-
104
- You can add middleware inside a pager.
97
+ ### Middleware
105
98
 
106
99
  ```js
107
100
  import { pager } from "express-speed";
@@ -120,11 +113,7 @@ export default pager
120
113
  .build();
121
114
  ```
122
115
 
123
- ---
124
-
125
- ## Role Based Access
126
-
127
- Restrict page access using roles.
116
+ ### Role Based Access
128
117
 
129
118
  ```js
130
119
  import { pager } from "express-speed";
@@ -138,40 +127,59 @@ export default pager
138
127
  .build();
139
128
  ```
140
129
 
141
- ---
142
-
143
- ## API Endpoint Example
130
+ ### Sub Path Routes
144
131
 
145
- Pager can also be used for API endpoints.
132
+ Use `get(path, handler)` to create different endpoints within the same pager.
146
133
 
147
134
  ```js
148
135
  import { pager } from "express-speed";
149
136
 
150
137
  export default pager
151
- .url("/api/user")
138
+ .url("/blog")
152
139
  .get((req, res) => {
153
- res.json({
154
- name: "Murat",
155
- role: "user",
156
- });
140
+ res.send("Blog Home");
141
+ })
142
+ .get("/blog/post/:id", (req, res) => {
143
+ res.send(`Post ${req.params.id}`);
144
+ })
145
+ .get("/blog/latest", (req, res) => {
146
+ res.send("Latest posts");
157
147
  })
158
148
  .build();
159
149
  ```
160
150
 
161
- ---
151
+ Generated routes:
162
152
 
163
- ## GraphQL Integration
153
+ ```
154
+ /blog
155
+ /blog/post/:id
156
+ /blog/latest
157
+ ```
164
158
 
165
- `express-speed` also supports GraphQL endpoints.
159
+ ### Router Style
166
160
 
167
- The following packages must be installed in your project:
161
+ ```js
162
+ import { pager } from "express-speed";
163
+
164
+ export default pager
165
+ .url("/api")
166
+ .get("/users", (req, res) => {
167
+ res.json(["user1", "user2"]);
168
+ })
169
+ .get("/products", (req, res) => {
170
+ res.json(["product1", "product2"]);
171
+ })
172
+ .build();
173
+ ```
174
+
175
+ ---
176
+
177
+ ## GraphQL Integration
168
178
 
169
179
  ```bash
170
180
  npm install express-graphql graphql
171
181
  ```
172
182
 
173
- ### Basic GraphQL Example
174
-
175
183
  ```js
176
184
  import { pager } from "express-speed";
177
185
  import { graphqlHTTP } from "express-graphql";
@@ -199,76 +207,6 @@ export default pager
199
207
  .build();
200
208
  ```
201
209
 
202
- ### GraphQLObjectType Schema Example
203
-
204
- `express-speed` also supports the classic GraphQL schema structure.
205
-
206
- ```js
207
- import { pager } from "express-speed";
208
- import { graphqlHTTP } from "express-graphql";
209
- import { GraphQLObjectType, GraphQLString, GraphQLSchema } from "graphql";
210
-
211
- const UserType = new GraphQLObjectType({
212
- name: "User",
213
- fields: {
214
- name: { type: GraphQLString },
215
- surname: { type: GraphQLString },
216
- },
217
- });
218
-
219
- const RootQuery = new GraphQLObjectType({
220
- name: "RootQueryType",
221
- fields: {
222
- user: {
223
- type: UserType,
224
- resolve() {
225
- return {
226
- name: "Ali",
227
- surname: "Yılmaz",
228
- };
229
- },
230
- },
231
- },
232
- });
233
-
234
- const schema = new GraphQLSchema({
235
- query: RootQuery,
236
- });
237
-
238
- export default pager
239
- .url("/graphql")
240
- .use(
241
- graphqlHTTP({
242
- schema: schema,
243
- graphiql: true,
244
- }),
245
- )
246
- .build();
247
- ```
248
-
249
- ---
250
-
251
- ## Router Style Usage
252
-
253
- Pager can be used like a mini router.
254
-
255
- ```js
256
- import { pager } from "express-speed";
257
-
258
- export default pager
259
- .url("/api")
260
-
261
- .get("/users", (req, res) => {
262
- res.json(["user1", "user2"]);
263
- })
264
-
265
- .get("/products", (req, res) => {
266
- res.json(["product1", "product2"]);
267
- })
268
-
269
- .build();
270
- ```
271
-
272
210
  ---
273
211
 
274
212
  ## Features
@@ -278,7 +216,6 @@ export default pager
278
216
  - Role based access control
279
217
  - Multiple route handlers
280
218
  - Sub path routing
219
+ - Global middleware and settings via `listen`
281
220
  - GraphQL integration
282
- - API and page route support
283
-
284
- ---
221
+ - API and page route support
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "express-speed",
3
3
  "description": "A simple pager system for Express apps",
4
- "version": "1.0.5",
4
+ "version": "1.0.7",
5
5
  "main": "index.js",
6
6
  "type": "module",
7
7
  "files": [
@@ -1,7 +1,6 @@
1
1
  // * ExpressSpeed mvc yapısına uygun daha hızlı şekilde kullanılabilir formatta
2
2
  // * Sayfalara özel Rol kontrol özelliği
3
3
  // * Graphql Uyumlu
4
-
5
4
  import express from "express";
6
5
  import { globSync } from "glob";
7
6
  import pager from "./pager.js";
@@ -20,12 +19,6 @@ let expressSpeed = {
20
19
  use: [],
21
20
  settings: {},
22
21
  },
23
- trigger: {
24
- start: {
25
- },
26
- end: {
27
- }
28
- },
29
22
  complier: {
30
23
  pagesMap(renderPathArrayValue, pageExcludeArrayValue, nodirBooleanValue) {
31
24
  const pageFiles = renderPathArrayValue.flatMap((pathValue) =>
@@ -56,36 +49,16 @@ let expressSpeed = {
56
49
  const app = expressSpeed.app;
57
50
  for (const router of pageObjectValue.methods) {
58
51
  let parameters = ("string" == typeof router.parameters[0]) ? [...router.parameters] : [router.url, ...router.parameters];
59
- switch (router.method.toString().toLowerCase()) {
60
- case "use":
61
- app.use(...parameters);
62
- break;
63
- case "all":
64
- app.all(...parameters);
65
- break;
66
- case "param":
67
- app.param(...parameters);
68
- break;
69
- case "get":
70
- app.get(...parameters);
71
- break;
72
- case "post":
73
- app.post(...parameters);
74
- break;
75
- case "put":
76
- app.put(...parameters);
77
- break;
78
- case "delete":
79
- app.delete(...parameters);
80
- break;
81
-
82
- default:
83
- break;
52
+ if (app[router.method.toString().toLowerCase()]) {
53
+ app[router.method.toString().toLowerCase()](...parameters);
84
54
  }
85
55
  }
86
56
  },
87
57
  async load() {
88
- for (const useValue of expressSpeed.config.use) expressSpeed.app.use(useValue);
58
+ for (const useValue of expressSpeed.config.use) {
59
+ if (Array.isArray(useValue)) expressSpeed.app.use(...useValue);
60
+ else expressSpeed.app.use(useValue);
61
+ }
89
62
  for (let [setKey, setValue] of Object.entries(expressSpeed.config.settings)) expressSpeed.app.set(setKey, setValue);
90
63
  let pagesMap = expressSpeed.complier.pagesMap(expressSpeed.config.path.page.render, expressSpeed.config.path.page.exclude);
91
64
  let pages = await expressSpeed.complier.pagesImport(pagesMap);
@@ -102,21 +75,20 @@ let expressSpeed = {
102
75
  }) {
103
76
  if (typeof config.go == "function") config.go(expressSpeed);
104
77
  config.port = port;
105
- if (typeof config == "object") {
106
- }
107
- expressSpeed.config.path.page = {
108
- ...expressSpeed.config.path.page,
109
- ...config.page
110
- } || {};
111
- expressSpeed.config.port = config.port || 80;
112
- expressSpeed.config.use = config.use || [];
113
- expressSpeed.config.settings = config.settings || {};
78
+ expressSpeed.config.path.page = {
79
+ ...expressSpeed.config.path.page,
80
+ ...config.page
81
+ } || {};
82
+ expressSpeed.config.port = config.port || 80;
83
+ expressSpeed.config.use = config.use || [];
84
+ expressSpeed.config.settings = config.settings || {};
114
85
 
115
86
  expressSpeed.complier.load();
116
87
  expressSpeed.app.listen(expressSpeed.config.port);
117
88
  },
118
89
  }
119
90
 
91
+
120
92
  expressSpeed.pager = pager;
121
93
 
122
94
  export default expressSpeed;
package/src/pager.d.ts ADDED
@@ -0,0 +1,47 @@
1
+ type MethodHandler = (...args: any[]) => typeof pager;
2
+
3
+ declare const pager: {
4
+ _id: number;
5
+ _config: {
6
+ url: string | null;
7
+ role: string | string[] | null;
8
+ usings: any[] | null;
9
+ methods: Array<{ url: string, method: string, parameters: any[] }>;
10
+ };
11
+ url(value: string): typeof pager;
12
+ role(value: string | string[]): typeof pager;
13
+ usings(value: any[]): typeof pager;
14
+ build(): object;
15
+
16
+ // Standart
17
+ use: MethodHandler;
18
+ param: MethodHandler;
19
+ all: MethodHandler;
20
+ get: MethodHandler;
21
+ post: MethodHandler;
22
+ put: MethodHandler;
23
+ delete: MethodHandler;
24
+ patch: MethodHandler;
25
+ head: MethodHandler;
26
+ options: MethodHandler;
27
+ // WebDAV
28
+ checkout: MethodHandler;
29
+ copy: MethodHandler;
30
+ lock: MethodHandler;
31
+ merge: MethodHandler;
32
+ mkactivity: MethodHandler;
33
+ mkcol: MethodHandler;
34
+ move: MethodHandler;
35
+ notify: MethodHandler;
36
+ propfind: MethodHandler;
37
+ proppatch: MethodHandler;
38
+ purge: MethodHandler;
39
+ report: MethodHandler;
40
+ search: MethodHandler;
41
+ subscribe: MethodHandler;
42
+ trace: MethodHandler;
43
+ unlock: MethodHandler;
44
+ unsubscribe: MethodHandler;
45
+ };
46
+
47
+ export default pager;
package/src/pager.js CHANGED
@@ -1,4 +1,11 @@
1
- // * Sayfa yapısını oluşturan obje haline getiren zincir fonksiyonlar
1
+ const HTTP_METHODS = [
2
+ "use", "param", "all",
3
+ "get", "post", "put", "delete", "patch", "head", "options",
4
+ "checkout", "copy", "lock", "merge", "mkactivity",
5
+ "mkcol", "move", "notify", "propfind", "proppatch",
6
+ "purge", "report", "search", "subscribe", "trace",
7
+ "unlock", "unsubscribe"
8
+ ];
2
9
 
3
10
  const pager = {
4
11
  _id: 0,
@@ -7,17 +14,6 @@ const pager = {
7
14
  role: null,
8
15
  usings: null,
9
16
  methods: [],
10
- // method: {
11
- // use: null,
12
- // all: null,
13
- // param: null,
14
- // get: null,
15
- // post: null,
16
- // put: null,
17
- // delete: null,
18
- // },
19
- render: null,
20
- renderConfig: null,
21
17
  },
22
18
  url(urlStringValue) {
23
19
  pager._config.url = urlStringValue;
@@ -31,74 +27,6 @@ const pager = {
31
27
  pager._config.usings = usingsArrayValue;
32
28
  return pager;
33
29
  },
34
- use(...useVariableValue) {
35
- pager._config.methods.push({
36
- url: pager._config.url,
37
- method: "use",
38
- parameters: [...useVariableValue],
39
- });
40
- // ? delete pager.url;
41
- return pager;
42
- },
43
- param(...paramVariableValue) {
44
- pager._config.methods.push({
45
- url: pager._config.url,
46
- method: "param",
47
- parameters: [...paramVariableValue],
48
- });
49
- // ? delete pager.url;
50
- return pager;
51
- },
52
- all(...allFunctionValue) {
53
- pager._config.methods.push({
54
- url: pager._config.url,
55
- method: "all",
56
- parameters: [...allFunctionValue],
57
- });
58
- // ? delete pager.url;
59
- return pager;
60
- },
61
- get(...getFunctionValue) {
62
- pager._config.methods.push({
63
- url: pager._config.url,
64
- method: "get",
65
- parameters: [...getFunctionValue],
66
- });
67
- // ? delete pager.url;
68
- return pager;
69
- },
70
- post(...postFunctionValue) {
71
- pager._config.methods.push({
72
- url: pager._config.url,
73
- method: "post",
74
- parameters: [...postFunctionValue],
75
- });
76
- // ? delete pager.url;
77
- return pager;
78
- },
79
- put(...putFunctionValue) {
80
- pager._config.methods.push({
81
- url: pager._config.url,
82
- method: "put",
83
- parameters: [...putFunctionValue],
84
- });
85
- // ? delete pager.url;
86
- return pager;
87
- },
88
- delete(...deleteFunctionValue) {
89
- pager._config.methods.push({
90
- url: pager._config.url,
91
- method: "delete",
92
- parameters: [...deleteFunctionValue],
93
- });
94
- // ? delete pager.url;
95
- return pager;
96
- },
97
- // render(renderStringValue, renderObjectConfiguration = {}) {
98
- // pager._config.render = renderStringValue;
99
- // pager._config.renderConfig = renderObjectConfiguration;
100
- // return pager;
101
- // },
102
30
  build() {
103
31
  const data = { ...pager._config }
104
32
  pager._config = {
@@ -107,20 +35,20 @@ const pager = {
107
35
  usings: [],
108
36
  settings: [],
109
37
  methods: [],
110
- // method: {
111
- // use: null,
112
- // all: null,
113
- // param: null,
114
- // get: null,
115
- // post: null,
116
- // put: null,
117
- // delete: null,
118
- // },
119
- render: null,
120
- renderConfig: null,
121
38
  };
122
39
  return data;
123
40
  },
124
- }
41
+ };
42
+
43
+ HTTP_METHODS.forEach(method => {
44
+ pager[method] = (...args) => {
45
+ pager._config.methods.push({
46
+ url: pager._config.url,
47
+ method,
48
+ parameters: [...args],
49
+ });
50
+ return pager;
51
+ };
52
+ });
125
53
 
126
54
  export default pager;