@truecodeio/sdk-core 0.2.13 → 0.2.15

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.
@@ -490,7 +490,7 @@ declare const appRouter: import('@trpc/server').TRPCBuiltRouter<{
490
490
  getEligibleCampaign: import('@trpc/server').TRPCQueryProcedure<{
491
491
  input: {
492
492
  pathname: string;
493
- properties?: Record<string, string | number | boolean> | undefined;
493
+ properties?: Record<string, string | number | boolean | Record<string, boolean>> | undefined;
494
494
  };
495
495
  output: {
496
496
  id: string;
package/dist/client.d.ts CHANGED
@@ -493,7 +493,7 @@ export declare const createClient: ({ apiKey }: ClientConfig) => import('@trpc/c
493
493
  getEligibleCampaign: import('@trpc/server').TRPCQueryProcedure<{
494
494
  input: {
495
495
  pathname: string;
496
- properties?: Record<string, string | number | boolean> | undefined;
496
+ properties?: Record<string, string | number | boolean | Record<string, boolean>> | undefined;
497
497
  };
498
498
  output: {
499
499
  id: string;
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { SetStateAction } from '@truecodeio/common/common/store/create-store.ts'
2
2
  type ClientOptions = {
3
3
  apiKey: string;
4
4
  };
5
- type Properties = Record<string, boolean | string | number>;
5
+ type Properties = Record<string, boolean | string | number | Record<string, boolean>>;
6
6
  type PropertiesStoreValue = Properties;
7
7
  type Pathname = string;
8
8
  type PathnameStoreValue = Pathname;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../common/src/common/emitter/create-emitter.ts","../../common/src/common/store/create-store.ts","../src/client.ts","../../domain-shared/src/schemas/tree-nodes/index.ts","../src/index.ts"],"sourcesContent":["export type SubscriberT<ActionT> = (action: ActionT) => void;\n\nexport type SubscribeT<ActionT> = (\n subscriber: SubscriberT<ActionT>,\n) => () => void;\n\nexport type DispatchT<ActionT> = (action: ActionT) => void;\n\nexport type EmitterT<ActionT> = {\n dispatch: DispatchT<ActionT>;\n subscribe: SubscribeT<ActionT>;\n};\n\nexport const createEmitter = <ActionT>(): EmitterT<ActionT> => {\n const subscribers = new Set<SubscriberT<ActionT>>();\n\n const dispatch: DispatchT<ActionT> = (action) => {\n for (const subscriber of subscribers) {\n subscriber(action);\n }\n };\n\n const subscribe: SubscribeT<ActionT> = (subscriber) => {\n subscribers.add(subscriber);\n\n return () => {\n subscribers.delete(subscriber);\n };\n };\n\n return {\n dispatch,\n subscribe,\n };\n};\n","import { createEmitter } from \"../emitter/create-emitter.ts\";\n\nexport type SetStateAction<S> = S | ((previousState: S) => S);\n\ntype Dispatch<A> = (value: A) => void;\n\nexport type StoreT<ValueT> = {\n get: () => ValueT;\n subscribe: (subscriber: (value: ValueT) => void) => () => void;\n set: Dispatch<SetStateAction<ValueT>>;\n};\n\nconst setStateReducer = <StateT>(\n state: StateT,\n action: SetStateAction<StateT>,\n): StateT => {\n if (typeof action === \"function\") {\n const function_ = action as (state: StateT) => StateT;\n\n return function_(state);\n }\n\n return action;\n};\n\nexport const createStore = <ValueT>(initialValue: ValueT): StoreT<ValueT> => {\n const { subscribe, dispatch } = createEmitter<ValueT>();\n\n let value = initialValue;\n\n const get = (): ValueT => {\n return value;\n };\n\n const set = (action: SetStateAction<ValueT>): void => {\n const nextValue = setStateReducer<ValueT>(value, action);\n\n if (nextValue === value) {\n return;\n }\n\n value = nextValue;\n\n dispatch(value);\n };\n\n return {\n get,\n set,\n subscribe,\n };\n};\n","import { createTRPCClient, httpBatchLink } from \"@trpc/client\";\nimport superjson from \"superjson\";\nimport type { AppRouter } from \"./app-router-types\";\n\ntype ClientConfig = {\n apiKey: string;\n};\n\nexport const createClient = ({ apiKey }: ClientConfig) => {\n return createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n transformer: superjson,\n url: __SERVER_URL__,\n headers: () => {\n return {\n Authorization: `ApiKey ${apiKey}`,\n };\n },\n }),\n ],\n });\n};\n","import { z } from \"zod\";\n\nexport const spacerNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"spacer\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n size: z.number(),\n })\n .readonly(),\n })\n .readonly();\n\nexport const textNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"text\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n content: z.string(),\n })\n .readonly(),\n })\n .readonly();\n\nexport const imageNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"image\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"placeholder\"),\n }),\n z.object({\n type: z.literal(\"image\"),\n url: z.string(),\n fileName: z.string(),\n altText: z.string(),\n width: z.number(),\n height: z.number(),\n preserveAspectRatio: z.boolean(),\n }),\n ])\n .readonly(),\n })\n .readonly();\n\nexport const customComponentSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"custom-component\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n componentId: z.string(),\n })\n .readonly();\n\nexport const buttonNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"button\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n title: z.string(),\n background: z\n .object({\n color: z\n .object({\n default: z.string(),\n hover: z.string(),\n })\n .readonly(),\n })\n .readonly(),\n text: z\n .object({\n color: z\n .object({\n default: z.string(),\n hover: z.string(),\n })\n .readonly(),\n })\n .readonly(),\n padding: z\n .object({\n top: z.number(),\n right: z.number(),\n bottom: z.number(),\n left: z.number(),\n })\n .readonly(),\n borderRadius: z.number(),\n fontSize: z.number().min(8).max(72).default(16),\n fontWeight: z.number().min(100).max(900).multipleOf(100).default(400),\n })\n .readonly(),\n })\n .readonly();\n\nexport const flexChildSizeSchema = z.enum([\"default\", \"equal\", \"none\"]);\n\nexport const verticalAlignmentSchema = z.enum([\"start\", \"center\", \"end\"]);\n\nexport const columnNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"column\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n flexChildSize: flexChildSizeSchema,\n alignment: z\n .object({\n vertical: verticalAlignmentSchema,\n })\n .readonly(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return z.union([\n buttonNodeSchema,\n textNodeSchema,\n spacerNodeSchema,\n imageNodeSchema,\n customComponentSchema,\n ]);\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport const horizontalAlignmentSchema = z.enum([\n \"default\",\n \"start\",\n \"center\",\n \"end\",\n]);\n\nexport const rowNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"row\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n padding: z\n .object({\n top: z.number(),\n right: z.number(),\n bottom: z.number(),\n left: z.number(),\n })\n .readonly(),\n gap: z.number(),\n background: z\n .object({\n color: z.string(),\n })\n .readonly(),\n alignment: z\n .object({\n horizontal: horizontalAlignmentSchema,\n })\n .readonly(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return columnNodeSchema;\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport const rootNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"root\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n color: z.string(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return rowNodeSchema;\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport type ButtonNodeT = z.infer<typeof buttonNodeSchema>;\n\nexport type RootNodeT = z.infer<typeof rootNodeSchema>;\n\nexport type RowNodeT = z.infer<typeof rowNodeSchema>;\n\nexport type ColumnNodeT = z.infer<typeof columnNodeSchema>;\n\nexport type TextNodeT = z.infer<typeof textNodeSchema>;\n\nexport type SpacerNodeT = z.infer<typeof spacerNodeSchema>;\n\nexport type ImageNodeT = z.infer<typeof imageNodeSchema>;\n\nexport type CustomComponentNodeT = z.infer<typeof customComponentSchema>;\n\nexport type NodeT =\n | RootNodeT\n | RowNodeT\n | ColumnNodeT\n | ButtonNodeT\n | TextNodeT\n | SpacerNodeT\n | ImageNodeT\n | CustomComponentNodeT;\n\ntype ChildrenNonContainableNodeT =\n | ButtonNodeT\n | TextNodeT\n | SpacerNodeT\n | ImageNodeT\n | CustomComponentNodeT;\n\nexport type ChildrenContainableNodeT = Exclude<\n NodeT,\n ChildrenNonContainableNodeT\n>;\n\nexport type ChildrenNodeT = Exclude<NodeT, RootNodeT>;\n\nexport type NodeByTypeT = {\n [N in NodeT as N[\"type\"]]: N;\n};\n","import {\n createStore,\n type SetStateAction,\n} from \"@truecodeio/common/common/store/create-store.ts\";\nimport { createClient } from \"./client.ts\";\nimport { rootNodeSchema } from \"@truecodeio/domain-shared/schemas/tree-nodes/index.ts\";\n\ntype ClientOptions = {\n apiKey: string;\n};\n\ntype Properties = Record<string, boolean | string | number>;\n\ntype PropertiesStoreValue = Properties;\n\ntype Pathname = string;\n\ntype PathnameStoreValue = Pathname;\n\nexport const createBokoClient = (options: ClientOptions) => {\n const client = createClient({\n apiKey: options.apiKey,\n });\n\n const propertiesStoreInitialValue = {};\n\n const propertiesStore = createStore<PropertiesStoreValue>(\n propertiesStoreInitialValue,\n );\n\n const pathnameStoreInitialValue = \"\";\n\n const pathnameStore = createStore<PathnameStoreValue>(\n pathnameStoreInitialValue,\n );\n\n return {\n propertiesStore,\n pathnameStore,\n setProperties: (action: SetStateAction<PropertiesStoreValue>) => {\n propertiesStore.set(action);\n },\n resetProperties: () => {\n propertiesStore.set(propertiesStoreInitialValue);\n },\n setPathname: (action: SetStateAction<PathnameStoreValue>) => {\n pathnameStore.set(action);\n },\n resetPathname: () => {\n pathnameStore.set(pathnameStoreInitialValue);\n },\n getEligibleCampaign: async ({\n properties,\n pathname,\n }: {\n properties: Properties;\n pathname: string;\n }) => {\n const eligibleCampaign = await client.getEligibleCampaign.query({\n properties,\n pathname,\n });\n\n return {\n ...eligibleCampaign,\n template: {\n ...eligibleCampaign.template,\n // TODO: Do we need to parse the content here or on procedure level?\n content: rootNodeSchema.parse(eligibleCampaign.template.content),\n },\n };\n },\n };\n};\n\nexport type EligibleCampaign = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof createBokoClient>[\"getEligibleCampaign\"]>\n >\n>;\n"],"names":["createEmitter","subscribers","action","subscriber","setStateReducer","state","createStore","initialValue","subscribe","dispatch","value","nextValue","createClient","apiKey","createTRPCClient","httpBatchLink","superjson","spacerNodeSchema","z","textNodeSchema","imageNodeSchema","customComponentSchema","buttonNodeSchema","flexChildSizeSchema","verticalAlignmentSchema","columnNodeSchema","horizontalAlignmentSchema","rowNodeSchema","rootNodeSchema","createBokoClient","options","client","propertiesStoreInitialValue","propertiesStore","pathnameStoreInitialValue","pathnameStore","properties","pathname","eligibleCampaign"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../common/src/common/emitter/create-emitter.ts","../../common/src/common/store/create-store.ts","../src/client.ts","../../domain-shared/src/schemas/tree-nodes/index.ts","../src/index.ts"],"sourcesContent":["export type SubscriberT<ActionT> = (action: ActionT) => void;\n\nexport type SubscribeT<ActionT> = (\n subscriber: SubscriberT<ActionT>,\n) => () => void;\n\nexport type DispatchT<ActionT> = (action: ActionT) => void;\n\nexport type EmitterT<ActionT> = {\n dispatch: DispatchT<ActionT>;\n subscribe: SubscribeT<ActionT>;\n};\n\nexport const createEmitter = <ActionT>(): EmitterT<ActionT> => {\n const subscribers = new Set<SubscriberT<ActionT>>();\n\n const dispatch: DispatchT<ActionT> = (action) => {\n for (const subscriber of subscribers) {\n subscriber(action);\n }\n };\n\n const subscribe: SubscribeT<ActionT> = (subscriber) => {\n subscribers.add(subscriber);\n\n return () => {\n subscribers.delete(subscriber);\n };\n };\n\n return {\n dispatch,\n subscribe,\n };\n};\n","import { createEmitter } from \"../emitter/create-emitter.ts\";\n\nexport type SetStateAction<S> = S | ((previousState: S) => S);\n\ntype Dispatch<A> = (value: A) => void;\n\nexport type StoreT<ValueT> = {\n get: () => ValueT;\n subscribe: (subscriber: (value: ValueT) => void) => () => void;\n set: Dispatch<SetStateAction<ValueT>>;\n};\n\nconst setStateReducer = <StateT>(\n state: StateT,\n action: SetStateAction<StateT>,\n): StateT => {\n if (typeof action === \"function\") {\n const function_ = action as (state: StateT) => StateT;\n\n return function_(state);\n }\n\n return action;\n};\n\nexport const createStore = <ValueT>(initialValue: ValueT): StoreT<ValueT> => {\n const { subscribe, dispatch } = createEmitter<ValueT>();\n\n let value = initialValue;\n\n const get = (): ValueT => {\n return value;\n };\n\n const set = (action: SetStateAction<ValueT>): void => {\n const nextValue = setStateReducer<ValueT>(value, action);\n\n if (nextValue === value) {\n return;\n }\n\n value = nextValue;\n\n dispatch(value);\n };\n\n return {\n get,\n set,\n subscribe,\n };\n};\n","import { createTRPCClient, httpBatchLink } from \"@trpc/client\";\nimport superjson from \"superjson\";\nimport type { AppRouter } from \"./app-router-types\";\n\ntype ClientConfig = {\n apiKey: string;\n};\n\nexport const createClient = ({ apiKey }: ClientConfig) => {\n return createTRPCClient<AppRouter>({\n links: [\n httpBatchLink({\n transformer: superjson,\n url: __SERVER_URL__,\n headers: () => {\n return {\n Authorization: `ApiKey ${apiKey}`,\n };\n },\n }),\n ],\n });\n};\n","import { z } from \"zod\";\n\nexport const spacerNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"spacer\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n size: z.number(),\n })\n .readonly(),\n })\n .readonly();\n\nexport const textNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"text\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n content: z.string(),\n })\n .readonly(),\n })\n .readonly();\n\nexport const imageNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"image\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"placeholder\"),\n }),\n z.object({\n type: z.literal(\"image\"),\n url: z.string(),\n fileName: z.string(),\n altText: z.string(),\n width: z.number(),\n height: z.number(),\n preserveAspectRatio: z.boolean(),\n }),\n ])\n .readonly(),\n })\n .readonly();\n\nexport const customComponentSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"custom-component\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n componentId: z.string(),\n })\n .readonly();\n\nexport const buttonNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"button\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n title: z.string(),\n background: z\n .object({\n color: z\n .object({\n default: z.string(),\n hover: z.string(),\n })\n .readonly(),\n })\n .readonly(),\n text: z\n .object({\n color: z\n .object({\n default: z.string(),\n hover: z.string(),\n })\n .readonly(),\n })\n .readonly(),\n padding: z\n .object({\n top: z.number(),\n right: z.number(),\n bottom: z.number(),\n left: z.number(),\n })\n .readonly(),\n borderRadius: z.number(),\n fontSize: z.number().min(8).max(72).default(16),\n fontWeight: z.number().min(100).max(900).multipleOf(100).default(400),\n })\n .readonly(),\n })\n .readonly();\n\nexport const flexChildSizeSchema = z.enum([\"default\", \"equal\", \"none\"]);\n\nexport const verticalAlignmentSchema = z.enum([\"start\", \"center\", \"end\"]);\n\nexport const columnNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"column\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n flexChildSize: flexChildSizeSchema,\n alignment: z\n .object({\n vertical: verticalAlignmentSchema,\n })\n .readonly(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return z.union([\n buttonNodeSchema,\n textNodeSchema,\n spacerNodeSchema,\n imageNodeSchema,\n customComponentSchema,\n ]);\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport const horizontalAlignmentSchema = z.enum([\n \"default\",\n \"start\",\n \"center\",\n \"end\",\n]);\n\nexport const rowNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"row\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n padding: z\n .object({\n top: z.number(),\n right: z.number(),\n bottom: z.number(),\n left: z.number(),\n })\n .readonly(),\n gap: z.number(),\n background: z\n .object({\n color: z.string(),\n })\n .readonly(),\n alignment: z\n .object({\n horizontal: horizontalAlignmentSchema,\n })\n .readonly(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return columnNodeSchema;\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport const rootNodeSchema = z\n .object({\n id: z.string(),\n type: z.literal(\"root\"),\n name: z.string(),\n isCollapsed: z.boolean(),\n props: z\n .object({\n color: z.string(),\n })\n .readonly(),\n children: z\n .array(\n z.lazy(() => {\n return rowNodeSchema;\n }),\n )\n .readonly(),\n })\n .readonly();\n\nexport type ButtonNodeT = z.infer<typeof buttonNodeSchema>;\n\nexport type RootNodeT = z.infer<typeof rootNodeSchema>;\n\nexport type RowNodeT = z.infer<typeof rowNodeSchema>;\n\nexport type ColumnNodeT = z.infer<typeof columnNodeSchema>;\n\nexport type TextNodeT = z.infer<typeof textNodeSchema>;\n\nexport type SpacerNodeT = z.infer<typeof spacerNodeSchema>;\n\nexport type ImageNodeT = z.infer<typeof imageNodeSchema>;\n\nexport type CustomComponentNodeT = z.infer<typeof customComponentSchema>;\n\nexport type NodeT =\n | RootNodeT\n | RowNodeT\n | ColumnNodeT\n | ButtonNodeT\n | TextNodeT\n | SpacerNodeT\n | ImageNodeT\n | CustomComponentNodeT;\n\ntype ChildrenNonContainableNodeT =\n | ButtonNodeT\n | TextNodeT\n | SpacerNodeT\n | ImageNodeT\n | CustomComponentNodeT;\n\nexport type ChildrenContainableNodeT = Exclude<\n NodeT,\n ChildrenNonContainableNodeT\n>;\n\nexport type ChildrenNodeT = Exclude<NodeT, RootNodeT>;\n\nexport type NodeByTypeT = {\n [N in NodeT as N[\"type\"]]: N;\n};\n","import {\n createStore,\n type SetStateAction,\n} from \"@truecodeio/common/common/store/create-store.ts\";\nimport { createClient } from \"./client.ts\";\nimport { rootNodeSchema } from \"@truecodeio/domain-shared/schemas/tree-nodes/index.ts\";\n\ntype ClientOptions = {\n apiKey: string;\n};\n\ntype Properties = Record<\n string,\n boolean | string | number | Record<string, boolean>\n>;\n\ntype PropertiesStoreValue = Properties;\n\ntype Pathname = string;\n\ntype PathnameStoreValue = Pathname;\n\nexport const createBokoClient = (options: ClientOptions) => {\n const client = createClient({\n apiKey: options.apiKey,\n });\n\n const propertiesStoreInitialValue = {};\n\n const propertiesStore = createStore<PropertiesStoreValue>(\n propertiesStoreInitialValue,\n );\n\n const pathnameStoreInitialValue = \"\";\n\n const pathnameStore = createStore<PathnameStoreValue>(\n pathnameStoreInitialValue,\n );\n\n return {\n propertiesStore,\n pathnameStore,\n setProperties: (action: SetStateAction<PropertiesStoreValue>) => {\n propertiesStore.set(action);\n },\n resetProperties: () => {\n propertiesStore.set(propertiesStoreInitialValue);\n },\n setPathname: (action: SetStateAction<PathnameStoreValue>) => {\n pathnameStore.set(action);\n },\n resetPathname: () => {\n pathnameStore.set(pathnameStoreInitialValue);\n },\n getEligibleCampaign: async ({\n properties,\n pathname,\n }: {\n properties: Properties;\n pathname: string;\n }) => {\n const eligibleCampaign = await client.getEligibleCampaign.query({\n properties,\n pathname,\n });\n\n return {\n ...eligibleCampaign,\n template: {\n ...eligibleCampaign.template,\n // TODO: Do we need to parse the content here or on procedure level?\n content: rootNodeSchema.parse(eligibleCampaign.template.content),\n },\n };\n },\n };\n};\n\nexport type EligibleCampaign = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof createBokoClient>[\"getEligibleCampaign\"]>\n >\n>;\n"],"names":["createEmitter","subscribers","action","subscriber","setStateReducer","state","createStore","initialValue","subscribe","dispatch","value","nextValue","createClient","apiKey","createTRPCClient","httpBatchLink","superjson","spacerNodeSchema","z","textNodeSchema","imageNodeSchema","customComponentSchema","buttonNodeSchema","flexChildSizeSchema","verticalAlignmentSchema","columnNodeSchema","horizontalAlignmentSchema","rowNodeSchema","rootNodeSchema","createBokoClient","options","client","propertiesStoreInitialValue","propertiesStore","pathnameStoreInitialValue","pathnameStore","properties","pathname","eligibleCampaign"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truecodeio/sdk-core",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -19,14 +19,14 @@
19
19
  "superjson": "^2.2.5",
20
20
  "zod": "^4.1.12",
21
21
  "@truecodeio/common": "0.1.5",
22
- "@truecodeio/domain-shared": "0.1.8"
22
+ "@truecodeio/domain-shared": "0.1.9"
23
23
  },
24
24
  "devDependencies": {
25
25
  "typescript-eslint": "^8.46.4",
26
26
  "vite": "^7.2.2",
27
27
  "vite-plugin-dts": "^4.5.4",
28
- "@boko/eslint-config": "1.0.0",
29
- "@boko/tsconfig": "^1.0.0"
28
+ "@boko/tsconfig": "^1.0.0",
29
+ "@boko/eslint-config": "1.0.0"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "vite build",