local-serverless-stack 0.0.4 → 0.0.5
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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.5] - 2026-05-17
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- Upgraded `awpaki` to `^1.4.1`
|
|
12
|
+
- Upgraded `vite` (UI) to `^6.4.2`
|
|
13
|
+
- Bumped transitive dependencies via lockfile refresh: `axios` to 1.16.1, `path-to-regexp` to 0.1.13, `handlebars` to 4.7.9, `picomatch` to 2.3.2, `flatted` to 3.4.2, `qs` to 6.14.2, `follow-redirects` to 1.16.0, `brace-expansion` to 2.1.0, `minimatch` to 9.0.9
|
|
14
|
+
|
|
15
|
+
### Security
|
|
16
|
+
- Resolved Dependabot advisories #1, #4–#10, #12–#14 by updating affected transitive dependencies
|
|
17
|
+
|
|
8
18
|
## [0.0.4] - 2026-02-02
|
|
9
19
|
|
|
10
20
|
### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "local-serverless-stack",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Local control plane for serverless development with LocalStack orchestration",
|
|
5
5
|
"author": "LSS Contributors",
|
|
6
6
|
"license": "MIT",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@aws-sdk/client-sqs": "^3.709.0",
|
|
56
56
|
"@aws-sdk/lib-dynamodb": "^3.709.0",
|
|
57
57
|
"adm-zip": "^0.5.16",
|
|
58
|
-
"awpaki": "^1.
|
|
58
|
+
"awpaki": "^1.4.1",
|
|
59
59
|
"cors": "^2.8.5",
|
|
60
60
|
"express": "^4.21.2"
|
|
61
61
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../../src/server/routes/example.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAoIxB,eAAe,MAAM,CAAC"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { Router } from 'express';
|
|
2
|
-
import { extractEventParams, ParameterType, handleApiGatewayError, HttpStatus, NotFound, BadRequest } from 'awpaki';
|
|
3
|
-
const router = Router();
|
|
4
|
-
/**
|
|
5
|
-
* Example endpoint showing awpaki integration
|
|
6
|
-
* POST /api/example/validate
|
|
7
|
-
*
|
|
8
|
-
* Demonstrates:
|
|
9
|
-
* - Parameter extraction and validation using awpaki
|
|
10
|
-
* - Error handling patterns
|
|
11
|
-
*/
|
|
12
|
-
router.post('/validate', async (req, res) => {
|
|
13
|
-
try {
|
|
14
|
-
// Convert Express request to API Gateway-like event for awpaki
|
|
15
|
-
const mockEvent = {
|
|
16
|
-
body: JSON.stringify(req.body),
|
|
17
|
-
headers: req.headers,
|
|
18
|
-
pathParameters: req.params,
|
|
19
|
-
queryStringParameters: req.query,
|
|
20
|
-
};
|
|
21
|
-
// Extract and validate parameters using awpaki
|
|
22
|
-
const params = extractEventParams({
|
|
23
|
-
body: {
|
|
24
|
-
name: {
|
|
25
|
-
label: 'Name',
|
|
26
|
-
required: true,
|
|
27
|
-
expectedType: ParameterType.STRING,
|
|
28
|
-
},
|
|
29
|
-
email: {
|
|
30
|
-
label: 'Email',
|
|
31
|
-
required: true,
|
|
32
|
-
expectedType: ParameterType.STRING,
|
|
33
|
-
decoder: (value) => {
|
|
34
|
-
const email = String(value);
|
|
35
|
-
if (!email.includes('@')) {
|
|
36
|
-
throw new BadRequest('Invalid email format');
|
|
37
|
-
}
|
|
38
|
-
return email.toLowerCase();
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
age: {
|
|
42
|
-
label: 'Age',
|
|
43
|
-
expectedType: ParameterType.NUMBER,
|
|
44
|
-
default: 0,
|
|
45
|
-
},
|
|
46
|
-
tags: {
|
|
47
|
-
label: 'Tags',
|
|
48
|
-
expectedType: ParameterType.ARRAY,
|
|
49
|
-
default: [],
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
}, mockEvent);
|
|
53
|
-
// Success response
|
|
54
|
-
return res.status(HttpStatus.OK).json({
|
|
55
|
-
message: 'Validation successful with awpaki',
|
|
56
|
-
data: {
|
|
57
|
-
name: params.name,
|
|
58
|
-
email: params.email,
|
|
59
|
-
age: params.age,
|
|
60
|
-
tags: params.tags,
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
// Use awpaki error handler
|
|
66
|
-
const apiGatewayError = handleApiGatewayError(error);
|
|
67
|
-
return res.status(apiGatewayError.statusCode).json({
|
|
68
|
-
error: JSON.parse(apiGatewayError.body),
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
/**
|
|
73
|
-
* Simple health check using awpaki patterns
|
|
74
|
-
* GET /api/example/health
|
|
75
|
-
*/
|
|
76
|
-
router.get('/health', (_req, res) => {
|
|
77
|
-
return res.status(HttpStatus.OK).json({
|
|
78
|
-
status: 'healthy',
|
|
79
|
-
service: 'awpaki-integration-example',
|
|
80
|
-
timestamp: new Date().toISOString(),
|
|
81
|
-
awpaki: {
|
|
82
|
-
version: '1.3.1',
|
|
83
|
-
features: ['parameter-extraction', 'validation', 'error-handling'],
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
/**
|
|
88
|
-
* Example with path parameters
|
|
89
|
-
* GET /api/example/users/:userId
|
|
90
|
-
*/
|
|
91
|
-
router.get('/users/:userId', async (req, res) => {
|
|
92
|
-
try {
|
|
93
|
-
const mockEvent = {
|
|
94
|
-
pathParameters: req.params,
|
|
95
|
-
};
|
|
96
|
-
const params = extractEventParams({
|
|
97
|
-
pathParameters: {
|
|
98
|
-
userId: {
|
|
99
|
-
label: 'User ID',
|
|
100
|
-
required: true,
|
|
101
|
-
expectedType: ParameterType.STRING,
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
}, mockEvent);
|
|
105
|
-
// Simulate user lookup
|
|
106
|
-
const user = {
|
|
107
|
-
id: params.userId,
|
|
108
|
-
name: 'Test User',
|
|
109
|
-
email: 'test@example.com',
|
|
110
|
-
validated: 'via awpaki',
|
|
111
|
-
};
|
|
112
|
-
if (!user) {
|
|
113
|
-
throw new NotFound(`User ${params.userId} not found`);
|
|
114
|
-
}
|
|
115
|
-
return res.status(HttpStatus.OK).json(user);
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
const apiGatewayError = handleApiGatewayError(error);
|
|
119
|
-
return res.status(apiGatewayError.statusCode).json({
|
|
120
|
-
error: JSON.parse(apiGatewayError.body),
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
export default router;
|
|
125
|
-
//# sourceMappingURL=example.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../../src/server/routes/example.ts"],"names":[],"mappings":"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"}
|