@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/coercion/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,
|
|
1
|
+
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/coercion/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,uBAAuB;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5E,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,4BAA4B;QAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,+BAA+B;QAC/B,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6DAA6D;QAC7D,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldBoolean } from '../validators/boolean';\r\nimport { ParseResult } from '../validators/base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Boolean coercion validator that attempts to convert values to booleans\r\n */\r\nexport class VldCoerceBoolean extends VldBoolean {\r\n /**\r\n * Create a new coerce boolean validator\r\n */\r\n static create(): VldCoerceBoolean {\r\n return new VldCoerceBoolean();\r\n }\r\n \r\n /**\r\n * Parse and coerce a value to boolean\r\n */\r\n parse(value: unknown): boolean {\r\n // Handle string values\r\n if (typeof value === 'string') {\r\n const lower = value.toLowerCase().trim();\r\n if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') {\r\n return true;\r\n }\r\n if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') {\r\n return false;\r\n }\r\n throw new Error(getMessages().coercionFailed('boolean', value));\r\n }\r\n\r\n // Handle number values\r\n if (typeof value === 'number') {\r\n if (value === 1) return true;\r\n if (value === 0) return false;\r\n throw new Error(getMessages().coercionFailed('boolean', value));\r\n }\r\n\r\n // Handle null and undefined\r\n if (value === null || value === undefined) {\r\n throw new Error(getMessages().coercionFailed('boolean', value));\r\n }\r\n\r\n // Handle actual boolean values\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n // Reject all other unsupported types (objects, arrays, etc.)\r\n throw new Error(getMessages().coercionFailed('boolean', value));\r\n }\r\n \r\n /**\r\n * Safely parse and coerce a value to boolean\r\n */\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n }\r\n}"]}
|
package/dist/coercion/date.js
CHANGED
|
@@ -31,7 +31,7 @@ export class VldCoerceDate extends VldDate {
|
|
|
31
31
|
return super.parse(value);
|
|
32
32
|
}
|
|
33
33
|
catch (error) {
|
|
34
|
-
if (error.message.includes('
|
|
34
|
+
if (error.message.includes('Cannot coerce')) {
|
|
35
35
|
throw error;
|
|
36
36
|
}
|
|
37
37
|
throw new Error(getMessages().coercionFailed('date', value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/coercion/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IACxC;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YAED,4BAA4B;YAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,yCAAyC;YACzC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/coercion/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IACxC;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YAED,4BAA4B;YAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,yCAAyC;YACzC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldDate } from '../validators/date';\nimport { ParseResult } from '../validators/base';\nimport { getMessages } from '../locales';\n\n/**\n * Date coercion validator that attempts to convert values to dates\n */\nexport class VldCoerceDate extends VldDate {\n /**\n * Create a new coerce date validator\n */\n static create(): VldCoerceDate {\n return new VldCoerceDate();\n }\n \n /**\n * Parse and coerce a value to date\n */\n parse(value: unknown): Date {\n try {\n // Handle string and number values\n if (typeof value === 'string' || typeof value === 'number') {\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n throw new Error(getMessages().coercionFailed('date', value));\n }\n return super.parse(date);\n }\n \n // Handle null and undefined\n if (value === null || value === undefined) {\n throw new Error(getMessages().coercionFailed('date', value));\n }\n \n // Use parent validation for actual dates\n return super.parse(value);\n } catch (error) {\n if ((error as Error).message.includes('Cannot coerce')) {\n throw error;\n }\n throw new Error(getMessages().coercionFailed('date', value));\n }\n }\n \n /**\n * Safely parse and coerce a value to date\n */\n safeParse(value: unknown): ParseResult<Date> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter Implementation
|
|
3
|
+
*
|
|
4
|
+
* This module provides a type-safe event emitter,
|
|
5
|
+
* compatible with @oxog/emitter when available.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Event map type - maps event names to their payload types
|
|
9
|
+
*/
|
|
10
|
+
export type EventMap = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Event handler function type
|
|
13
|
+
*/
|
|
14
|
+
export type EventHandler<T = unknown> = (payload: T) => void | Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Listener options
|
|
17
|
+
*/
|
|
18
|
+
export interface ListenerOptions {
|
|
19
|
+
/** Remove listener after first call */
|
|
20
|
+
once?: boolean;
|
|
21
|
+
/** Listener priority (higher = called first) */
|
|
22
|
+
priority?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Emitter interface
|
|
26
|
+
*/
|
|
27
|
+
export interface Emitter<TEvents extends EventMap = EventMap> {
|
|
28
|
+
/** Subscribe to an event */
|
|
29
|
+
on<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>, options?: ListenerOptions): () => void;
|
|
30
|
+
/** Subscribe to an event once */
|
|
31
|
+
once<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void;
|
|
32
|
+
/** Unsubscribe from an event */
|
|
33
|
+
off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void;
|
|
34
|
+
/** Emit an event */
|
|
35
|
+
emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void;
|
|
36
|
+
/** Emit an event and wait for all handlers */
|
|
37
|
+
emitAsync<K extends keyof TEvents>(event: K, payload: TEvents[K]): Promise<void>;
|
|
38
|
+
/** Remove all listeners for an event or all events */
|
|
39
|
+
removeAllListeners<K extends keyof TEvents>(event?: K): void;
|
|
40
|
+
/** Get listener count for an event */
|
|
41
|
+
listenerCount<K extends keyof TEvents>(event: K): number;
|
|
42
|
+
/** Get all event names with listeners */
|
|
43
|
+
eventNames(): (keyof TEvents)[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a type-safe event emitter
|
|
47
|
+
*/
|
|
48
|
+
export declare function createEmitter<TEvents extends EventMap = EventMap>(): Emitter<TEvents>;
|
|
49
|
+
/**
|
|
50
|
+
* Mixin to add event emitter capabilities to a class
|
|
51
|
+
*/
|
|
52
|
+
export declare function withEmitter<TEvents extends EventMap>(): <TBase extends new (...args: any[]) => object>(Base: TBase) => {
|
|
53
|
+
new (...args: any[]): {
|
|
54
|
+
/** @internal */
|
|
55
|
+
_emitter: Emitter<TEvents>;
|
|
56
|
+
on<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>, options?: ListenerOptions): () => void;
|
|
57
|
+
once<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void;
|
|
58
|
+
off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void;
|
|
59
|
+
emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void;
|
|
60
|
+
emitAsync<K extends keyof TEvents>(event: K, payload: TEvents[K]): Promise<void>;
|
|
61
|
+
};
|
|
62
|
+
} & TBase;
|
|
63
|
+
/**
|
|
64
|
+
* Create an event bus for global event handling
|
|
65
|
+
*/
|
|
66
|
+
export declare function createEventBus<TEvents extends EventMap>(): Emitter<TEvents> & {
|
|
67
|
+
/** Create a scoped emitter that auto-cleans up */
|
|
68
|
+
createScope(): Emitter<TEvents> & {
|
|
69
|
+
dispose(): void;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export type { EventHandler as VldEventHandler };
|
|
73
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/compat/emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter Implementation
|
|
3
|
+
*
|
|
4
|
+
* This module provides a type-safe event emitter,
|
|
5
|
+
* compatible with @oxog/emitter when available.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create a type-safe event emitter
|
|
9
|
+
*/
|
|
10
|
+
export function createEmitter() {
|
|
11
|
+
const listeners = new Map();
|
|
12
|
+
const getListeners = (event) => {
|
|
13
|
+
if (!listeners.has(event)) {
|
|
14
|
+
listeners.set(event, []);
|
|
15
|
+
}
|
|
16
|
+
return listeners.get(event);
|
|
17
|
+
};
|
|
18
|
+
const sortListeners = (event) => {
|
|
19
|
+
const eventListeners = getListeners(event);
|
|
20
|
+
eventListeners.sort((a, b) => b.priority - a.priority);
|
|
21
|
+
};
|
|
22
|
+
const on = (event, handler, options = {}) => {
|
|
23
|
+
const entry = {
|
|
24
|
+
handler,
|
|
25
|
+
once: options.once ?? false,
|
|
26
|
+
priority: options.priority ?? 0
|
|
27
|
+
};
|
|
28
|
+
getListeners(event).push(entry);
|
|
29
|
+
sortListeners(event);
|
|
30
|
+
// Return unsubscribe function
|
|
31
|
+
return () => off(event, handler);
|
|
32
|
+
};
|
|
33
|
+
const once = (event, handler) => {
|
|
34
|
+
return on(event, handler, { once: true });
|
|
35
|
+
};
|
|
36
|
+
const off = (event, handler) => {
|
|
37
|
+
const eventListeners = listeners.get(event);
|
|
38
|
+
if (!eventListeners)
|
|
39
|
+
return;
|
|
40
|
+
const index = eventListeners.findIndex((entry) => entry.handler === handler);
|
|
41
|
+
if (index !== -1) {
|
|
42
|
+
eventListeners.splice(index, 1);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const emit = (event, payload) => {
|
|
46
|
+
const eventListeners = listeners.get(event);
|
|
47
|
+
if (!eventListeners || eventListeners.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
// Create a copy to allow modifications during iteration
|
|
50
|
+
const listenersToCall = [...eventListeners];
|
|
51
|
+
for (const entry of listenersToCall) {
|
|
52
|
+
if (entry.once) {
|
|
53
|
+
off(event, entry.handler);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
entry.handler(payload);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Log error but don't stop other handlers
|
|
60
|
+
console.error(`Error in event handler for "${String(event)}":`, error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const emitAsync = async (event, payload) => {
|
|
65
|
+
const eventListeners = listeners.get(event);
|
|
66
|
+
if (!eventListeners || eventListeners.length === 0)
|
|
67
|
+
return;
|
|
68
|
+
// Create a copy to allow modifications during iteration
|
|
69
|
+
const listenersToCall = [...eventListeners];
|
|
70
|
+
for (const entry of listenersToCall) {
|
|
71
|
+
if (entry.once) {
|
|
72
|
+
off(event, entry.handler);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await entry.handler(payload);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
// Log error but don't stop other handlers
|
|
79
|
+
console.error(`Error in async event handler for "${String(event)}":`, error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const removeAllListeners = (event) => {
|
|
84
|
+
if (event !== undefined) {
|
|
85
|
+
listeners.delete(event);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
listeners.clear();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const listenerCount = (event) => {
|
|
92
|
+
return listeners.get(event)?.length ?? 0;
|
|
93
|
+
};
|
|
94
|
+
const eventNames = () => {
|
|
95
|
+
return Array.from(listeners.keys()).filter((key) => {
|
|
96
|
+
const eventListeners = listeners.get(key);
|
|
97
|
+
return eventListeners !== undefined && eventListeners.length > 0;
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
on,
|
|
102
|
+
once,
|
|
103
|
+
off,
|
|
104
|
+
emit,
|
|
105
|
+
emitAsync,
|
|
106
|
+
removeAllListeners,
|
|
107
|
+
listenerCount,
|
|
108
|
+
eventNames
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Mixin to add event emitter capabilities to a class
|
|
113
|
+
*/
|
|
114
|
+
export function withEmitter() {
|
|
115
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
116
|
+
return function (Base) {
|
|
117
|
+
return class extends Base {
|
|
118
|
+
constructor() {
|
|
119
|
+
super(...arguments);
|
|
120
|
+
/** @internal */
|
|
121
|
+
this._emitter = createEmitter();
|
|
122
|
+
}
|
|
123
|
+
on(event, handler, options) {
|
|
124
|
+
return this._emitter.on(event, handler, options);
|
|
125
|
+
}
|
|
126
|
+
once(event, handler) {
|
|
127
|
+
return this._emitter.once(event, handler);
|
|
128
|
+
}
|
|
129
|
+
off(event, handler) {
|
|
130
|
+
this._emitter.off(event, handler);
|
|
131
|
+
}
|
|
132
|
+
emit(event, payload) {
|
|
133
|
+
this._emitter.emit(event, payload);
|
|
134
|
+
}
|
|
135
|
+
async emitAsync(event, payload) {
|
|
136
|
+
await this._emitter.emitAsync(event, payload);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Create an event bus for global event handling
|
|
143
|
+
*/
|
|
144
|
+
export function createEventBus() {
|
|
145
|
+
const emitter = createEmitter();
|
|
146
|
+
const createScope = () => {
|
|
147
|
+
const unsubscribers = [];
|
|
148
|
+
const scopedEmitter = {
|
|
149
|
+
on: (event, handler, options) => {
|
|
150
|
+
const unsubscribe = emitter.on(event, handler, options);
|
|
151
|
+
unsubscribers.push(unsubscribe);
|
|
152
|
+
return unsubscribe;
|
|
153
|
+
},
|
|
154
|
+
once: (event, handler) => {
|
|
155
|
+
const unsubscribe = emitter.once(event, handler);
|
|
156
|
+
unsubscribers.push(unsubscribe);
|
|
157
|
+
return unsubscribe;
|
|
158
|
+
},
|
|
159
|
+
off: emitter.off,
|
|
160
|
+
emit: emitter.emit,
|
|
161
|
+
emitAsync: emitter.emitAsync,
|
|
162
|
+
removeAllListeners: emitter.removeAllListeners,
|
|
163
|
+
listenerCount: emitter.listenerCount,
|
|
164
|
+
eventNames: emitter.eventNames,
|
|
165
|
+
dispose: () => {
|
|
166
|
+
for (const unsubscribe of unsubscribers) {
|
|
167
|
+
unsubscribe();
|
|
168
|
+
}
|
|
169
|
+
unsubscribers.length = 0;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return scopedEmitter;
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
...emitter,
|
|
176
|
+
createScope
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/compat/emitter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Event Emitter Implementation\r\n *\r\n * This module provides a type-safe event emitter,\r\n * compatible with @oxog/emitter when available.\r\n */\r\n\r\n/**\r\n * Event map type - maps event names to their payload types\r\n */\r\nexport type EventMap = Record<string, unknown>;\r\n\r\n/**\r\n * Event handler function type\r\n */\r\nexport type EventHandler<T = unknown> = (payload: T) => void | Promise<void>;\r\n\r\n/**\r\n * Listener options\r\n */\r\nexport interface ListenerOptions {\r\n /** Remove listener after first call */\r\n once?: boolean;\r\n /** Listener priority (higher = called first) */\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * Internal listener entry\r\n */\r\ninterface ListenerEntry<T = unknown> {\r\n handler: EventHandler<T>;\r\n once: boolean;\r\n priority: number;\r\n}\r\n\r\n/**\r\n * Emitter interface\r\n */\r\nexport interface Emitter<TEvents extends EventMap = EventMap> {\r\n /** Subscribe to an event */\r\n on<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options?: ListenerOptions\r\n ): () => void;\r\n\r\n /** Subscribe to an event once */\r\n once<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): () => void;\r\n\r\n /** Unsubscribe from an event */\r\n off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void;\r\n\r\n /** Emit an event */\r\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void;\r\n\r\n /** Emit an event and wait for all handlers */\r\n emitAsync<K extends keyof TEvents>(event: K, payload: TEvents[K]): Promise<void>;\r\n\r\n /** Remove all listeners for an event or all events */\r\n removeAllListeners<K extends keyof TEvents>(event?: K): void;\r\n\r\n /** Get listener count for an event */\r\n listenerCount<K extends keyof TEvents>(event: K): number;\r\n\r\n /** Get all event names with listeners */\r\n eventNames(): (keyof TEvents)[];\r\n}\r\n\r\n/**\r\n * Create a type-safe event emitter\r\n */\r\nexport function createEmitter<TEvents extends EventMap = EventMap>(): Emitter<TEvents> {\r\n const listeners = new Map<keyof TEvents, ListenerEntry<unknown>[]>();\r\n\r\n const getListeners = <K extends keyof TEvents>(event: K): ListenerEntry<TEvents[K]>[] => {\r\n if (!listeners.has(event)) {\r\n listeners.set(event, []);\r\n }\r\n return listeners.get(event) as ListenerEntry<TEvents[K]>[];\r\n };\r\n\r\n const sortListeners = <K extends keyof TEvents>(event: K): void => {\r\n const eventListeners = getListeners(event);\r\n eventListeners.sort((a, b) => b.priority - a.priority);\r\n };\r\n\r\n const on = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options: ListenerOptions = {}\r\n ): (() => void) => {\r\n const entry: ListenerEntry<TEvents[K]> = {\r\n handler,\r\n once: options.once ?? false,\r\n priority: options.priority ?? 0\r\n };\r\n\r\n getListeners(event).push(entry);\r\n sortListeners(event);\r\n\r\n // Return unsubscribe function\r\n return () => off(event, handler);\r\n };\r\n\r\n const once = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): (() => void) => {\r\n return on(event, handler, { once: true });\r\n };\r\n\r\n const off = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): void => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners) return;\r\n\r\n const index = eventListeners.findIndex((entry) => entry.handler === handler);\r\n if (index !== -1) {\r\n eventListeners.splice(index, 1);\r\n }\r\n };\r\n\r\n const emit = <K extends keyof TEvents>(event: K, payload: TEvents[K]): void => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners || eventListeners.length === 0) return;\r\n\r\n // Create a copy to allow modifications during iteration\r\n const listenersToCall = [...eventListeners];\r\n\r\n for (const entry of listenersToCall) {\r\n if (entry.once) {\r\n off(event, entry.handler as EventHandler<TEvents[K]>);\r\n }\r\n\r\n try {\r\n entry.handler(payload);\r\n } catch (error) {\r\n // Log error but don't stop other handlers\r\n console.error(`Error in event handler for \"${String(event)}\":`, error);\r\n }\r\n }\r\n };\r\n\r\n const emitAsync = async <K extends keyof TEvents>(\r\n event: K,\r\n payload: TEvents[K]\r\n ): Promise<void> => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners || eventListeners.length === 0) return;\r\n\r\n // Create a copy to allow modifications during iteration\r\n const listenersToCall = [...eventListeners];\r\n\r\n for (const entry of listenersToCall) {\r\n if (entry.once) {\r\n off(event, entry.handler as EventHandler<TEvents[K]>);\r\n }\r\n\r\n try {\r\n await entry.handler(payload);\r\n } catch (error) {\r\n // Log error but don't stop other handlers\r\n console.error(`Error in async event handler for \"${String(event)}\":`, error);\r\n }\r\n }\r\n };\r\n\r\n const removeAllListeners = <K extends keyof TEvents>(event?: K): void => {\r\n if (event !== undefined) {\r\n listeners.delete(event);\r\n } else {\r\n listeners.clear();\r\n }\r\n };\r\n\r\n const listenerCount = <K extends keyof TEvents>(event: K): number => {\r\n return listeners.get(event)?.length ?? 0;\r\n };\r\n\r\n const eventNames = (): (keyof TEvents)[] => {\r\n return Array.from(listeners.keys()).filter((key) => {\r\n const eventListeners = listeners.get(key);\r\n return eventListeners !== undefined && eventListeners.length > 0;\r\n });\r\n };\r\n\r\n return {\r\n on,\r\n once,\r\n off,\r\n emit,\r\n emitAsync,\r\n removeAllListeners,\r\n listenerCount,\r\n eventNames\r\n };\r\n}\r\n\r\n/**\r\n * Mixin to add event emitter capabilities to a class\r\n */\r\nexport function withEmitter<TEvents extends EventMap>() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return function <TBase extends new (...args: any[]) => object>(Base: TBase) {\r\n return class extends Base {\r\n /** @internal */\r\n _emitter = createEmitter<TEvents>();\r\n\r\n on<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options?: ListenerOptions\r\n ): () => void {\r\n return this._emitter.on(event, handler, options);\r\n }\r\n\r\n once<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void {\r\n return this._emitter.once(event, handler);\r\n }\r\n\r\n off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void {\r\n this._emitter.off(event, handler);\r\n }\r\n\r\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\r\n this._emitter.emit(event, payload);\r\n }\r\n\r\n async emitAsync<K extends keyof TEvents>(\r\n event: K,\r\n payload: TEvents[K]\r\n ): Promise<void> {\r\n await this._emitter.emitAsync(event, payload);\r\n }\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Create an event bus for global event handling\r\n */\r\nexport function createEventBus<TEvents extends EventMap>(): Emitter<TEvents> & {\r\n /** Create a scoped emitter that auto-cleans up */\r\n createScope(): Emitter<TEvents> & { dispose(): void };\r\n} {\r\n const emitter = createEmitter<TEvents>();\r\n\r\n const createScope = (): Emitter<TEvents> & { dispose(): void } => {\r\n const unsubscribers: (() => void)[] = [];\r\n\r\n const scopedEmitter: Emitter<TEvents> & { dispose(): void } = {\r\n on: (event, handler, options) => {\r\n const unsubscribe = emitter.on(event, handler, options);\r\n unsubscribers.push(unsubscribe);\r\n return unsubscribe;\r\n },\r\n once: (event, handler) => {\r\n const unsubscribe = emitter.once(event, handler);\r\n unsubscribers.push(unsubscribe);\r\n return unsubscribe;\r\n },\r\n off: emitter.off,\r\n emit: emitter.emit,\r\n emitAsync: emitter.emitAsync,\r\n removeAllListeners: emitter.removeAllListeners,\r\n listenerCount: emitter.listenerCount,\r\n eventNames: emitter.eventNames,\r\n dispose: () => {\r\n for (const unsubscribe of unsubscribers) {\r\n unsubscribe();\r\n }\r\n unsubscribers.length = 0;\r\n }\r\n };\r\n\r\n return scopedEmitter;\r\n };\r\n\r\n return {\r\n ...emitter,\r\n createScope\r\n };\r\n}\r\n\r\nexport type { EventHandler as VldEventHandler };\r\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VLD Compatibility Layer
|
|
3
|
+
*
|
|
4
|
+
* This module provides internal implementations of @oxog ecosystem features
|
|
5
|
+
* that can be replaced with actual @oxog packages when available.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Result pattern (@oxog/types compatibility)
|
|
9
|
+
* - Event emitter (@oxog/emitter compatibility)
|
|
10
|
+
*/
|
|
11
|
+
export type { Result, VldResult } from './result';
|
|
12
|
+
export { Ok, Err, success, failure, isOk, isErr, isResult, unwrap, unwrapOr, map, mapErr, flatMap, match, tryCatch, tryCatchAsync, all, fromNullable, ResultUtils } from './result';
|
|
13
|
+
export type { EventMap, EventHandler, ListenerOptions, Emitter, VldEventHandler } from './emitter';
|
|
14
|
+
export { createEmitter, createEventBus, withEmitter } from './emitter';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,EACL,EAAE,EACF,GAAG,EACH,OAAO,EACP,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,GAAG,EACH,YAAY,EACZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VLD Compatibility Layer
|
|
3
|
+
*
|
|
4
|
+
* This module provides internal implementations of @oxog ecosystem features
|
|
5
|
+
* that can be replaced with actual @oxog packages when available.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Result pattern (@oxog/types compatibility)
|
|
9
|
+
* - Event emitter (@oxog/emitter compatibility)
|
|
10
|
+
*/
|
|
11
|
+
export { Ok, Err, success, failure, isOk, isErr, isResult, unwrap, unwrapOr, map, mapErr, flatMap, match, tryCatch, tryCatchAsync, all, fromNullable, ResultUtils } from './result.js';
|
|
12
|
+
// Event emitter value exports
|
|
13
|
+
export { createEmitter, createEventBus, withEmitter } from './emitter.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EACL,EAAE,EACF,GAAG,EACH,OAAO,EACP,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,GAAG,EACH,YAAY,EACZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAKlB,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC","sourcesContent":["/**\r\n * VLD Compatibility Layer\r\n *\r\n * This module provides internal implementations of @oxog ecosystem features\r\n * that can be replaced with actual @oxog packages when available.\r\n *\r\n * Features:\r\n * - Result pattern (@oxog/types compatibility)\r\n * - Event emitter (@oxog/emitter compatibility)\r\n */\r\n\r\n// Result pattern exports (Ok and Err are both types and values)\r\nexport type { Result, VldResult } from './result';\r\n\r\nexport {\r\n Ok,\r\n Err,\r\n success,\r\n failure,\r\n isOk,\r\n isErr,\r\n isResult,\r\n unwrap,\r\n unwrapOr,\r\n map,\r\n mapErr,\r\n flatMap,\r\n match,\r\n tryCatch,\r\n tryCatchAsync,\r\n all,\r\n fromNullable,\r\n ResultUtils\r\n} from './result';\r\n\r\n// Event emitter type exports\r\nexport type { EventMap, EventHandler, ListenerOptions, Emitter, VldEventHandler } from './emitter';\r\n\r\n// Event emitter value exports\r\nexport { createEmitter, createEventBus, withEmitter } from './emitter';\r\n"]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result Pattern Implementation
|
|
3
|
+
*
|
|
4
|
+
* This module provides a Result type for functional error handling,
|
|
5
|
+
* compatible with @oxog/types when available.
|
|
6
|
+
*/
|
|
7
|
+
import type { VldError } from '../errors';
|
|
8
|
+
/**
|
|
9
|
+
* Success result type
|
|
10
|
+
*/
|
|
11
|
+
export interface Ok<T> {
|
|
12
|
+
readonly success: true;
|
|
13
|
+
readonly data: T;
|
|
14
|
+
readonly value: T;
|
|
15
|
+
readonly error?: never;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Error result type
|
|
19
|
+
*/
|
|
20
|
+
export interface Err<E = Error> {
|
|
21
|
+
readonly success: false;
|
|
22
|
+
readonly error: E;
|
|
23
|
+
readonly data?: never;
|
|
24
|
+
readonly value?: never;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Result type - Either success with data or failure with error
|
|
28
|
+
*/
|
|
29
|
+
export type Result<T, E = Error> = Ok<T> | Err<E>;
|
|
30
|
+
/**
|
|
31
|
+
* VLD-specific Result type with VldError
|
|
32
|
+
*/
|
|
33
|
+
export type VldResult<T> = Result<T, VldError>;
|
|
34
|
+
/**
|
|
35
|
+
* Create a success result
|
|
36
|
+
*/
|
|
37
|
+
export declare function Ok<T>(data: T): Ok<T>;
|
|
38
|
+
/**
|
|
39
|
+
* Create an error result
|
|
40
|
+
*/
|
|
41
|
+
export declare function Err<E = Error>(error: E): Err<E>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a success result (alias)
|
|
44
|
+
*/
|
|
45
|
+
export declare const success: typeof Ok;
|
|
46
|
+
/**
|
|
47
|
+
* Create a failure result (alias)
|
|
48
|
+
*/
|
|
49
|
+
export declare const failure: typeof Err;
|
|
50
|
+
/**
|
|
51
|
+
* Check if result is Ok
|
|
52
|
+
*/
|
|
53
|
+
export declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if result is Err
|
|
56
|
+
*/
|
|
57
|
+
export declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
|
|
58
|
+
/**
|
|
59
|
+
* Check if value is a Result
|
|
60
|
+
*/
|
|
61
|
+
export declare function isResult<T, E>(value: unknown): value is Result<T, E>;
|
|
62
|
+
/**
|
|
63
|
+
* Unwrap a result, throwing the error if it's an Err
|
|
64
|
+
*/
|
|
65
|
+
export declare function unwrap<T, E extends Error>(result: Result<T, E>): T;
|
|
66
|
+
/**
|
|
67
|
+
* Unwrap a result with a default value
|
|
68
|
+
*/
|
|
69
|
+
export declare function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T;
|
|
70
|
+
/**
|
|
71
|
+
* Map over a successful result
|
|
72
|
+
*/
|
|
73
|
+
export declare function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;
|
|
74
|
+
/**
|
|
75
|
+
* Map over an error result
|
|
76
|
+
*/
|
|
77
|
+
export declare function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
|
|
78
|
+
/**
|
|
79
|
+
* Chain results (flatMap)
|
|
80
|
+
*/
|
|
81
|
+
export declare function flatMap<T, U, E>(result: Result<T, E>, fn: (value: T) => Result<U, E>): Result<U, E>;
|
|
82
|
+
/**
|
|
83
|
+
* Pattern match on a result
|
|
84
|
+
*/
|
|
85
|
+
export declare function match<T, E, U>(result: Result<T, E>, handlers: {
|
|
86
|
+
ok: (value: T) => U;
|
|
87
|
+
err: (error: E) => U;
|
|
88
|
+
}): U;
|
|
89
|
+
/**
|
|
90
|
+
* Try to execute a function and wrap the result
|
|
91
|
+
*/
|
|
92
|
+
export declare function tryCatch<T>(fn: () => T): Result<T, Error>;
|
|
93
|
+
/**
|
|
94
|
+
* Try to execute an async function and wrap the result
|
|
95
|
+
*/
|
|
96
|
+
export declare function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>>;
|
|
97
|
+
/**
|
|
98
|
+
* Combine multiple results into a single result
|
|
99
|
+
* Returns Ok with array of values if all succeed, Err with first error otherwise
|
|
100
|
+
*/
|
|
101
|
+
export declare function all<T, E>(results: Result<T, E>[]): Result<T[], E>;
|
|
102
|
+
/**
|
|
103
|
+
* Convert a nullable value to a Result
|
|
104
|
+
*/
|
|
105
|
+
export declare function fromNullable<T>(value: T | null | undefined, error?: Error): Result<T, Error>;
|
|
106
|
+
/**
|
|
107
|
+
* Result utilities namespace
|
|
108
|
+
*/
|
|
109
|
+
export declare const ResultUtils: {
|
|
110
|
+
Ok: typeof Ok;
|
|
111
|
+
Err: typeof Err;
|
|
112
|
+
success: typeof Ok;
|
|
113
|
+
failure: typeof Err;
|
|
114
|
+
isOk: typeof isOk;
|
|
115
|
+
isErr: typeof isErr;
|
|
116
|
+
isResult: typeof isResult;
|
|
117
|
+
unwrap: typeof unwrap;
|
|
118
|
+
unwrapOr: typeof unwrapOr;
|
|
119
|
+
map: typeof map;
|
|
120
|
+
mapErr: typeof mapErr;
|
|
121
|
+
flatMap: typeof flatMap;
|
|
122
|
+
match: typeof match;
|
|
123
|
+
tryCatch: typeof tryCatch;
|
|
124
|
+
tryCatchAsync: typeof tryCatchAsync;
|
|
125
|
+
all: typeof all;
|
|
126
|
+
fromNullable: typeof fromNullable;
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/compat/result.ts"],"names":[],"mappings":"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"}
|