@famgia/omnify 0.11.0 → 0.12.1
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 +89 -165
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/generators/hooksGenerator.d.ts +4 -0
- package/dist/generators/hooksGenerator.d.ts.map +1 -0
- package/dist/generators/hooksGenerator.js +258 -0
- package/dist/generators/hooksGenerator.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/hooks/useFormSubmit.d.ts +36 -0
- package/dist/runtime/hooks/useFormSubmit.d.ts.map +1 -0
- package/dist/runtime/hooks/useFormSubmit.js +86 -0
- package/dist/runtime/hooks/useFormSubmit.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +10 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lib/axios.d.ts +7 -0
- package/dist/runtime/lib/axios.d.ts.map +1 -0
- package/dist/runtime/lib/axios.js +54 -0
- package/dist/runtime/lib/axios.js.map +1 -0
- package/package.json +20 -2
package/README.md
CHANGED
|
@@ -1,211 +1,135 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @famgia/omnify
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Complete Laravel + React solution: Schema-to-TypeScript generation + Runtime helpers for forms
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
|
|
8
|
-
A standalone code generator that reads Omnify schema files and generates TypeScript type definitions, enum constants, and React context providers.
|
|
5
|
+
## Features
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
### 🎯 Build-time (Code Generation)
|
|
8
|
+
- ✅ Convert Omnify `schema-lock.json` to TypeScript types
|
|
9
|
+
- ✅ Generate enum types and options
|
|
10
|
+
- ✅ Generate model interfaces with relations
|
|
11
|
+
- ✅ Generate Enums Context Provider with type-safe helpers
|
|
12
|
+
- ✅ Watch mode for auto-regeneration
|
|
11
13
|
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
### 🚀 Runtime (React Helpers)
|
|
15
|
+
- ✅ `useFormSubmit` - Auto Laravel validation error mapping
|
|
16
|
+
- ✅ `createLaravelAxios` - Pre-configured axios for Laravel
|
|
17
|
+
- ✅ `getCsrfCookie` - CSRF token helper
|
|
18
|
+
- ✅ Full TypeScript support
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
```json
|
|
19
|
-
{
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"@omnifyjp/omnify": "file:../packages/omnify"
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
```
|
|
20
|
+
## Installation
|
|
25
21
|
|
|
26
|
-
Then run:
|
|
27
22
|
```bash
|
|
28
|
-
npm install
|
|
23
|
+
npm install @famgia/omnify
|
|
29
24
|
```
|
|
30
25
|
|
|
31
26
|
## Usage
|
|
32
27
|
|
|
33
|
-
|
|
34
|
-
omnify-build [--schema <path>] --output <output-directory> [--watch]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### Options
|
|
38
|
-
|
|
39
|
-
- `--schema <path>` - Path to schema-lock.json file (optional, auto-detects from `.omnify/`)
|
|
40
|
-
- `--output <dir>` - Output directory for generated files (required)
|
|
41
|
-
- `--watch` - Watch for schema changes and rebuild automatically
|
|
42
|
-
- `--help` - Show help message
|
|
43
|
-
|
|
44
|
-
### Auto-detection
|
|
45
|
-
|
|
46
|
-
If `--schema` is not provided, the tool will automatically search for `schema-lock.json` in:
|
|
47
|
-
1. `../backend/.omnify/schema-lock.json` (from frontend directory)
|
|
48
|
-
2. `./backend/.omnify/schema-lock.json` (from project root)
|
|
49
|
-
3. `./.omnify/schema-lock.json` (current directory)
|
|
50
|
-
|
|
51
|
-
### Examples
|
|
28
|
+
### 1. Generate Types (Build-time)
|
|
52
29
|
|
|
53
30
|
```bash
|
|
54
|
-
#
|
|
55
|
-
omnify-build --output src/omnify
|
|
56
|
-
|
|
57
|
-
# Explicit schema path
|
|
58
|
-
omnify-build --schema backend/.omnify/schema-lock.json --output src/omnify
|
|
31
|
+
# In frontend project
|
|
32
|
+
npx omnify-build --output src/omnify
|
|
59
33
|
|
|
60
|
-
# Watch mode
|
|
61
|
-
omnify-build --output src/omnify --watch
|
|
34
|
+
# Watch mode
|
|
35
|
+
npx omnify-build --output src/omnify --watch
|
|
62
36
|
```
|
|
63
37
|
|
|
64
|
-
|
|
38
|
+
### 2. Use Generated Types & Enums
|
|
65
39
|
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Package.json Scripts
|
|
80
|
-
|
|
81
|
-
Add to your project's `package.json`:
|
|
82
|
-
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"scripts": {
|
|
86
|
-
"omnify:build": "omnify-build --output src/omnify",
|
|
87
|
-
"omnify:dev": "omnify-build --output src/omnify --watch"
|
|
88
|
-
}
|
|
40
|
+
```typescript
|
|
41
|
+
import { User, Company } from '@/omnify/models';
|
|
42
|
+
import { useEnums } from '@/omnify';
|
|
43
|
+
|
|
44
|
+
function MyForm() {
|
|
45
|
+
const { getOptions, getPrefecturesAsNumbers } = useEnums();
|
|
46
|
+
|
|
47
|
+
const accountTypeOptions = getOptions('ApplicationForm', 'account_type');
|
|
48
|
+
const prefectureOptions = getPrefecturesAsNumbers();
|
|
49
|
+
|
|
50
|
+
return <Select options={accountTypeOptions} />;
|
|
89
51
|
}
|
|
90
52
|
```
|
|
91
53
|
|
|
92
|
-
|
|
54
|
+
### 3. Use Runtime Helpers
|
|
93
55
|
|
|
94
56
|
```typescript
|
|
95
|
-
|
|
96
|
-
import {
|
|
97
|
-
|
|
57
|
+
import { useFormSubmit, getCsrfCookie } from '@famgia/omnify';
|
|
58
|
+
import { Form, Button } from 'antd';
|
|
59
|
+
|
|
60
|
+
function MyForm() {
|
|
61
|
+
const [form] = Form.useForm();
|
|
62
|
+
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
|
|
63
|
+
|
|
64
|
+
const { handleSubmit, loading } = useFormSubmit({
|
|
65
|
+
form,
|
|
66
|
+
submitFn: createUser,
|
|
67
|
+
getCsrfToken: () => getCsrfCookie(apiUrl!),
|
|
68
|
+
onSuccess: (response) => {
|
|
69
|
+
message.success('Success!');
|
|
70
|
+
},
|
|
71
|
+
});
|
|
98
72
|
|
|
99
|
-
// Import enum options
|
|
100
|
-
import { entity_typeOptions, account_typeOptions } from '@/omnify/types';
|
|
101
|
-
|
|
102
|
-
// Use in React
|
|
103
|
-
function MySelect() {
|
|
104
|
-
return (
|
|
105
|
-
<select>
|
|
106
|
-
{Object.entries(entity_typeOptions).map(([value, label]) => (
|
|
107
|
-
<option key={value} value={value}>{label}</option>
|
|
108
|
-
))}
|
|
109
|
-
</select>
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Import context provider
|
|
114
|
-
import { EnumsProvider, useEnums } from '@/omnify/contexts';
|
|
115
|
-
|
|
116
|
-
function App() {
|
|
117
73
|
return (
|
|
118
|
-
<
|
|
119
|
-
<
|
|
120
|
-
|
|
74
|
+
<Form form={form} onFinish={handleSubmit}>
|
|
75
|
+
<Form.Item name="email">
|
|
76
|
+
<Input />
|
|
77
|
+
</Form.Item>
|
|
78
|
+
<Button type="primary" htmlType="submit" loading={loading}>
|
|
79
|
+
Submit
|
|
80
|
+
</Button>
|
|
81
|
+
</Form>
|
|
121
82
|
);
|
|
122
83
|
}
|
|
123
|
-
|
|
124
|
-
function Component() {
|
|
125
|
-
const { enums } = useEnums();
|
|
126
|
-
return <div>{enums.entity_type.CORPORATION}</div>;
|
|
127
|
-
}
|
|
128
84
|
```
|
|
129
85
|
|
|
130
|
-
##
|
|
131
|
-
|
|
132
|
-
- ✅ Generates TypeScript interfaces from Omnify models
|
|
133
|
-
- ✅ Creates enum union types
|
|
134
|
-
- ✅ Generates enum constant objects for easy use
|
|
135
|
-
- ✅ Creates React context provider with static enum data
|
|
136
|
-
- ✅ Watch mode for development
|
|
137
|
-
- ✅ Type-safe enum usage
|
|
138
|
-
- ✅ No runtime dependencies (enums are static)
|
|
139
|
-
- ✅ Standalone package - works with any project structure
|
|
140
|
-
- ✅ Supports composite types (JapanAddress, JapanPersonName)
|
|
141
|
-
- ✅ Includes prefectures enum (47 prefectures)
|
|
142
|
-
|
|
143
|
-
## Supported Omnify Types
|
|
86
|
+
## API
|
|
144
87
|
|
|
145
|
-
###
|
|
146
|
-
- `Id`, `Int`, `TinyInt`, `BigInt`, `Float` → `number`
|
|
88
|
+
### `useFormSubmit<TResponse>(options)`
|
|
147
89
|
|
|
148
|
-
|
|
149
|
-
- `String`, `Text`, `LongText`, `Email`, `Password`, `JapanPhone`, `Color`, `Time` → `string`
|
|
90
|
+
Hook for form submission with automatic Laravel validation error mapping.
|
|
150
91
|
|
|
151
|
-
|
|
152
|
-
- `
|
|
92
|
+
**Options:**
|
|
93
|
+
- `form: FormInstance` - Ant Design form instance
|
|
94
|
+
- `submitFn: (values) => Promise<TResponse>` - API call function
|
|
95
|
+
- `getCsrfToken?: () => Promise<void>` - CSRF token getter
|
|
96
|
+
- `onSuccess?: (response, values) => void` - Success callback
|
|
97
|
+
- `onError?: (error, values) => void` - Custom error handler
|
|
98
|
+
- `errorMessages?: { 500?, 401?, 403?, default? }` - Custom error messages
|
|
153
99
|
|
|
154
|
-
|
|
155
|
-
- `
|
|
100
|
+
**Returns:**
|
|
101
|
+
- `handleSubmit: (values) => Promise<void>` - Submit handler
|
|
102
|
+
- `loading: boolean` - Loading state
|
|
103
|
+
- `setLoading: (loading) => void` - Set loading manually
|
|
156
104
|
|
|
157
|
-
###
|
|
158
|
-
- `Json` → `Record<string, any>`
|
|
105
|
+
### `createLaravelAxios(baseURL)`
|
|
159
106
|
|
|
160
|
-
|
|
161
|
-
- `Enum` → Generated union types
|
|
107
|
+
Create pre-configured axios instance for Laravel API.
|
|
162
108
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
### Select Types
|
|
167
|
-
- `Select`, `SingleSelect`, `MultiSelect` → `string`
|
|
168
|
-
|
|
169
|
-
### File Types
|
|
170
|
-
- `File`, `MultiFile` → `string` (file path/URL)
|
|
171
|
-
|
|
172
|
-
### Composite Types
|
|
173
|
-
- `JapanAddress` → Expanded to flat fields (postal_code, prefecture_id, address1-3)
|
|
174
|
-
- `JapanPersonName` → Expanded to flat fields (lastname, firstname, kana_lastname, kana_firstname)
|
|
175
|
-
|
|
176
|
-
## Requirements
|
|
177
|
-
|
|
178
|
-
- Node.js >= 16
|
|
179
|
-
- TypeScript >= 5.0 (peer dependency)
|
|
109
|
+
```typescript
|
|
110
|
+
import { createLaravelAxios } from '@famgia/omnify';
|
|
180
111
|
|
|
181
|
-
|
|
112
|
+
const axios = createLaravelAxios('https://api.example.com');
|
|
113
|
+
```
|
|
182
114
|
|
|
183
|
-
###
|
|
115
|
+
### `getCsrfCookie(baseURL)`
|
|
184
116
|
|
|
185
|
-
|
|
186
|
-
# Run all tests
|
|
187
|
-
npm test
|
|
117
|
+
Get CSRF cookie for Laravel Sanctum.
|
|
188
118
|
|
|
189
|
-
|
|
190
|
-
|
|
119
|
+
```typescript
|
|
120
|
+
import { getCsrfCookie } from '@famgia/omnify';
|
|
191
121
|
|
|
192
|
-
|
|
193
|
-
npm run test:coverage
|
|
122
|
+
await getCsrfCookie('https://api.example.com');
|
|
194
123
|
```
|
|
195
124
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
The package includes comprehensive tests for:
|
|
199
|
-
- Type mapping (Omnify types to TypeScript)
|
|
200
|
-
- Enum generation
|
|
201
|
-
- Model generation
|
|
202
|
-
- Context generation with helper methods
|
|
125
|
+
## Benefits
|
|
203
126
|
|
|
204
|
-
|
|
205
|
-
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
-
|
|
127
|
+
- 🚀 Reduce 100+ lines of boilerplate per form
|
|
128
|
+
- 🛡️ Type-safe enums and models
|
|
129
|
+
- 🔄 Auto-sync with backend schema
|
|
130
|
+
- 📝 Consistent error handling
|
|
131
|
+
- ⚡ Build-time code generation
|
|
132
|
+
- 🎯 Runtime helpers for common tasks
|
|
209
133
|
|
|
210
134
|
## License
|
|
211
135
|
|
package/dist/cli.js
CHANGED
|
@@ -103,6 +103,10 @@ function build(options) {
|
|
|
103
103
|
const contextContent = (0, contextGenerator_1.generateEnumContextFile)(enums);
|
|
104
104
|
fs.writeFileSync(path.join(contextsDir, 'EnumsContext.tsx'), contextContent);
|
|
105
105
|
console.log('✅ Generated contexts/EnumsContext.tsx');
|
|
106
|
+
// Generate hooks and lib
|
|
107
|
+
console.log('Generating hooks and lib...');
|
|
108
|
+
const { generateHooksAndLib } = require('./generators/hooksGenerator');
|
|
109
|
+
generateHooksAndLib(outputDir);
|
|
106
110
|
// Generate index files
|
|
107
111
|
const typesIndexContent = `// Auto-generated by @famgia/omnify
|
|
108
112
|
export * from './enums';
|
|
@@ -119,6 +123,8 @@ export * from './EnumsContext';
|
|
|
119
123
|
export * from './types';
|
|
120
124
|
export * from './contexts';
|
|
121
125
|
export * from './models';
|
|
126
|
+
export * from './hooks';
|
|
127
|
+
export * from './lib';
|
|
122
128
|
`;
|
|
123
129
|
fs.writeFileSync(path.join(outputDir, 'index.ts'), mainIndexContent);
|
|
124
130
|
console.log('✅ Generated index.ts');
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooksGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/hooksGenerator.ts"],"names":[],"mappings":"AAGA,wBAAgB,yBAAyB,IAAI,MAAM,CA+HlD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAyDzC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAuC3D"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateUseFormSubmitHook = generateUseFormSubmitHook;
|
|
37
|
+
exports.generateAxiosLib = generateAxiosLib;
|
|
38
|
+
exports.generateHooksAndLib = generateHooksAndLib;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
function generateUseFormSubmitHook() {
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push("'use client';");
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('// Auto-generated by @famgia/omnify');
|
|
46
|
+
lines.push('// Do not edit this file manually');
|
|
47
|
+
lines.push('');
|
|
48
|
+
lines.push("import { useState } from 'react';");
|
|
49
|
+
lines.push("import { FormInstance, App } from 'antd';");
|
|
50
|
+
lines.push("import { getCsrfCookie } from '../lib/axios';");
|
|
51
|
+
lines.push('');
|
|
52
|
+
lines.push('export interface UseFormSubmitOptions<TResponse = any> {');
|
|
53
|
+
lines.push(' form: FormInstance;');
|
|
54
|
+
lines.push(' submitFn: (values: any) => Promise<TResponse>;');
|
|
55
|
+
lines.push(' onSuccess?: (response: TResponse, values: any) => void | Promise<void>;');
|
|
56
|
+
lines.push(' onError?: (error: any, values: any) => void | Promise<void>;');
|
|
57
|
+
lines.push(' withCsrf?: boolean;');
|
|
58
|
+
lines.push(' errorMessages?: {');
|
|
59
|
+
lines.push(' 500?: string;');
|
|
60
|
+
lines.push(' 401?: string;');
|
|
61
|
+
lines.push(' 403?: string;');
|
|
62
|
+
lines.push(' default?: string;');
|
|
63
|
+
lines.push(' };');
|
|
64
|
+
lines.push('}');
|
|
65
|
+
lines.push('');
|
|
66
|
+
lines.push('export interface UseFormSubmitResult {');
|
|
67
|
+
lines.push(' handleSubmit: (values: any) => Promise<void>;');
|
|
68
|
+
lines.push(' loading: boolean;');
|
|
69
|
+
lines.push(' setLoading: (loading: boolean) => void;');
|
|
70
|
+
lines.push('}');
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push('/**');
|
|
73
|
+
lines.push(' * Custom hook for handling form submission with automatic Laravel validation error mapping');
|
|
74
|
+
lines.push(' */');
|
|
75
|
+
lines.push('export function useFormSubmit<TResponse = any>(');
|
|
76
|
+
lines.push(' options: UseFormSubmitOptions<TResponse>');
|
|
77
|
+
lines.push('): UseFormSubmitResult {');
|
|
78
|
+
lines.push(' const {');
|
|
79
|
+
lines.push(' form,');
|
|
80
|
+
lines.push(' submitFn,');
|
|
81
|
+
lines.push(' onSuccess,');
|
|
82
|
+
lines.push(' onError,');
|
|
83
|
+
lines.push(' withCsrf = true,');
|
|
84
|
+
lines.push(' errorMessages = {},');
|
|
85
|
+
lines.push(' } = options;');
|
|
86
|
+
lines.push('');
|
|
87
|
+
lines.push(' const [loading, setLoading] = useState(false);');
|
|
88
|
+
lines.push(' const { message: messageApi } = App.useApp();');
|
|
89
|
+
lines.push('');
|
|
90
|
+
lines.push(' const handleSubmit = async (values: any): Promise<void> => {');
|
|
91
|
+
lines.push(' setLoading(true);');
|
|
92
|
+
lines.push(' try {');
|
|
93
|
+
lines.push(' if (withCsrf) {');
|
|
94
|
+
lines.push(' await getCsrfCookie();');
|
|
95
|
+
lines.push(' }');
|
|
96
|
+
lines.push('');
|
|
97
|
+
lines.push(' const response = await submitFn(values);');
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push(' if (onSuccess) {');
|
|
100
|
+
lines.push(' await onSuccess(response, values);');
|
|
101
|
+
lines.push(' }');
|
|
102
|
+
lines.push(' } catch (error: any) {');
|
|
103
|
+
lines.push(" console.error('Form submission error:', error);");
|
|
104
|
+
lines.push('');
|
|
105
|
+
lines.push(' if (onError) {');
|
|
106
|
+
lines.push(' await onError(error, values);');
|
|
107
|
+
lines.push(' return;');
|
|
108
|
+
lines.push(' }');
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push(' // Handle validation errors (422)');
|
|
111
|
+
lines.push(' if (error.response?.status === 422 && error.response?.data?.errors) {');
|
|
112
|
+
lines.push(' const errors = error.response.data.errors;');
|
|
113
|
+
lines.push('');
|
|
114
|
+
lines.push(' // Set field errors');
|
|
115
|
+
lines.push(' const formErrors = Object.keys(errors).map((field) => ({');
|
|
116
|
+
lines.push(' name: field,');
|
|
117
|
+
lines.push(' errors: errors[field],');
|
|
118
|
+
lines.push(' }));');
|
|
119
|
+
lines.push(' form.setFields(formErrors);');
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(' // Show error message');
|
|
122
|
+
lines.push(' const errorCount = Object.keys(errors).length;');
|
|
123
|
+
lines.push(' const errorList = Object.values(errors)');
|
|
124
|
+
lines.push(' .map((msgs: any) => msgs[0])');
|
|
125
|
+
lines.push(" .join(' / ');");
|
|
126
|
+
lines.push('');
|
|
127
|
+
lines.push(' messageApi.error({');
|
|
128
|
+
lines.push(' content: `入力内容にエラーがあります(${errorCount}件): ${errorList}`,');
|
|
129
|
+
lines.push(' duration: 8,');
|
|
130
|
+
lines.push(' });');
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push(" console.error('Validation errors:', errors);");
|
|
133
|
+
lines.push(' }');
|
|
134
|
+
lines.push(' // Handle server errors');
|
|
135
|
+
lines.push(' else if (error.response?.status >= 500) {');
|
|
136
|
+
lines.push(' messageApi.error(');
|
|
137
|
+
lines.push(" errorMessages[500] || 'サーバーエラーが発生しました。しばらくしてから再度お試しください。'");
|
|
138
|
+
lines.push(' );');
|
|
139
|
+
lines.push(' }');
|
|
140
|
+
lines.push(' // Handle auth errors');
|
|
141
|
+
lines.push(' else if (error.response?.status === 401 || error.response?.status === 403) {');
|
|
142
|
+
lines.push(' const status = error.response.status as 401 | 403;');
|
|
143
|
+
lines.push(' messageApi.error(');
|
|
144
|
+
lines.push(" errorMessages[status] || '認証エラーが発生しました。再度ログインしてください。'");
|
|
145
|
+
lines.push(' );');
|
|
146
|
+
lines.push(' }');
|
|
147
|
+
lines.push(' // Handle generic errors');
|
|
148
|
+
lines.push(' else {');
|
|
149
|
+
lines.push(' messageApi.error(');
|
|
150
|
+
lines.push(" error.response?.data?.message || errorMessages.default || '送信に失敗しました'");
|
|
151
|
+
lines.push(' );');
|
|
152
|
+
lines.push(' }');
|
|
153
|
+
lines.push(' } finally {');
|
|
154
|
+
lines.push(' setLoading(false);');
|
|
155
|
+
lines.push(' }');
|
|
156
|
+
lines.push(' };');
|
|
157
|
+
lines.push('');
|
|
158
|
+
lines.push(' return {');
|
|
159
|
+
lines.push(' handleSubmit,');
|
|
160
|
+
lines.push(' loading,');
|
|
161
|
+
lines.push(' setLoading,');
|
|
162
|
+
lines.push(' };');
|
|
163
|
+
lines.push('}');
|
|
164
|
+
lines.push('');
|
|
165
|
+
return lines.join('\n');
|
|
166
|
+
}
|
|
167
|
+
function generateAxiosLib() {
|
|
168
|
+
const lines = [];
|
|
169
|
+
lines.push('// Auto-generated by @famgia/omnify');
|
|
170
|
+
lines.push('// Do not edit this file manually');
|
|
171
|
+
lines.push('');
|
|
172
|
+
lines.push("import axios, { AxiosError, InternalAxiosRequestConfig } from 'axios';");
|
|
173
|
+
lines.push('');
|
|
174
|
+
lines.push('// Create axios instance');
|
|
175
|
+
lines.push('const axiosInstance = axios.create({');
|
|
176
|
+
lines.push(" baseURL: process.env.NEXT_PUBLIC_API_URL || 'https://api.jovyam.test',");
|
|
177
|
+
lines.push(' timeout: 30000,');
|
|
178
|
+
lines.push(' withCredentials: true,');
|
|
179
|
+
lines.push(' headers: {');
|
|
180
|
+
lines.push(" 'Accept': 'application/json',");
|
|
181
|
+
lines.push(" 'Content-Type': 'application/json',");
|
|
182
|
+
lines.push(' },');
|
|
183
|
+
lines.push(" xsrfCookieName: 'XSRF-TOKEN',");
|
|
184
|
+
lines.push(" xsrfHeaderName: 'X-XSRF-TOKEN',");
|
|
185
|
+
lines.push('});');
|
|
186
|
+
lines.push('');
|
|
187
|
+
lines.push('// Helper to get cookie value by name');
|
|
188
|
+
lines.push('function getCookie(name: string): string | null {');
|
|
189
|
+
lines.push(" if (typeof document === 'undefined') return null;");
|
|
190
|
+
lines.push(' const value = `; ${document.cookie}`;');
|
|
191
|
+
lines.push(' const parts = value.split(`; ${name}=`);');
|
|
192
|
+
lines.push(" if (parts.length === 2) return parts.pop()?.split(';').shift() || null;");
|
|
193
|
+
lines.push(' return null;');
|
|
194
|
+
lines.push('}');
|
|
195
|
+
lines.push('');
|
|
196
|
+
lines.push('// Request interceptor');
|
|
197
|
+
lines.push('axiosInstance.interceptors.request.use(');
|
|
198
|
+
lines.push(' (config: InternalAxiosRequestConfig) => {');
|
|
199
|
+
lines.push(" const token = getCookie('XSRF-TOKEN');");
|
|
200
|
+
lines.push(' if (token) {');
|
|
201
|
+
lines.push(" config.headers['X-XSRF-TOKEN'] = decodeURIComponent(token);");
|
|
202
|
+
lines.push(' }');
|
|
203
|
+
lines.push(' return config;');
|
|
204
|
+
lines.push(' },');
|
|
205
|
+
lines.push(' (error: AxiosError) => {');
|
|
206
|
+
lines.push(' return Promise.reject(error);');
|
|
207
|
+
lines.push(' }');
|
|
208
|
+
lines.push(');');
|
|
209
|
+
lines.push('');
|
|
210
|
+
lines.push('/**');
|
|
211
|
+
lines.push(' * Get CSRF cookie before making authenticated requests');
|
|
212
|
+
lines.push(' * Required for Laravel Sanctum cookie-based authentication');
|
|
213
|
+
lines.push(' */');
|
|
214
|
+
lines.push('export const getCsrfCookie = async (): Promise<void> => {');
|
|
215
|
+
lines.push(" const baseURL = process.env.NEXT_PUBLIC_API_URL || 'https://api.jovyam.test';");
|
|
216
|
+
lines.push(' await axiosInstance.get(`${baseURL}/sanctum/csrf-cookie`);');
|
|
217
|
+
lines.push('};');
|
|
218
|
+
lines.push('');
|
|
219
|
+
lines.push('export default axiosInstance;');
|
|
220
|
+
lines.push('');
|
|
221
|
+
return lines.join('\n');
|
|
222
|
+
}
|
|
223
|
+
function generateHooksAndLib(outputDir) {
|
|
224
|
+
const hooksDir = path.join(outputDir, 'hooks');
|
|
225
|
+
const libDir = path.join(outputDir, 'lib');
|
|
226
|
+
// Create directories
|
|
227
|
+
if (!fs.existsSync(hooksDir)) {
|
|
228
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
229
|
+
}
|
|
230
|
+
if (!fs.existsSync(libDir)) {
|
|
231
|
+
fs.mkdirSync(libDir, { recursive: true });
|
|
232
|
+
}
|
|
233
|
+
// Generate useFormSubmit hook
|
|
234
|
+
const useFormSubmitContent = generateUseFormSubmitHook();
|
|
235
|
+
fs.writeFileSync(path.join(hooksDir, 'useFormSubmit.tsx'), useFormSubmitContent);
|
|
236
|
+
console.log('✅ Generated hooks/useFormSubmit.tsx');
|
|
237
|
+
// Generate hooks index
|
|
238
|
+
const hooksIndexContent = [
|
|
239
|
+
'// Auto-generated by @famgia/omnify',
|
|
240
|
+
"export * from './useFormSubmit';",
|
|
241
|
+
'',
|
|
242
|
+
].join('\n');
|
|
243
|
+
fs.writeFileSync(path.join(hooksDir, 'index.ts'), hooksIndexContent);
|
|
244
|
+
console.log('✅ Generated hooks/index.ts');
|
|
245
|
+
// Generate axios lib
|
|
246
|
+
const axiosContent = generateAxiosLib();
|
|
247
|
+
fs.writeFileSync(path.join(libDir, 'axios.ts'), axiosContent);
|
|
248
|
+
console.log('✅ Generated lib/axios.ts');
|
|
249
|
+
// Generate lib index
|
|
250
|
+
const libIndexContent = [
|
|
251
|
+
'// Auto-generated by @famgia/omnify',
|
|
252
|
+
"export { default as axios, getCsrfCookie } from './axios';",
|
|
253
|
+
'',
|
|
254
|
+
].join('\n');
|
|
255
|
+
fs.writeFileSync(path.join(libDir, 'index.ts'), libIndexContent);
|
|
256
|
+
console.log('✅ Generated lib/index.ts');
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=hooksGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooksGenerator.js","sourceRoot":"","sources":["../../src/generators/hooksGenerator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./types"), exports);
|
|
18
|
+
// Runtime helpers (for use in app)
|
|
19
|
+
__exportStar(require("./runtime"), exports);
|
|
18
20
|
__exportStar(require("./generators/enumGenerator"), exports);
|
|
19
21
|
__exportStar(require("./generators/modelGenerator"), exports);
|
|
20
22
|
__exportStar(require("./generators/contextGenerator"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,mCAAmC;AACnC,4CAA0B;AAC1B,6DAA2C;AAC3C,8DAA4C;AAC5C,gEAA8C;AAC9C,qDAAmC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { FormInstance } from 'antd';
|
|
2
|
+
export interface UseFormSubmitOptions<TResponse = any> {
|
|
3
|
+
form: FormInstance;
|
|
4
|
+
submitFn: (values: any) => Promise<TResponse>;
|
|
5
|
+
onSuccess?: (response: TResponse, values: any) => void | Promise<void>;
|
|
6
|
+
onError?: (error: any, values: any) => void | Promise<void>;
|
|
7
|
+
getCsrfToken?: () => Promise<void>;
|
|
8
|
+
errorMessages?: {
|
|
9
|
+
500?: string;
|
|
10
|
+
401?: string;
|
|
11
|
+
403?: string;
|
|
12
|
+
default?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface UseFormSubmitResult {
|
|
16
|
+
handleSubmit: (values: any) => Promise<void>;
|
|
17
|
+
loading: boolean;
|
|
18
|
+
setLoading: (loading: boolean) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Custom hook for handling form submission with automatic Laravel validation error mapping
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* const { handleSubmit, loading } = useFormSubmit({
|
|
26
|
+
* form,
|
|
27
|
+
* submitFn: createUser,
|
|
28
|
+
* getCsrfToken: () => getCsrfCookie(apiUrl),
|
|
29
|
+
* onSuccess: (response) => {
|
|
30
|
+
* message.success('Success!');
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function useFormSubmit<TResponse = any>(options: UseFormSubmitOptions<TResponse>): UseFormSubmitResult;
|
|
36
|
+
//# sourceMappingURL=useFormSubmit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormSubmit.d.ts","sourceRoot":"","sources":["../../../src/runtime/hooks/useFormSubmit.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAO,MAAM,MAAM,CAAC;AAEzC,MAAM,WAAW,oBAAoB,CAAC,SAAS,GAAG,GAAG;IACjD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAED,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,SAAS,GAAG,GAAG,EACzC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,GACzC,mBAAmB,CAsFrB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFormSubmit = useFormSubmit;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const antd_1 = require("antd");
|
|
6
|
+
/**
|
|
7
|
+
* Custom hook for handling form submission with automatic Laravel validation error mapping
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* const { handleSubmit, loading } = useFormSubmit({
|
|
12
|
+
* form,
|
|
13
|
+
* submitFn: createUser,
|
|
14
|
+
* getCsrfToken: () => getCsrfCookie(apiUrl),
|
|
15
|
+
* onSuccess: (response) => {
|
|
16
|
+
* message.success('Success!');
|
|
17
|
+
* },
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function useFormSubmit(options) {
|
|
22
|
+
const { form, submitFn, onSuccess, onError, getCsrfToken, errorMessages = {}, } = options;
|
|
23
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
24
|
+
const { message: messageApi } = antd_1.App.useApp();
|
|
25
|
+
const handleSubmit = async (values) => {
|
|
26
|
+
setLoading(true);
|
|
27
|
+
try {
|
|
28
|
+
if (getCsrfToken) {
|
|
29
|
+
await getCsrfToken();
|
|
30
|
+
}
|
|
31
|
+
const response = await submitFn(values);
|
|
32
|
+
if (onSuccess) {
|
|
33
|
+
await onSuccess(response, values);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('Form submission error:', error);
|
|
38
|
+
if (onError) {
|
|
39
|
+
await onError(error, values);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Handle validation errors (422)
|
|
43
|
+
if (error.response?.status === 422 && error.response?.data?.errors) {
|
|
44
|
+
const errors = error.response.data.errors;
|
|
45
|
+
// Set field errors
|
|
46
|
+
const formErrors = Object.keys(errors).map((field) => ({
|
|
47
|
+
name: field,
|
|
48
|
+
errors: errors[field],
|
|
49
|
+
}));
|
|
50
|
+
form.setFields(formErrors);
|
|
51
|
+
// Show error message
|
|
52
|
+
const errorCount = Object.keys(errors).length;
|
|
53
|
+
const errorList = Object.values(errors)
|
|
54
|
+
.map((msgs) => msgs[0])
|
|
55
|
+
.join(' / ');
|
|
56
|
+
messageApi.error({
|
|
57
|
+
content: `入力内容にエラーがあります(${errorCount}件): ${errorList}`,
|
|
58
|
+
duration: 8,
|
|
59
|
+
});
|
|
60
|
+
console.error('Validation errors:', errors);
|
|
61
|
+
}
|
|
62
|
+
// Handle server errors
|
|
63
|
+
else if (error.response?.status >= 500) {
|
|
64
|
+
messageApi.error(errorMessages[500] || 'サーバーエラーが発生しました。しばらくしてから再度お試しください。');
|
|
65
|
+
}
|
|
66
|
+
// Handle auth errors
|
|
67
|
+
else if (error.response?.status === 401 || error.response?.status === 403) {
|
|
68
|
+
const status = error.response.status;
|
|
69
|
+
messageApi.error(errorMessages[status] || '認証エラーが発生しました。再度ログインしてください。');
|
|
70
|
+
}
|
|
71
|
+
// Handle generic errors
|
|
72
|
+
else {
|
|
73
|
+
messageApi.error(error.response?.data?.message || errorMessages.default || '送信に失敗しました');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
setLoading(false);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
handleSubmit,
|
|
82
|
+
loading,
|
|
83
|
+
setLoading,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=useFormSubmit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormSubmit.js","sourceRoot":"","sources":["../../../src/runtime/hooks/useFormSubmit.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCsrfCookie = exports.createLaravelAxios = exports.useFormSubmit = void 0;
|
|
4
|
+
// Runtime helpers for React + Laravel + Ant Design
|
|
5
|
+
var useFormSubmit_1 = require("./hooks/useFormSubmit");
|
|
6
|
+
Object.defineProperty(exports, "useFormSubmit", { enumerable: true, get: function () { return useFormSubmit_1.useFormSubmit; } });
|
|
7
|
+
var axios_1 = require("./lib/axios");
|
|
8
|
+
Object.defineProperty(exports, "createLaravelAxios", { enumerable: true, get: function () { return axios_1.createLaravelAxios; } });
|
|
9
|
+
Object.defineProperty(exports, "getCsrfCookie", { enumerable: true, get: function () { return axios_1.getCsrfCookie; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AAGtB,qCAAgE;AAAvD,2GAAA,kBAAkB,OAAA;AAAE,sGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const createLaravelAxios: (baseURL: string) => import("axios").AxiosInstance;
|
|
2
|
+
/**
|
|
3
|
+
* Get CSRF cookie before making authenticated requests
|
|
4
|
+
* Required for Laravel Sanctum cookie-based authentication
|
|
5
|
+
*/
|
|
6
|
+
export declare const getCsrfCookie: (baseURL: string) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=axios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios.d.ts","sourceRoot":"","sources":["../../../src/runtime/lib/axios.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,kCAqCjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAIjE,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getCsrfCookie = exports.createLaravelAxios = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
// Create axios instance for Laravel API
|
|
9
|
+
const createLaravelAxios = (baseURL) => {
|
|
10
|
+
const axiosInstance = axios_1.default.create({
|
|
11
|
+
baseURL,
|
|
12
|
+
timeout: 30000,
|
|
13
|
+
withCredentials: true,
|
|
14
|
+
headers: {
|
|
15
|
+
'Accept': 'application/json',
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
xsrfCookieName: 'XSRF-TOKEN',
|
|
19
|
+
xsrfHeaderName: 'X-XSRF-TOKEN',
|
|
20
|
+
});
|
|
21
|
+
// Helper to get cookie value by name
|
|
22
|
+
function getCookie(name) {
|
|
23
|
+
if (typeof document === 'undefined')
|
|
24
|
+
return null;
|
|
25
|
+
const value = `; ${document.cookie}`;
|
|
26
|
+
const parts = value.split(`; ${name}=`);
|
|
27
|
+
if (parts.length === 2)
|
|
28
|
+
return parts.pop()?.split(';').shift() || null;
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// Request interceptor
|
|
32
|
+
axiosInstance.interceptors.request.use((config) => {
|
|
33
|
+
const token = getCookie('XSRF-TOKEN');
|
|
34
|
+
if (token) {
|
|
35
|
+
config.headers['X-XSRF-TOKEN'] = decodeURIComponent(token);
|
|
36
|
+
}
|
|
37
|
+
return config;
|
|
38
|
+
}, (error) => {
|
|
39
|
+
return Promise.reject(error);
|
|
40
|
+
});
|
|
41
|
+
return axiosInstance;
|
|
42
|
+
};
|
|
43
|
+
exports.createLaravelAxios = createLaravelAxios;
|
|
44
|
+
/**
|
|
45
|
+
* Get CSRF cookie before making authenticated requests
|
|
46
|
+
* Required for Laravel Sanctum cookie-based authentication
|
|
47
|
+
*/
|
|
48
|
+
const getCsrfCookie = async (baseURL) => {
|
|
49
|
+
await axios_1.default.get(`${baseURL}/sanctum/csrf-cookie`, {
|
|
50
|
+
withCredentials: true,
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
exports.getCsrfCookie = getCsrfCookie;
|
|
54
|
+
//# sourceMappingURL=axios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/runtime/lib/axios.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAsE;AAEtE,wCAAwC;AACjC,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,EAAE;IAClD,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;QAC/B,OAAO;QACP,OAAO,EAAE,KAAK;QACd,eAAe,EAAE,IAAI;QACrB,OAAO,EAAE;YACL,QAAQ,EAAE,kBAAkB;YAC5B,cAAc,EAAE,kBAAkB;SACrC;QACD,cAAc,EAAE,YAAY;QAC5B,cAAc,EAAE,cAAc;KACjC,CAAC,CAAC;IAEH,qCAAqC;IACrC,SAAS,SAAS,CAAC,IAAY;QAC3B,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;QACvE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAClC,CAAC,MAAkC,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,EACD,CAAC,KAAiB,EAAE,EAAE;QAClB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CACJ,CAAC;IAEF,OAAO,aAAa,CAAC;AACzB,CAAC,CAAC;AArCW,QAAA,kBAAkB,sBAqC7B;AAEF;;;GAGG;AACI,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAiB,EAAE;IAClE,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,OAAO,sBAAsB,EAAE;QAC9C,eAAe,EAAE,IAAI;KACxB,CAAC,CAAC;AACP,CAAC,CAAC;AAJW,QAAA,aAAa,iBAIxB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@famgia/omnify",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.12.1",
|
|
4
|
+
"description": "Complete Laravel + React solution: Schema-to-TypeScript generation + Runtime helpers for forms",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -39,7 +39,11 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/jest": "^30.0.0",
|
|
41
41
|
"@types/node": "^20.19.24",
|
|
42
|
+
"@types/react": "^19.2.2",
|
|
43
|
+
"antd": "^5.28.0",
|
|
44
|
+
"axios": "^1.13.2",
|
|
42
45
|
"jest": "^30.2.0",
|
|
46
|
+
"react": "^19.2.0",
|
|
43
47
|
"ts-jest": "^29.4.5",
|
|
44
48
|
"typescript": "^5.0.0"
|
|
45
49
|
},
|
|
@@ -47,8 +51,22 @@
|
|
|
47
51
|
"chokidar": "^3.6.0"
|
|
48
52
|
},
|
|
49
53
|
"peerDependencies": {
|
|
54
|
+
"antd": ">=5.0.0",
|
|
55
|
+
"axios": ">=1.0.0",
|
|
56
|
+
"react": ">=18.0.0",
|
|
50
57
|
"typescript": ">=5.0.0"
|
|
51
58
|
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"react": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"antd": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"axios": {
|
|
67
|
+
"optional": true
|
|
68
|
+
}
|
|
69
|
+
},
|
|
52
70
|
"files": [
|
|
53
71
|
"dist",
|
|
54
72
|
"README.md",
|