@targetd/client
TypeScript icon, indicating that this package has built-in type declarations

5.0.0 • Public • Published

@targetd/client

A HTTP typed client to query a @targetd/server

Example

// ./device.ts
import { createTargetingDescriptor } from '@targetd/api'
import { z } from 'zod'

export const Device = z.literal('desktop').or(z.literal('mobile'))

export const deviceTargeting = createTargetingDescriptor({
  predicate: (q) => (t) => typeof q === 'string' && t.includes(q),
  queryParser: Device,
  targetingParser: z.array(Device),
})
// ./data.ts
import { Data } from '@targetd/api'
import z from 'zod'
import { deviceTargeting } from './device'

export const data = Data.create({
  data: {
    bar: z.number(),
    foo: z.string(),
  },
  targeting: {
    device: deviceTargeting,
  },
})
// ./server.ts
import { createServer } from '@targetd/server'
import { data } from './data'

createServer(
  data
    .addRules('bar', [
      {
        payload: 123,
      },
    ])
    .addRules('foo', [
      {
        targeting: {
          device: ['mobile'],
        },
        payload: '‍📱',
      },
      {
        targeting: {
          device: ['desktop'],
        },
        payload: '🖥',
      },
    ]),
).listen(3_000)
// ./client.ts
import { Client } from '@targetd/client'
import z from 'zod'
import { data } from './data'

const client = new Client('http://localhost:3000', data)

expect(await clientData.getPayloadForEachName({ device: 'mobile' })).toEqual({
  bar: 123,
  foo: '‍📱',
})

expect(await clientData.getPayloadForEachName({ device: 'desktop' })).toEqual({
  bar: 123,
  foo: '🖥',
})

Readme

Keywords

none

Package Sidebar

Install

npm i @targetd/client

Weekly Downloads

2

Version

5.0.0

License

MIT

Unpacked Size

16.9 kB

Total Files

12

Last publish

Collaborators

  • johngeorgewright