klasik 2.4.2 โ 2.5.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/README.md +400 -3
- package/dist/bin/go-schema-gen +0 -0
- package/dist/builders/class-builder.d.ts +2 -0
- package/dist/builders/class-builder.d.ts.map +1 -1
- package/dist/builders/class-builder.js.map +1 -1
- package/dist/cli/commands/generate-crd.d.ts +2 -0
- package/dist/cli/commands/generate-crd.d.ts.map +1 -1
- package/dist/cli/commands/generate-crd.js +43 -0
- package/dist/cli/commands/generate-crd.js.map +1 -1
- package/dist/cli/commands/generate-go.d.ts +2 -0
- package/dist/cli/commands/generate-go.d.ts.map +1 -1
- package/dist/cli/commands/generate-go.js +43 -0
- package/dist/cli/commands/generate-go.js.map +1 -1
- package/dist/cli/commands/generate-jsonschema.d.ts +2 -0
- package/dist/cli/commands/generate-jsonschema.d.ts.map +1 -1
- package/dist/cli/commands/generate-jsonschema.js +10 -0
- package/dist/cli/commands/generate-jsonschema.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +3 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +55 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/utils/options.d.ts +12 -0
- package/dist/cli/utils/options.d.ts.map +1 -1
- package/dist/cli/utils/options.js +23 -0
- package/dist/cli/utils/options.js.map +1 -1
- package/dist/converters/swagger-converter.d.ts +46 -0
- package/dist/converters/swagger-converter.d.ts.map +1 -0
- package/dist/converters/swagger-converter.js +79 -0
- package/dist/converters/swagger-converter.js.map +1 -0
- package/dist/generator/generator.d.ts.map +1 -1
- package/dist/generator/generator.js +6 -2
- package/dist/generator/generator.js.map +1 -1
- package/dist/generators/api-client-generator.d.ts +16 -0
- package/dist/generators/api-client-generator.d.ts.map +1 -1
- package/dist/generators/api-client-generator.js +508 -57
- package/dist/generators/api-client-generator.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/ir/types.d.ts +2 -0
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js.map +1 -1
- package/dist/parsers/openapi-parser.d.ts +17 -0
- package/dist/parsers/openapi-parser.d.ts.map +1 -1
- package/dist/parsers/openapi-parser.js +72 -4
- package/dist/parsers/openapi-parser.js.map +1 -1
- package/dist/plugins/zod-validator-plugin.d.ts +85 -0
- package/dist/plugins/zod-validator-plugin.d.ts.map +1 -0
- package/dist/plugins/zod-validator-plugin.js +446 -0
- package/dist/plugins/zod-validator-plugin.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -16,13 +16,15 @@ Perfect for:
|
|
|
16
16
|
๐ **class-transformer** - Automatic serialization/deserialization
|
|
17
17
|
โ
**class-validator** - Built-in validation decorators
|
|
18
18
|
๐ **Ajv JSON Schema** - Draft 2020-12 validation with deep nesting support
|
|
19
|
+
๐ก๏ธ **Zod Schemas** - Generate Zod validation schemas for runtime type safety
|
|
19
20
|
๐จ **NestJS Ready** - @ApiProperty decorators out of the box
|
|
20
|
-
๐ฆ **Multiple Formats** - OpenAPI, Kubernetes CRDs, JSON Schema, Go structs
|
|
21
|
+
๐ฆ **Multiple Formats** - OpenAPI 3.x, Swagger 2.0 (auto-converted), Kubernetes CRDs, JSON Schema, Go structs
|
|
21
22
|
๐ **ESM Support** - Modern JavaScript modules with .js extensions
|
|
22
23
|
๐ **External $refs** - Automatic resolution of external schemas
|
|
23
24
|
๐ญ **Custom Templates** - Mustache-based customization
|
|
24
25
|
โ๏ธ **Flexible Output** - Multiple export styles (namespace, direct, both)
|
|
25
|
-
|
|
26
|
+
๐ **HTTP Client Choice** - Generate with Axios (default) or native Fetch API
|
|
27
|
+
๐งช **Well Tested** - Comprehensive test coverage (1073+ passing tests)
|
|
26
28
|
๐ **Production Ready** - Used in real-world projects
|
|
27
29
|
๐ **Full CLI** - Rich command-line interface with 4 commands
|
|
28
30
|
๐ **Authentication** - Custom headers including Bearer tokens
|
|
@@ -40,12 +42,18 @@ npx klasik <command>
|
|
|
40
42
|
|
|
41
43
|
### CLI Usage
|
|
42
44
|
|
|
43
|
-
Generate from OpenAPI spec:
|
|
45
|
+
Generate from OpenAPI 3.x spec:
|
|
44
46
|
|
|
45
47
|
```bash
|
|
46
48
|
klasik generate --url https://api.example.com/openapi.json --output ./src/generated
|
|
47
49
|
```
|
|
48
50
|
|
|
51
|
+
Generate from Swagger 2.0 spec (auto-converted to OpenAPI 3.0):
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
klasik generate --url https://petstore.swagger.io/v2/swagger.json --output ./src/generated
|
|
55
|
+
```
|
|
56
|
+
|
|
49
57
|
Generate from Kubernetes CRDs:
|
|
50
58
|
|
|
51
59
|
```bash
|
|
@@ -661,12 +669,287 @@ validate(data);
|
|
|
661
669
|
- Custom validation workflows
|
|
662
670
|
- Schema introspection
|
|
663
671
|
|
|
672
|
+
## Zod Schema Generation
|
|
673
|
+
|
|
674
|
+
Klasik can generate Zod validation schemas alongside your TypeScript models. Zod provides powerful runtime type validation with excellent TypeScript integration and a modern API.
|
|
675
|
+
|
|
676
|
+
### Why Zod Validation?
|
|
677
|
+
|
|
678
|
+
**Advantages:**
|
|
679
|
+
- โ
**TypeScript-first** - Excellent type inference with `z.infer<typeof Schema>`
|
|
680
|
+
- โ
**Modern API** - Fluent, chainable validation methods
|
|
681
|
+
- โ
**Lightweight** - Small bundle size (~12kb gzipped)
|
|
682
|
+
- โ
**Composable** - Easy to extend and combine schemas
|
|
683
|
+
- โ
**Parse, don't validate** - Returns typed, validated data
|
|
684
|
+
- โ
**No decorators** - Works with plain objects, no class instances needed
|
|
685
|
+
|
|
686
|
+
**When to use:**
|
|
687
|
+
- Frontend applications with React, Vue, or Svelte
|
|
688
|
+
- API request/response validation
|
|
689
|
+
- Form validation
|
|
690
|
+
- Configuration file validation
|
|
691
|
+
- Projects preferring functional over decorator-based approach
|
|
692
|
+
|
|
693
|
+
### Basic Usage
|
|
694
|
+
|
|
695
|
+
Enable with the `--use-zod` flag:
|
|
696
|
+
|
|
697
|
+
```bash
|
|
698
|
+
klasik generate \
|
|
699
|
+
--url https://api.example.com/openapi.json \
|
|
700
|
+
--output ./generated \
|
|
701
|
+
--use-zod
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
### Generated Code Structure
|
|
705
|
+
|
|
706
|
+
For each model, Klasik generates a separate `.zod.ts` file:
|
|
707
|
+
|
|
708
|
+
```
|
|
709
|
+
models/
|
|
710
|
+
โโโ user.ts # Class with decorators
|
|
711
|
+
โโโ user.zod.ts # Zod schema
|
|
712
|
+
โโโ address.ts
|
|
713
|
+
โโโ address.zod.ts
|
|
714
|
+
โโโ index.ts # Class exports
|
|
715
|
+
โโโ index.zod.ts # Zod schema exports
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
**Example generated Zod file (`user.zod.ts`):**
|
|
719
|
+
|
|
720
|
+
```typescript
|
|
721
|
+
import { z } from 'zod';
|
|
722
|
+
|
|
723
|
+
/**
|
|
724
|
+
* User schema
|
|
725
|
+
*/
|
|
726
|
+
export const UserSchema = z.object({
|
|
727
|
+
id: z.string().uuid(),
|
|
728
|
+
name: z.string().min(1).max(100),
|
|
729
|
+
email: z.string().email(),
|
|
730
|
+
age: z.number().int().min(0).max(150).optional(),
|
|
731
|
+
role: z.enum(['admin', 'user', 'guest']).optional(),
|
|
732
|
+
});
|
|
733
|
+
|
|
734
|
+
export type User = z.infer<typeof UserSchema>;
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
### Using Zod Schemas
|
|
738
|
+
|
|
739
|
+
**Validate data:**
|
|
740
|
+
|
|
741
|
+
```typescript
|
|
742
|
+
import { UserSchema } from './generated/models/user.zod';
|
|
743
|
+
|
|
744
|
+
const result = UserSchema.safeParse({
|
|
745
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
746
|
+
name: 'John Doe',
|
|
747
|
+
email: 'john@example.com',
|
|
748
|
+
});
|
|
749
|
+
|
|
750
|
+
if (result.success) {
|
|
751
|
+
console.log('Valid user:', result.data);
|
|
752
|
+
// result.data is fully typed as User
|
|
753
|
+
} else {
|
|
754
|
+
console.error('Validation errors:', result.error.issues);
|
|
755
|
+
}
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
**Parse with error throwing:**
|
|
759
|
+
|
|
760
|
+
```typescript
|
|
761
|
+
try {
|
|
762
|
+
const user = UserSchema.parse(data);
|
|
763
|
+
// user is fully typed
|
|
764
|
+
} catch (error) {
|
|
765
|
+
if (error instanceof z.ZodError) {
|
|
766
|
+
console.error('Validation failed:', error.issues);
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
### Type Mapping
|
|
772
|
+
|
|
773
|
+
| OpenAPI/IR Type | Zod Output |
|
|
774
|
+
|-----------------|------------|
|
|
775
|
+
| `string` | `z.string()` |
|
|
776
|
+
| `number` | `z.number()` |
|
|
777
|
+
| `integer` | `z.number().int()` |
|
|
778
|
+
| `boolean` | `z.boolean()` |
|
|
779
|
+
| `array` | `z.array(elementSchema)` |
|
|
780
|
+
| `object` | `z.object({...})` |
|
|
781
|
+
| `enum` | `z.enum([...values])` |
|
|
782
|
+
| `union` | `z.union([...])` |
|
|
783
|
+
| `dictionary` | `z.record(z.string(), valueSchema)` |
|
|
784
|
+
| `unknown` | `z.unknown()` |
|
|
785
|
+
|
|
786
|
+
### Format Validations
|
|
787
|
+
|
|
788
|
+
| Format | Zod Method |
|
|
789
|
+
|--------|------------|
|
|
790
|
+
| `email` | `.email()` |
|
|
791
|
+
| `url` / `uri` | `.url()` |
|
|
792
|
+
| `uuid` | `.uuid()` |
|
|
793
|
+
| `date-time` | `.datetime()` |
|
|
794
|
+
| `date` | `.date()` |
|
|
795
|
+
| `ipv4` | `.ip({ version: 'v4' })` |
|
|
796
|
+
| `ipv6` | `.ip({ version: 'v6' })` |
|
|
797
|
+
|
|
798
|
+
### Constraint Validations
|
|
799
|
+
|
|
800
|
+
| Constraint | Zod Method |
|
|
801
|
+
|------------|------------|
|
|
802
|
+
| `minLength` | `.min(length)` |
|
|
803
|
+
| `maxLength` | `.max(length)` |
|
|
804
|
+
| `pattern` | `.regex(pattern)` |
|
|
805
|
+
| `minimum` | `.min(value)` or `.gte(value)` |
|
|
806
|
+
| `maximum` | `.max(value)` or `.lte(value)` |
|
|
807
|
+
| `exclusiveMinimum` | `.gt(value)` |
|
|
808
|
+
| `exclusiveMaximum` | `.lt(value)` |
|
|
809
|
+
| `minItems` | `.min(length)` on array |
|
|
810
|
+
| `maxItems` | `.max(length)` on array |
|
|
811
|
+
|
|
812
|
+
### Optional and Nullable Handling
|
|
813
|
+
|
|
814
|
+
| Property | Zod Output |
|
|
815
|
+
|----------|------------|
|
|
816
|
+
| Optional (not required) | `.optional()` |
|
|
817
|
+
| Nullable | `.nullable()` |
|
|
818
|
+
| Both optional and nullable | `.nullish()` |
|
|
819
|
+
|
|
820
|
+
### Reference Handling
|
|
821
|
+
|
|
822
|
+
Zod schemas import and use referenced types directly:
|
|
823
|
+
|
|
824
|
+
```typescript
|
|
825
|
+
// address.zod.ts
|
|
826
|
+
import { z } from 'zod';
|
|
827
|
+
|
|
828
|
+
export const AddressSchema = z.object({
|
|
829
|
+
street: z.string(),
|
|
830
|
+
city: z.string(),
|
|
831
|
+
zipCode: z.string(),
|
|
832
|
+
});
|
|
833
|
+
|
|
834
|
+
// user.zod.ts
|
|
835
|
+
import { z } from 'zod';
|
|
836
|
+
import { AddressSchema } from './address.zod';
|
|
837
|
+
|
|
838
|
+
export const UserSchema = z.object({
|
|
839
|
+
name: z.string(),
|
|
840
|
+
homeAddress: AddressSchema,
|
|
841
|
+
workAddress: AddressSchema.optional(),
|
|
842
|
+
});
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
### Combining with Class-based Models
|
|
846
|
+
|
|
847
|
+
You can use both class-based models and Zod schemas together:
|
|
848
|
+
|
|
849
|
+
```bash
|
|
850
|
+
klasik generate \
|
|
851
|
+
--url https://api.example.com/openapi.json \
|
|
852
|
+
--output ./generated \
|
|
853
|
+
--class-validator \
|
|
854
|
+
--use-zod
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
**Use case:** Use class-based models with decorators for NestJS backend validation, and Zod schemas for frontend form validation.
|
|
858
|
+
|
|
859
|
+
### Dependencies
|
|
860
|
+
|
|
861
|
+
When using `--use-zod`, the following dependency is automatically added to `package.json`:
|
|
862
|
+
|
|
863
|
+
```json
|
|
864
|
+
{
|
|
865
|
+
"dependencies": {
|
|
866
|
+
"zod": "^3.23.0"
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
Install it in your project:
|
|
872
|
+
|
|
873
|
+
```bash
|
|
874
|
+
cd generated
|
|
875
|
+
npm install
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
### Complete Example
|
|
879
|
+
|
|
880
|
+
```bash
|
|
881
|
+
# Generate models with Zod validation
|
|
882
|
+
klasik generate-jsonschema \
|
|
883
|
+
--url ./schemas/user.json \
|
|
884
|
+
--output ./src/models \
|
|
885
|
+
--use-zod
|
|
886
|
+
|
|
887
|
+
# Use in your code
|
|
888
|
+
cat > example.ts << 'EOF'
|
|
889
|
+
import { UserSchema, User } from './src/models/user.zod';
|
|
890
|
+
|
|
891
|
+
// Valid user
|
|
892
|
+
const validResult = UserSchema.safeParse({
|
|
893
|
+
name: 'Alice Smith',
|
|
894
|
+
email: 'alice@example.com',
|
|
895
|
+
age: 30
|
|
896
|
+
});
|
|
897
|
+
|
|
898
|
+
if (validResult.success) {
|
|
899
|
+
const user: User = validResult.data;
|
|
900
|
+
console.log('Valid user:', user.name);
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
// Invalid user
|
|
904
|
+
const invalidResult = UserSchema.safeParse({
|
|
905
|
+
name: '',
|
|
906
|
+
email: 'invalid-email',
|
|
907
|
+
age: -5
|
|
908
|
+
});
|
|
909
|
+
|
|
910
|
+
if (!invalidResult.success) {
|
|
911
|
+
console.log('Errors:', invalidResult.error.issues);
|
|
912
|
+
// [
|
|
913
|
+
// { path: ['name'], message: 'String must contain at least 1 character(s)' },
|
|
914
|
+
// { path: ['email'], message: 'Invalid email' },
|
|
915
|
+
// { path: ['age'], message: 'Number must be greater than or equal to 0' }
|
|
916
|
+
// ]
|
|
917
|
+
}
|
|
918
|
+
EOF
|
|
919
|
+
|
|
920
|
+
npx ts-node example.ts
|
|
921
|
+
```
|
|
922
|
+
|
|
664
923
|
## CLI Commands
|
|
665
924
|
|
|
666
925
|
### `klasik generate`
|
|
667
926
|
|
|
668
927
|
Generate TypeScript client from OpenAPI specification.
|
|
669
928
|
|
|
929
|
+
**Supported formats:**
|
|
930
|
+
- OpenAPI 3.x (native support)
|
|
931
|
+
- Swagger 2.0 (automatically converted to OpenAPI 3.0)
|
|
932
|
+
|
|
933
|
+
**Swagger 2.0 Auto-Conversion:**
|
|
934
|
+
|
|
935
|
+
Klasik automatically detects Swagger 2.0 specifications and converts them to OpenAPI 3.0 before generation. This is transparent - you don't need to do anything special:
|
|
936
|
+
|
|
937
|
+
```bash
|
|
938
|
+
# Works with Swagger 2.0 specs
|
|
939
|
+
klasik generate \
|
|
940
|
+
--url https://petstore.swagger.io/v2/swagger.json \
|
|
941
|
+
--output ./generated
|
|
942
|
+
|
|
943
|
+
# Output: "Converting Swagger 2.0 to OpenAPI 3.0..."
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
The conversion handles:
|
|
947
|
+
- Path and operation migration
|
|
948
|
+
- Parameter format changes
|
|
949
|
+
- Security scheme updates
|
|
950
|
+
- Response object structure
|
|
951
|
+
- Schema definitions to components
|
|
952
|
+
|
|
670
953
|
**Usage:**
|
|
671
954
|
|
|
672
955
|
```bash
|
|
@@ -680,17 +963,20 @@ klasik generate [options]
|
|
|
680
963
|
| `-u, --url <url>` | OpenAPI spec URL or file path (required) | - |
|
|
681
964
|
| `-o, --output <dir>` | Output directory (required) | - |
|
|
682
965
|
| `-m, --mode <mode>` | Generation mode: `full` or `models-only` | `full` |
|
|
966
|
+
| `--http-client <client>` | HTTP client: `axios` or `fetch` | `axios` |
|
|
683
967
|
| `--resolve-refs` | Resolve external $ref files | `false` |
|
|
684
968
|
| `--esm` | Add .js extensions for ESM compatibility | `false` |
|
|
685
969
|
| `--skip-js-extensions` | Skip .js extensions (for bundlers) | `false` |
|
|
686
970
|
| `--nestjs-swagger` | Add @ApiProperty decorators | `false` |
|
|
687
971
|
| `--class-validator` | Add class-validator decorators | `false` |
|
|
688
972
|
| `--use-ajv` | Add Ajv JSON Schema validation methods | `false` |
|
|
973
|
+
| `--use-zod` | Generate Zod validation schemas | `false` |
|
|
689
974
|
| `--header <header>` | Custom header (repeatable) | - |
|
|
690
975
|
| `--timeout <ms>` | Request timeout | `30000` |
|
|
691
976
|
| `--template <dir>` | Custom template directory | - |
|
|
692
977
|
| `--keep-spec` | Keep downloaded spec file(s) | `false` |
|
|
693
978
|
| `--export-style <style>` | Export style: `namespace`, `direct`, `both`, `none` | `namespace` |
|
|
979
|
+
| `--clean` | Remove output directory before generation | `false` |
|
|
694
980
|
|
|
695
981
|
**Examples:**
|
|
696
982
|
|
|
@@ -747,6 +1033,12 @@ klasik generate \
|
|
|
747
1033
|
--url ./openapi.yaml \
|
|
748
1034
|
--output ./generated \
|
|
749
1035
|
--template ./my-templates
|
|
1036
|
+
|
|
1037
|
+
# With native fetch instead of Axios
|
|
1038
|
+
klasik generate \
|
|
1039
|
+
--url ./openapi.yaml \
|
|
1040
|
+
--output ./generated \
|
|
1041
|
+
--http-client fetch
|
|
750
1042
|
```
|
|
751
1043
|
|
|
752
1044
|
### `klasik download`
|
|
@@ -812,12 +1104,14 @@ klasik generate-crd [options]
|
|
|
812
1104
|
| `--nestjs-swagger` | Add @ApiProperty decorators | `false` |
|
|
813
1105
|
| `--class-validator` | Add class-validator decorators | `false` |
|
|
814
1106
|
| `--use-ajv` | Add Ajv JSON Schema validation methods | `false` |
|
|
1107
|
+
| `--use-zod` | Generate Zod validation schemas | `false` |
|
|
815
1108
|
| `--esm` | Add .js extensions for ESM | `false` |
|
|
816
1109
|
| `--header <header>` | Custom header (repeatable) | - |
|
|
817
1110
|
| `--resolve-refs` | Resolve external $ref files | `false` |
|
|
818
1111
|
| `--template <dir>` | Custom template directory | - |
|
|
819
1112
|
| `--keep-spec` | Keep downloaded spec file(s) | `false` |
|
|
820
1113
|
| `--timeout <ms>` | Request timeout | `30000` |
|
|
1114
|
+
| `--clean` | Remove output directory before generation | `false` |
|
|
821
1115
|
|
|
822
1116
|
**Examples:**
|
|
823
1117
|
|
|
@@ -882,12 +1176,14 @@ klasik generate-jsonschema [options]
|
|
|
882
1176
|
| `--nestjs-swagger` | Add @ApiProperty decorators | `false` |
|
|
883
1177
|
| `--class-validator` | Add class-validator decorators | `false` |
|
|
884
1178
|
| `--use-ajv` | Add Ajv JSON Schema validation methods | `false` |
|
|
1179
|
+
| `--use-zod` | Generate Zod validation schemas | `false` |
|
|
885
1180
|
| `--esm` | Add .js extensions for ESM | `false` |
|
|
886
1181
|
| `--header <header>` | Custom header (repeatable) | - |
|
|
887
1182
|
| `--resolve-refs` | Resolve external $ref files | `false` |
|
|
888
1183
|
| `--template <dir>` | Custom template directory | - |
|
|
889
1184
|
| `--keep-spec` | Keep intermediate OpenAPI specs | `false` |
|
|
890
1185
|
| `--timeout <ms>` | Request timeout | `30000` |
|
|
1186
|
+
| `--clean` | Remove output directory before generation | `false` |
|
|
891
1187
|
|
|
892
1188
|
**Examples:**
|
|
893
1189
|
|
|
@@ -936,12 +1232,14 @@ klasik generate-go [options]
|
|
|
936
1232
|
| `--nestjs-swagger` | Add @ApiProperty decorators | `false` |
|
|
937
1233
|
| `--class-validator` | Add class-validator decorators | `false` |
|
|
938
1234
|
| `--use-ajv` | Add Ajv JSON Schema validation methods | `false` |
|
|
1235
|
+
| `--use-zod` | Generate Zod validation schemas | `false` |
|
|
939
1236
|
| `--esm` | Add .js extensions for ESM | `false` |
|
|
940
1237
|
| `--template <dir>` | Custom template directory | - |
|
|
941
1238
|
| `--export-style <style>` | Export style: `namespace`, `direct`, `both`, `none` | `namespace` |
|
|
942
1239
|
| `--bare` | Generate models directly in output dir | `false` |
|
|
943
1240
|
| `--go-tool-path <path>` | Path to go-schema-gen binary | auto-detected |
|
|
944
1241
|
| `--allow-additional-properties` | Allow additional properties in JSON Schema | `false` |
|
|
1242
|
+
| `--clean` | Remove output directory before generation | `false` |
|
|
945
1243
|
|
|
946
1244
|
**Prerequisites:**
|
|
947
1245
|
- Go 1.21+ must be installed (first-time setup is automatic)
|
|
@@ -1514,6 +1812,103 @@ klasik generate \
|
|
|
1514
1812
|
--skip-js-extensions
|
|
1515
1813
|
```
|
|
1516
1814
|
|
|
1815
|
+
### HTTP Client Options
|
|
1816
|
+
|
|
1817
|
+
Klasik supports two HTTP clients for generated API classes: **Axios** (default) and **native Fetch API**.
|
|
1818
|
+
|
|
1819
|
+
#### Axios (Default)
|
|
1820
|
+
|
|
1821
|
+
The default HTTP client uses Axios, which provides:
|
|
1822
|
+
- Automatic request/response transformation
|
|
1823
|
+
- Request cancellation
|
|
1824
|
+
- Interceptors for request/response manipulation
|
|
1825
|
+
- Wide browser and Node.js compatibility
|
|
1826
|
+
|
|
1827
|
+
```bash
|
|
1828
|
+
klasik generate \
|
|
1829
|
+
--url ./openapi.yaml \
|
|
1830
|
+
--output ./generated
|
|
1831
|
+
# --http-client axios (default)
|
|
1832
|
+
```
|
|
1833
|
+
|
|
1834
|
+
**Generated code uses:**
|
|
1835
|
+
```typescript
|
|
1836
|
+
import { AxiosInstance, AxiosResponse } from 'axios';
|
|
1837
|
+
|
|
1838
|
+
export class UsersApi {
|
|
1839
|
+
constructor(configuration: Configuration, axios: AxiosInstance) {
|
|
1840
|
+
this.configuration = configuration;
|
|
1841
|
+
this.axios = axios;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
async getUser(id: string): Promise<AxiosResponse<User>> {
|
|
1845
|
+
// Uses this.axios.request()
|
|
1846
|
+
}
|
|
1847
|
+
}
|
|
1848
|
+
```
|
|
1849
|
+
|
|
1850
|
+
#### Native Fetch
|
|
1851
|
+
|
|
1852
|
+
For projects that prefer native APIs or want to minimize dependencies, use the `--http-client fetch` option:
|
|
1853
|
+
|
|
1854
|
+
```bash
|
|
1855
|
+
klasik generate \
|
|
1856
|
+
--url ./openapi.yaml \
|
|
1857
|
+
--output ./generated \
|
|
1858
|
+
--http-client fetch
|
|
1859
|
+
```
|
|
1860
|
+
|
|
1861
|
+
**Benefits:**
|
|
1862
|
+
- No external HTTP dependencies (no Axios)
|
|
1863
|
+
- Smaller bundle size
|
|
1864
|
+
- Native browser API
|
|
1865
|
+
- Works in modern Node.js (18+), Deno, Bun, and edge runtimes
|
|
1866
|
+
- Built-in timeout support using AbortController
|
|
1867
|
+
|
|
1868
|
+
**Generated code uses:**
|
|
1869
|
+
```typescript
|
|
1870
|
+
import { HttpResponse, RequestConfig, httpRequest } from './base';
|
|
1871
|
+
|
|
1872
|
+
export class UsersApi {
|
|
1873
|
+
constructor(configuration: Configuration) {
|
|
1874
|
+
this.configuration = configuration;
|
|
1875
|
+
}
|
|
1876
|
+
|
|
1877
|
+
async getUser(id: string): Promise<HttpResponse<User>> {
|
|
1878
|
+
// Uses httpRequest() wrapper around native fetch
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
1881
|
+
```
|
|
1882
|
+
|
|
1883
|
+
**HttpResponse interface:**
|
|
1884
|
+
```typescript
|
|
1885
|
+
interface HttpResponse<T> {
|
|
1886
|
+
data: T;
|
|
1887
|
+
status: number;
|
|
1888
|
+
statusText: string;
|
|
1889
|
+
headers: Record<string, string>;
|
|
1890
|
+
}
|
|
1891
|
+
```
|
|
1892
|
+
|
|
1893
|
+
**Configuration options for fetch:**
|
|
1894
|
+
```typescript
|
|
1895
|
+
const config = new Configuration({
|
|
1896
|
+
basePath: 'https://api.example.com',
|
|
1897
|
+
headers: { 'Authorization': 'Bearer token' },
|
|
1898
|
+
timeout: 30000, // Request timeout in ms
|
|
1899
|
+
credentials: 'include', // Fetch credentials mode
|
|
1900
|
+
mode: 'cors', // Fetch request mode
|
|
1901
|
+
});
|
|
1902
|
+
|
|
1903
|
+
const api = new UsersApi(config);
|
|
1904
|
+
```
|
|
1905
|
+
|
|
1906
|
+
**Response handling:**
|
|
1907
|
+
- JSON responses (`application/json`, `*+json`) are automatically parsed
|
|
1908
|
+
- Text responses (`text/*`) are returned as strings
|
|
1909
|
+
- Binary responses are returned as `ArrayBuffer`
|
|
1910
|
+
- Empty responses (204 No Content) are handled gracefully
|
|
1911
|
+
|
|
1517
1912
|
### Custom Templates
|
|
1518
1913
|
|
|
1519
1914
|
Klasik uses Mustache templates for code generation. You can provide custom templates:
|
|
@@ -1646,6 +2041,8 @@ Built with:
|
|
|
1646
2041
|
- [class-validator](https://github.com/typestack/class-validator) - Runtime validation
|
|
1647
2042
|
- [ajv](https://github.com/ajv-validator/ajv) - JSON Schema validator
|
|
1648
2043
|
- [ajv-formats](https://github.com/ajv-validator/ajv-formats) - Format validation for Ajv
|
|
2044
|
+
- [zod](https://github.com/colinhacks/zod) - TypeScript-first schema validation
|
|
2045
|
+
- [swagger2openapi](https://github.com/Mermade/oas-kit/tree/main/packages/swagger2openapi) - Swagger 2.0 to OpenAPI 3.0 conversion
|
|
1649
2046
|
- [mustache](https://github.com/janl/mustache.js) - Template engine
|
|
1650
2047
|
- [commander](https://github.com/tj/commander.js) - CLI framework
|
|
1651
2048
|
|
package/dist/bin/go-schema-gen
CHANGED
|
Binary file
|
|
@@ -24,11 +24,13 @@ export interface GeneratorOptions {
|
|
|
24
24
|
nestJsSwagger?: boolean;
|
|
25
25
|
classValidator?: boolean;
|
|
26
26
|
useAjv?: boolean;
|
|
27
|
+
useZod?: boolean;
|
|
27
28
|
crdKindCase?: 'kebab' | 'snake' | 'pascal' | 'camel' | 'none';
|
|
28
29
|
exportStyle?: 'namespace' | 'direct' | 'both' | 'none';
|
|
29
30
|
templateDir?: string;
|
|
30
31
|
skipJsExtensions?: boolean;
|
|
31
32
|
bare?: boolean;
|
|
33
|
+
httpClient?: 'axios' | 'fetch';
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Builds a TypeScript class from a schema definition
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9D,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"class-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9D,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAiB;gBAGrC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;IAWnB;;OAEG;IACH,mBAAmB,IAAI,gBAAgB;IAIvC;;OAEG;IACH,aAAa,IAAI,UAAU;IAI3B;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAUtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,kBAAkB,GAAG,mBAAmB;IA0BjE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAsDnD;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;OAEG;IACH,KAAK,IAAI,UAAU;IAInB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,eAAe;CAcxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-builder.js","sourceRoot":"","sources":["../../src/builders/class-builder.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAOkB;AAOlB,mEAA+D;
|
|
1
|
+
{"version":3,"file":"class-builder.js","sourceRoot":"","sources":["../../src/builders/class-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export interface GenerateCrdOptions {
|
|
|
11
11
|
nestjsSwagger?: boolean;
|
|
12
12
|
classValidator?: boolean;
|
|
13
13
|
useAjv?: boolean;
|
|
14
|
+
useZod?: boolean;
|
|
14
15
|
esm?: boolean;
|
|
15
16
|
header?: string[];
|
|
16
17
|
resolveRefs?: boolean;
|
|
@@ -21,6 +22,7 @@ export interface GenerateCrdOptions {
|
|
|
21
22
|
bare?: boolean;
|
|
22
23
|
timeout?: number;
|
|
23
24
|
include?: string[];
|
|
25
|
+
clean?: boolean;
|
|
24
26
|
}
|
|
25
27
|
export declare function generateCrdAction(options: GenerateCrdOptions): Promise<void>;
|
|
26
28
|
export declare const generateCrdCommand: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-crd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-crd.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-crd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-crd.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgCD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsIlF;AAED,eAAO,MAAM,kBAAkB,SAoBH,CAAC"}
|
|
@@ -4,6 +4,39 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Generates TypeScript models from Kubernetes CRDs
|
|
6
6
|
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
7
40
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
41
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
42
|
};
|
|
@@ -20,6 +53,7 @@ const types_1 = require("../../ir/types");
|
|
|
20
53
|
const ir_filter_1 = require("../../ir/ir-filter");
|
|
21
54
|
const ora_1 = __importDefault(require("ora"));
|
|
22
55
|
const options_1 = require("../utils/options");
|
|
56
|
+
const fs = __importStar(require("fs"));
|
|
23
57
|
/**
|
|
24
58
|
* Merge multiple SchemaIRs into one
|
|
25
59
|
*/
|
|
@@ -47,6 +81,12 @@ function mergeIRs(irs) {
|
|
|
47
81
|
async function generateCrdAction(options) {
|
|
48
82
|
const spinner = (0, ora_1.default)('Loading CRD specifications...').start();
|
|
49
83
|
try {
|
|
84
|
+
// Clean output directory if requested
|
|
85
|
+
if (options.clean && fs.existsSync(options.output)) {
|
|
86
|
+
spinner.text = 'Cleaning output directory...';
|
|
87
|
+
fs.rmSync(options.output, { recursive: true, force: true });
|
|
88
|
+
logger_1.Logger.debug(`Cleaned output directory: ${options.output}`);
|
|
89
|
+
}
|
|
50
90
|
// Parse headers
|
|
51
91
|
const headers = options.header ? (0, options_1.parseHeaders)(options.header) : {};
|
|
52
92
|
logger_1.Logger.debug(`Headers: ${JSON.stringify(headers)}`);
|
|
@@ -133,6 +173,7 @@ async function generateCrdAction(options) {
|
|
|
133
173
|
nestJsSwagger: options.nestjsSwagger,
|
|
134
174
|
classValidator: options.classValidator,
|
|
135
175
|
useAjv: options.useAjv,
|
|
176
|
+
useZod: options.useZod,
|
|
136
177
|
crdKindCase: options.crdKindCase,
|
|
137
178
|
exportStyle: options.exportStyle,
|
|
138
179
|
bare: options.bare,
|
|
@@ -162,6 +203,7 @@ exports.generateCrdCommand = new commander_1.Command('generate-crd')
|
|
|
162
203
|
.addOption((0, options_1.nestjsSwaggerOption)())
|
|
163
204
|
.addOption((0, options_1.classValidatorOption)())
|
|
164
205
|
.addOption((0, options_1.useAjvOption)())
|
|
206
|
+
.addOption((0, options_1.useZodOption)())
|
|
165
207
|
.addOption((0, options_1.esmOption)())
|
|
166
208
|
.addOption((0, options_1.headerOption)())
|
|
167
209
|
.addOption((0, options_1.resolveRefsOption)())
|
|
@@ -171,5 +213,6 @@ exports.generateCrdCommand = new commander_1.Command('generate-crd')
|
|
|
171
213
|
.addOption((0, options_1.exportStyleOption)())
|
|
172
214
|
.addOption((0, options_1.bareOption)())
|
|
173
215
|
.addOption((0, options_1.timeoutOption)())
|
|
216
|
+
.addOption((0, options_1.cleanOption)())
|
|
174
217
|
.action(generateCrdAction);
|
|
175
218
|
//# sourceMappingURL=generate-crd.js.map
|