@oxog/vld 1.4.0 → 1.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/CHANGELOG.md +333 -333
- package/README.md +1130 -1130
- package/dist/cli/benchmark.d.ts +15 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +248 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +204 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +157 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +233 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +59 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/validate.d.ts +15 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +162 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/codecs/index.d.ts.map +1 -1
- package/dist/codecs/index.js +29 -10
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/boolean.d.ts.map +1 -1
- package/dist/coercion/boolean.js +23 -31
- package/dist/coercion/boolean.js.map +1 -1
- package/dist/coercion/date.js +1 -1
- package/dist/coercion/date.js.map +1 -1
- package/dist/compat/emitter.d.ts +73 -0
- package/dist/compat/emitter.d.ts.map +1 -0
- package/dist/compat/emitter.js +179 -0
- package/dist/compat/emitter.js.map +1 -0
- package/dist/compat/index.d.ts +15 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +14 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/result.d.ts +128 -0
- package/dist/compat/result.d.ts.map +1 -0
- package/dist/compat/result.js +169 -0
- package/dist/compat/result.js.map +1 -0
- package/dist/errors.d.ts +58 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -9
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +140 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/guards.d.ts +143 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +238 -0
- package/dist/guards.js.map +1 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +29 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +402 -0
- package/dist/kernel.js.map +1 -0
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/backup-en.js.map +1 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/locales.d.ts +54 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +732 -0
- package/dist/locales.js.map +1 -0
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +184 -0
- package/dist/logger.js.map +1 -0
- package/dist/pigment.d.ts +124 -0
- package/dist/pigment.d.ts.map +1 -0
- package/dist/pigment.js +177 -0
- package/dist/pigment.js.map +1 -0
- package/dist/plugins/codecs.d.ts +17 -0
- package/dist/plugins/codecs.d.ts.map +1 -0
- package/dist/plugins/codecs.js +29 -0
- package/dist/plugins/codecs.js.map +1 -0
- package/dist/plugins/coercion.d.ts +13 -0
- package/dist/plugins/coercion.d.ts.map +1 -0
- package/dist/plugins/coercion.js +34 -0
- package/dist/plugins/coercion.js.map +1 -0
- package/dist/plugins/core-validators.d.ts +13 -0
- package/dist/plugins/core-validators.d.ts.map +1 -0
- package/dist/plugins/core-validators.js +96 -0
- package/dist/plugins/core-validators.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/kernel.d.ts +29 -0
- package/dist/plugins/kernel.d.ts.map +1 -0
- package/dist/plugins/kernel.js +486 -0
- package/dist/plugins/kernel.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/style.d.ts +123 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +369 -0
- package/dist/style.js.map +1 -0
- package/dist/utils/codec-utils.d.ts.map +1 -1
- package/dist/utils/codec-utils.js +6 -0
- package/dist/utils/codec-utils.js.map +1 -1
- package/dist/utils/ip-validation.d.ts.map +1 -1
- package/dist/utils/ip-validation.js +34 -14
- package/dist/utils/ip-validation.js.map +1 -1
- package/dist/validators/base.d.ts +3 -0
- package/dist/validators/base.d.ts.map +1 -1
- package/dist/validators/base.js +8 -0
- package/dist/validators/base.js.map +1 -1
- package/dist/validators/bigint.js.map +1 -1
- package/dist/validators/custom.js.map +1 -1
- package/dist/validators/discriminated-union.js.map +1 -1
- package/dist/validators/file.js.map +1 -1
- package/dist/validators/function.js.map +1 -1
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/json.js.map +1 -1
- package/dist/validators/lazy.js.map +1 -1
- package/dist/validators/nan.js.map +1 -1
- package/dist/validators/null.js.map +1 -1
- package/dist/validators/object-optimized.d.ts +23 -0
- package/dist/validators/object-optimized.d.ts.map +1 -0
- package/dist/validators/object-optimized.js +179 -0
- package/dist/validators/object-optimized.js.map +1 -0
- package/dist/validators/object-ultra.d.ts +34 -0
- package/dist/validators/object-ultra.d.ts.map +1 -0
- package/dist/validators/object-ultra.js +175 -0
- package/dist/validators/object-ultra.js.map +1 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +1 -1
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/string-bool.js.map +1 -1
- package/dist/validators/string-formats.js.map +1 -1
- package/dist/validators/string-ultra.d.ts +49 -0
- package/dist/validators/string-ultra.d.ts.map +1 -0
- package/dist/validators/string-ultra.js +217 -0
- package/dist/validators/string-ultra.js.map +1 -0
- package/dist/validators/template-literal.d.ts.map +1 -1
- package/dist/validators/template-literal.js +13 -12
- package/dist/validators/template-literal.js.map +1 -1
- package/dist/validators/undefined.js.map +1 -1
- package/dist/validators/union-optimized.d.ts +15 -0
- package/dist/validators/union-optimized.d.ts.map +1 -0
- package/dist/validators/union-optimized.js +92 -0
- package/dist/validators/union-optimized.js.map +1 -0
- package/dist/validators/xor.js.map +1 -1
- package/package.json +95 -79
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VLD Kernel Implementation
|
|
3
|
+
*
|
|
4
|
+
* Bu modül VLD plugin sistemi için merkezi yönetim noktasını sağlar.
|
|
5
|
+
* @oxog/plugin paketi ile uyumlu micro-kernel mimarisi kullanır.
|
|
6
|
+
*/
|
|
7
|
+
import { emitVldEvent, enableEvents } from '../events.js';
|
|
8
|
+
import { createEmitter } from '../compat/emitter.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Kernel Implementation
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* VLD Kernel - Plugin yönetimi için merkezi sınıf
|
|
14
|
+
*/
|
|
15
|
+
class VldKernelImpl {
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.plugins = new Map();
|
|
18
|
+
this.validators = new Map();
|
|
19
|
+
this.transforms = new Map();
|
|
20
|
+
this.codecs = new Map();
|
|
21
|
+
this.refinements = new Map();
|
|
22
|
+
this.started = false;
|
|
23
|
+
this.options = {
|
|
24
|
+
locale: options.locale || 'en',
|
|
25
|
+
strict: options.strict || false,
|
|
26
|
+
debug: options.debug || false,
|
|
27
|
+
errorStrategy: options.errorStrategy || 'throw',
|
|
28
|
+
maxPlugins: options.maxPlugins || 100
|
|
29
|
+
};
|
|
30
|
+
this.context = {
|
|
31
|
+
locale: this.options.locale,
|
|
32
|
+
strict: this.options.strict,
|
|
33
|
+
debug: this.options.debug
|
|
34
|
+
};
|
|
35
|
+
this._events = createEmitter();
|
|
36
|
+
// Debug mode ise event'leri etkinleştir
|
|
37
|
+
if (this.options.debug) {
|
|
38
|
+
enableEvents();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Context
|
|
43
|
+
// ============================================================================
|
|
44
|
+
getContext() {
|
|
45
|
+
return { ...this.context };
|
|
46
|
+
}
|
|
47
|
+
setContext(context) {
|
|
48
|
+
const oldLocale = this.context.locale;
|
|
49
|
+
this.context = { ...this.context, ...context };
|
|
50
|
+
// Locale değiştiyse event emit et
|
|
51
|
+
if (context.locale && context.locale !== oldLocale) {
|
|
52
|
+
this.emit('vld:locale:changed', {
|
|
53
|
+
from: oldLocale,
|
|
54
|
+
to: context.locale
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// Plugin Management
|
|
60
|
+
// ============================================================================
|
|
61
|
+
use(plugin) {
|
|
62
|
+
// Plugin sayısı kontrolü
|
|
63
|
+
if (this.plugins.size >= (this.options.maxPlugins || 100)) {
|
|
64
|
+
throw new Error(`Maximum plugin count (${this.options.maxPlugins}) reached`);
|
|
65
|
+
}
|
|
66
|
+
// Duplicate kontrolü
|
|
67
|
+
if (this.plugins.has(plugin.name)) {
|
|
68
|
+
throw new Error(`Plugin "${plugin.name}" is already registered`);
|
|
69
|
+
}
|
|
70
|
+
// Bağımlılık kontrolü
|
|
71
|
+
if (plugin.dependencies) {
|
|
72
|
+
for (const dep of plugin.dependencies) {
|
|
73
|
+
if (!this.plugins.has(dep)) {
|
|
74
|
+
throw new Error(`Plugin "${plugin.name}" requires "${dep}" which is not installed`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Plugin'i kaydet
|
|
79
|
+
this.plugins.set(plugin.name, plugin);
|
|
80
|
+
// Validator'ları kaydet
|
|
81
|
+
if (plugin.validators) {
|
|
82
|
+
for (const [name, factory] of Object.entries(plugin.validators)) {
|
|
83
|
+
this.validators.set(name, factory);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Transform'ları kaydet
|
|
87
|
+
if (plugin.transforms) {
|
|
88
|
+
for (const [name, factory] of Object.entries(plugin.transforms)) {
|
|
89
|
+
this.transforms.set(name, factory);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Codec'leri kaydet
|
|
93
|
+
if (plugin.codecs) {
|
|
94
|
+
for (const [name, factory] of Object.entries(plugin.codecs)) {
|
|
95
|
+
this.codecs.set(name, factory);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Refinement'ları kaydet
|
|
99
|
+
if (plugin.refinements) {
|
|
100
|
+
for (const [name, factory] of Object.entries(plugin.refinements)) {
|
|
101
|
+
this.refinements.set(name, factory);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Install hook'unu çağır
|
|
105
|
+
if (plugin.install) {
|
|
106
|
+
const result = plugin.install(this);
|
|
107
|
+
if (result instanceof Promise) {
|
|
108
|
+
result.catch((error) => {
|
|
109
|
+
console.error(`Error installing plugin "${plugin.name}":`, error);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Event emit et
|
|
114
|
+
this.emit('vld:plugin:registered', {
|
|
115
|
+
name: plugin.name,
|
|
116
|
+
version: plugin.version
|
|
117
|
+
});
|
|
118
|
+
if (this.context.debug) {
|
|
119
|
+
console.log(`[VLD] Plugin registered: ${plugin.name}@${plugin.version}`);
|
|
120
|
+
}
|
|
121
|
+
return this;
|
|
122
|
+
}
|
|
123
|
+
remove(pluginName) {
|
|
124
|
+
const plugin = this.plugins.get(pluginName);
|
|
125
|
+
if (!plugin) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
// Bağımlı plugin kontrolü
|
|
129
|
+
for (const [name, p] of this.plugins) {
|
|
130
|
+
if (p.dependencies?.includes(pluginName)) {
|
|
131
|
+
throw new Error(`Cannot remove plugin "${pluginName}" because "${name}" depends on it`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Uninstall hook'unu çağır
|
|
135
|
+
if (plugin.uninstall) {
|
|
136
|
+
const result = plugin.uninstall(this);
|
|
137
|
+
if (result instanceof Promise) {
|
|
138
|
+
result.catch((error) => {
|
|
139
|
+
console.error(`Error uninstalling plugin "${pluginName}":`, error);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Plugin kayıtlarını temizle
|
|
144
|
+
if (plugin.validators) {
|
|
145
|
+
for (const name of Object.keys(plugin.validators)) {
|
|
146
|
+
this.validators.delete(name);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (plugin.transforms) {
|
|
150
|
+
for (const name of Object.keys(plugin.transforms)) {
|
|
151
|
+
this.transforms.delete(name);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (plugin.codecs) {
|
|
155
|
+
for (const name of Object.keys(plugin.codecs)) {
|
|
156
|
+
this.codecs.delete(name);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (plugin.refinements) {
|
|
160
|
+
for (const name of Object.keys(plugin.refinements)) {
|
|
161
|
+
this.refinements.delete(name);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
this.plugins.delete(pluginName);
|
|
165
|
+
if (this.context.debug) {
|
|
166
|
+
console.log(`[VLD] Plugin removed: ${pluginName}`);
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
hasPlugin(pluginName) {
|
|
171
|
+
return this.plugins.has(pluginName);
|
|
172
|
+
}
|
|
173
|
+
listPlugins() {
|
|
174
|
+
return Array.from(this.plugins.keys());
|
|
175
|
+
}
|
|
176
|
+
getPlugin(name) {
|
|
177
|
+
return this.plugins.get(name);
|
|
178
|
+
}
|
|
179
|
+
// ============================================================================
|
|
180
|
+
// Validators
|
|
181
|
+
// ============================================================================
|
|
182
|
+
registerValidator(name, factory) {
|
|
183
|
+
if (this.validators.has(name)) {
|
|
184
|
+
throw new Error(`Validator "${name}" is already registered`);
|
|
185
|
+
}
|
|
186
|
+
this.validators.set(name, factory);
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
getValidator(name) {
|
|
190
|
+
return this.validators.get(name);
|
|
191
|
+
}
|
|
192
|
+
listValidators() {
|
|
193
|
+
return Array.from(this.validators.keys());
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Transforms
|
|
197
|
+
// ============================================================================
|
|
198
|
+
registerTransform(name, factory) {
|
|
199
|
+
if (this.transforms.has(name)) {
|
|
200
|
+
throw new Error(`Transform "${name}" is already registered`);
|
|
201
|
+
}
|
|
202
|
+
this.transforms.set(name, factory);
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
getTransform(name) {
|
|
206
|
+
return this.transforms.get(name);
|
|
207
|
+
}
|
|
208
|
+
listTransforms() {
|
|
209
|
+
return Array.from(this.transforms.keys());
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Codecs
|
|
213
|
+
// ============================================================================
|
|
214
|
+
registerCodec(name, factory) {
|
|
215
|
+
if (this.codecs.has(name)) {
|
|
216
|
+
throw new Error(`Codec "${name}" is already registered`);
|
|
217
|
+
}
|
|
218
|
+
this.codecs.set(name, factory);
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
getCodec(name) {
|
|
222
|
+
return this.codecs.get(name);
|
|
223
|
+
}
|
|
224
|
+
listCodecs() {
|
|
225
|
+
return Array.from(this.codecs.keys());
|
|
226
|
+
}
|
|
227
|
+
// ============================================================================
|
|
228
|
+
// Refinements
|
|
229
|
+
// ============================================================================
|
|
230
|
+
registerRefinement(name, factory) {
|
|
231
|
+
if (this.refinements.has(name)) {
|
|
232
|
+
throw new Error(`Refinement "${name}" is already registered`);
|
|
233
|
+
}
|
|
234
|
+
this.refinements.set(name, factory);
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
getRefinement(name) {
|
|
238
|
+
return this.refinements.get(name);
|
|
239
|
+
}
|
|
240
|
+
listRefinements() {
|
|
241
|
+
return Array.from(this.refinements.keys());
|
|
242
|
+
}
|
|
243
|
+
// ============================================================================
|
|
244
|
+
// Events
|
|
245
|
+
// ============================================================================
|
|
246
|
+
get events() {
|
|
247
|
+
return this._events;
|
|
248
|
+
}
|
|
249
|
+
on(event, handler) {
|
|
250
|
+
return this._events.on(event, handler);
|
|
251
|
+
}
|
|
252
|
+
emit(event, payload) {
|
|
253
|
+
this._events.emit(event, payload);
|
|
254
|
+
// Global emitter'a da gönder
|
|
255
|
+
emitVldEvent(event, payload);
|
|
256
|
+
}
|
|
257
|
+
// ============================================================================
|
|
258
|
+
// Hooks
|
|
259
|
+
// ============================================================================
|
|
260
|
+
runBeforeParseHooks(value, schema) {
|
|
261
|
+
let result = value;
|
|
262
|
+
for (const plugin of this.plugins.values()) {
|
|
263
|
+
if (plugin.onBeforeParse) {
|
|
264
|
+
try {
|
|
265
|
+
result = plugin.onBeforeParse(result, schema, this.context);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
if (this.options.errorStrategy === 'throw') {
|
|
269
|
+
throw error;
|
|
270
|
+
}
|
|
271
|
+
this.emit('vld:plugin:error', {
|
|
272
|
+
name: plugin.name,
|
|
273
|
+
error: error
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
runAfterParseHooks(result, schema) {
|
|
281
|
+
let current = result;
|
|
282
|
+
for (const plugin of this.plugins.values()) {
|
|
283
|
+
if (plugin.onAfterParse) {
|
|
284
|
+
try {
|
|
285
|
+
current = plugin.onAfterParse(current, schema, this.context);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
if (this.options.errorStrategy === 'throw') {
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
291
|
+
this.emit('vld:plugin:error', {
|
|
292
|
+
name: plugin.name,
|
|
293
|
+
error: error
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return current;
|
|
299
|
+
}
|
|
300
|
+
runErrorHooks(error, schema) {
|
|
301
|
+
for (const plugin of this.plugins.values()) {
|
|
302
|
+
if (plugin.onError) {
|
|
303
|
+
try {
|
|
304
|
+
plugin.onError(error, schema, this.context);
|
|
305
|
+
}
|
|
306
|
+
catch (hookError) {
|
|
307
|
+
console.error(`Error in plugin "${plugin.name}" error hook:`, hookError);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// ============================================================================
|
|
313
|
+
// Lifecycle
|
|
314
|
+
// ============================================================================
|
|
315
|
+
async start() {
|
|
316
|
+
if (this.started) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (this.context.debug) {
|
|
320
|
+
console.log('[VLD] Kernel starting...');
|
|
321
|
+
}
|
|
322
|
+
this.started = true;
|
|
323
|
+
if (this.context.debug) {
|
|
324
|
+
console.log(`[VLD] Kernel started with ${this.plugins.size} plugins`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
async stop() {
|
|
328
|
+
if (!this.started) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (this.context.debug) {
|
|
332
|
+
console.log('[VLD] Kernel stopping...');
|
|
333
|
+
}
|
|
334
|
+
// Tüm plugin'leri kaldır
|
|
335
|
+
const pluginNames = Array.from(this.plugins.keys()).reverse();
|
|
336
|
+
for (const name of pluginNames) {
|
|
337
|
+
try {
|
|
338
|
+
this.remove(name);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
console.error(`Error removing plugin "${name}":`, error);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
this.started = false;
|
|
345
|
+
if (this.context.debug) {
|
|
346
|
+
console.log('[VLD] Kernel stopped');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
reset() {
|
|
350
|
+
this.plugins.clear();
|
|
351
|
+
this.validators.clear();
|
|
352
|
+
this.transforms.clear();
|
|
353
|
+
this.codecs.clear();
|
|
354
|
+
this.refinements.clear();
|
|
355
|
+
this._events.removeAllListeners();
|
|
356
|
+
this.context = {
|
|
357
|
+
locale: this.options.locale,
|
|
358
|
+
strict: this.options.strict,
|
|
359
|
+
debug: this.options.debug
|
|
360
|
+
};
|
|
361
|
+
this.started = false;
|
|
362
|
+
if (this.context.debug) {
|
|
363
|
+
console.log('[VLD] Kernel reset');
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// ============================================================================
|
|
368
|
+
// Factory Function
|
|
369
|
+
// ============================================================================
|
|
370
|
+
/**
|
|
371
|
+
* Yeni VLD Kernel oluşturur
|
|
372
|
+
*/
|
|
373
|
+
export function createVldKernel(options) {
|
|
374
|
+
return new VldKernelImpl(options);
|
|
375
|
+
}
|
|
376
|
+
// ============================================================================
|
|
377
|
+
// Global Kernel
|
|
378
|
+
// ============================================================================
|
|
379
|
+
let globalKernel = null;
|
|
380
|
+
/**
|
|
381
|
+
* Global kernel'i alır veya oluşturur
|
|
382
|
+
*/
|
|
383
|
+
export function getGlobalKernel() {
|
|
384
|
+
if (!globalKernel) {
|
|
385
|
+
globalKernel = createVldKernel();
|
|
386
|
+
}
|
|
387
|
+
return globalKernel;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Global kernel'i ayarlar
|
|
391
|
+
*/
|
|
392
|
+
export function setGlobalKernel(kernel) {
|
|
393
|
+
globalKernel = kernel;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Global kernel'i sıfırlar
|
|
397
|
+
*/
|
|
398
|
+
export function resetGlobalKernel() {
|
|
399
|
+
if (globalKernel) {
|
|
400
|
+
globalKernel.reset();
|
|
401
|
+
globalKernel = null;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Plugin builder oluşturur
|
|
406
|
+
*/
|
|
407
|
+
export function definePlugin() {
|
|
408
|
+
const plugin = {};
|
|
409
|
+
const builder = {
|
|
410
|
+
name(name) {
|
|
411
|
+
plugin.name = name;
|
|
412
|
+
return this;
|
|
413
|
+
},
|
|
414
|
+
version(version) {
|
|
415
|
+
plugin.version = version;
|
|
416
|
+
return this;
|
|
417
|
+
},
|
|
418
|
+
description(description) {
|
|
419
|
+
plugin.description = description;
|
|
420
|
+
return this;
|
|
421
|
+
},
|
|
422
|
+
dependencies(...deps) {
|
|
423
|
+
plugin.dependencies = deps;
|
|
424
|
+
return this;
|
|
425
|
+
},
|
|
426
|
+
validator(name, factory) {
|
|
427
|
+
if (!plugin.validators) {
|
|
428
|
+
plugin.validators = {};
|
|
429
|
+
}
|
|
430
|
+
plugin.validators[name] = factory;
|
|
431
|
+
return this;
|
|
432
|
+
},
|
|
433
|
+
transform(name, factory) {
|
|
434
|
+
if (!plugin.transforms) {
|
|
435
|
+
plugin.transforms = {};
|
|
436
|
+
}
|
|
437
|
+
plugin.transforms[name] = factory;
|
|
438
|
+
return this;
|
|
439
|
+
},
|
|
440
|
+
codec(name, factory) {
|
|
441
|
+
if (!plugin.codecs) {
|
|
442
|
+
plugin.codecs = {};
|
|
443
|
+
}
|
|
444
|
+
plugin.codecs[name] = factory;
|
|
445
|
+
return this;
|
|
446
|
+
},
|
|
447
|
+
refinement(name, factory) {
|
|
448
|
+
if (!plugin.refinements) {
|
|
449
|
+
plugin.refinements = {};
|
|
450
|
+
}
|
|
451
|
+
plugin.refinements[name] = factory;
|
|
452
|
+
return this;
|
|
453
|
+
},
|
|
454
|
+
beforeParse(hook) {
|
|
455
|
+
plugin.onBeforeParse = hook;
|
|
456
|
+
return this;
|
|
457
|
+
},
|
|
458
|
+
afterParse(hook) {
|
|
459
|
+
plugin.onAfterParse = hook;
|
|
460
|
+
return this;
|
|
461
|
+
},
|
|
462
|
+
onError(hook) {
|
|
463
|
+
plugin.onError = hook;
|
|
464
|
+
return this;
|
|
465
|
+
},
|
|
466
|
+
install(fn) {
|
|
467
|
+
plugin.install = fn;
|
|
468
|
+
return this;
|
|
469
|
+
},
|
|
470
|
+
uninstall(fn) {
|
|
471
|
+
plugin.uninstall = fn;
|
|
472
|
+
return this;
|
|
473
|
+
},
|
|
474
|
+
build() {
|
|
475
|
+
if (!plugin.name) {
|
|
476
|
+
throw new Error('Plugin name is required');
|
|
477
|
+
}
|
|
478
|
+
if (!plugin.version) {
|
|
479
|
+
throw new Error('Plugin version is required');
|
|
480
|
+
}
|
|
481
|
+
return plugin;
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
return builder;
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/plugins/kernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * VLD Kernel Implementation\n *\n * Bu modül VLD plugin sistemi için merkezi yönetim noktasını sağlar.\n * @oxog/plugin paketi ile uyumlu micro-kernel mimarisi kullanır.\n */\n\nimport type {\n VldKernel,\n VldKernelOptions,\n VldContext,\n ValidatorPlugin,\n ValidatorFactory,\n TransformFactory,\n CodecFactory,\n RefinementFactory\n} from './types.js';\nimport type { ParseResult } from '../validators/base.js';\nimport type { VldBase } from '../validators/base.js';\nimport { VldError } from '../errors.js';\nimport { type VldEvents, emitVldEvent, enableEvents } from '../events.js';\nimport { Emitter, createEmitter } from '../compat/emitter.js';\n\n// ============================================================================\n// Kernel Implementation\n// ============================================================================\n\n/**\n * VLD Kernel - Plugin yönetimi için merkezi sınıf\n */\nclass VldKernelImpl implements VldKernel {\n private context: VldContext;\n private plugins: Map<string, ValidatorPlugin> = new Map();\n private validators: Map<string, ValidatorFactory> = new Map();\n private transforms: Map<string, TransformFactory> = new Map();\n private codecs: Map<string, CodecFactory> = new Map();\n private refinements: Map<string, RefinementFactory> = new Map();\n private _events: Emitter<VldEvents>;\n private options: VldKernelOptions;\n private started = false;\n\n constructor(options: VldKernelOptions = {}) {\n this.options = {\n locale: options.locale || 'en',\n strict: options.strict || false,\n debug: options.debug || false,\n errorStrategy: options.errorStrategy || 'throw',\n maxPlugins: options.maxPlugins || 100\n };\n\n this.context = {\n locale: this.options.locale!,\n strict: this.options.strict!,\n debug: this.options.debug!\n };\n\n this._events = createEmitter<VldEvents>();\n\n // Debug mode ise event'leri etkinleştir\n if (this.options.debug) {\n enableEvents();\n }\n }\n\n // ============================================================================\n // Context\n // ============================================================================\n\n getContext(): VldContext {\n return { ...this.context };\n }\n\n setContext(context: Partial<VldContext>): void {\n const oldLocale = this.context.locale;\n this.context = { ...this.context, ...context };\n\n // Locale değiştiyse event emit et\n if (context.locale && context.locale !== oldLocale) {\n this.emit('vld:locale:changed', {\n from: oldLocale,\n to: context.locale\n });\n }\n }\n\n // ============================================================================\n // Plugin Management\n // ============================================================================\n\n use(plugin: ValidatorPlugin): this {\n // Plugin sayısı kontrolü\n if (this.plugins.size >= (this.options.maxPlugins || 100)) {\n throw new Error(`Maximum plugin count (${this.options.maxPlugins}) reached`);\n }\n\n // Duplicate kontrolü\n if (this.plugins.has(plugin.name)) {\n throw new Error(`Plugin \"${plugin.name}\" is already registered`);\n }\n\n // Bağımlılık kontrolü\n if (plugin.dependencies) {\n for (const dep of plugin.dependencies) {\n if (!this.plugins.has(dep)) {\n throw new Error(\n `Plugin \"${plugin.name}\" requires \"${dep}\" which is not installed`\n );\n }\n }\n }\n\n // Plugin'i kaydet\n this.plugins.set(plugin.name, plugin);\n\n // Validator'ları kaydet\n if (plugin.validators) {\n for (const [name, factory] of Object.entries(plugin.validators)) {\n this.validators.set(name, factory);\n }\n }\n\n // Transform'ları kaydet\n if (plugin.transforms) {\n for (const [name, factory] of Object.entries(plugin.transforms)) {\n this.transforms.set(name, factory);\n }\n }\n\n // Codec'leri kaydet\n if (plugin.codecs) {\n for (const [name, factory] of Object.entries(plugin.codecs)) {\n this.codecs.set(name, factory);\n }\n }\n\n // Refinement'ları kaydet\n if (plugin.refinements) {\n for (const [name, factory] of Object.entries(plugin.refinements)) {\n this.refinements.set(name, factory);\n }\n }\n\n // Install hook'unu çağır\n if (plugin.install) {\n const result = plugin.install(this);\n if (result instanceof Promise) {\n result.catch((error) => {\n console.error(`Error installing plugin \"${plugin.name}\":`, error);\n });\n }\n }\n\n // Event emit et\n this.emit('vld:plugin:registered', {\n name: plugin.name,\n version: plugin.version\n });\n\n if (this.context.debug) {\n console.log(`[VLD] Plugin registered: ${plugin.name}@${plugin.version}`);\n }\n\n return this;\n }\n\n remove(pluginName: string): boolean {\n const plugin = this.plugins.get(pluginName);\n if (!plugin) {\n return false;\n }\n\n // Bağımlı plugin kontrolü\n for (const [name, p] of this.plugins) {\n if (p.dependencies?.includes(pluginName)) {\n throw new Error(\n `Cannot remove plugin \"${pluginName}\" because \"${name}\" depends on it`\n );\n }\n }\n\n // Uninstall hook'unu çağır\n if (plugin.uninstall) {\n const result = plugin.uninstall(this);\n if (result instanceof Promise) {\n result.catch((error) => {\n console.error(`Error uninstalling plugin \"${pluginName}\":`, error);\n });\n }\n }\n\n // Plugin kayıtlarını temizle\n if (plugin.validators) {\n for (const name of Object.keys(plugin.validators)) {\n this.validators.delete(name);\n }\n }\n if (plugin.transforms) {\n for (const name of Object.keys(plugin.transforms)) {\n this.transforms.delete(name);\n }\n }\n if (plugin.codecs) {\n for (const name of Object.keys(plugin.codecs)) {\n this.codecs.delete(name);\n }\n }\n if (plugin.refinements) {\n for (const name of Object.keys(plugin.refinements)) {\n this.refinements.delete(name);\n }\n }\n\n this.plugins.delete(pluginName);\n\n if (this.context.debug) {\n console.log(`[VLD] Plugin removed: ${pluginName}`);\n }\n\n return true;\n }\n\n hasPlugin(pluginName: string): boolean {\n return this.plugins.has(pluginName);\n }\n\n listPlugins(): string[] {\n return Array.from(this.plugins.keys());\n }\n\n getPlugin(name: string): ValidatorPlugin | undefined {\n return this.plugins.get(name);\n }\n\n // ============================================================================\n // Validators\n // ============================================================================\n\n registerValidator(name: string, factory: ValidatorFactory): this {\n if (this.validators.has(name)) {\n throw new Error(`Validator \"${name}\" is already registered`);\n }\n this.validators.set(name, factory);\n return this;\n }\n\n getValidator(name: string): ValidatorFactory | undefined {\n return this.validators.get(name);\n }\n\n listValidators(): string[] {\n return Array.from(this.validators.keys());\n }\n\n // ============================================================================\n // Transforms\n // ============================================================================\n\n registerTransform(name: string, factory: TransformFactory): this {\n if (this.transforms.has(name)) {\n throw new Error(`Transform \"${name}\" is already registered`);\n }\n this.transforms.set(name, factory);\n return this;\n }\n\n getTransform(name: string): TransformFactory | undefined {\n return this.transforms.get(name);\n }\n\n listTransforms(): string[] {\n return Array.from(this.transforms.keys());\n }\n\n // ============================================================================\n // Codecs\n // ============================================================================\n\n registerCodec(name: string, factory: CodecFactory): this {\n if (this.codecs.has(name)) {\n throw new Error(`Codec \"${name}\" is already registered`);\n }\n this.codecs.set(name, factory);\n return this;\n }\n\n getCodec(name: string): CodecFactory | undefined {\n return this.codecs.get(name);\n }\n\n listCodecs(): string[] {\n return Array.from(this.codecs.keys());\n }\n\n // ============================================================================\n // Refinements\n // ============================================================================\n\n registerRefinement(name: string, factory: RefinementFactory): this {\n if (this.refinements.has(name)) {\n throw new Error(`Refinement \"${name}\" is already registered`);\n }\n this.refinements.set(name, factory);\n return this;\n }\n\n getRefinement(name: string): RefinementFactory | undefined {\n return this.refinements.get(name);\n }\n\n listRefinements(): string[] {\n return Array.from(this.refinements.keys());\n }\n\n // ============================================================================\n // Events\n // ============================================================================\n\n get events(): Emitter<VldEvents> {\n return this._events;\n }\n\n on<K extends keyof VldEvents>(\n event: K,\n handler: (payload: VldEvents[K]) => void\n ): () => void {\n return this._events.on(event, handler);\n }\n\n emit<K extends keyof VldEvents>(event: K, payload: VldEvents[K]): void {\n this._events.emit(event, payload);\n // Global emitter'a da gönder\n emitVldEvent(event, payload);\n }\n\n // ============================================================================\n // Hooks\n // ============================================================================\n\n runBeforeParseHooks(\n value: unknown,\n schema: VldBase<unknown, unknown>\n ): unknown {\n let result = value;\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onBeforeParse) {\n try {\n result = plugin.onBeforeParse(result, schema, this.context);\n } catch (error) {\n if (this.options.errorStrategy === 'throw') {\n throw error;\n }\n this.emit('vld:plugin:error', {\n name: plugin.name,\n error: error as Error\n });\n }\n }\n }\n\n return result;\n }\n\n runAfterParseHooks<T>(\n result: ParseResult<T>,\n schema: VldBase<unknown, unknown>\n ): ParseResult<T> {\n let current = result;\n\n for (const plugin of this.plugins.values()) {\n if (plugin.onAfterParse) {\n try {\n current = plugin.onAfterParse(current, schema, this.context) as ParseResult<T>;\n } catch (error) {\n if (this.options.errorStrategy === 'throw') {\n throw error;\n }\n this.emit('vld:plugin:error', {\n name: plugin.name,\n error: error as Error\n });\n }\n }\n }\n\n return current;\n }\n\n runErrorHooks(error: VldError, schema: VldBase<unknown, unknown>): void {\n for (const plugin of this.plugins.values()) {\n if (plugin.onError) {\n try {\n plugin.onError(error, schema, this.context);\n } catch (hookError) {\n console.error(`Error in plugin \"${plugin.name}\" error hook:`, hookError);\n }\n }\n }\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n async start(): Promise<void> {\n if (this.started) {\n return;\n }\n\n if (this.context.debug) {\n console.log('[VLD] Kernel starting...');\n }\n\n this.started = true;\n\n if (this.context.debug) {\n console.log(`[VLD] Kernel started with ${this.plugins.size} plugins`);\n }\n }\n\n async stop(): Promise<void> {\n if (!this.started) {\n return;\n }\n\n if (this.context.debug) {\n console.log('[VLD] Kernel stopping...');\n }\n\n // Tüm plugin'leri kaldır\n const pluginNames = Array.from(this.plugins.keys()).reverse();\n for (const name of pluginNames) {\n try {\n this.remove(name);\n } catch (error) {\n console.error(`Error removing plugin \"${name}\":`, error);\n }\n }\n\n this.started = false;\n\n if (this.context.debug) {\n console.log('[VLD] Kernel stopped');\n }\n }\n\n reset(): void {\n this.plugins.clear();\n this.validators.clear();\n this.transforms.clear();\n this.codecs.clear();\n this.refinements.clear();\n this._events.removeAllListeners();\n\n this.context = {\n locale: this.options.locale!,\n strict: this.options.strict!,\n debug: this.options.debug!\n };\n\n this.started = false;\n\n if (this.context.debug) {\n console.log('[VLD] Kernel reset');\n }\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Yeni VLD Kernel oluşturur\n */\nexport function createVldKernel(options?: VldKernelOptions): VldKernel {\n return new VldKernelImpl(options);\n}\n\n// ============================================================================\n// Global Kernel\n// ============================================================================\n\nlet globalKernel: VldKernel | null = null;\n\n/**\n * Global kernel'i alır veya oluşturur\n */\nexport function getGlobalKernel(): VldKernel {\n if (!globalKernel) {\n globalKernel = createVldKernel();\n }\n return globalKernel;\n}\n\n/**\n * Global kernel'i ayarlar\n */\nexport function setGlobalKernel(kernel: VldKernel): void {\n globalKernel = kernel;\n}\n\n/**\n * Global kernel'i sıfırlar\n */\nexport function resetGlobalKernel(): void {\n if (globalKernel) {\n globalKernel.reset();\n globalKernel = null;\n }\n}\n\n// ============================================================================\n// Plugin Builder\n// ============================================================================\n\nimport type { PluginBuilder } from './types.js';\n\n/**\n * Plugin builder oluşturur\n */\nexport function definePlugin(): PluginBuilder {\n const plugin: Partial<ValidatorPlugin> = {};\n\n const builder: PluginBuilder = {\n name(name: string) {\n plugin.name = name;\n return this;\n },\n\n version(version: string) {\n plugin.version = version;\n return this;\n },\n\n description(description: string) {\n plugin.description = description;\n return this;\n },\n\n dependencies(...deps: string[]) {\n plugin.dependencies = deps;\n return this;\n },\n\n validator(name: string, factory: ValidatorFactory) {\n if (!plugin.validators) {\n plugin.validators = {};\n }\n plugin.validators[name] = factory;\n return this;\n },\n\n transform(name: string, factory: TransformFactory) {\n if (!plugin.transforms) {\n plugin.transforms = {};\n }\n plugin.transforms[name] = factory;\n return this;\n },\n\n codec(name: string, factory: CodecFactory) {\n if (!plugin.codecs) {\n plugin.codecs = {};\n }\n plugin.codecs[name] = factory;\n return this;\n },\n\n refinement(name: string, factory: RefinementFactory) {\n if (!plugin.refinements) {\n plugin.refinements = {};\n }\n plugin.refinements[name] = factory;\n return this;\n },\n\n beforeParse(hook) {\n plugin.onBeforeParse = hook;\n return this;\n },\n\n afterParse(hook) {\n plugin.onAfterParse = hook;\n return this;\n },\n\n onError(hook) {\n plugin.onError = hook;\n return this;\n },\n\n install(fn) {\n plugin.install = fn;\n return this;\n },\n\n uninstall(fn) {\n plugin.uninstall = fn;\n return this;\n },\n\n build(): ValidatorPlugin {\n if (!plugin.name) {\n throw new Error('Plugin name is required');\n }\n if (!plugin.version) {\n throw new Error('Plugin version is required');\n }\n return plugin as ValidatorPlugin;\n }\n };\n\n return builder;\n}\n"]}
|