DEV Community

Cover image for TypeScript SDK Development: A 5-year-old could follow this step-by-step ~ Part 3, Making Test Apps
Syed Muhammad Yaseen
Syed Muhammad Yaseen

Posted on β€’ Edited on

TypeScript SDK Development: A 5-year-old could follow this step-by-step ~ Part 3, Making Test Apps

Helloooooooo!

Hope you're doing great! This is SMY! πŸ‘‹ Let's Jump right in πŸš€

Part 1: https://dev.to/smy/typescript-sdk-development-a-5-year-old-could-follow-this-step-by-step-part-1-our-first-mvp-1cif

Part 2: https://dev.to/smy/typescript-sdk-development-a-5-year-old-could-follow-this-step-by-step-part-2-folder-structure-integrating-api-3p2e

Part 4: https://dev.to/smy/typescript-sdk-development-a-5-year-old-could-follow-this-step-by-step-part-4-publishing-to-npm-48o6

Part 5: https://dev.to/smy/typescript-sdk-development-a-5-year-old-could-follow-this-step-by-step-part-5-cdn-for-browsers-237a

This is Part 3 of our SDK development series where we will dive into creating test apps for react, browser, node, and legacy node.

Contents:

  • ⚑ Setting up tsup for different execution environments

  • ⚑ Creating our apps

Step 1: Setting up tsup for different environments

At the root of the project create tsup.config.ts file, and paste the following content:

import { defineConfig } from "tsup";

export default defineConfig({
  clean: true,
  dts: true,
  entry: ["src/index.ts"],
  format: ["cjs", "esm", "iife"],
  minify: true,
});
Enter fullscreen mode Exit fullscreen mode

clean - Clean the output directory before each build

dts - type definitions for TypeScript

entry - specifying the entry point

format - cjs for legacy, esm for newer node projects and iife for browsers

minify - minifies our code and reduces bundle size

No extra configuration is needed, as tsup will automatically look for this file and handle everything for us :)

Now exit and re-rerun build command

npm run build
Enter fullscreen mode Exit fullscreen mode

You will see the following output in our dist folder

Image description

index.cjs - for CJS output

index.js - for ESM

index.global.js - for browsers

Step 2: Create a Node App

In example-apps/Node create a index.js file and paste the following content:

import sdk from "../../dist/index.js";

console.log(await sdk.fetchUsers());
Enter fullscreen mode Exit fullscreen mode

Now run the file with a node in a separate terminal and head over to the folder:

node index.js
Enter fullscreen mode Exit fullscreen mode

You will see the output in the terminal.

Step 3: Create a Legacy Node App

In example-apps/Legacy-Node create a index.cjs file and paste the following content:

const sdk = require("../../dist/index.cjs");

sdk.default.fetchUsers().then((users) => console.log(users));
Enter fullscreen mode Exit fullscreen mode

Now run the file with a node in a separate terminal and head over to the folder:

node index.cjs
Enter fullscreen mode Exit fullscreen mode

You will see the output in the terminal.

Step 4: Create a Browser App

In example-apps/Browser create a index.html file and paste the following content:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="../../dist/index.global.js"></script>
  </head>
  <body>
    This is a Test HTML

    <script>
      sdk.fetchUsers().then((users) => console.log(users));
    </script>
  </body>
</html>
Enter fullscreen mode Exit fullscreen mode

Open the file in the browser, you should see the following response in the inspect element's console tab:

Image description

Step 5: Create a React App

Create a Link to our SDK, to behave as a library for projects without publishing.

npm link
Enter fullscreen mode Exit fullscreen mode

In example-apps create a react app, for example with vite:

npm create vite@latest
Enter fullscreen mode Exit fullscreen mode

and following steps. After successfully creating a react app, run the following command in the React root folder to link our SDK.

npm link ts-lib
Enter fullscreen mode Exit fullscreen mode

In place of ts-lib, it should be your SDK / Library name in the package.json

After creating the React app, open a component file like App.jsx and integrate SDK like the following:

import sdk from "ts-lib";

console.log(await sdk.fetchUsers());
Enter fullscreen mode Exit fullscreen mode

Full view:

import { useState } from "react";
import reactLogo from "./assets/react.svg";
import viteLogo from "/vite.svg";
import "./App.css";
import sdk from "ts-lib";

console.log(await sdk.fetchUsers());

function App() {
  const [count, setCount] = useState(0);

  return (
    <>
      <div>
        <a href="https://vitejs.dev" target="_blank">
          <img src={viteLogo} className="logo" alt="Vite logo" />
        </a>
        <a href="https://react.dev" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>
      <h1>Vite + React</h1>
      <div className="card">
        <button onClick={() => setCount((count) => count + 1)}>
          count is {count}
        </button>
        <p>
          Edit <code>src/App.tsx</code> and save to test HMR
        </p>
      </div>
      <p className="read-the-docs">
        Click on the Vite and React logos to learn more
      </p>
    </>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

Run the react App, and head over to the console, it should look like the following:

Wrapping Up:

We Just completed the steps to build and run our SDK in different environments.

Head over to Part 4 to publish our SDK.

.....

Now you're equipped with knowledge to build your own SDK. Happy coding! πŸš€

That's it, folks! hope it was a good read for you. Thank you! ✨

πŸ‘‰ Follow me

GitHub

LinkedIn

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

Top comments (0)

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay