@r8s/core 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.
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.r8sValidationError = void 0;
4
+ exports.validateResource = validateResource;
5
+ exports.validateIngress = validateIngress;
6
+ exports.validateService = validateService;
7
+ exports.validateDeployment = validateDeployment;
8
+ exports.validateOperator = validateOperator;
9
+ exports.checkDuplicates = checkDuplicates;
10
+ class r8sValidationError extends Error {
11
+ errors;
12
+ constructor(errors) {
13
+ const message = errors.map((e) => `[${e.code}] ${e.message}`).join('\n');
14
+ super(message);
15
+ this.name = 'r8sValidationError';
16
+ this.errors = errors;
17
+ }
18
+ }
19
+ exports.r8sValidationError = r8sValidationError;
20
+ /** Validate a Kubernetes resource */
21
+ function validateResource(resource) {
22
+ const errors = [];
23
+ const kind = resource.kind || 'unknown';
24
+ // Check apiVersion
25
+ if (!resource.apiVersion) {
26
+ errors.push({
27
+ code: 'MISSING_API_VERSION',
28
+ message: `Resource "${kind}" is missing apiVersion`,
29
+ resource: kind,
30
+ field: 'apiVersion',
31
+ suggestion: 'Add apiVersion, e.g., "apps/v1" for Deployments',
32
+ });
33
+ }
34
+ // Check kind
35
+ if (!resource.kind) {
36
+ errors.push({
37
+ code: 'MISSING_KIND',
38
+ message: 'Resource is missing kind',
39
+ field: 'kind',
40
+ suggestion: 'Add kind, e.g., "Deployment", "Service", "Ingress"',
41
+ });
42
+ }
43
+ // Check metadata
44
+ if (!resource.metadata) {
45
+ errors.push({
46
+ code: 'MISSING_METADATA',
47
+ message: `Resource "${kind}" is missing metadata`,
48
+ resource: kind,
49
+ field: 'metadata',
50
+ suggestion: 'Add metadata: { name: "my-resource" }',
51
+ });
52
+ }
53
+ else {
54
+ // Check name
55
+ if (!resource.metadata.name) {
56
+ errors.push({
57
+ code: 'MISSING_NAME',
58
+ message: `Resource "${kind}" is missing metadata.name`,
59
+ resource: kind,
60
+ field: 'metadata.name',
61
+ suggestion: 'Add a name to identify this resource',
62
+ });
63
+ }
64
+ else if (!/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/.test(resource.metadata.name)) {
65
+ errors.push({
66
+ code: 'INVALID_NAME',
67
+ message: `Resource name "${resource.metadata.name}" is not a valid DNS subdomain name`,
68
+ resource: kind,
69
+ field: 'metadata.name',
70
+ suggestion: 'Use lowercase letters, numbers, and hyphens only. Must start and end with alphanumeric.',
71
+ });
72
+ }
73
+ // Check namespace
74
+ if (resource.metadata.namespace === '') {
75
+ errors.push({
76
+ code: 'EMPTY_NAMESPACE',
77
+ message: `Resource "${resource.metadata.name}" has an empty namespace`,
78
+ resource: kind,
79
+ field: 'metadata.namespace',
80
+ suggestion: 'Either omit namespace (uses "default") or provide a valid namespace name',
81
+ });
82
+ }
83
+ }
84
+ return errors;
85
+ }
86
+ /** Validate an Ingress resource specifically */
87
+ function validateIngress(resource) {
88
+ const errors = validateResource(resource);
89
+ const spec = resource.spec;
90
+ if (!spec) {
91
+ errors.push({
92
+ code: 'MISSING_INGRESS_SPEC',
93
+ message: `Ingress "${resource.metadata?.name}" is missing spec`,
94
+ resource: 'Ingress',
95
+ field: 'spec',
96
+ suggestion: 'Add spec with rules defining host and backend service',
97
+ });
98
+ return errors;
99
+ }
100
+ // Check rules
101
+ if (!spec.rules || spec.rules.length === 0) {
102
+ errors.push({
103
+ code: 'MISSING_INGRESS_RULES',
104
+ message: `Ingress "${resource.metadata?.name}" has no rules`,
105
+ resource: 'Ingress',
106
+ field: 'spec.rules',
107
+ suggestion: 'Add at least one rule with host and backend service',
108
+ });
109
+ }
110
+ else {
111
+ for (let i = 0; i < spec.rules.length; i++) {
112
+ const rule = spec.rules[i];
113
+ if (!rule.host) {
114
+ errors.push({
115
+ code: 'MISSING_INGRESS_HOST',
116
+ message: `Ingress "${resource.metadata?.name}" rule ${i} is missing host`,
117
+ resource: 'Ingress',
118
+ field: `spec.rules[${i}].host`,
119
+ suggestion: 'Add a hostname, e.g., "app.example.com"',
120
+ });
121
+ }
122
+ if (!rule.http || !rule.http.paths || rule.http.paths.length === 0) {
123
+ errors.push({
124
+ code: 'MISSING_INGRESS_PATHS',
125
+ message: `Ingress "${resource.metadata?.name}" rule ${i} has no paths`,
126
+ resource: 'Ingress',
127
+ field: `spec.rules[${i}].http.paths`,
128
+ suggestion: 'Add at least one path with a backend service',
129
+ });
130
+ }
131
+ }
132
+ }
133
+ // Check TLS configuration
134
+ if (spec.tls) {
135
+ for (let i = 0; i < spec.tls.length; i++) {
136
+ const tls = spec.tls[i];
137
+ if (!tls.secretName) {
138
+ errors.push({
139
+ code: 'MISSING_TLS_SECRET',
140
+ message: `Ingress "${resource.metadata?.name}" TLS config ${i} is missing secretName`,
141
+ resource: 'Ingress',
142
+ field: `spec.tls[${i}].secretName`,
143
+ suggestion: 'Add secretName referencing a TLS certificate secret, or use cert-manager with clusterIssuer annotation',
144
+ });
145
+ }
146
+ }
147
+ }
148
+ return errors;
149
+ }
150
+ /** Validate a Service resource */
151
+ function validateService(resource) {
152
+ const errors = validateResource(resource);
153
+ const spec = resource.spec;
154
+ if (!spec) {
155
+ errors.push({
156
+ code: 'MISSING_SERVICE_SPEC',
157
+ message: `Service "${resource.metadata?.name}" is missing spec`,
158
+ resource: 'Service',
159
+ field: 'spec',
160
+ suggestion: 'Add spec with ports and selector',
161
+ });
162
+ return errors;
163
+ }
164
+ // Check ports
165
+ if (!spec.ports || spec.ports.length === 0) {
166
+ errors.push({
167
+ code: 'MISSING_SERVICE_PORTS',
168
+ message: `Service "${resource.metadata?.name}" has no ports`,
169
+ resource: 'Service',
170
+ field: 'spec.ports',
171
+ suggestion: 'Add at least one port, e.g., { port: 80, targetPort: 8080 }',
172
+ });
173
+ }
174
+ else {
175
+ for (let i = 0; i < spec.ports.length; i++) {
176
+ const port = spec.ports[i];
177
+ if (!port.port || port.port < 1 || port.port > 65535) {
178
+ errors.push({
179
+ code: 'INVALID_PORT',
180
+ message: `Service "${resource.metadata?.name}" port ${i} has invalid port number: ${port.port}`,
181
+ resource: 'Service',
182
+ field: `spec.ports[${i}].port`,
183
+ suggestion: 'Port must be between 1 and 65535',
184
+ });
185
+ }
186
+ }
187
+ }
188
+ return errors;
189
+ }
190
+ /** Validate a Deployment resource */
191
+ function validateDeployment(resource) {
192
+ const errors = validateResource(resource);
193
+ const spec = resource.spec;
194
+ if (!spec) {
195
+ errors.push({
196
+ code: 'MISSING_DEPLOYMENT_SPEC',
197
+ message: `Deployment "${resource.metadata?.name}" is missing spec`,
198
+ resource: 'Deployment',
199
+ field: 'spec',
200
+ suggestion: 'Add spec with replicas, selector, and template',
201
+ });
202
+ return errors;
203
+ }
204
+ // Check replicas
205
+ if (spec.replicas !== undefined && (spec.replicas < 0 || !Number.isInteger(spec.replicas))) {
206
+ errors.push({
207
+ code: 'INVALID_REPLICAS',
208
+ message: `Deployment "${resource.metadata?.name}" has invalid replicas: ${spec.replicas}`,
209
+ resource: 'Deployment',
210
+ field: 'spec.replicas',
211
+ suggestion: 'replicas must be a non-negative integer',
212
+ });
213
+ }
214
+ // Check selector
215
+ if (!spec.selector) {
216
+ errors.push({
217
+ code: 'MISSING_SELECTOR',
218
+ message: `Deployment "${resource.metadata?.name}" is missing spec.selector`,
219
+ resource: 'Deployment',
220
+ field: 'spec.selector',
221
+ suggestion: 'Add selector: { matchLabels: { app: "myapp" } }',
222
+ });
223
+ }
224
+ // Check template
225
+ if (!spec.template) {
226
+ errors.push({
227
+ code: 'MISSING_TEMPLATE',
228
+ message: `Deployment "${resource.metadata?.name}" is missing spec.template`,
229
+ resource: 'Deployment',
230
+ field: 'spec.template',
231
+ suggestion: 'Add template with metadata.labels and spec.containers',
232
+ });
233
+ }
234
+ else if (!spec.template.spec ||
235
+ !spec.template.spec.containers ||
236
+ spec.template.spec.containers.length === 0) {
237
+ errors.push({
238
+ code: 'MISSING_CONTAINERS',
239
+ message: `Deployment "${resource.metadata?.name}" has no containers`,
240
+ resource: 'Deployment',
241
+ field: 'spec.template.spec.containers',
242
+ suggestion: 'Add at least one container with name and image',
243
+ });
244
+ }
245
+ return errors;
246
+ }
247
+ /** Validate an operator declaration */
248
+ function validateOperator(operator) {
249
+ const errors = [];
250
+ if (!operator.name) {
251
+ errors.push({
252
+ code: 'MISSING_OPERATOR_NAME',
253
+ message: 'Operator is missing name',
254
+ field: 'name',
255
+ suggestion: 'Provide a unique name for the operator, e.g., "cnpg" or "cert-manager"',
256
+ });
257
+ }
258
+ if (!operator.version) {
259
+ errors.push({
260
+ code: 'MISSING_OPERATOR_VERSION',
261
+ message: `Operator "${operator.name || 'unknown'}" is missing version`,
262
+ field: 'version',
263
+ suggestion: 'Provide a semver version, e.g., "1.22.5"',
264
+ });
265
+ }
266
+ else if (!/^\d+\.\d+\.\d+/.test(operator.version)) {
267
+ errors.push({
268
+ code: 'INVALID_SEMVER',
269
+ message: `Operator "${operator.name}" has invalid version: "${operator.version}"`,
270
+ field: 'version',
271
+ suggestion: 'Use semantic versioning, e.g., "1.22.5" or "1.22.5-rc1"',
272
+ });
273
+ }
274
+ if (!operator.source) {
275
+ errors.push({
276
+ code: 'MISSING_OPERATOR_SOURCE',
277
+ message: `Operator "${operator.name || 'unknown'}" is missing source`,
278
+ field: 'source',
279
+ suggestion: 'Provide source with type (manifest, helm, olm, or flux)',
280
+ });
281
+ }
282
+ return errors;
283
+ }
284
+ /** Check for duplicate resource names in the same namespace */
285
+ function checkDuplicates(resources) {
286
+ const errors = [];
287
+ const seen = new Map();
288
+ resources.forEach((resource, index) => {
289
+ const key = `${resource.kind || 'unknown'}/${resource.metadata?.namespace || 'default'}/${resource.metadata?.name || 'unnamed'}`;
290
+ if (!seen.has(key)) {
291
+ seen.set(key, []);
292
+ }
293
+ seen.get(key).push(index);
294
+ });
295
+ for (const [key, indices] of seen) {
296
+ if (indices.length > 1) {
297
+ const [kind, namespace, name] = key.split('/');
298
+ errors.push({
299
+ code: 'DUPLICATE_RESOURCE',
300
+ message: `Duplicate ${kind} "${name}" in namespace "${namespace}" (found ${indices.length} times)`,
301
+ resource: kind,
302
+ field: 'metadata.name',
303
+ suggestion: 'Each resource must have a unique name within its namespace and kind. Consider using different names or namespaces.',
304
+ });
305
+ }
306
+ }
307
+ return errors;
308
+ }
309
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@r8s/core",
3
+ "version": "0.1.0",
4
+ "description": "JSX factory and renderer for r8s",
5
+ "license": "MIT",
6
+ "author": "Berget AI AB",
7
+ "homepage": "https://r8s.berget.ai",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/berget-ai/r8s.git",
11
+ "directory": "packages/core"
12
+ },
13
+ "bugs": "https://github.com/berget-ai/r8s/issues",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "main": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.js"
27
+ },
28
+ "./defaults": {
29
+ "types": "./dist/defaults.d.ts",
30
+ "import": "./dist/defaults.js",
31
+ "require": "./dist/defaults.js"
32
+ },
33
+ "./jsx-runtime": {
34
+ "types": "./dist/jsx-runtime.d.ts",
35
+ "import": "./dist/jsx-runtime.js",
36
+ "require": "./dist/jsx-runtime.js"
37
+ },
38
+ "./jsx-dev-runtime": {
39
+ "types": "./dist/jsx-runtime.d.ts",
40
+ "import": "./dist/jsx-runtime.js",
41
+ "require": "./dist/jsx-runtime.js"
42
+ },
43
+ "./guardrails": {
44
+ "types": "./dist/guardrails.d.ts",
45
+ "import": "./dist/guardrails.js",
46
+ "require": "./dist/guardrails.js"
47
+ }
48
+ },
49
+ "scripts": {
50
+ "build": "tsc --build",
51
+ "test": "vitest run",
52
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
53
+ },
54
+ "dependencies": {
55
+ "@r8s/k8s-types": "^0.1.0"
56
+ },
57
+ "devDependencies": {
58
+ "typescript": "^5.3.0",
59
+ "vitest": "^1.0.0"
60
+ }
61
+ }