@declaro/redis 2.0.0-beta.99 → 2.1.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/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +3 -3
- package/dist/node/index.cjs +33 -12
- package/dist/node/index.cjs.map +3 -3
- package/dist/node/index.js +17 -3
- package/dist/node/index.js.map +3 -3
- package/dist/ts/redis/repository.d.ts +1 -1
- package/dist/ts/redis/repository.d.ts.map +1 -1
- package/package.json +10 -4
- package/src/redis/repository.ts +1 -1
- package/scripts/build.ts +0 -68
- package/tsconfig.json +0 -14
- package/vite.config.ts +0 -31
package/dist/browser/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var A=Object.create;var{getPrototypeOf:I,defineProperty:
|
|
1
|
+
var A=Object.create;var{getPrototypeOf:I,defineProperty:W,getOwnPropertyNames:M}=Object;var U=Object.prototype.hasOwnProperty;function O(f){return this[f]}var x,y,b=(f,T,E)=>{var S=f!=null&&typeof f==="object";if(S){var C=T?x??=new WeakMap:y??=new WeakMap,G=C.get(f);if(G)return G}E=f!=null?A(I(f)):{};let V=T||!f||!f.__esModule?W(E,"default",{value:f,enumerable:!0}):E;for(let K of M(f))if(!U.call(V,K))W(V,K,{get:O.bind(f,K),enumerable:!0});if(S)C.set(f,V);return V};var p=(f,T)=>()=>(T||f((T={exports:{}}).exports,T),T.exports);var d=p((pf,L)=>{var l=function(T){return g(T)&&!s(T)};function g(f){return!!f&&typeof f==="object"}function s(f){var T=Object.prototype.toString.call(f);return T==="[object RegExp]"||T==="[object Date]"||o(f)}var a=typeof Symbol==="function"&&Symbol.for,t=a?Symbol.for("react.element"):60103;function o(f){return f.$$typeof===t}function c(f){return Array.isArray(f)?[]:{}}function J(f,T){return T.clone!==!1&&T.isMergeableObject(f)?R(c(f),f,T):f}function n(f,T,E){return f.concat(T).map(function(S){return J(S,E)})}function e(f,T){if(!T.customMerge)return R;var E=T.customMerge(f);return typeof E==="function"?E:R}function ff(f){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(f).filter(function(T){return Object.propertyIsEnumerable.call(f,T)}):[]}function q(f){return Object.keys(f).concat(ff(f))}function F(f,T){try{return T in f}catch(E){return!1}}function Tf(f,T){return F(f,T)&&!(Object.hasOwnProperty.call(f,T)&&Object.propertyIsEnumerable.call(f,T))}function Ef(f,T,E){var S={};if(E.isMergeableObject(f))q(f).forEach(function(C){S[C]=J(f[C],E)});return q(T).forEach(function(C){if(Tf(f,C))return;if(F(f,C)&&E.isMergeableObject(T[C]))S[C]=e(C,E)(f[C],T[C],E);else S[C]=J(T[C],E)}),S}function R(f,T,E){E=E||{},E.arrayMerge=E.arrayMerge||n,E.isMergeableObject=E.isMergeableObject||l,E.cloneUnlessOtherwiseSpecified=J;var S=Array.isArray(T),C=Array.isArray(f),G=S===C;if(!G)return J(T,E);else if(S)return E.arrayMerge(f,T,E);else return Ef(f,T,E)}R.all=function(T,E){if(!Array.isArray(T))throw Error("first argument should be an array");return T.reduce(function(S,C){return R(S,C,E)},{})};var Sf=R;L.exports=Sf});import{App as N}from"@declaro/core";import X from"ioredis";function z(f){return JSON.stringify(f)}function w(f){if(!f)return null;return JSON.parse(f)}var v;((E)=>{E.SET="SET";E.GET="GET"})(v||={});class B{redis;handlers={["GET"]:[],["SET"]:[]};constructor(f){this.redis=f}async set(f,T){let E=z(T),S=await this.redis.set(f,E);return await Promise.all(this.handlers.SET.map((C)=>C("SET",f,T))),S}async get(f){let T=await this.redis.get(f);if(!T)return null;let E=w(T);if(E)await Promise.all(this.handlers.GET.map((S)=>S("GET",f,E)));return E}on(f,T){return this.handlers[f].push(T),()=>{this.handlers[f]=this.handlers[f].filter((E)=>E!=T)}}onSet(f){return this.on("SET",f)}onGet(f){return this.on("GET",f)}}var H={Connect:"redis:connect",Destroy:"redis:destroy"},D=Symbol(),Y=Symbol(),Z=Symbol(),i=Symbol(),Df=(f)=>async(T)=>{T.provide(i,f),T.on(N.Events.Init,async(E)=>{let S=new X(f);E.provide(D,S),await E.emit(H.Connect)}),T.on(N.Events.Destroy,async(E)=>{let S=P(E);await E.emit(H.Destroy)}),T.on(H.Destroy,async(E)=>{await P(E).quit()})};function P(f){let T=f.inject(D);if(!T)throw Error("No Redis connection was found. Did you forget to provide one with `redisMiddleware`?");return T}function k(f){return f.inject(i)}function m(f){let T=k(f),E=new X(T);return f.on(N.Events.Destroy,async()=>{await E.quit()}),E}function mf(f){let T=P(f);return new B(T)}async function h(f,T,E){let S=P(f),C=Array.isArray(T)?T:[T],G=JSON.stringify(E);return await Promise.all(C.map((V)=>S.lpush(V,G)))}async function _f(f,T,E){let S=m(f),C=!0;while(C){let G=await S.brpop(T,1000),[V,K]=G??[];try{let $=w(K??"");await E($??void 0)}catch($){h(f,T,K)}}return()=>C=!1}async function Wf(f,T,E){let S=JSON.stringify(E);return await P(f).publish(T,S)}function Xf(f,T,E){let S=m(f),C=Array.isArray(T)?T:[T];return S.psubscribe(...C),S.on("pmessage",(G,V,K)=>{let $=JSON.parse(K);E($)}),S}async function Ff(f,T,E){let S=P(f),C=z(E);return await S.set(T,C)}async function Lf(f,T){let S=await P(f).get(T);return w(S)}class u{eventManager;publisher;subscriber;constructor(f,T,E){this.eventManager=f;this.publisher=T;this.subscriber=E;f.on("*",async(S)=>{try{if(S.__fromRedis)return;let C=JSON.stringify(S);await T.publish(S.type,C)}catch(C){console.error("Unserializable event:",S),console.error(`There was an error serializing event ${S.type}`,C)}}),E.psubscribe("*"),E.on("pmessage",this.onMessage)}onMessage=(f,T,E)=>{try{let S=JSON.parse(E);if(S.__fromRedis=!0,typeof S.type!=="string")throw Error(`Event payload for ${T} does not have a type property, and cannot be processed`);this.eventManager.emit(S)}catch(S){console.error("Unparsable event:",E),console.error(`There was an error deserializing event ${T}`,S)}};unsubscribe(){this.publisher.unsubscribe(),this.subscriber.unsubscribe()}}var _=b(d(),1);var j="DeclaroSettings",kf="DeclaroSettingsNamespaces";class Cf{namespace;defaultValue;constructor(f,T){this.namespace=f;this.defaultValue=T}get namespaceKey(){return`${j}:${this.namespace}`}async get(f){let E=await P(f).get(this.namespaceKey);if(!E)return this.defaultValue;return JSON.parse(E)}async set(f,T){let E=P(f),S=await this.get(f),C=_.default.all([this.defaultValue??{},S??{},T]),G=JSON.stringify(C);await E.set(this.namespaceKey,G)}}class r{namespace;defaultValues;constructor(f,T){this.namespace=f;this.defaultValues=T}get namespaceKey(){return`${j}:${this.namespace}`}async set(f,T,E={}){let S=P(f),C=await this.get(f,T),G=_.default.all([this.defaultValues,C??{},E]),V=JSON.stringify(G);await S.hset(this.namespaceKey,{[T]:V})}async getAll(f){let E=await P(f).hgetall(this.namespaceKey);return Object.keys(E).reduce((C,G)=>{let V=E[G],K=V?JSON.parse(V):this.defaultValues;return{...C,[G]:K}},{})}async get(f,T){let S=await P(f).hget(this.namespaceKey,T);if(!S)return this.defaultValues;return JSON.parse(S)}}var lf=new r("Site",{domain:process.env.APP_DOMAIN??"http://localhost:8080",email:process.env.APP_EMAIL??"admin@declaro.io"});import Q from"ioredis-mock";var nf=()=>async(f)=>{let T=new Q,E=new Q,S=new Q;f.provide(D,S),f.provide(Y,T),f.provide(Z,E),f.provide(i,void 0)};export{mf as useRedisRepository,k as useRedisOptions,P as useRedis,w as unserialize,lf as siteConfig,Ff as set,z as serialize,Wf as sendMessage,Df as redisMiddleware,h as pushMessage,Xf as onMessage,_f as onFulfillMessage,nf as mockRedisMiddleware,Lf as get,m as createRedis,kf as SETTINGS_NAMESPACES,j as SETTINGS_KEY,v as RedisRepositoryEvent,B as RedisRepository,H as RedisEvents,u as RedisEventAdapter,Z as REDIS_SUB_KEY,Y as REDIS_PUB_KEY,i as REDIS_OPTIONS_KEY,D as REDIS_CLIENT_KEY,r as ConfigSet,Cf as Config};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=9341080E6CE2BEC764756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n",
|
|
6
6
|
"import { Context, App } from '@declaro/core'\nimport Redis, { Redis as RedisInstance, type RedisOptions } from 'ioredis'\nimport { RedisRepository } from './repository'\n\nexport const RedisEvents = {\n Connect: 'redis:connect',\n Destroy: 'redis:destroy',\n}\n\nexport const REDIS_CLIENT_KEY = Symbol()\nexport const REDIS_PUB_KEY = Symbol()\nexport const REDIS_SUB_KEY = Symbol()\nexport const REDIS_OPTIONS_KEY = Symbol()\n\n/**\n * @deprecated Use context's DI system instead\n * @param options The options to pass to the Redis client\n * @returns\n */\nexport const redisMiddleware = (options: RedisOptions) => async (context: Context) => {\n context.provide(REDIS_OPTIONS_KEY, options)\n\n context.on(App.Events.Init, async (context) => {\n const redis = new Redis(options)\n\n context.provide(REDIS_CLIENT_KEY, redis)\n await context.emit(RedisEvents.Connect)\n })\n\n context.on(App.Events.Destroy, async (context) => {\n const redis = useRedis(context)\n await context.emit(RedisEvents.Destroy)\n })\n\n context.on(RedisEvents.Destroy, async (context) => {\n const redis = useRedis(context)\n await redis.quit()\n })\n}\n\n/**\n * Get the centralized redis connection\n * NOTE: Do not use this connection to subscribe to events. Create your own instead with createRedis.\n * @param context\n * @returns\n */\nexport function useRedis(context: Context): RedisInstance {\n const conn = context.inject<RedisInstance>(REDIS_CLIENT_KEY)\n\n if (!conn) {\n throw new Error('No Redis connection was found. Did you forget to provide one with `redisMiddleware`?')\n }\n\n return conn\n}\n\n/**\n * Get the redis options that were provided\n *\n * @param context\n * @returns The redis options that were provided in the given context\n */\nexport function useRedisOptions(context: Context): RedisOptions {\n const options = context.inject<RedisOptions>(REDIS_OPTIONS_KEY)\n\n return options!\n}\n\n/**\n * Create a Redis connection\n *\n * @param context The context in which to create the Redis instance\n */\nexport function createRedis(context: Context): RedisInstance {\n const options = useRedisOptions(context)\n\n const conn = new Redis(options)\n\n context.on(App.Events.Destroy, async () => {\n await conn.quit()\n })\n\n return conn\n}\n\nexport function useRedisRepository<T = string>(context: Context): RedisRepository<T> {\n const conn = useRedis(context)\n\n const repository = new RedisRepository<T>(conn)\n\n return repository\n}\n",
|
|
7
7
|
"/**\n * Serialize a payload into a JSON string\n * @param message A payload to serialize\n * @returns A JSON serialized string\n */\nexport function serialize<T = string>(message: T) {\n return JSON.stringify(message)\n}\n\n/**\n * Extract a payload from a serialized string.\n * @param message A JSON string to unserialize\n * @returns\n */\nexport function unserialize<T = string>(message?: string | null): T | null | undefined {\n if (!message) {\n return null as any\n }\n return JSON.parse(message)\n}\n\nexport type MessageHandler<T = string> = (message?: T) => any\n",
|
|
8
|
-
"import { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
8
|
+
"import type { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
9
9
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler, unserialize } from './utils'\n\n/**\n * Push a message to a queue to be resolved by only one client.\n * NOTE: This uses LPUSH under the hood, not PUBLISH. For PUBLISH functionality, use `sendMessage`\n *\n * @param context\n * @param channel The channel to send the message on\n * @param payload The payload to send\n * @returns\n */\nexport async function pushMessage<T = string>(context: Context, channel: string | string[], payload: T) {\n const conn = useRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n const message = JSON.stringify(payload)\n\n return await Promise.all(channels.map((channel) => conn.lpush(channel, message)))\n}\n\n/**\n * Fulfills messages pushed to a list (LPUSH), and pops them from the list to ensure they are only processed once.\n * NOTE: If the handler fails, the message will be pushed back to the queue and an error message will be logged.\n *\n * @param context\n * @param channel The channel to receive messages on\n */\nexport async function onFulfillMessage<T>(context: Context, channel: string, handler: MessageHandler<T>) {\n const conn = createRedis(context)\n\n let shouldContinue = true\n\n while (shouldContinue) {\n const result = await conn.brpop(channel, 1000)\n const [msgChannel, message] = result ?? []\n\n try {\n const payload = unserialize<T>(message ?? '')\n await handler(payload ?? undefined)\n } catch (e) {\n pushMessage(context, channel, message)\n }\n }\n\n return () => (shouldContinue = false)\n}\n",
|
|
10
10
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler } from './utils'\n/**\n * Send a message to a channel in Redis\n *\n * @param context Application context from which to inject dependencies\n * @param channel The channel on which to publish the event\n * @param message The payload to send (could be a string or JSON-serialized object)\n * @returns The number of subscribers that received the message\n */\nexport async function sendMessage<T = string>(context: Context, channel: string, message: T): Promise<number> {\n const payload = JSON.stringify(message)\n const conn = useRedis(context)\n\n const result = await conn.publish(channel, payload)\n\n return result\n}\n\n/**\n * Subscribe to messages on a channel\n * NOTE: Creates a dedicated Redis connection\n *\n * @param context\n * @param channel The channel to subscribe to\n * @param messageHandler A function to run whenever messages are received\n * @returns A dedicated connection to handle the subscription on. NOTE: Close this connection to unsubscribe.\n */\nexport function onMessage<T = string>(context: Context, channel: string | string[], messageHandler: MessageHandler<T>) {\n const conn = createRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n conn.psubscribe(...channels)\n\n conn.on('pmessage', (pattern, msgChannel, message) => {\n const payload: T = JSON.parse(message)\n\n messageHandler(payload)\n })\n\n return conn\n}\n",
|
|
11
11
|
"import { serialize, unserialize } from './utils'\nimport { useRedis } from './redis-middleware'\nimport { Context } from '@declaro/core'\n\nexport async function set<T>(context: Context, id: string, item: T) {\n const conn = useRedis(context)\n\n const payload = serialize(item)\n\n return await conn.set(id, payload)\n}\n\nexport async function get<T>(context: Context, id: string) {\n const conn = useRedis(context)\n\n const payload = await conn.get(id)\n\n const item = unserialize<T>(payload)\n\n return item\n}\n",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"import { ConfigSet } from './setting'\n\nexport const siteConfig = new ConfigSet('Site', {\n domain: process.env.APP_DOMAIN ?? 'http://localhost:8080',\n email: process.env.APP_EMAIL ?? 'admin@declaro.io',\n})\n",
|
|
15
15
|
"import { Context } from '@declaro/core'\nimport Redis from 'ioredis-mock'\nimport { REDIS_CLIENT_KEY, REDIS_OPTIONS_KEY, REDIS_PUB_KEY, REDIS_SUB_KEY } from '../redis'\n\n// TODO: move this to core\nexport const mockRedisMiddleware = () => async (context: Context) => {\n const pub = new Redis()\n const sub = new Redis()\n const redis = new Redis()\n\n context.provide(REDIS_CLIENT_KEY, redis)\n context.provide(REDIS_PUB_KEY, pub)\n context.provide(REDIS_SUB_KEY, sub)\n context.provide(REDIS_OPTIONS_KEY, undefined)\n}\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "9341080E6CE2BEC764756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/dist/node/index.cjs
CHANGED
|
@@ -4,45 +4,66 @@ var __defProp = Object.defineProperty;
|
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
function __accessProp(key) {
|
|
8
|
+
return this[key];
|
|
9
|
+
}
|
|
10
|
+
var __toESMCache_node;
|
|
11
|
+
var __toESMCache_esm;
|
|
7
12
|
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
+
var canCache = mod != null && typeof mod === "object";
|
|
14
|
+
if (canCache) {
|
|
15
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
+
var cached = cache.get(mod);
|
|
17
|
+
if (cached)
|
|
18
|
+
return cached;
|
|
19
|
+
}
|
|
8
20
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
21
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
22
|
for (let key of __getOwnPropNames(mod))
|
|
11
23
|
if (!__hasOwnProp.call(to, key))
|
|
12
24
|
__defProp(to, key, {
|
|
13
|
-
get: (
|
|
25
|
+
get: __accessProp.bind(mod, key),
|
|
14
26
|
enumerable: true
|
|
15
27
|
});
|
|
28
|
+
if (canCache)
|
|
29
|
+
cache.set(mod, to);
|
|
16
30
|
return to;
|
|
17
31
|
};
|
|
18
|
-
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
19
32
|
var __toCommonJS = (from) => {
|
|
20
|
-
var entry = __moduleCache.get(from), desc;
|
|
33
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
21
34
|
if (entry)
|
|
22
35
|
return entry;
|
|
23
36
|
entry = __defProp({}, "__esModule", { value: true });
|
|
24
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
37
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
38
|
+
for (var key of __getOwnPropNames(from))
|
|
39
|
+
if (!__hasOwnProp.call(entry, key))
|
|
40
|
+
__defProp(entry, key, {
|
|
41
|
+
get: __accessProp.bind(from, key),
|
|
42
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
43
|
+
});
|
|
44
|
+
}
|
|
29
45
|
__moduleCache.set(from, entry);
|
|
30
46
|
return entry;
|
|
31
47
|
};
|
|
48
|
+
var __moduleCache;
|
|
32
49
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
50
|
+
var __returnValue = (v) => v;
|
|
51
|
+
function __exportSetter(name, newValue) {
|
|
52
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
53
|
+
}
|
|
33
54
|
var __export = (target, all) => {
|
|
34
55
|
for (var name in all)
|
|
35
56
|
__defProp(target, name, {
|
|
36
57
|
get: all[name],
|
|
37
58
|
enumerable: true,
|
|
38
59
|
configurable: true,
|
|
39
|
-
set: (
|
|
60
|
+
set: __exportSetter.bind(all, name)
|
|
40
61
|
});
|
|
41
62
|
};
|
|
42
63
|
|
|
43
64
|
// ../../node_modules/deepmerge/dist/cjs.js
|
|
44
65
|
var require_cjs = __commonJS((exports2, module2) => {
|
|
45
|
-
var isMergeableObject = function
|
|
66
|
+
var isMergeableObject = function isMergeableObject2(value) {
|
|
46
67
|
return isNonNullObject(value) && !isSpecial(value);
|
|
47
68
|
};
|
|
48
69
|
function isNonNullObject(value) {
|
|
@@ -379,7 +400,7 @@ class RedisEventAdapter {
|
|
|
379
400
|
}
|
|
380
401
|
}
|
|
381
402
|
// src/settings/setting.ts
|
|
382
|
-
var import_deepmerge = __toESM(require_cjs());
|
|
403
|
+
var import_deepmerge = __toESM(require_cjs(), 1);
|
|
383
404
|
var SETTINGS_KEY = "DeclaroSettings";
|
|
384
405
|
var SETTINGS_NAMESPACES = "DeclaroSettingsNamespaces";
|
|
385
406
|
|
|
@@ -468,5 +489,5 @@ var mockRedisMiddleware = () => async (context) => {
|
|
|
468
489
|
context.provide(REDIS_OPTIONS_KEY, undefined);
|
|
469
490
|
};
|
|
470
491
|
|
|
471
|
-
//# debugId=
|
|
492
|
+
//# debugId=EEFD63C020918BCC64756E2164756E21
|
|
472
493
|
//# sourceMappingURL=index.cjs.map
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n",
|
|
6
6
|
"import { Context, App } from '@declaro/core'\nimport Redis, { Redis as RedisInstance, type RedisOptions } from 'ioredis'\nimport { RedisRepository } from './repository'\n\nexport const RedisEvents = {\n Connect: 'redis:connect',\n Destroy: 'redis:destroy',\n}\n\nexport const REDIS_CLIENT_KEY = Symbol()\nexport const REDIS_PUB_KEY = Symbol()\nexport const REDIS_SUB_KEY = Symbol()\nexport const REDIS_OPTIONS_KEY = Symbol()\n\n/**\n * @deprecated Use context's DI system instead\n * @param options The options to pass to the Redis client\n * @returns\n */\nexport const redisMiddleware = (options: RedisOptions) => async (context: Context) => {\n context.provide(REDIS_OPTIONS_KEY, options)\n\n context.on(App.Events.Init, async (context) => {\n const redis = new Redis(options)\n\n context.provide(REDIS_CLIENT_KEY, redis)\n await context.emit(RedisEvents.Connect)\n })\n\n context.on(App.Events.Destroy, async (context) => {\n const redis = useRedis(context)\n await context.emit(RedisEvents.Destroy)\n })\n\n context.on(RedisEvents.Destroy, async (context) => {\n const redis = useRedis(context)\n await redis.quit()\n })\n}\n\n/**\n * Get the centralized redis connection\n * NOTE: Do not use this connection to subscribe to events. Create your own instead with createRedis.\n * @param context\n * @returns\n */\nexport function useRedis(context: Context): RedisInstance {\n const conn = context.inject<RedisInstance>(REDIS_CLIENT_KEY)\n\n if (!conn) {\n throw new Error('No Redis connection was found. Did you forget to provide one with `redisMiddleware`?')\n }\n\n return conn\n}\n\n/**\n * Get the redis options that were provided\n *\n * @param context\n * @returns The redis options that were provided in the given context\n */\nexport function useRedisOptions(context: Context): RedisOptions {\n const options = context.inject<RedisOptions>(REDIS_OPTIONS_KEY)\n\n return options!\n}\n\n/**\n * Create a Redis connection\n *\n * @param context The context in which to create the Redis instance\n */\nexport function createRedis(context: Context): RedisInstance {\n const options = useRedisOptions(context)\n\n const conn = new Redis(options)\n\n context.on(App.Events.Destroy, async () => {\n await conn.quit()\n })\n\n return conn\n}\n\nexport function useRedisRepository<T = string>(context: Context): RedisRepository<T> {\n const conn = useRedis(context)\n\n const repository = new RedisRepository<T>(conn)\n\n return repository\n}\n",
|
|
7
7
|
"/**\n * Serialize a payload into a JSON string\n * @param message A payload to serialize\n * @returns A JSON serialized string\n */\nexport function serialize<T = string>(message: T) {\n return JSON.stringify(message)\n}\n\n/**\n * Extract a payload from a serialized string.\n * @param message A JSON string to unserialize\n * @returns\n */\nexport function unserialize<T = string>(message?: string | null): T | null | undefined {\n if (!message) {\n return null as any\n }\n return JSON.parse(message)\n}\n\nexport type MessageHandler<T = string> = (message?: T) => any\n",
|
|
8
|
-
"import { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
8
|
+
"import type { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
9
9
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler, unserialize } from './utils'\n\n/**\n * Push a message to a queue to be resolved by only one client.\n * NOTE: This uses LPUSH under the hood, not PUBLISH. For PUBLISH functionality, use `sendMessage`\n *\n * @param context\n * @param channel The channel to send the message on\n * @param payload The payload to send\n * @returns\n */\nexport async function pushMessage<T = string>(context: Context, channel: string | string[], payload: T) {\n const conn = useRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n const message = JSON.stringify(payload)\n\n return await Promise.all(channels.map((channel) => conn.lpush(channel, message)))\n}\n\n/**\n * Fulfills messages pushed to a list (LPUSH), and pops them from the list to ensure they are only processed once.\n * NOTE: If the handler fails, the message will be pushed back to the queue and an error message will be logged.\n *\n * @param context\n * @param channel The channel to receive messages on\n */\nexport async function onFulfillMessage<T>(context: Context, channel: string, handler: MessageHandler<T>) {\n const conn = createRedis(context)\n\n let shouldContinue = true\n\n while (shouldContinue) {\n const result = await conn.brpop(channel, 1000)\n const [msgChannel, message] = result ?? []\n\n try {\n const payload = unserialize<T>(message ?? '')\n await handler(payload ?? undefined)\n } catch (e) {\n pushMessage(context, channel, message)\n }\n }\n\n return () => (shouldContinue = false)\n}\n",
|
|
10
10
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler } from './utils'\n/**\n * Send a message to a channel in Redis\n *\n * @param context Application context from which to inject dependencies\n * @param channel The channel on which to publish the event\n * @param message The payload to send (could be a string or JSON-serialized object)\n * @returns The number of subscribers that received the message\n */\nexport async function sendMessage<T = string>(context: Context, channel: string, message: T): Promise<number> {\n const payload = JSON.stringify(message)\n const conn = useRedis(context)\n\n const result = await conn.publish(channel, payload)\n\n return result\n}\n\n/**\n * Subscribe to messages on a channel\n * NOTE: Creates a dedicated Redis connection\n *\n * @param context\n * @param channel The channel to subscribe to\n * @param messageHandler A function to run whenever messages are received\n * @returns A dedicated connection to handle the subscription on. NOTE: Close this connection to unsubscribe.\n */\nexport function onMessage<T = string>(context: Context, channel: string | string[], messageHandler: MessageHandler<T>) {\n const conn = createRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n conn.psubscribe(...channels)\n\n conn.on('pmessage', (pattern, msgChannel, message) => {\n const payload: T = JSON.parse(message)\n\n messageHandler(payload)\n })\n\n return conn\n}\n",
|
|
11
11
|
"import { serialize, unserialize } from './utils'\nimport { useRedis } from './redis-middleware'\nimport { Context } from '@declaro/core'\n\nexport async function set<T>(context: Context, id: string, item: T) {\n const conn = useRedis(context)\n\n const payload = serialize(item)\n\n return await conn.set(id, payload)\n}\n\nexport async function get<T>(context: Context, id: string) {\n const conn = useRedis(context)\n\n const payload = await conn.get(id)\n\n const item = unserialize<T>(payload)\n\n return item\n}\n",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"import { ConfigSet } from './setting'\n\nexport const siteConfig = new ConfigSet('Site', {\n domain: process.env.APP_DOMAIN ?? 'http://localhost:8080',\n email: process.env.APP_EMAIL ?? 'admin@declaro.io',\n})\n",
|
|
15
15
|
"import { Context } from '@declaro/core'\nimport Redis from 'ioredis-mock'\nimport { REDIS_CLIENT_KEY, REDIS_OPTIONS_KEY, REDIS_PUB_KEY, REDIS_SUB_KEY } from '../redis'\n\n// TODO: move this to core\nexport const mockRedisMiddleware = () => async (context: Context) => {\n const pub = new Redis()\n const sub = new Redis()\n const redis = new Redis()\n\n context.provide(REDIS_CLIENT_KEY, redis)\n context.provide(REDIS_PUB_KEY, pub)\n context.provide(REDIS_SUB_KEY, sub)\n context.provide(REDIS_OPTIONS_KEY, undefined)\n}\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "EEFD63C020918BCC64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/dist/node/index.js
CHANGED
|
@@ -3,22 +3,36 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
function __accessProp(key) {
|
|
7
|
+
return this[key];
|
|
8
|
+
}
|
|
9
|
+
var __toESMCache_node;
|
|
10
|
+
var __toESMCache_esm;
|
|
6
11
|
var __toESM = (mod, isNodeMode, target) => {
|
|
12
|
+
var canCache = mod != null && typeof mod === "object";
|
|
13
|
+
if (canCache) {
|
|
14
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
15
|
+
var cached = cache.get(mod);
|
|
16
|
+
if (cached)
|
|
17
|
+
return cached;
|
|
18
|
+
}
|
|
7
19
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
8
20
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
9
21
|
for (let key of __getOwnPropNames(mod))
|
|
10
22
|
if (!__hasOwnProp.call(to, key))
|
|
11
23
|
__defProp(to, key, {
|
|
12
|
-
get: (
|
|
24
|
+
get: __accessProp.bind(mod, key),
|
|
13
25
|
enumerable: true
|
|
14
26
|
});
|
|
27
|
+
if (canCache)
|
|
28
|
+
cache.set(mod, to);
|
|
15
29
|
return to;
|
|
16
30
|
};
|
|
17
31
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
18
32
|
|
|
19
33
|
// ../../node_modules/deepmerge/dist/cjs.js
|
|
20
34
|
var require_cjs = __commonJS((exports, module) => {
|
|
21
|
-
var isMergeableObject = function
|
|
35
|
+
var isMergeableObject = function isMergeableObject2(value) {
|
|
22
36
|
return isNonNullObject(value) && !isSpecial(value);
|
|
23
37
|
};
|
|
24
38
|
function isNonNullObject(value) {
|
|
@@ -440,5 +454,5 @@ export {
|
|
|
440
454
|
Config
|
|
441
455
|
};
|
|
442
456
|
|
|
443
|
-
//# debugId=
|
|
457
|
+
//# debugId=D4630D151C43971B64756E2164756E21
|
|
444
458
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n",
|
|
6
6
|
"import { Context, App } from '@declaro/core'\nimport Redis, { Redis as RedisInstance, type RedisOptions } from 'ioredis'\nimport { RedisRepository } from './repository'\n\nexport const RedisEvents = {\n Connect: 'redis:connect',\n Destroy: 'redis:destroy',\n}\n\nexport const REDIS_CLIENT_KEY = Symbol()\nexport const REDIS_PUB_KEY = Symbol()\nexport const REDIS_SUB_KEY = Symbol()\nexport const REDIS_OPTIONS_KEY = Symbol()\n\n/**\n * @deprecated Use context's DI system instead\n * @param options The options to pass to the Redis client\n * @returns\n */\nexport const redisMiddleware = (options: RedisOptions) => async (context: Context) => {\n context.provide(REDIS_OPTIONS_KEY, options)\n\n context.on(App.Events.Init, async (context) => {\n const redis = new Redis(options)\n\n context.provide(REDIS_CLIENT_KEY, redis)\n await context.emit(RedisEvents.Connect)\n })\n\n context.on(App.Events.Destroy, async (context) => {\n const redis = useRedis(context)\n await context.emit(RedisEvents.Destroy)\n })\n\n context.on(RedisEvents.Destroy, async (context) => {\n const redis = useRedis(context)\n await redis.quit()\n })\n}\n\n/**\n * Get the centralized redis connection\n * NOTE: Do not use this connection to subscribe to events. Create your own instead with createRedis.\n * @param context\n * @returns\n */\nexport function useRedis(context: Context): RedisInstance {\n const conn = context.inject<RedisInstance>(REDIS_CLIENT_KEY)\n\n if (!conn) {\n throw new Error('No Redis connection was found. Did you forget to provide one with `redisMiddleware`?')\n }\n\n return conn\n}\n\n/**\n * Get the redis options that were provided\n *\n * @param context\n * @returns The redis options that were provided in the given context\n */\nexport function useRedisOptions(context: Context): RedisOptions {\n const options = context.inject<RedisOptions>(REDIS_OPTIONS_KEY)\n\n return options!\n}\n\n/**\n * Create a Redis connection\n *\n * @param context The context in which to create the Redis instance\n */\nexport function createRedis(context: Context): RedisInstance {\n const options = useRedisOptions(context)\n\n const conn = new Redis(options)\n\n context.on(App.Events.Destroy, async () => {\n await conn.quit()\n })\n\n return conn\n}\n\nexport function useRedisRepository<T = string>(context: Context): RedisRepository<T> {\n const conn = useRedis(context)\n\n const repository = new RedisRepository<T>(conn)\n\n return repository\n}\n",
|
|
7
7
|
"/**\n * Serialize a payload into a JSON string\n * @param message A payload to serialize\n * @returns A JSON serialized string\n */\nexport function serialize<T = string>(message: T) {\n return JSON.stringify(message)\n}\n\n/**\n * Extract a payload from a serialized string.\n * @param message A JSON string to unserialize\n * @returns\n */\nexport function unserialize<T = string>(message?: string | null): T | null | undefined {\n if (!message) {\n return null as any\n }\n return JSON.parse(message)\n}\n\nexport type MessageHandler<T = string> = (message?: T) => any\n",
|
|
8
|
-
"import { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
8
|
+
"import type { Redis } from 'ioredis'\nimport { serialize, unserialize } from './utils'\n\nexport enum RedisRepositoryEvent {\n SET = 'SET',\n GET = 'GET',\n}\n\nexport type RepositoryEventHandler<T> = (event: RedisRepositoryEvent, id: string, item: T) => any\n\nexport class RedisRepository<T> {\n private readonly handlers = {\n [RedisRepositoryEvent.GET]: [] as RepositoryEventHandler<T>[],\n [RedisRepositoryEvent.SET]: [] as RepositoryEventHandler<T>[],\n }\n\n constructor(protected readonly redis: Redis) {}\n\n async set(id: string, item: T): Promise<'OK'> {\n const payload = serialize(item)\n\n const result = await this.redis.set(id, payload)\n\n await Promise.all(this.handlers.SET.map((handler) => handler(RedisRepositoryEvent.SET, id, item)))\n\n return result\n }\n\n async get(id: string): Promise<T | null | undefined> {\n const payload = await this.redis.get(id)\n\n if (!payload) {\n return null\n }\n\n const item = unserialize<T>(payload)\n\n if (item) {\n await Promise.all(this.handlers.GET.map((handler) => handler(RedisRepositoryEvent.GET, id, item)))\n }\n\n return item\n }\n\n on(event: RedisRepositoryEvent, handler: RepositoryEventHandler<T>) {\n this.handlers[event].push(handler)\n\n return () => {\n this.handlers[event] = this.handlers[event].filter((item) => item != handler)\n }\n }\n\n onSet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.SET, handler)\n }\n\n onGet(handler: RepositoryEventHandler<T>) {\n return this.on(RedisRepositoryEvent.GET, handler)\n }\n}\n",
|
|
9
9
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler, unserialize } from './utils'\n\n/**\n * Push a message to a queue to be resolved by only one client.\n * NOTE: This uses LPUSH under the hood, not PUBLISH. For PUBLISH functionality, use `sendMessage`\n *\n * @param context\n * @param channel The channel to send the message on\n * @param payload The payload to send\n * @returns\n */\nexport async function pushMessage<T = string>(context: Context, channel: string | string[], payload: T) {\n const conn = useRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n const message = JSON.stringify(payload)\n\n return await Promise.all(channels.map((channel) => conn.lpush(channel, message)))\n}\n\n/**\n * Fulfills messages pushed to a list (LPUSH), and pops them from the list to ensure they are only processed once.\n * NOTE: If the handler fails, the message will be pushed back to the queue and an error message will be logged.\n *\n * @param context\n * @param channel The channel to receive messages on\n */\nexport async function onFulfillMessage<T>(context: Context, channel: string, handler: MessageHandler<T>) {\n const conn = createRedis(context)\n\n let shouldContinue = true\n\n while (shouldContinue) {\n const result = await conn.brpop(channel, 1000)\n const [msgChannel, message] = result ?? []\n\n try {\n const payload = unserialize<T>(message ?? '')\n await handler(payload ?? undefined)\n } catch (e) {\n pushMessage(context, channel, message)\n }\n }\n\n return () => (shouldContinue = false)\n}\n",
|
|
10
10
|
"import { Context } from '@declaro/core'\nimport { createRedis, useRedis } from './redis-middleware'\nimport { type MessageHandler } from './utils'\n/**\n * Send a message to a channel in Redis\n *\n * @param context Application context from which to inject dependencies\n * @param channel The channel on which to publish the event\n * @param message The payload to send (could be a string or JSON-serialized object)\n * @returns The number of subscribers that received the message\n */\nexport async function sendMessage<T = string>(context: Context, channel: string, message: T): Promise<number> {\n const payload = JSON.stringify(message)\n const conn = useRedis(context)\n\n const result = await conn.publish(channel, payload)\n\n return result\n}\n\n/**\n * Subscribe to messages on a channel\n * NOTE: Creates a dedicated Redis connection\n *\n * @param context\n * @param channel The channel to subscribe to\n * @param messageHandler A function to run whenever messages are received\n * @returns A dedicated connection to handle the subscription on. NOTE: Close this connection to unsubscribe.\n */\nexport function onMessage<T = string>(context: Context, channel: string | string[], messageHandler: MessageHandler<T>) {\n const conn = createRedis(context)\n const channels = Array.isArray(channel) ? channel : [channel]\n\n conn.psubscribe(...channels)\n\n conn.on('pmessage', (pattern, msgChannel, message) => {\n const payload: T = JSON.parse(message)\n\n messageHandler(payload)\n })\n\n return conn\n}\n",
|
|
11
11
|
"import { serialize, unserialize } from './utils'\nimport { useRedis } from './redis-middleware'\nimport { Context } from '@declaro/core'\n\nexport async function set<T>(context: Context, id: string, item: T) {\n const conn = useRedis(context)\n\n const payload = serialize(item)\n\n return await conn.set(id, payload)\n}\n\nexport async function get<T>(context: Context, id: string) {\n const conn = useRedis(context)\n\n const payload = await conn.get(id)\n\n const item = unserialize<T>(payload)\n\n return item\n}\n",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"import { ConfigSet } from './setting'\n\nexport const siteConfig = new ConfigSet('Site', {\n domain: process.env.APP_DOMAIN ?? 'http://localhost:8080',\n email: process.env.APP_EMAIL ?? 'admin@declaro.io',\n})\n",
|
|
15
15
|
"import { Context } from '@declaro/core'\nimport Redis from 'ioredis-mock'\nimport { REDIS_CLIENT_KEY, REDIS_OPTIONS_KEY, REDIS_PUB_KEY, REDIS_SUB_KEY } from '../redis'\n\n// TODO: move this to core\nexport const mockRedisMiddleware = () => async (context: Context) => {\n const pub = new Redis()\n const sub = new Redis()\n const redis = new Redis()\n\n context.provide(REDIS_CLIENT_KEY, redis)\n context.provide(REDIS_PUB_KEY, pub)\n context.provide(REDIS_SUB_KEY, sub)\n context.provide(REDIS_OPTIONS_KEY, undefined)\n}\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEA,IAAI,oBAAoB,SAAS,kBAAiB,CAAC,OAAO;AAAA,IACzD,OAAO,gBAAgB,KAAK,KACxB,CAAC,UAAU,KAAK;AAAA;AAAA,EAGrB,SAAS,eAAe,CAAC,OAAO;AAAA,IAC/B,OAAO,CAAC,CAAC,SAAS,OAAO,UAAU;AAAA;AAAA,EAGpC,SAAS,SAAS,CAAC,OAAO;AAAA,IACzB,IAAI,cAAc,OAAO,UAAU,SAAS,KAAK,KAAK;AAAA,IAEtD,OAAO,gBAAgB,qBACnB,gBAAgB,mBAChB,eAAe,KAAK;AAAA;AAAA,EAIzB,IAAI,eAAe,OAAO,WAAW,cAAc,OAAO;AAAA,EAC1D,IAAI,qBAAqB,eAAe,OAAO,IAAI,eAAe,IAAI;AAAA,EAEtE,SAAS,cAAc,CAAC,OAAO;AAAA,IAC9B,OAAO,MAAM,aAAa;AAAA;AAAA,EAG3B,SAAS,WAAW,CAAC,KAAK;AAAA,IACzB,OAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAAA;AAAA,EAGnC,SAAS,6BAA6B,CAAC,OAAO,SAAS;AAAA,IACtD,OAAQ,QAAQ,UAAU,SAAS,QAAQ,kBAAkB,KAAK,IAC/D,UAAU,YAAY,KAAK,GAAG,OAAO,OAAO,IAC5C;AAAA;AAAA,EAGJ,SAAS,iBAAiB,CAAC,QAAQ,QAAQ,SAAS;AAAA,IACnD,OAAO,OAAO,OAAO,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS;AAAA,MAClD,OAAO,8BAA8B,SAAS,OAAO;AAAA,KACrD;AAAA;AAAA,EAGF,SAAS,gBAAgB,CAAC,KAAK,SAAS;AAAA,IACvC,IAAI,CAAC,QAAQ,aAAa;AAAA,MACzB,OAAO;AAAA,IACR;AAAA,IACA,IAAI,cAAc,QAAQ,YAAY,GAAG;AAAA,IACzC,OAAO,OAAO,gBAAgB,aAAa,cAAc;AAAA;AAAA,EAG1D,SAAS,+BAA+B,CAAC,QAAQ;AAAA,IAChD,OAAO,OAAO,wBACX,OAAO,sBAAsB,MAAM,EAAE,OAAO,QAAQ,CAAC,QAAQ;AAAA,MAC9D,OAAO,OAAO,qBAAqB,KAAK,QAAQ,MAAM;AAAA,KACtD,IACC,CAAC;AAAA;AAAA,EAGL,SAAS,OAAO,CAAC,QAAQ;AAAA,IACxB,OAAO,OAAO,KAAK,MAAM,EAAE,OAAO,gCAAgC,MAAM,CAAC;AAAA;AAAA,EAG1E,SAAS,kBAAkB,CAAC,QAAQ,UAAU;AAAA,IAC7C,IAAI;AAAA,MACH,OAAO,YAAY;AAAA,MAClB,OAAM,GAAG;AAAA,MACV,OAAO;AAAA;AAAA;AAAA,EAKT,SAAS,gBAAgB,CAAC,QAAQ,KAAK;AAAA,IACtC,OAAO,mBAAmB,QAAQ,GAAG,KACjC,EAAE,OAAO,eAAe,KAAK,QAAQ,GAAG,KACvC,OAAO,qBAAqB,KAAK,QAAQ,GAAG;AAAA;AAAA,EAGlD,SAAS,WAAW,CAAC,QAAQ,QAAQ,SAAS;AAAA,IAC7C,IAAI,cAAc,CAAC;AAAA,IACnB,IAAI,QAAQ,kBAAkB,MAAM,GAAG;AAAA,MACtC,QAAQ,MAAM,EAAE,QAAQ,QAAQ,CAAC,KAAK;AAAA,QACrC,YAAY,OAAO,8BAA8B,OAAO,MAAM,OAAO;AAAA,OACrE;AAAA,IACF;AAAA,IACA,QAAQ,MAAM,EAAE,QAAQ,QAAQ,CAAC,KAAK;AAAA,MACrC,IAAI,iBAAiB,QAAQ,GAAG,GAAG;AAAA,QAClC;AAAA,MACD;AAAA,MAEA,IAAI,mBAAmB,QAAQ,GAAG,KAAK,QAAQ,kBAAkB,OAAO,IAAI,GAAG;AAAA,QAC9E,YAAY,OAAO,iBAAiB,KAAK,OAAO,EAAE,OAAO,MAAM,OAAO,MAAM,OAAO;AAAA,MACpF,EAAO;AAAA,QACN,YAAY,OAAO,8BAA8B,OAAO,MAAM,OAAO;AAAA;AAAA,KAEtE;AAAA,IACD,OAAO;AAAA;AAAA,EAGR,SAAS,SAAS,CAAC,QAAQ,QAAQ,SAAS;AAAA,IAC3C,UAAU,WAAW,CAAC;AAAA,IACtB,QAAQ,aAAa,QAAQ,cAAc;AAAA,IAC3C,QAAQ,oBAAoB,QAAQ,qBAAqB;AAAA,IAGzD,QAAQ,gCAAgC;AAAA,IAExC,IAAI,gBAAgB,MAAM,QAAQ,MAAM;AAAA,IACxC,IAAI,gBAAgB,MAAM,QAAQ,MAAM;AAAA,IACxC,IAAI,4BAA4B,kBAAkB;AAAA,IAElD,IAAI,CAAC,2BAA2B;AAAA,MAC/B,OAAO,8BAA8B,QAAQ,OAAO;AAAA,IACrD,EAAO,SAAI,eAAe;AAAA,MACzB,OAAO,QAAQ,WAAW,QAAQ,QAAQ,OAAO;AAAA,IAClD,EAAO;AAAA,MACN,OAAO,YAAY,QAAQ,QAAQ,OAAO;AAAA;AAAA;AAAA,EAI5C,UAAU,MAAM,SAAS,YAAY,CAAC,OAAO,SAAS;AAAA,IACrD,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,MAC1B,MAAM,IAAI,MAAM,mCAAmC;AAAA,IACpD;AAAA,IAEA,OAAO,MAAM,OAAO,QAAQ,CAAC,MAAM,MAAM;AAAA,MACxC,OAAO,UAAU,MAAM,MAAM,OAAO;AAAA,OAClC,CAAC,CAAC;AAAA;AAAA,EAGN,IAAI,cAAc;AAAA,EAElB,OAAO,UAAU;AAAA;;;ACpIjB;AACA;;;ACIO,SAAS,SAAqB,CAAC,SAAY;AAAA,EAC9C,OAAO,KAAK,UAAU,OAAO;AAAA;AAQ1B,SAAS,WAAuB,CAAC,SAA+C;AAAA,EACnF,IAAI,CAAC,SAAS;AAAA,IACV,OAAO;AAAA,EACX;AAAA,EACA,OAAO,KAAK,MAAM,OAAO;AAAA;;;ACftB,IAAK;AAAA,CAAL,CAAK,0BAAL;AAAA,EACH,+BAAM;AAAA,EACN,+BAAM;AAAA,GAFE;AAAA;AAOL,MAAM,gBAAmB;AAAA,EAMG;AAAA,EALd,WAAW;AAAA,KACvB,kBAA2B,CAAC;AAAA,KAC5B,kBAA2B,CAAC;AAAA,EACjC;AAAA,EAEA,WAAW,CAAoB,OAAc;AAAA,IAAd;AAAA;AAAA,OAEzB,IAAG,CAAC,IAAY,MAAwB;AAAA,IAC1C,MAAM,UAAU,UAAU,IAAI;AAAA,IAE9B,MAAM,SAAS,MAAM,KAAK,MAAM,IAAI,IAAI,OAAO;AAAA,IAE/C,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,QAAQ,iBAA0B,IAAI,IAAI,CAAC,CAAC;AAAA,IAEjG,OAAO;AAAA;AAAA,OAGL,IAAG,CAAC,IAA2C;AAAA,IACjD,MAAM,UAAU,MAAM,KAAK,MAAM,IAAI,EAAE;AAAA,IAEvC,IAAI,CAAC,SAAS;AAAA,MACV,OAAO;AAAA,IACX;AAAA,IAEA,MAAM,OAAO,YAAe,OAAO;AAAA,IAEnC,IAAI,MAAM;AAAA,MACN,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,QAAQ,iBAA0B,IAAI,IAAI,CAAC,CAAC;AAAA,IACrG;AAAA,IAEA,OAAO;AAAA;AAAA,EAGX,EAAE,CAAC,OAA6B,SAAoC;AAAA,IAChE,KAAK,SAAS,OAAO,KAAK,OAAO;AAAA,IAEjC,OAAO,MAAM;AAAA,MACT,KAAK,SAAS,SAAS,KAAK,SAAS,OAAO,OAAO,CAAC,SAAS,QAAQ,OAAO;AAAA;AAAA;AAAA,EAIpF,KAAK,CAAC,SAAoC;AAAA,IACtC,OAAO,KAAK,GAAG,iBAA0B,OAAO;AAAA;AAAA,EAGpD,KAAK,CAAC,SAAoC;AAAA,IACtC,OAAO,KAAK,GAAG,iBAA0B,OAAO;AAAA;AAExD;;;AFvDO,IAAM,cAAc;AAAA,EACvB,SAAS;AAAA,EACT,SAAS;AACb;AAEO,IAAM,mBAAmB,OAAO;AAChC,IAAM,gBAAgB,OAAO;AAC7B,IAAM,gBAAgB,OAAO;AAC7B,IAAM,oBAAoB,OAAO;AAOjC,IAAM,kBAAkB,CAAC,YAA0B,OAAO,YAAqB;AAAA,EAClF,QAAQ,QAAQ,mBAAmB,OAAO;AAAA,EAE1C,QAAQ,GAAG,IAAI,OAAO,MAAM,OAAO,aAAY;AAAA,IAC3C,MAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,IAE/B,SAAQ,QAAQ,kBAAkB,KAAK;AAAA,IACvC,MAAM,SAAQ,KAAK,YAAY,OAAO;AAAA,GACzC;AAAA,EAED,QAAQ,GAAG,IAAI,OAAO,SAAS,OAAO,aAAY;AAAA,IAC9C,MAAM,QAAQ,SAAS,QAAO;AAAA,IAC9B,MAAM,SAAQ,KAAK,YAAY,OAAO;AAAA,GACzC;AAAA,EAED,QAAQ,GAAG,YAAY,SAAS,OAAO,aAAY;AAAA,IAC/C,MAAM,QAAQ,SAAS,QAAO;AAAA,IAC9B,MAAM,MAAM,KAAK;AAAA,GACpB;AAAA;AASE,SAAS,QAAQ,CAAC,SAAiC;AAAA,EACtD,MAAM,OAAO,QAAQ,OAAsB,gBAAgB;AAAA,EAE3D,IAAI,CAAC,MAAM;AAAA,IACP,MAAM,IAAI,MAAM,sFAAsF;AAAA,EAC1G;AAAA,EAEA,OAAO;AAAA;AASJ,SAAS,eAAe,CAAC,SAAgC;AAAA,EAC5D,MAAM,UAAU,QAAQ,OAAqB,iBAAiB;AAAA,EAE9D,OAAO;AAAA;AAQJ,SAAS,WAAW,CAAC,SAAiC;AAAA,EACzD,MAAM,UAAU,gBAAgB,OAAO;AAAA,EAEvC,MAAM,OAAO,IAAI,MAAM,OAAO;AAAA,EAE9B,QAAQ,GAAG,IAAI,OAAO,SAAS,YAAY;AAAA,IACvC,MAAM,KAAK,KAAK;AAAA,GACnB;AAAA,EAED,OAAO;AAAA;AAGJ,SAAS,kBAA8B,CAAC,SAAsC;AAAA,EACjF,MAAM,OAAO,SAAS,OAAO;AAAA,EAE7B,MAAM,aAAa,IAAI,gBAAmB,IAAI;AAAA,EAE9C,OAAO;AAAA;;;AG7EX,eAAsB,WAAuB,CAAC,SAAkB,SAA4B,SAAY;AAAA,EACpG,MAAM,OAAO,SAAS,OAAO;AAAA,EAC7B,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,EAE5D,MAAM,UAAU,KAAK,UAAU,OAAO;AAAA,EAEtC,OAAO,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAC,aAAY,KAAK,MAAM,UAAS,OAAO,CAAC,CAAC;AAAA;AAUpF,eAAsB,gBAAmB,CAAC,SAAkB,SAAiB,SAA4B;AAAA,EACrG,MAAM,OAAO,YAAY,OAAO;AAAA,EAEhC,IAAI,iBAAiB;AAAA,EAErB,OAAO,gBAAgB;AAAA,IACnB,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,IAAI;AAAA,IAC7C,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IAEzC,IAAI;AAAA,MACA,MAAM,UAAU,YAAe,WAAW,EAAE;AAAA,MAC5C,MAAM,QAAQ,WAAW,SAAS;AAAA,MACpC,OAAO,GAAG;AAAA,MACR,YAAY,SAAS,SAAS,OAAO;AAAA;AAAA,EAE7C;AAAA,EAEA,OAAO,MAAO,iBAAiB;AAAA;;ACnCnC,eAAsB,WAAuB,CAAC,SAAkB,SAAiB,SAA6B;AAAA,EAC1G,MAAM,UAAU,KAAK,UAAU,OAAO;AAAA,EACtC,MAAM,OAAO,SAAS,OAAO;AAAA,EAE7B,MAAM,SAAS,MAAM,KAAK,QAAQ,SAAS,OAAO;AAAA,EAElD,OAAO;AAAA;AAYJ,SAAS,SAAqB,CAAC,SAAkB,SAA4B,gBAAmC;AAAA,EACnH,MAAM,OAAO,YAAY,OAAO;AAAA,EAChC,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,EAE5D,KAAK,WAAW,GAAG,QAAQ;AAAA,EAE3B,KAAK,GAAG,YAAY,CAAC,SAAS,YAAY,YAAY;AAAA,IAClD,MAAM,UAAa,KAAK,MAAM,OAAO;AAAA,IAErC,eAAe,OAAO;AAAA,GACzB;AAAA,EAED,OAAO;AAAA;;ACrCX,eAAsB,GAAM,CAAC,SAAkB,IAAY,MAAS;AAAA,EAChE,MAAM,OAAO,SAAS,OAAO;AAAA,EAE7B,MAAM,UAAU,UAAU,IAAI;AAAA,EAE9B,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO;AAAA;AAGrC,eAAsB,GAAM,CAAC,SAAkB,IAAY;AAAA,EACvD,MAAM,OAAO,SAAS,OAAO;AAAA,EAE7B,MAAM,UAAU,MAAM,KAAK,IAAI,EAAE;AAAA,EAEjC,MAAM,OAAO,YAAe,OAAO;AAAA,EAEnC,OAAO;AAAA;;AChBJ,MAAM,kBAAkB;AAAA,EAEJ;AAAA,EACA;AAAA,EACA;AAAA,EAHvB,WAAW,CACY,cACA,WACA,YACrB;AAAA,IAHqB;AAAA,IACA;AAAA,IACA;AAAA,IAEnB,aAAa,GAAG,KAAK,OAAO,UAAU;AAAA,MAClC,IAAI;AAAA,QACA,IAAK,MAAc,aAAa;AAAA,UAE5B;AAAA,QACJ;AAAA,QAEA,MAAM,UAAU,KAAK,UAAU,KAAK;AAAA,QACpC,MAAM,UAAU,QAAQ,MAAM,MAAM,OAAO;AAAA,QAC7C,OAAO,GAAG;AAAA,QACR,QAAQ,MAAM,yBAAyB,KAAK;AAAA,QAC5C,QAAQ,MAAM,wCAAwC,MAAM,QAAQ,CAAC;AAAA;AAAA,KAE5E;AAAA,IAED,WAAW,WAAW,GAAG;AAAA,IAEzB,WAAW,GAAG,YAAY,KAAK,SAAS;AAAA;AAAA,EAGlC,YAAY,CAAC,SAAiB,SAAiB,YAAoB;AAAA,IACzE,IAAI;AAAA,MACA,MAAM,QAAQ,KAAK,MAAM,OAAO;AAAA,MAC9B,MAAc,cAAc;AAAA,MAE9B,IAAI,OAAO,MAAM,SAAS,UAAU;AAAA,QAChC,MAAM,IAAI,MAAM,qBAAqB,gEAAgE;AAAA,MACzG;AAAA,MAEA,KAAK,aAAa,KAAK,KAAK;AAAA,MAC9B,OAAO,GAAG;AAAA,MACR,QAAQ,MAAM,qBAAqB,OAAO;AAAA,MAC1C,QAAQ,MAAM,0CAA0C,WAAW,CAAC;AAAA;AAAA;AAAA,EAI5E,WAAW,GAAG;AAAA,IACV,KAAK,UAAU,YAAY;AAAA,IAC3B,KAAK,WAAW,YAAY;AAAA;AAEpC;;AChDA;AAGO,IAAM,eAAe;AACrB,IAAM,sBAAsB;AAAA;AAE5B,MAAM,OAAgB;AAAA,EACG;AAAA,EAAmC;AAAA,EAA/D,WAAW,CAAiB,WAAmC,cAAkB;AAAA,IAArD;AAAA,IAAmC;AAAA;AAAA,MAEnD,YAAY,GAAG;AAAA,IACvB,OAAO,GAAG,gBAAgB,KAAK;AAAA;AAAA,OAG7B,IAAG,CAAC,SAAkB;AAAA,IACxB,MAAM,QAAQ,SAAS,OAAO;AAAA,IAE9B,MAAM,OAAO,MAAM,MAAM,IAAI,KAAK,YAAY;AAAA,IAE9C,IAAI,CAAC,MAAM;AAAA,MACP,OAAO,KAAK;AAAA,IAChB;AAAA,IACA,OAAO,KAAK,MAAM,IAAI;AAAA;AAAA,OAGpB,IAAG,CAAC,SAAkB,OAAmB;AAAA,IAC3C,MAAM,QAAQ,SAAS,OAAO;AAAA,IAE9B,MAAM,iBAAiB,MAAM,KAAK,IAAI,OAAO;AAAA,IAC7C,MAAM,SAAS,yBAAM,IAAI,CAAC,KAAK,gBAAgB,CAAC,GAAG,kBAAkB,CAAC,GAAG,KAAK,CAAC;AAAA,IAC/E,MAAM,OAAO,KAAK,UAAU,MAAM;AAAA,IAClC,MAAM,MAAM,IAAI,KAAK,cAAc,IAAI;AAAA;AAE/C;AAAA;AAEO,MAAM,UAA4B;AAAA,EACT;AAAA,EAAmC;AAAA,EAA/D,WAAW,CAAiB,WAAmC,eAAkB;AAAA,IAArD;AAAA,IAAmC;AAAA;AAAA,MAEnD,YAAY,GAAG;AAAA,IACvB,OAAO,GAAG,gBAAgB,KAAK;AAAA;AAAA,OAG7B,IAAG,CAAC,SAAkB,KAAa,SAAqB,CAAC,GAAG;AAAA,IAC9D,MAAM,QAAQ,SAAS,OAAO;AAAA,IAE9B,MAAM,iBAAiB,MAAM,KAAK,IAAI,SAAS,GAAG;AAAA,IAClD,MAAM,eAAe,yBAAM,IAAI,CAAC,KAAK,eAAe,kBAAkB,CAAC,GAAG,MAAM,CAAC;AAAA,IAEjF,MAAM,mBAAmB,KAAK,UAAU,YAAY;AAAA,IAEpD,MAAM,MAAM,KAAK,KAAK,cAAc;AAAA,OAC/B,MAAM;AAAA,IACX,CAAC;AAAA;AAAA,OAGC,OAAM,CAAC,SAAkB;AAAA,IAC3B,MAAM,QAAQ,SAAS,OAAO;AAAA,IAE9B,MAAM,UAAU,MAAM,MAAM,QAAQ,KAAK,YAAY;AAAA,IACrD,MAAM,WAAW,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AAAA,MACvD,MAAM,aAAa,QAAQ;AAAA,MAC3B,MAAM,QAAQ,aAAa,KAAK,MAAM,UAAU,IAAI,KAAK;AAAA,MAEzD,OAAO;AAAA,WACA;AAAA,SACF,MAAM;AAAA,MACX;AAAA,OACD,CAAC,CAAyB;AAAA,IAE7B,OAAO;AAAA;AAAA,OAGL,IAAG,CAAC,SAAkB,KAAyB;AAAA,IACjD,MAAM,QAAQ,SAAS,OAAO;AAAA,IAE9B,MAAM,OAAO,MAAM,MAAM,KAAK,KAAK,cAAc,GAAG;AAAA,IAEpD,IAAI,CAAC,MAAM;AAAA,MACP,OAAO,KAAK;AAAA,IAChB;AAAA,IACA,OAAO,KAAK,MAAM,IAAI;AAAA;AAE9B;;AChFO,IAAM,aAAa,IAAI,UAAU,QAAQ;AAAA,EAC5C,QAAQ,QAAQ,IAAI,cAAc;AAAA,EAClC,OAAO,QAAQ,IAAI,aAAa;AACpC,CAAC;;ACJD;AAIO,IAAM,sBAAsB,MAAM,OAAO,YAAqB;AAAA,EACjE,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,QAAQ,IAAI;AAAA,EAElB,QAAQ,QAAQ,kBAAkB,KAAK;AAAA,EACvC,QAAQ,QAAQ,eAAe,GAAG;AAAA,EAClC,QAAQ,QAAQ,eAAe,GAAG;AAAA,EAClC,QAAQ,QAAQ,mBAAmB,SAAS;AAAA;",
|
|
18
|
+
"debugId": "D4630D151C43971B64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/redis/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/redis/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,oBAAY,oBAAoB;IAC5B,GAAG,QAAQ;IACX,GAAG,QAAQ;CACd;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAA;AAEjG,qBAAa,eAAe,CAAC,CAAC;IAMd,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAL3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGxB;gBAE8B,KAAK,EAAE,KAAK;IAErC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAgBpD,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAQlE,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAIxC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAG3C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@declaro/redis",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Redis tools for Declaro",
|
|
5
5
|
"main": "dist/node/index.cjs",
|
|
6
6
|
"module": "dist/node/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"typecheck": "bun tsc --noEmit"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@declaro/core": "^2.
|
|
25
|
+
"@declaro/core": "^2.1.0",
|
|
26
26
|
"@types/ioredis-mock": "^8.2.5",
|
|
27
27
|
"@vitest/coverage-v8": "^0.32.2",
|
|
28
28
|
"ioredis": "^5.5.0",
|
|
@@ -45,12 +45,18 @@
|
|
|
45
45
|
"url": "https://github.com/emmertio/declaro/issues"
|
|
46
46
|
},
|
|
47
47
|
"homepage": "https://github.com/emmertio/declaro/tree/main#readme",
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "d474a72810905706fdf1011441af4deb6c6f2620",
|
|
49
|
+
"files": [
|
|
50
|
+
"dist",
|
|
51
|
+
"src",
|
|
52
|
+
"readme.md"
|
|
53
|
+
],
|
|
49
54
|
"exports": {
|
|
50
55
|
"bun": "./src/index.ts",
|
|
51
56
|
"types": "./dist/ts/index.d.ts",
|
|
52
57
|
"import": "./dist/node/index.js",
|
|
53
58
|
"require": "./dist/node/index.cjs",
|
|
54
|
-
"browser": "./dist/browser/index.js"
|
|
59
|
+
"browser": "./dist/browser/index.js",
|
|
60
|
+
"default": "./dist/node/index.js"
|
|
55
61
|
}
|
|
56
62
|
}
|
package/src/redis/repository.ts
CHANGED
package/scripts/build.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { build } from 'bun'
|
|
2
|
-
import { resolve } from 'path'
|
|
3
|
-
import packageJson from '../package.json'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Get all packages that should be external from dependencies, peerDependencies, and optionalDependencies
|
|
7
|
-
* Packages in devDependencies will be bundled
|
|
8
|
-
*/
|
|
9
|
-
const getExternalPackages = (): string[] => {
|
|
10
|
-
const pkg = packageJson as any
|
|
11
|
-
const dependencyKeys: string[] = []
|
|
12
|
-
|
|
13
|
-
// Add dependencies if they exist
|
|
14
|
-
if (pkg.dependencies && typeof pkg.dependencies === 'object') {
|
|
15
|
-
dependencyKeys.push(...Object.keys(pkg.dependencies))
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Add peerDependencies if they exist
|
|
19
|
-
if (pkg.peerDependencies && typeof pkg.peerDependencies === 'object') {
|
|
20
|
-
dependencyKeys.push(...Object.keys(pkg.peerDependencies))
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Add optionalDependencies if they exist
|
|
24
|
-
if (pkg.optionalDependencies && typeof pkg.optionalDependencies === 'object') {
|
|
25
|
-
dependencyKeys.push(...Object.keys(pkg.optionalDependencies))
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Remove duplicates and return
|
|
29
|
-
return [...new Set(dependencyKeys)]
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const externalPackages = getExternalPackages()
|
|
33
|
-
|
|
34
|
-
const defaults = {
|
|
35
|
-
entrypoints: [resolve(__dirname, '../src/index.ts')],
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
await Promise.all([
|
|
39
|
-
// CommonJS build for Node.js - externalize all dependencies and peerDependencies
|
|
40
|
-
build({
|
|
41
|
-
...defaults,
|
|
42
|
-
target: 'node',
|
|
43
|
-
format: 'cjs',
|
|
44
|
-
outdir: 'dist/node',
|
|
45
|
-
sourcemap: 'linked',
|
|
46
|
-
naming: '[dir]/[name].cjs',
|
|
47
|
-
external: externalPackages,
|
|
48
|
-
}),
|
|
49
|
-
// ES modules build for Node.js - same externals as CommonJS
|
|
50
|
-
build({
|
|
51
|
-
...defaults,
|
|
52
|
-
target: 'node',
|
|
53
|
-
format: 'esm',
|
|
54
|
-
outdir: 'dist/node',
|
|
55
|
-
sourcemap: 'linked',
|
|
56
|
-
naming: '[dir]/[name].js',
|
|
57
|
-
external: externalPackages,
|
|
58
|
-
}),
|
|
59
|
-
// Browser build - same external behavior for consistency
|
|
60
|
-
build({
|
|
61
|
-
...defaults,
|
|
62
|
-
target: 'browser',
|
|
63
|
-
outdir: 'dist/browser',
|
|
64
|
-
sourcemap: 'linked',
|
|
65
|
-
minify: true,
|
|
66
|
-
external: externalPackages,
|
|
67
|
-
}),
|
|
68
|
-
])
|
package/tsconfig.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": ["../../tsconfig.json"],
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"esModuleInterop": true,
|
|
5
|
-
"allowSyntheticDefaultImports": true,
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"sourceMap": true
|
|
9
|
-
},
|
|
10
|
-
"include": ["src/*.ts", "src/**/*.ts", "src/**/*.d.ts"],
|
|
11
|
-
"buildOptions": {
|
|
12
|
-
"outDir": "dist"
|
|
13
|
-
}
|
|
14
|
-
}
|
package/vite.config.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { resolve } from 'path'
|
|
2
|
-
import { defineConfig } from 'vitest/config'
|
|
3
|
-
import dts from 'vite-plugin-dts'
|
|
4
|
-
|
|
5
|
-
const extensions = {
|
|
6
|
-
es: 'mjs',
|
|
7
|
-
cjs: 'cjs',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export default defineConfig({
|
|
11
|
-
build: {
|
|
12
|
-
lib: {
|
|
13
|
-
entry: resolve(__dirname, 'src/index.ts'),
|
|
14
|
-
name: 'DeclaroRedis',
|
|
15
|
-
formats: ['es', 'cjs'],
|
|
16
|
-
fileName: (format) => `pkg.${extensions[format]}`,
|
|
17
|
-
},
|
|
18
|
-
write: true,
|
|
19
|
-
rollupOptions: {
|
|
20
|
-
external: ['ioredis', 'ioredis-mock'],
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
plugins: [
|
|
24
|
-
dts({
|
|
25
|
-
entryRoot: resolve(__dirname, 'src'),
|
|
26
|
-
}) as any,
|
|
27
|
-
],
|
|
28
|
-
optimizeDeps: {
|
|
29
|
-
include: ['src/**/*'],
|
|
30
|
-
},
|
|
31
|
-
})
|