semola 0.5.2 → 0.5.3
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 +88 -13
- package/dist/cron/builder/index.cjs +166 -0
- package/dist/cron/builder/index.d.cts +28 -0
- package/dist/cron/builder/index.d.cts.map +1 -0
- package/dist/cron/builder/index.d.mts +28 -0
- package/dist/cron/builder/index.d.mts.map +1 -0
- package/dist/cron/builder/index.mjs +163 -0
- package/dist/cron/builder/index.mjs.map +1 -0
- package/dist/cron/builder/types.cjs +27 -0
- package/dist/cron/builder/types.d.cts +79 -0
- package/dist/cron/builder/types.d.cts.map +1 -0
- package/dist/cron/builder/types.d.mts +79 -0
- package/dist/cron/builder/types.d.mts.map +1 -0
- package/dist/cron/builder/types.mjs +28 -0
- package/dist/cron/builder/types.mjs.map +1 -0
- package/dist/cron/core/index.cjs +308 -0
- package/dist/cron/core/index.d.cts +39 -0
- package/dist/cron/core/index.d.cts.map +1 -0
- package/dist/cron/core/index.d.mts +39 -0
- package/dist/cron/core/index.d.mts.map +1 -0
- package/dist/cron/core/index.mjs +310 -0
- package/dist/cron/core/index.mjs.map +1 -0
- package/dist/cron/{scanner.cjs → core/scanner.cjs} +2 -2
- package/dist/cron/{scanner.mjs → core/scanner.mjs} +2 -2
- package/dist/cron/core/scanner.mjs.map +1 -0
- package/dist/cron/{types.d.cts → core/types.d.cts} +1 -1
- package/dist/cron/core/types.d.cts.map +1 -0
- package/dist/cron/{types.d.mts → core/types.d.mts} +1 -1
- package/dist/cron/core/types.d.mts.map +1 -0
- package/dist/errors/types.d.cts +1 -1
- package/dist/errors/types.d.mts +1 -1
- package/dist/lib/cache/index.d.cts +3 -3
- package/dist/lib/cache/index.d.mts +3 -3
- package/dist/lib/cron/index.cjs +12 -275
- package/dist/lib/cron/index.d.cts +4 -39
- package/dist/lib/cron/index.d.mts +4 -39
- package/dist/lib/cron/index.mjs +4 -277
- package/dist/lib/errors/index.d.cts +2 -2
- package/dist/lib/errors/index.d.cts.map +1 -1
- package/dist/lib/errors/index.d.mts +2 -2
- package/dist/lib/errors/index.d.mts.map +1 -1
- package/dist/lib/errors/index.mjs.map +1 -1
- package/dist/lib/i18n/index.cjs +6 -1
- package/dist/lib/i18n/index.d.cts.map +1 -1
- package/dist/lib/i18n/index.d.mts.map +1 -1
- package/dist/lib/i18n/index.mjs +6 -1
- package/dist/lib/i18n/index.mjs.map +1 -1
- package/dist/lib/logging/index.cjs +18 -0
- package/dist/lib/logging/index.d.cts +7 -0
- package/dist/lib/logging/index.d.mts +7 -0
- package/dist/lib/logging/index.mjs +5 -0
- package/dist/lib/orm/index.cjs +20 -0
- package/dist/lib/orm/index.d.cts +7 -0
- package/dist/lib/orm/index.d.mts +7 -0
- package/dist/lib/orm/index.mjs +6 -0
- package/dist/lib/prompts/index.d.cts +8 -8
- package/dist/lib/prompts/index.d.mts +8 -8
- package/dist/lib/pubsub/index.cjs +82 -13
- package/dist/lib/pubsub/index.d.cts +14 -5
- package/dist/lib/pubsub/index.d.cts.map +1 -1
- package/dist/lib/pubsub/index.d.mts +14 -5
- package/dist/lib/pubsub/index.d.mts.map +1 -1
- package/dist/lib/pubsub/index.mjs +82 -13
- package/dist/lib/pubsub/index.mjs.map +1 -1
- package/dist/lib/queue/index.d.cts +2 -2
- package/dist/lib/queue/index.d.mts +2 -2
- package/dist/lib/workflow/index.cjs +534 -0
- package/dist/lib/workflow/index.d.cts +7 -0
- package/dist/lib/workflow/index.d.cts.map +1 -0
- package/dist/lib/workflow/index.d.mts +7 -0
- package/dist/lib/workflow/index.d.mts.map +1 -0
- package/dist/lib/workflow/index.mjs +535 -0
- package/dist/lib/workflow/index.mjs.map +1 -0
- package/dist/logging/core/index.cjs +99 -0
- package/dist/logging/core/index.d.cts +26 -0
- package/dist/logging/core/index.d.cts.map +1 -0
- package/dist/logging/core/index.d.mts +26 -0
- package/dist/logging/core/index.d.mts.map +1 -0
- package/dist/logging/core/index.mjs +99 -0
- package/dist/logging/core/index.mjs.map +1 -0
- package/dist/logging/core/types.cjs +10 -0
- package/dist/logging/core/types.d.cts +22 -0
- package/dist/logging/core/types.d.cts.map +1 -0
- package/dist/logging/core/types.d.mts +22 -0
- package/dist/logging/core/types.d.mts.map +1 -0
- package/dist/logging/core/types.mjs +12 -0
- package/dist/logging/core/types.mjs.map +1 -0
- package/dist/logging/formatter/index.cjs +119 -0
- package/dist/logging/formatter/index.d.cts +27 -0
- package/dist/logging/formatter/index.d.cts.map +1 -0
- package/dist/logging/formatter/index.d.mts +27 -0
- package/dist/logging/formatter/index.d.mts.map +1 -0
- package/dist/logging/formatter/index.mjs +115 -0
- package/dist/logging/formatter/index.mjs.map +1 -0
- package/dist/logging/formatter/types.d.cts +5 -0
- package/dist/logging/formatter/types.d.cts.map +1 -0
- package/dist/logging/formatter/types.d.mts +5 -0
- package/dist/logging/formatter/types.d.mts.map +1 -0
- package/dist/logging/provider/index.cjs +165 -0
- package/dist/logging/provider/index.d.cts +28 -0
- package/dist/logging/provider/index.d.cts.map +1 -0
- package/dist/logging/provider/index.d.mts +28 -0
- package/dist/logging/provider/index.d.mts.map +1 -0
- package/dist/logging/provider/index.mjs +165 -0
- package/dist/logging/provider/index.mjs.map +1 -0
- package/dist/logging/provider/types.d.cts +23 -0
- package/dist/logging/provider/types.d.cts.map +1 -0
- package/dist/logging/provider/types.d.mts +23 -0
- package/dist/logging/provider/types.d.mts.map +1 -0
- package/dist/orm/column.cjs +137 -0
- package/dist/orm/column.d.cts +121 -0
- package/dist/orm/column.d.cts.map +1 -0
- package/dist/orm/column.d.mts +121 -0
- package/dist/orm/column.d.mts.map +1 -0
- package/dist/orm/column.mjs +132 -0
- package/dist/orm/column.mjs.map +1 -0
- package/dist/orm/dialect/index.cjs +14 -0
- package/dist/orm/dialect/index.mjs +16 -0
- package/dist/orm/dialect/index.mjs.map +1 -0
- package/dist/orm/dialect/mysql.cjs +31 -0
- package/dist/orm/dialect/mysql.mjs +33 -0
- package/dist/orm/dialect/mysql.mjs.map +1 -0
- package/dist/orm/dialect/postgres.cjs +23 -0
- package/dist/orm/dialect/postgres.mjs +25 -0
- package/dist/orm/dialect/postgres.mjs.map +1 -0
- package/dist/orm/dialect/sqlite.cjs +31 -0
- package/dist/orm/dialect/sqlite.mjs +33 -0
- package/dist/orm/dialect/sqlite.mjs.map +1 -0
- package/dist/orm/dialect/utils.cjs +8 -0
- package/dist/orm/dialect/utils.mjs +10 -0
- package/dist/orm/dialect/utils.mjs.map +1 -0
- package/dist/orm/internal/table-columns.cjs +31 -0
- package/dist/orm/internal/table-columns.mjs +32 -0
- package/dist/orm/internal/table-columns.mjs.map +1 -0
- package/dist/orm/internal/table-lookup.cjs +35 -0
- package/dist/orm/internal/table-lookup.mjs +35 -0
- package/dist/orm/internal/table-lookup.mjs.map +1 -0
- package/dist/orm/internal/table-relations.cjs +28 -0
- package/dist/orm/internal/table-relations.mjs +29 -0
- package/dist/orm/internal/table-relations.mjs.map +1 -0
- package/dist/orm/migration/config.cjs +7 -0
- package/dist/orm/migration/config.d.cts +7 -0
- package/dist/orm/migration/config.d.cts.map +1 -0
- package/dist/orm/migration/config.d.mts +7 -0
- package/dist/orm/migration/config.d.mts.map +1 -0
- package/dist/orm/migration/config.mjs +8 -0
- package/dist/orm/migration/config.mjs.map +1 -0
- package/dist/orm/migration/types.d.cts +20 -0
- package/dist/orm/migration/types.d.cts.map +1 -0
- package/dist/orm/migration/types.d.mts +20 -0
- package/dist/orm/migration/types.d.mts.map +1 -0
- package/dist/orm/orm.cjs +41 -0
- package/dist/orm/orm.d.cts +18 -0
- package/dist/orm/orm.d.cts.map +1 -0
- package/dist/orm/orm.d.mts +18 -0
- package/dist/orm/orm.d.mts.map +1 -0
- package/dist/orm/orm.mjs +43 -0
- package/dist/orm/orm.mjs.map +1 -0
- package/dist/orm/relation.cjs +18 -0
- package/dist/orm/relation.d.cts +8 -0
- package/dist/orm/relation.d.cts.map +1 -0
- package/dist/orm/relation.d.mts +8 -0
- package/dist/orm/relation.d.mts.map +1 -0
- package/dist/orm/relation.mjs +19 -0
- package/dist/orm/relation.mjs.map +1 -0
- package/dist/orm/runtime/builders/mutations.cjs +29 -0
- package/dist/orm/runtime/builders/mutations.mjs +28 -0
- package/dist/orm/runtime/builders/mutations.mjs.map +1 -0
- package/dist/orm/runtime/builders/select.cjs +18 -0
- package/dist/orm/runtime/builders/select.mjs +19 -0
- package/dist/orm/runtime/builders/select.mjs.map +1 -0
- package/dist/orm/runtime/client.cjs +90 -0
- package/dist/orm/runtime/client.mjs +92 -0
- package/dist/orm/runtime/client.mjs.map +1 -0
- package/dist/orm/runtime/context.cjs +49 -0
- package/dist/orm/runtime/context.mjs +51 -0
- package/dist/orm/runtime/context.mjs.map +1 -0
- package/dist/orm/runtime/dialect/index.cjs +11 -0
- package/dist/orm/runtime/dialect/index.mjs +13 -0
- package/dist/orm/runtime/dialect/index.mjs.map +1 -0
- package/dist/orm/runtime/dialect/mysql.cjs +95 -0
- package/dist/orm/runtime/dialect/mysql.mjs +97 -0
- package/dist/orm/runtime/dialect/mysql.mjs.map +1 -0
- package/dist/orm/runtime/dialect/postgres.cjs +51 -0
- package/dist/orm/runtime/dialect/postgres.mjs +53 -0
- package/dist/orm/runtime/dialect/postgres.mjs.map +1 -0
- package/dist/orm/runtime/dialect/sqlite.cjs +4 -0
- package/dist/orm/runtime/dialect/sqlite.mjs +7 -0
- package/dist/orm/runtime/dialect/sqlite.mjs.map +1 -0
- package/dist/orm/runtime/errors.cjs +19 -0
- package/dist/orm/runtime/errors.mjs +21 -0
- package/dist/orm/runtime/errors.mjs.map +1 -0
- package/dist/orm/runtime/hydrate/many.cjs +46 -0
- package/dist/orm/runtime/hydrate/many.mjs +48 -0
- package/dist/orm/runtime/hydrate/many.mjs.map +1 -0
- package/dist/orm/runtime/hydrate/one.cjs +38 -0
- package/dist/orm/runtime/hydrate/one.mjs +40 -0
- package/dist/orm/runtime/hydrate/one.mjs.map +1 -0
- package/dist/orm/runtime/hydrate.cjs +49 -0
- package/dist/orm/runtime/hydrate.mjs +51 -0
- package/dist/orm/runtime/hydrate.mjs.map +1 -0
- package/dist/orm/runtime/rows.cjs +30 -0
- package/dist/orm/runtime/rows.mjs +31 -0
- package/dist/orm/runtime/rows.mjs.map +1 -0
- package/dist/orm/runtime/utils.cjs +27 -0
- package/dist/orm/runtime/utils.mjs +27 -0
- package/dist/orm/runtime/utils.mjs.map +1 -0
- package/dist/orm/sql/parse-array.cjs +64 -0
- package/dist/orm/sql/parse-array.mjs +66 -0
- package/dist/orm/sql/parse-array.mjs.map +1 -0
- package/dist/orm/sql/plan/select.cjs +36 -0
- package/dist/orm/sql/plan/select.mjs +38 -0
- package/dist/orm/sql/plan/select.mjs.map +1 -0
- package/dist/orm/sql/plan/where/operators.cjs +95 -0
- package/dist/orm/sql/plan/where/operators.mjs +97 -0
- package/dist/orm/sql/plan/where/operators.mjs.map +1 -0
- package/dist/orm/sql/plan/where.cjs +59 -0
- package/dist/orm/sql/plan/where.mjs +61 -0
- package/dist/orm/sql/plan/where.mjs.map +1 -0
- package/dist/orm/sql/serialize/clauses.cjs +36 -0
- package/dist/orm/sql/serialize/clauses.mjs +37 -0
- package/dist/orm/sql/serialize/clauses.mjs.map +1 -0
- package/dist/orm/sql/serialize/joins.cjs +31 -0
- package/dist/orm/sql/serialize/joins.mjs +33 -0
- package/dist/orm/sql/serialize/joins.mjs.map +1 -0
- package/dist/orm/sql/serialize/values.cjs +30 -0
- package/dist/orm/sql/serialize/values.mjs +32 -0
- package/dist/orm/sql/serialize/values.mjs.map +1 -0
- package/dist/orm/sql/serialize/where/predicate.cjs +73 -0
- package/dist/orm/sql/serialize/where/predicate.mjs +75 -0
- package/dist/orm/sql/serialize/where/predicate.mjs.map +1 -0
- package/dist/orm/sql/serialize/where/tree.cjs +26 -0
- package/dist/orm/sql/serialize/where/tree.mjs +28 -0
- package/dist/orm/sql/serialize/where/tree.mjs.map +1 -0
- package/dist/orm/sql/serialize/where.cjs +10 -0
- package/dist/orm/sql/serialize/where.mjs +12 -0
- package/dist/orm/sql/serialize/where.mjs.map +1 -0
- package/dist/orm/sql/serialize.cjs +24 -0
- package/dist/orm/sql/serialize.mjs +25 -0
- package/dist/orm/sql/serialize.mjs.map +1 -0
- package/dist/orm/table.cjs +12 -0
- package/dist/orm/table.d.cts +12 -0
- package/dist/orm/table.d.cts.map +1 -0
- package/dist/orm/table.d.mts +12 -0
- package/dist/orm/table.d.mts.map +1 -0
- package/dist/orm/table.mjs +14 -0
- package/dist/orm/table.mjs.map +1 -0
- package/dist/orm/types.d.cts +183 -0
- package/dist/orm/types.d.cts.map +1 -0
- package/dist/orm/types.d.mts +183 -0
- package/dist/orm/types.d.mts.map +1 -0
- package/dist/workflow/types.d.cts +83 -0
- package/dist/workflow/types.d.cts.map +1 -0
- package/dist/workflow/types.d.mts +83 -0
- package/dist/workflow/types.d.mts.map +1 -0
- package/package.json +29 -3
- package/dist/cron/scanner.mjs.map +0 -1
- package/dist/cron/types.d.cts.map +0 -1
- package/dist/cron/types.d.mts.map +0 -1
- package/dist/lib/cron/index.d.cts.map +0 -1
- package/dist/lib/cron/index.d.mts.map +0 -1
- package/dist/lib/cron/index.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/errors/index.ts"],"mappings":";;;cAEa,EAAA,MAAS,IAAA,EAAM,CAAA,qBAAC,CAAA;AAAA,cAIhB,GAAA,aAAiB,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,OAAA;EAAA;;;cAIvC,cAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/errors/index.ts"],"mappings":";;;cAEa,EAAA,MAAS,IAAA,EAAM,CAAA,qBAAC,CAAA;AAAA,cAIhB,GAAA,aAAiB,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,OAAA;EAAA;;;cAIvC,cAAA,UAAyB,KAAA,EACpC,EAAA,QAAU,CAAA,qBACO,CAAA,cAAe,CAAA;AAAA,cASrB,UAAA,UAA2B,KAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,CAAA,MAChB,OAAA,iBAAwB,CAAA,cAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/errors/index.ts"],"sourcesContent":["import type { CommonError } from \"./types.js\";\n\nexport const ok = <T>(data: T) => {\n return [null, data] as const;\n};\n\nexport const err = <T extends CommonError>(type: T, message: string) => {\n return [{ type, message }, null] as const;\n};\n\nexport const mightThrowSync = <T>(fn: () => T) => {\n try {\n const result = fn();\n return [null, result] as const;\n } catch (error) {\n return [error, null] as const;\n }\n};\n\nexport const mightThrow = async <T>(promise: Promise<T
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/errors/index.ts"],"sourcesContent":["import type { CommonError } from \"./types.js\";\n\nexport const ok = <T>(data: T) => {\n return [null, data] as const;\n};\n\nexport const err = <T extends CommonError>(type: T, message: string) => {\n return [{ type, message }, null] as const;\n};\n\nexport const mightThrowSync = <T, E = Error>(\n fn: () => T,\n): readonly [null, T] | readonly [E, null] => {\n try {\n const result = fn();\n return [null, result] as const;\n } catch (error) {\n return [error as E, null] as const;\n }\n};\n\nexport const mightThrow = async <T, E = Error>(\n promise: Promise<T>,\n): Promise<readonly [null, T] | readonly [E, null]> => {\n try {\n const data = await promise;\n return [null, data] as const;\n } catch (error) {\n return [error as E, null] as const;\n }\n};\n"],"mappings":";AAEA,MAAa,MAAS,SAAY;AAChC,QAAO,CAAC,MAAM,KAAK;;AAGrB,MAAa,OAA8B,MAAS,YAAoB;AACtE,QAAO,CAAC;EAAE;EAAM;EAAS,EAAE,KAAK;;AAGlC,MAAa,kBACX,OAC4C;AAC5C,KAAI;AAEF,SAAO,CAAC,MADO,IAAI,CACE;UACd,OAAO;AACd,SAAO,CAAC,OAAY,KAAK;;;AAI7B,MAAa,aAAa,OACxB,YACqD;AACrD,KAAI;AAEF,SAAO,CAAC,MADK,MAAM,QACA;UACZ,OAAO;AACd,SAAO,CAAC,OAAY,KAAK"}
|
package/dist/lib/i18n/index.cjs
CHANGED
|
@@ -19,12 +19,17 @@ var I18n = class {
|
|
|
19
19
|
const currentTranslations = this.locales[this.currentLocale];
|
|
20
20
|
const defaultTranslations = this.locales[this.defaultLocale];
|
|
21
21
|
const translation = this.getNestedValue(currentTranslations, key) ?? this.getNestedValue(defaultTranslations, key);
|
|
22
|
+
if (typeof translation !== "string") return key;
|
|
22
23
|
if (!translation) return key;
|
|
23
24
|
const paramObj = params[0];
|
|
24
25
|
return this.substituteParams(translation, paramObj);
|
|
25
26
|
}
|
|
26
27
|
getNestedValue(obj, path) {
|
|
27
|
-
return path.split(".").reduce((current, key) =>
|
|
28
|
+
return path.split(".").reduce((current, key) => {
|
|
29
|
+
if (typeof current !== "object") return;
|
|
30
|
+
if (current === null) return;
|
|
31
|
+
return current[key];
|
|
32
|
+
}, obj);
|
|
28
33
|
}
|
|
29
34
|
substituteParams(template, params) {
|
|
30
35
|
if (!params) return template;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,QAwB/C,cAAA;EAAA,QAiBA,gBAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,QAwB/C,cAAA;EAAA,QAiBA,gBAAA;AAAA"}
|
package/dist/lib/i18n/index.mjs
CHANGED
|
@@ -18,12 +18,17 @@ var I18n = class {
|
|
|
18
18
|
const currentTranslations = this.locales[this.currentLocale];
|
|
19
19
|
const defaultTranslations = this.locales[this.defaultLocale];
|
|
20
20
|
const translation = this.getNestedValue(currentTranslations, key) ?? this.getNestedValue(defaultTranslations, key);
|
|
21
|
+
if (typeof translation !== "string") return key;
|
|
21
22
|
if (!translation) return key;
|
|
22
23
|
const paramObj = params[0];
|
|
23
24
|
return this.substituteParams(translation, paramObj);
|
|
24
25
|
}
|
|
25
26
|
getNestedValue(obj, path) {
|
|
26
|
-
return path.split(".").reduce((current, key) =>
|
|
27
|
+
return path.split(".").reduce((current, key) => {
|
|
28
|
+
if (typeof current !== "object") return;
|
|
29
|
+
if (current === null) return;
|
|
30
|
+
return current[key];
|
|
31
|
+
}, obj);
|
|
27
32
|
}
|
|
28
33
|
substituteParams(template, params) {
|
|
29
34
|
if (!params) return template;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/i18n/index.ts"],"sourcesContent":["import type { BuildParamObject, GetNestedValue, NestedKeyOf } from \"./types.js\";\n\nexport class I18n<\n const TLocales extends Record<string, Record<string, unknown>>,\n TDefaultLocale extends keyof TLocales,\n> {\n private locales: TLocales;\n private currentLocale: keyof TLocales;\n private defaultLocale: TDefaultLocale;\n\n public constructor(config: {\n defaultLocale: TDefaultLocale;\n locales: TLocales;\n }) {\n this.defaultLocale = config.defaultLocale;\n this.currentLocale = config.defaultLocale;\n this.locales = config.locales;\n }\n\n public setLocale(locale: keyof TLocales) {\n this.currentLocale = locale;\n }\n\n public getLocale() {\n return this.currentLocale;\n }\n\n public translate<TKey extends NestedKeyOf<TLocales[TDefaultLocale]>>(\n key: TKey,\n ...params: BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n > extends Record<string, never>\n ? []\n : [\n BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n >,\n ]\n ) {\n const currentTranslations = this.locales[this.currentLocale];\n const defaultTranslations = this.locales[this.defaultLocale];\n\n const translation =\n this.getNestedValue(currentTranslations, key) ??\n this.getNestedValue(defaultTranslations, key);\n\n if (!translation) {\n return key;\n }\n\n const paramObj = params[0] as Record<string, unknown> | undefined;\n return this.substituteParams(translation, paramObj);\n }\n\n private getNestedValue(\n obj: Record<string, unknown> | undefined,\n path: string,\n ) {\n return path.split(\".\").reduce((current:
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/i18n/index.ts"],"sourcesContent":["import type { BuildParamObject, GetNestedValue, NestedKeyOf } from \"./types.js\";\n\nexport class I18n<\n const TLocales extends Record<string, Record<string, unknown>>,\n TDefaultLocale extends keyof TLocales,\n> {\n private locales: TLocales;\n private currentLocale: keyof TLocales;\n private defaultLocale: TDefaultLocale;\n\n public constructor(config: {\n defaultLocale: TDefaultLocale;\n locales: TLocales;\n }) {\n this.defaultLocale = config.defaultLocale;\n this.currentLocale = config.defaultLocale;\n this.locales = config.locales;\n }\n\n public setLocale(locale: keyof TLocales) {\n this.currentLocale = locale;\n }\n\n public getLocale() {\n return this.currentLocale;\n }\n\n public translate<TKey extends NestedKeyOf<TLocales[TDefaultLocale]>>(\n key: TKey,\n ...params: BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n > extends Record<string, never>\n ? []\n : [\n BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n >,\n ]\n ) {\n const currentTranslations = this.locales[this.currentLocale];\n const defaultTranslations = this.locales[this.defaultLocale];\n\n const translation =\n this.getNestedValue(currentTranslations, key) ??\n this.getNestedValue(defaultTranslations, key);\n\n if (typeof translation !== \"string\") {\n return key;\n }\n\n if (!translation) {\n return key;\n }\n\n const paramObj = params[0] as Record<string, unknown> | undefined;\n return this.substituteParams(translation, paramObj);\n }\n\n private getNestedValue(\n obj: Record<string, unknown> | undefined,\n path: string,\n ) {\n return path.split(\".\").reduce((current: unknown, key: string) => {\n if (typeof current !== \"object\") {\n return undefined;\n }\n\n if (current === null) {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[key];\n }, obj);\n }\n\n private substituteParams(template: string, params?: Record<string, unknown>) {\n if (!params) return template;\n\n return template.replace(/\\{(\\w+):(\\w+)\\}/g, (_match, name) => {\n return String(params[name]);\n });\n }\n}\n"],"mappings":";AAEA,IAAa,OAAb,MAGE;CACA;CACA;CACA;CAEA,YAAmB,QAGhB;AACD,OAAK,gBAAgB,OAAO;AAC5B,OAAK,gBAAgB,OAAO;AAC5B,OAAK,UAAU,OAAO;;CAGxB,UAAiB,QAAwB;AACvC,OAAK,gBAAgB;;CAGvB,YAAmB;AACjB,SAAO,KAAK;;CAGd,UACE,KACA,GAAG,QAaH;EACA,MAAM,sBAAsB,KAAK,QAAQ,KAAK;EAC9C,MAAM,sBAAsB,KAAK,QAAQ,KAAK;EAE9C,MAAM,cACJ,KAAK,eAAe,qBAAqB,IAAI,IAC7C,KAAK,eAAe,qBAAqB,IAAI;AAE/C,MAAI,OAAO,gBAAgB,SACzB,QAAO;AAGT,MAAI,CAAC,YACH,QAAO;EAGT,MAAM,WAAW,OAAO;AACxB,SAAO,KAAK,iBAAiB,aAAa,SAAS;;CAGrD,eACE,KACA,MACA;AACA,SAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,SAAkB,QAAgB;AAC/D,OAAI,OAAO,YAAY,SACrB;AAGF,OAAI,YAAY,KACd;AAGF,UAAQ,QAAoC;KAC3C,IAAI;;CAGT,iBAAyB,UAAkB,QAAkC;AAC3E,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO,SAAS,QAAQ,qBAAqB,QAAQ,SAAS;AAC5D,UAAO,OAAO,OAAO,MAAM;IAC3B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_index = require("../../logging/formatter/index.cjs");
|
|
3
|
+
const require_index$1 = require("../../logging/core/index.cjs");
|
|
4
|
+
const require_types = require("../../logging/core/types.cjs");
|
|
5
|
+
const require_index$2 = require("../../logging/provider/index.cjs");
|
|
6
|
+
exports.AbstractLogger = require_index$1.AbstractLogger;
|
|
7
|
+
exports.BaseFormatter = require_index.BaseFormatter;
|
|
8
|
+
exports.ConsoleProvider = require_index$2.ConsoleProvider;
|
|
9
|
+
exports.FileProvider = require_index$2.FileProvider;
|
|
10
|
+
exports.Formatter = require_index.Formatter;
|
|
11
|
+
exports.JSONFormatter = require_index.JSONFormatter;
|
|
12
|
+
exports.LogLevel = require_types.LogLevel;
|
|
13
|
+
exports.Logger = require_index$1.Logger;
|
|
14
|
+
exports.LoggerProvider = require_index$2.LoggerProvider;
|
|
15
|
+
exports.dmyFormat = require_index.dmyFormat;
|
|
16
|
+
exports.isoDateFormat = require_index.isoDateFormat;
|
|
17
|
+
exports.isoDateTimeFormat = require_index.isoDateTimeFormat;
|
|
18
|
+
exports.mdyFormat = require_index.mdyFormat;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LogDataType, LogLevel, LogLevelType, LogMessageType } from "../../logging/core/types.cjs";
|
|
2
|
+
import { DateFmtFnType } from "../../logging/formatter/types.cjs";
|
|
3
|
+
import { BaseFormatter, Formatter, JSONFormatter, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat } from "../../logging/formatter/index.cjs";
|
|
4
|
+
import { FileProviderOptions, ProviderOptions, SizeBasedPolicyType, TimeBasedPolicyType } from "../../logging/provider/types.cjs";
|
|
5
|
+
import { ConsoleProvider, FileProvider, LoggerProvider } from "../../logging/provider/index.cjs";
|
|
6
|
+
import { AbstractLogger, Logger } from "../../logging/core/index.cjs";
|
|
7
|
+
export { AbstractLogger, BaseFormatter, ConsoleProvider, type DateFmtFnType, FileProvider, type FileProviderOptions, Formatter, JSONFormatter, type LogDataType, LogLevel, type LogLevelType, type LogMessageType, Logger, LoggerProvider, type ProviderOptions, type SizeBasedPolicyType, type TimeBasedPolicyType, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LogDataType, LogLevel, LogLevelType, LogMessageType } from "../../logging/core/types.mjs";
|
|
2
|
+
import { DateFmtFnType } from "../../logging/formatter/types.mjs";
|
|
3
|
+
import { BaseFormatter, Formatter, JSONFormatter, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat } from "../../logging/formatter/index.mjs";
|
|
4
|
+
import { FileProviderOptions, ProviderOptions, SizeBasedPolicyType, TimeBasedPolicyType } from "../../logging/provider/types.mjs";
|
|
5
|
+
import { ConsoleProvider, FileProvider, LoggerProvider } from "../../logging/provider/index.mjs";
|
|
6
|
+
import { AbstractLogger, Logger } from "../../logging/core/index.mjs";
|
|
7
|
+
export { AbstractLogger, BaseFormatter, ConsoleProvider, type DateFmtFnType, FileProvider, type FileProviderOptions, Formatter, JSONFormatter, type LogDataType, LogLevel, type LogLevelType, type LogMessageType, Logger, LoggerProvider, type ProviderOptions, type SizeBasedPolicyType, type TimeBasedPolicyType, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BaseFormatter, Formatter, JSONFormatter, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat } from "../../logging/formatter/index.mjs";
|
|
2
|
+
import { AbstractLogger, Logger } from "../../logging/core/index.mjs";
|
|
3
|
+
import { LogLevel } from "../../logging/core/types.mjs";
|
|
4
|
+
import { ConsoleProvider, FileProvider, LoggerProvider } from "../../logging/provider/index.mjs";
|
|
5
|
+
export { AbstractLogger, BaseFormatter, ConsoleProvider, FileProvider, Formatter, JSONFormatter, LogLevel, Logger, LoggerProvider, dmyFormat, isoDateFormat, isoDateTimeFormat, mdyFormat };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_column = require("../../orm/column.cjs");
|
|
3
|
+
const require_config = require("../../orm/migration/config.cjs");
|
|
4
|
+
const require_orm = require("../../orm/orm.cjs");
|
|
5
|
+
const require_relation = require("../../orm/relation.cjs");
|
|
6
|
+
const require_table = require("../../orm/table.cjs");
|
|
7
|
+
exports.boolean = require_column.boolean;
|
|
8
|
+
exports.createOrm = require_orm.createOrm;
|
|
9
|
+
exports.createTable = require_table.createTable;
|
|
10
|
+
exports.date = require_column.date;
|
|
11
|
+
exports.defineConfig = require_config.defineConfig;
|
|
12
|
+
exports.enumColumn = require_column.enumeration;
|
|
13
|
+
exports.enumeration = require_column.enumeration;
|
|
14
|
+
exports.json = require_column.json;
|
|
15
|
+
exports.jsonb = require_column.jsonb;
|
|
16
|
+
exports.many = require_relation.many;
|
|
17
|
+
exports.number = require_column.number;
|
|
18
|
+
exports.one = require_relation.one;
|
|
19
|
+
exports.string = require_column.string;
|
|
20
|
+
exports.uuid = require_column.uuid;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTable } from "../../orm/table.cjs";
|
|
2
|
+
import { CreateInput, CreateManyInput, DeleteBuilderInput, DeleteInput, DeleteManyInput, Dialect, DialectAdapter, FindFirstInput, FindManyInput, FindUniqueInput, InsertInput, JoinNode, OrderDirection, SelectInput, SelectPlan, TableRow, TinyTableClient, UpdateBuilderInput, UpdateInput, UpdateManyInput, WhereNode } from "../../orm/types.cjs";
|
|
3
|
+
import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.cjs";
|
|
4
|
+
import { defineConfig } from "../../orm/migration/config.cjs";
|
|
5
|
+
import { createOrm } from "../../orm/orm.cjs";
|
|
6
|
+
import { many, one } from "../../orm/relation.cjs";
|
|
7
|
+
export { type CreateInput, type CreateManyInput, type DeleteBuilderInput, type DeleteInput, type DeleteManyInput, type Dialect, type DialectAdapter, type FindFirstInput, type FindManyInput, type FindUniqueInput, type InsertInput, type JoinNode, type OrderDirection, type SelectInput, type SelectPlan, type TableRow, type TinyTableClient, type UpdateBuilderInput, type UpdateInput, type UpdateManyInput, type WhereNode, boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTable } from "../../orm/table.mjs";
|
|
2
|
+
import { CreateInput, CreateManyInput, DeleteBuilderInput, DeleteInput, DeleteManyInput, Dialect, DialectAdapter, FindFirstInput, FindManyInput, FindUniqueInput, InsertInput, JoinNode, OrderDirection, SelectInput, SelectPlan, TableRow, TinyTableClient, UpdateBuilderInput, UpdateInput, UpdateManyInput, WhereNode } from "../../orm/types.mjs";
|
|
3
|
+
import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.mjs";
|
|
4
|
+
import { defineConfig } from "../../orm/migration/config.mjs";
|
|
5
|
+
import { createOrm } from "../../orm/orm.mjs";
|
|
6
|
+
import { many, one } from "../../orm/relation.mjs";
|
|
7
|
+
export { type CreateInput, type CreateManyInput, type DeleteBuilderInput, type DeleteInput, type DeleteManyInput, type Dialect, type DialectAdapter, type FindFirstInput, type FindManyInput, type FindUniqueInput, type InsertInput, type JoinNode, type OrderDirection, type SelectInput, type SelectPlan, type TableRow, type TinyTableClient, type UpdateBuilderInput, type UpdateInput, type UpdateManyInput, type WhereNode, boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.mjs";
|
|
2
|
+
import { defineConfig } from "../../orm/migration/config.mjs";
|
|
3
|
+
import { createOrm } from "../../orm/orm.mjs";
|
|
4
|
+
import { many, one } from "../../orm/relation.mjs";
|
|
5
|
+
import { createTable } from "../../orm/table.mjs";
|
|
6
|
+
export { boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
|
|
@@ -2,22 +2,22 @@ import { PromptRuntime } from "../../prompts/core/types.cjs";
|
|
|
2
2
|
import { ConfirmOptions, InputOptions, MultiselectOptions, NumberOptions, PasswordOptions, PromptErrorType, SelectChoice, SelectOptions } from "../../prompts/types.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/lib/prompts/index.d.ts
|
|
5
|
-
declare const input: (options: InputOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
5
|
+
declare const input: (options: InputOptions, runtime?: PromptRuntime) => Promise<readonly [null, string] | readonly [{
|
|
6
6
|
readonly type: string;
|
|
7
7
|
readonly message: string;
|
|
8
|
-
}, null]
|
|
9
|
-
declare const password: (options: PasswordOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
8
|
+
}, null]>;
|
|
9
|
+
declare const password: (options: PasswordOptions, runtime?: PromptRuntime) => Promise<readonly [null, string] | readonly [{
|
|
10
10
|
readonly type: string;
|
|
11
11
|
readonly message: string;
|
|
12
|
-
}, null]
|
|
13
|
-
declare const confirm: (options: ConfirmOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
12
|
+
}, null]>;
|
|
13
|
+
declare const confirm: (options: ConfirmOptions, runtime?: PromptRuntime) => Promise<readonly [null, boolean] | readonly [{
|
|
14
14
|
readonly type: string;
|
|
15
15
|
readonly message: string;
|
|
16
|
-
}, null]
|
|
17
|
-
declare const number: (options: NumberOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
16
|
+
}, null]>;
|
|
17
|
+
declare const number: (options: NumberOptions, runtime?: PromptRuntime) => Promise<readonly [null, number] | readonly [{
|
|
18
18
|
readonly type: string;
|
|
19
19
|
readonly message: string;
|
|
20
|
-
}, null]
|
|
20
|
+
}, null]>;
|
|
21
21
|
declare const select: <TValue extends string>(options: SelectOptions<TValue>, runtime?: PromptRuntime) => Promise<readonly [{
|
|
22
22
|
readonly type: string;
|
|
23
23
|
readonly message: string;
|
|
@@ -2,22 +2,22 @@ import { PromptRuntime } from "../../prompts/core/types.mjs";
|
|
|
2
2
|
import { ConfirmOptions, InputOptions, MultiselectOptions, NumberOptions, PasswordOptions, PromptErrorType, SelectChoice, SelectOptions } from "../../prompts/types.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/lib/prompts/index.d.ts
|
|
5
|
-
declare const input: (options: InputOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
5
|
+
declare const input: (options: InputOptions, runtime?: PromptRuntime) => Promise<readonly [null, string] | readonly [{
|
|
6
6
|
readonly type: string;
|
|
7
7
|
readonly message: string;
|
|
8
|
-
}, null]
|
|
9
|
-
declare const password: (options: PasswordOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
8
|
+
}, null]>;
|
|
9
|
+
declare const password: (options: PasswordOptions, runtime?: PromptRuntime) => Promise<readonly [null, string] | readonly [{
|
|
10
10
|
readonly type: string;
|
|
11
11
|
readonly message: string;
|
|
12
|
-
}, null]
|
|
13
|
-
declare const confirm: (options: ConfirmOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
12
|
+
}, null]>;
|
|
13
|
+
declare const confirm: (options: ConfirmOptions, runtime?: PromptRuntime) => Promise<readonly [null, boolean] | readonly [{
|
|
14
14
|
readonly type: string;
|
|
15
15
|
readonly message: string;
|
|
16
|
-
}, null]
|
|
17
|
-
declare const number: (options: NumberOptions, runtime?: PromptRuntime) => Promise<readonly [{
|
|
16
|
+
}, null]>;
|
|
17
|
+
declare const number: (options: NumberOptions, runtime?: PromptRuntime) => Promise<readonly [null, number] | readonly [{
|
|
18
18
|
readonly type: string;
|
|
19
19
|
readonly message: string;
|
|
20
|
-
}, null]
|
|
20
|
+
}, null]>;
|
|
21
21
|
declare const select: <TValue extends string>(options: SelectOptions<TValue>, runtime?: PromptRuntime) => Promise<readonly [{
|
|
22
22
|
readonly type: string;
|
|
23
23
|
readonly message: string;
|
|
@@ -4,9 +4,45 @@ const require_lib_errors_index = require("../errors/index.cjs");
|
|
|
4
4
|
var PubSub = class {
|
|
5
5
|
options;
|
|
6
6
|
isSubscribed = false;
|
|
7
|
+
nextHandlerId = 0;
|
|
8
|
+
handlers = /* @__PURE__ */ new Map();
|
|
9
|
+
unsubscribeInFlight = null;
|
|
10
|
+
subscribeInFlight = null;
|
|
7
11
|
constructor(options) {
|
|
8
12
|
this.options = options;
|
|
9
13
|
}
|
|
14
|
+
async onMessage(message, channel) {
|
|
15
|
+
const [parseError, parsed] = require_lib_errors_index.mightThrowSync(() => JSON.parse(message));
|
|
16
|
+
if (parseError) return;
|
|
17
|
+
if (!parsed) return;
|
|
18
|
+
const handlers = Array.from(this.handlers.values());
|
|
19
|
+
for (const handler of handlers) await require_lib_errors_index.mightThrow(Promise.resolve().then(() => handler(parsed, channel)));
|
|
20
|
+
}
|
|
21
|
+
async unsubscribeHandler(handlerId) {
|
|
22
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
23
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
24
|
+
const handler = this.handlers.get(handlerId);
|
|
25
|
+
if (!handler) return require_lib_errors_index.err("UnsubscribeError", "Not subscribed");
|
|
26
|
+
this.handlers.delete(handlerId);
|
|
27
|
+
if (this.handlers.size > 0) return require_lib_errors_index.ok(true);
|
|
28
|
+
this.isSubscribed = false;
|
|
29
|
+
this.unsubscribeInFlight = require_lib_errors_index.mightThrow(this.options.subscriber.unsubscribe(this.options.channel));
|
|
30
|
+
const unsubscribeInFlight = this.unsubscribeInFlight;
|
|
31
|
+
if (!unsubscribeInFlight) {
|
|
32
|
+
this.handlers.set(handlerId, handler);
|
|
33
|
+
this.isSubscribed = true;
|
|
34
|
+
return require_lib_errors_index.err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
35
|
+
}
|
|
36
|
+
const [unsubscribeError] = await unsubscribeInFlight;
|
|
37
|
+
if (unsubscribeError) {
|
|
38
|
+
this.handlers.set(handlerId, handler);
|
|
39
|
+
this.isSubscribed = true;
|
|
40
|
+
this.unsubscribeInFlight = null;
|
|
41
|
+
return require_lib_errors_index.err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
42
|
+
}
|
|
43
|
+
this.unsubscribeInFlight = null;
|
|
44
|
+
return require_lib_errors_index.ok(true);
|
|
45
|
+
}
|
|
10
46
|
async publish(message) {
|
|
11
47
|
const [stringifyError, stringified] = require_lib_errors_index.mightThrowSync(() => JSON.stringify(message));
|
|
12
48
|
if (stringifyError || !stringified) return require_lib_errors_index.err("SerializationError", "Unable to serialize message");
|
|
@@ -15,33 +51,66 @@ var PubSub = class {
|
|
|
15
51
|
return require_lib_errors_index.ok(count);
|
|
16
52
|
}
|
|
17
53
|
async subscribe(handler) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
55
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
56
|
+
const handlerId = this.nextHandlerId;
|
|
57
|
+
this.nextHandlerId += 1;
|
|
58
|
+
this.handlers.set(handlerId, handler);
|
|
59
|
+
if (this.isActive()) return require_lib_errors_index.ok(() => this.unsubscribeHandler(handlerId));
|
|
60
|
+
const inFlightSubscribe = this.subscribeInFlight;
|
|
61
|
+
if (inFlightSubscribe) {
|
|
62
|
+
const [inFlightError] = await inFlightSubscribe;
|
|
63
|
+
if (inFlightError || !this.isSubscribed) {
|
|
64
|
+
this.handlers.delete(handlerId);
|
|
65
|
+
return require_lib_errors_index.err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
66
|
+
}
|
|
67
|
+
return require_lib_errors_index.ok(() => this.unsubscribeHandler(handlerId));
|
|
68
|
+
}
|
|
69
|
+
this.subscribeInFlight = require_lib_errors_index.mightThrow(this.options.subscriber.subscribe(this.options.channel, async (message, channel) => this.onMessage(message, channel)));
|
|
70
|
+
const subscribeInFlight = this.subscribeInFlight;
|
|
71
|
+
if (!subscribeInFlight) {
|
|
72
|
+
this.handlers.delete(handlerId);
|
|
73
|
+
return require_lib_errors_index.err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
74
|
+
}
|
|
75
|
+
const [subscribeError, count] = await subscribeInFlight;
|
|
76
|
+
this.subscribeInFlight = null;
|
|
27
77
|
if (subscribeError) {
|
|
28
|
-
this.
|
|
78
|
+
this.handlers.delete(handlerId);
|
|
29
79
|
return require_lib_errors_index.err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
30
80
|
}
|
|
31
|
-
|
|
81
|
+
if (!count) {
|
|
82
|
+
this.handlers.delete(handlerId);
|
|
83
|
+
return require_lib_errors_index.err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
84
|
+
}
|
|
85
|
+
this.isSubscribed = true;
|
|
86
|
+
return require_lib_errors_index.ok(() => this.unsubscribeHandler(handlerId));
|
|
32
87
|
}
|
|
33
88
|
async unsubscribe() {
|
|
89
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
90
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
34
91
|
if (!this.isActive()) return require_lib_errors_index.err("UnsubscribeError", "Not subscribed");
|
|
92
|
+
const handlers = new Map(this.handlers);
|
|
93
|
+
this.handlers.clear();
|
|
35
94
|
this.isSubscribed = false;
|
|
36
|
-
|
|
95
|
+
this.unsubscribeInFlight = require_lib_errors_index.mightThrow(this.options.subscriber.unsubscribe(this.options.channel));
|
|
96
|
+
const unsubscribeInFlight = this.unsubscribeInFlight;
|
|
97
|
+
if (!unsubscribeInFlight) {
|
|
98
|
+
this.handlers = handlers;
|
|
99
|
+
this.isSubscribed = true;
|
|
100
|
+
return require_lib_errors_index.err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
101
|
+
}
|
|
102
|
+
const [unsubscribeError] = await unsubscribeInFlight;
|
|
37
103
|
if (unsubscribeError) {
|
|
104
|
+
this.handlers = handlers;
|
|
38
105
|
this.isSubscribed = true;
|
|
106
|
+
this.unsubscribeInFlight = null;
|
|
39
107
|
return require_lib_errors_index.err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
40
108
|
}
|
|
109
|
+
this.unsubscribeInFlight = null;
|
|
41
110
|
return require_lib_errors_index.ok(true);
|
|
42
111
|
}
|
|
43
112
|
isActive() {
|
|
44
|
-
return this.isSubscribed;
|
|
113
|
+
return this.handlers.size > 0 && this.isSubscribed;
|
|
45
114
|
}
|
|
46
115
|
};
|
|
47
116
|
//#endregion
|
|
@@ -4,22 +4,31 @@ import { MessageHandler, PubSubOptions } from "../../pubsub/types.cjs";
|
|
|
4
4
|
declare class PubSub<T extends Record<string, unknown>> {
|
|
5
5
|
private options;
|
|
6
6
|
private isSubscribed;
|
|
7
|
+
private nextHandlerId;
|
|
8
|
+
private handlers;
|
|
9
|
+
private unsubscribeInFlight;
|
|
10
|
+
private subscribeInFlight;
|
|
7
11
|
constructor(options: PubSubOptions);
|
|
8
|
-
|
|
12
|
+
private onMessage;
|
|
13
|
+
private unsubscribeHandler;
|
|
14
|
+
publish(message: T): Promise<readonly [{
|
|
9
15
|
readonly type: "SerializationError";
|
|
10
16
|
readonly message: string;
|
|
11
17
|
}, null] | readonly [{
|
|
12
18
|
readonly type: "PublishError";
|
|
13
19
|
readonly message: string;
|
|
14
|
-
}, null]>;
|
|
15
|
-
subscribe(handler: MessageHandler<T>): Promise<readonly [null,
|
|
20
|
+
}, null] | readonly [null, number]>;
|
|
21
|
+
subscribe(handler: MessageHandler<T>): Promise<readonly [null, () => Promise<readonly [{
|
|
22
|
+
readonly type: "UnsubscribeError";
|
|
23
|
+
readonly message: string;
|
|
24
|
+
}, null] | readonly [null, boolean]>] | readonly [{
|
|
16
25
|
readonly type: "SubscribeError";
|
|
17
26
|
readonly message: string;
|
|
18
27
|
}, null]>;
|
|
19
|
-
unsubscribe(): Promise<readonly [
|
|
28
|
+
unsubscribe(): Promise<readonly [{
|
|
20
29
|
readonly type: "UnsubscribeError";
|
|
21
30
|
readonly message: string;
|
|
22
|
-
}, null]>;
|
|
31
|
+
}, null] | readonly [null, boolean]>;
|
|
23
32
|
isActive(): boolean;
|
|
24
33
|
}
|
|
25
34
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;EAAA,QACA,aAAA;EAAA,QACA,QAAA;EAAA,QACA,mBAAA;EAAA,QAGA,iBAAA;cAIW,OAAA,EAAS,aAAA;EAAA,QAId,SAAA;EAAA,QAaA,kBAAA;EAuDD,OAAA,CAAQ,OAAA,EAAS,CAAA,GAAC,OAAA;IAAA;;;;;;EAuBlB,SAAA,CAAU,OAAA,EAAS,cAAA,CAAe,CAAA,IAAE,OAAA,uBAAA,OAAA;IAAA;;;;;;EA8EpC,WAAA,CAAA,GAAW,OAAA;IAAA;;;EAmDjB,QAAA,CAAA;AAAA"}
|
|
@@ -4,22 +4,31 @@ import { MessageHandler, PubSubOptions } from "../../pubsub/types.mjs";
|
|
|
4
4
|
declare class PubSub<T extends Record<string, unknown>> {
|
|
5
5
|
private options;
|
|
6
6
|
private isSubscribed;
|
|
7
|
+
private nextHandlerId;
|
|
8
|
+
private handlers;
|
|
9
|
+
private unsubscribeInFlight;
|
|
10
|
+
private subscribeInFlight;
|
|
7
11
|
constructor(options: PubSubOptions);
|
|
8
|
-
|
|
12
|
+
private onMessage;
|
|
13
|
+
private unsubscribeHandler;
|
|
14
|
+
publish(message: T): Promise<readonly [{
|
|
9
15
|
readonly type: "SerializationError";
|
|
10
16
|
readonly message: string;
|
|
11
17
|
}, null] | readonly [{
|
|
12
18
|
readonly type: "PublishError";
|
|
13
19
|
readonly message: string;
|
|
14
|
-
}, null]>;
|
|
15
|
-
subscribe(handler: MessageHandler<T>): Promise<readonly [null,
|
|
20
|
+
}, null] | readonly [null, number]>;
|
|
21
|
+
subscribe(handler: MessageHandler<T>): Promise<readonly [null, () => Promise<readonly [{
|
|
22
|
+
readonly type: "UnsubscribeError";
|
|
23
|
+
readonly message: string;
|
|
24
|
+
}, null] | readonly [null, boolean]>] | readonly [{
|
|
16
25
|
readonly type: "SubscribeError";
|
|
17
26
|
readonly message: string;
|
|
18
27
|
}, null]>;
|
|
19
|
-
unsubscribe(): Promise<readonly [
|
|
28
|
+
unsubscribe(): Promise<readonly [{
|
|
20
29
|
readonly type: "UnsubscribeError";
|
|
21
30
|
readonly message: string;
|
|
22
|
-
}, null]>;
|
|
31
|
+
}, null] | readonly [null, boolean]>;
|
|
23
32
|
isActive(): boolean;
|
|
24
33
|
}
|
|
25
34
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;EAAA,QACA,aAAA;EAAA,QACA,QAAA;EAAA,QACA,mBAAA;EAAA,QAGA,iBAAA;cAIW,OAAA,EAAS,aAAA;EAAA,QAId,SAAA;EAAA,QAaA,kBAAA;EAuDD,OAAA,CAAQ,OAAA,EAAS,CAAA,GAAC,OAAA;IAAA;;;;;;EAuBlB,SAAA,CAAU,OAAA,EAAS,cAAA,CAAe,CAAA,IAAE,OAAA,uBAAA,OAAA;IAAA;;;;;;EA8EpC,WAAA,CAAA,GAAW,OAAA;IAAA;;;EAmDjB,QAAA,CAAA;AAAA"}
|
|
@@ -3,9 +3,45 @@ import { err, mightThrow, mightThrowSync, ok } from "../errors/index.mjs";
|
|
|
3
3
|
var PubSub = class {
|
|
4
4
|
options;
|
|
5
5
|
isSubscribed = false;
|
|
6
|
+
nextHandlerId = 0;
|
|
7
|
+
handlers = /* @__PURE__ */ new Map();
|
|
8
|
+
unsubscribeInFlight = null;
|
|
9
|
+
subscribeInFlight = null;
|
|
6
10
|
constructor(options) {
|
|
7
11
|
this.options = options;
|
|
8
12
|
}
|
|
13
|
+
async onMessage(message, channel) {
|
|
14
|
+
const [parseError, parsed] = mightThrowSync(() => JSON.parse(message));
|
|
15
|
+
if (parseError) return;
|
|
16
|
+
if (!parsed) return;
|
|
17
|
+
const handlers = Array.from(this.handlers.values());
|
|
18
|
+
for (const handler of handlers) await mightThrow(Promise.resolve().then(() => handler(parsed, channel)));
|
|
19
|
+
}
|
|
20
|
+
async unsubscribeHandler(handlerId) {
|
|
21
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
22
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
23
|
+
const handler = this.handlers.get(handlerId);
|
|
24
|
+
if (!handler) return err("UnsubscribeError", "Not subscribed");
|
|
25
|
+
this.handlers.delete(handlerId);
|
|
26
|
+
if (this.handlers.size > 0) return ok(true);
|
|
27
|
+
this.isSubscribed = false;
|
|
28
|
+
this.unsubscribeInFlight = mightThrow(this.options.subscriber.unsubscribe(this.options.channel));
|
|
29
|
+
const unsubscribeInFlight = this.unsubscribeInFlight;
|
|
30
|
+
if (!unsubscribeInFlight) {
|
|
31
|
+
this.handlers.set(handlerId, handler);
|
|
32
|
+
this.isSubscribed = true;
|
|
33
|
+
return err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
34
|
+
}
|
|
35
|
+
const [unsubscribeError] = await unsubscribeInFlight;
|
|
36
|
+
if (unsubscribeError) {
|
|
37
|
+
this.handlers.set(handlerId, handler);
|
|
38
|
+
this.isSubscribed = true;
|
|
39
|
+
this.unsubscribeInFlight = null;
|
|
40
|
+
return err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
41
|
+
}
|
|
42
|
+
this.unsubscribeInFlight = null;
|
|
43
|
+
return ok(true);
|
|
44
|
+
}
|
|
9
45
|
async publish(message) {
|
|
10
46
|
const [stringifyError, stringified] = mightThrowSync(() => JSON.stringify(message));
|
|
11
47
|
if (stringifyError || !stringified) return err("SerializationError", "Unable to serialize message");
|
|
@@ -14,33 +50,66 @@ var PubSub = class {
|
|
|
14
50
|
return ok(count);
|
|
15
51
|
}
|
|
16
52
|
async subscribe(handler) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
53
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
54
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
55
|
+
const handlerId = this.nextHandlerId;
|
|
56
|
+
this.nextHandlerId += 1;
|
|
57
|
+
this.handlers.set(handlerId, handler);
|
|
58
|
+
if (this.isActive()) return ok(() => this.unsubscribeHandler(handlerId));
|
|
59
|
+
const inFlightSubscribe = this.subscribeInFlight;
|
|
60
|
+
if (inFlightSubscribe) {
|
|
61
|
+
const [inFlightError] = await inFlightSubscribe;
|
|
62
|
+
if (inFlightError || !this.isSubscribed) {
|
|
63
|
+
this.handlers.delete(handlerId);
|
|
64
|
+
return err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
65
|
+
}
|
|
66
|
+
return ok(() => this.unsubscribeHandler(handlerId));
|
|
67
|
+
}
|
|
68
|
+
this.subscribeInFlight = mightThrow(this.options.subscriber.subscribe(this.options.channel, async (message, channel) => this.onMessage(message, channel)));
|
|
69
|
+
const subscribeInFlight = this.subscribeInFlight;
|
|
70
|
+
if (!subscribeInFlight) {
|
|
71
|
+
this.handlers.delete(handlerId);
|
|
72
|
+
return err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
73
|
+
}
|
|
74
|
+
const [subscribeError, count] = await subscribeInFlight;
|
|
75
|
+
this.subscribeInFlight = null;
|
|
26
76
|
if (subscribeError) {
|
|
27
|
-
this.
|
|
77
|
+
this.handlers.delete(handlerId);
|
|
28
78
|
return err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
29
79
|
}
|
|
30
|
-
|
|
80
|
+
if (!count) {
|
|
81
|
+
this.handlers.delete(handlerId);
|
|
82
|
+
return err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
|
|
83
|
+
}
|
|
84
|
+
this.isSubscribed = true;
|
|
85
|
+
return ok(() => this.unsubscribeHandler(handlerId));
|
|
31
86
|
}
|
|
32
87
|
async unsubscribe() {
|
|
88
|
+
const inFlightUnsubscribe = this.unsubscribeInFlight;
|
|
89
|
+
if (inFlightUnsubscribe) await inFlightUnsubscribe;
|
|
33
90
|
if (!this.isActive()) return err("UnsubscribeError", "Not subscribed");
|
|
91
|
+
const handlers = new Map(this.handlers);
|
|
92
|
+
this.handlers.clear();
|
|
34
93
|
this.isSubscribed = false;
|
|
35
|
-
|
|
94
|
+
this.unsubscribeInFlight = mightThrow(this.options.subscriber.unsubscribe(this.options.channel));
|
|
95
|
+
const unsubscribeInFlight = this.unsubscribeInFlight;
|
|
96
|
+
if (!unsubscribeInFlight) {
|
|
97
|
+
this.handlers = handlers;
|
|
98
|
+
this.isSubscribed = true;
|
|
99
|
+
return err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
100
|
+
}
|
|
101
|
+
const [unsubscribeError] = await unsubscribeInFlight;
|
|
36
102
|
if (unsubscribeError) {
|
|
103
|
+
this.handlers = handlers;
|
|
37
104
|
this.isSubscribed = true;
|
|
105
|
+
this.unsubscribeInFlight = null;
|
|
38
106
|
return err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
|
|
39
107
|
}
|
|
108
|
+
this.unsubscribeInFlight = null;
|
|
40
109
|
return ok(true);
|
|
41
110
|
}
|
|
42
111
|
isActive() {
|
|
43
|
-
return this.isSubscribed;
|
|
112
|
+
return this.handlers.size > 0 && this.isSubscribed;
|
|
44
113
|
}
|
|
45
114
|
};
|
|
46
115
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"sourcesContent":["import { err, mightThrow, mightThrowSync, ok } from \"../errors/index.js\";\nimport type { MessageHandler, PubSubOptions } from \"./types.js\";\n\nexport class PubSub<T extends Record<string, unknown>> {\n private options: PubSubOptions;\n private isSubscribed = false;\n\n public constructor(options: PubSubOptions) {\n this.options = options;\n }\n\n public async publish(message: T) {\n const [stringifyError, stringified] = mightThrowSync(() =>\n JSON.stringify(message),\n );\n\n if (stringifyError || !stringified) {\n return err(\"SerializationError\", \"Unable to serialize message\");\n }\n\n const [publishError, count] = await mightThrow(\n this.options.publisher.publish(this.options.channel, stringified),\n );\n\n if (publishError) {\n return err(\n \"PublishError\",\n `Unable to publish to ${this.options.channel}`,\n );\n }\n\n return ok(count);\n }\n\n public async subscribe(handler: MessageHandler<T>) {\n if (this.isActive()) {\n return
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"sourcesContent":["import { err, mightThrow, mightThrowSync, ok } from \"../errors/index.js\";\nimport type { MessageHandler, PubSubOptions } from \"./types.js\";\n\nexport class PubSub<T extends Record<string, unknown>> {\n private options: PubSubOptions;\n private isSubscribed = false;\n private nextHandlerId = 0;\n private handlers = new Map<number, MessageHandler<T>>();\n private unsubscribeInFlight: Promise<\n readonly [null, unknown] | readonly [unknown, null]\n > | null = null;\n private subscribeInFlight: Promise<\n readonly [null, number] | readonly [unknown, null]\n > | null = null;\n\n public constructor(options: PubSubOptions) {\n this.options = options;\n }\n\n private async onMessage(message: string, channel: string) {\n const [parseError, parsed] = mightThrowSync<T>(() => JSON.parse(message));\n\n if (parseError) return;\n if (!parsed) return;\n\n const handlers = Array.from(this.handlers.values());\n\n for (const handler of handlers) {\n await mightThrow(Promise.resolve().then(() => handler(parsed, channel)));\n }\n }\n\n private async unsubscribeHandler(handlerId: number) {\n const inFlightUnsubscribe = this.unsubscribeInFlight;\n\n if (inFlightUnsubscribe) {\n await inFlightUnsubscribe;\n }\n\n const handler = this.handlers.get(handlerId);\n\n if (!handler) {\n return err(\"UnsubscribeError\", \"Not subscribed\");\n }\n\n this.handlers.delete(handlerId);\n\n if (this.handlers.size > 0) {\n return ok(true);\n }\n\n this.isSubscribed = false;\n\n this.unsubscribeInFlight = mightThrow(\n this.options.subscriber.unsubscribe(this.options.channel),\n );\n\n const unsubscribeInFlight = this.unsubscribeInFlight;\n\n if (!unsubscribeInFlight) {\n this.handlers.set(handlerId, handler);\n this.isSubscribed = true;\n\n return err(\n \"UnsubscribeError\",\n `Unable to unsubscribe from ${this.options.channel}`,\n );\n }\n\n const [unsubscribeError] = await unsubscribeInFlight;\n\n if (unsubscribeError) {\n this.handlers.set(handlerId, handler);\n this.isSubscribed = true;\n this.unsubscribeInFlight = null;\n\n return err(\n \"UnsubscribeError\",\n `Unable to unsubscribe from ${this.options.channel}`,\n );\n }\n\n this.unsubscribeInFlight = null;\n\n return ok(true);\n }\n\n public async publish(message: T) {\n const [stringifyError, stringified] = mightThrowSync(() =>\n JSON.stringify(message),\n );\n\n if (stringifyError || !stringified) {\n return err(\"SerializationError\", \"Unable to serialize message\");\n }\n\n const [publishError, count] = await mightThrow(\n this.options.publisher.publish(this.options.channel, stringified),\n );\n\n if (publishError) {\n return err(\n \"PublishError\",\n `Unable to publish to ${this.options.channel}`,\n );\n }\n\n return ok(count);\n }\n\n public async subscribe(handler: MessageHandler<T>) {\n const inFlightUnsubscribe = this.unsubscribeInFlight;\n\n if (inFlightUnsubscribe) {\n await inFlightUnsubscribe;\n }\n\n const handlerId = this.nextHandlerId;\n\n this.nextHandlerId += 1;\n this.handlers.set(handlerId, handler);\n\n if (this.isActive()) {\n return ok(() => this.unsubscribeHandler(handlerId));\n }\n\n const inFlightSubscribe = this.subscribeInFlight;\n\n if (inFlightSubscribe) {\n const [inFlightError] = await inFlightSubscribe;\n\n if (inFlightError || !this.isSubscribed) {\n this.handlers.delete(handlerId);\n\n return err(\n \"SubscribeError\",\n `Unable to subscribe to ${this.options.channel}`,\n );\n }\n\n return ok(() => this.unsubscribeHandler(handlerId));\n }\n\n this.subscribeInFlight = mightThrow(\n this.options.subscriber.subscribe(\n this.options.channel,\n async (message, channel) => this.onMessage(message, channel),\n ),\n );\n\n const subscribeInFlight = this.subscribeInFlight;\n\n if (!subscribeInFlight) {\n this.handlers.delete(handlerId);\n\n return err(\n \"SubscribeError\",\n `Unable to subscribe to ${this.options.channel}`,\n );\n }\n\n const [subscribeError, count] = await subscribeInFlight;\n\n this.subscribeInFlight = null;\n\n if (subscribeError) {\n this.handlers.delete(handlerId);\n\n return err(\n \"SubscribeError\",\n `Unable to subscribe to ${this.options.channel}`,\n );\n }\n\n if (!count) {\n this.handlers.delete(handlerId);\n\n return err(\n \"SubscribeError\",\n `Unable to subscribe to ${this.options.channel}`,\n );\n }\n\n this.isSubscribed = true;\n\n return ok(() => this.unsubscribeHandler(handlerId));\n }\n\n public async unsubscribe() {\n const inFlightUnsubscribe = this.unsubscribeInFlight;\n\n if (inFlightUnsubscribe) {\n await inFlightUnsubscribe;\n }\n\n if (!this.isActive()) {\n return err(\"UnsubscribeError\", \"Not subscribed\");\n }\n\n const handlers = new Map(this.handlers);\n\n this.handlers.clear();\n\n this.isSubscribed = false;\n\n this.unsubscribeInFlight = mightThrow(\n this.options.subscriber.unsubscribe(this.options.channel),\n );\n\n const unsubscribeInFlight = this.unsubscribeInFlight;\n\n if (!unsubscribeInFlight) {\n this.handlers = handlers;\n this.isSubscribed = true;\n\n return err(\n \"UnsubscribeError\",\n `Unable to unsubscribe from ${this.options.channel}`,\n );\n }\n\n const [unsubscribeError] = await unsubscribeInFlight;\n\n if (unsubscribeError) {\n this.handlers = handlers;\n this.isSubscribed = true;\n this.unsubscribeInFlight = null;\n\n return err(\n \"UnsubscribeError\",\n `Unable to unsubscribe from ${this.options.channel}`,\n );\n }\n\n this.unsubscribeInFlight = null;\n\n return ok(true);\n }\n\n public isActive() {\n return this.handlers.size > 0 && this.isSubscribed;\n }\n}\n"],"mappings":"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"}
|