Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@gjuchault/typescript-functional-service-starter
Advanced tools
Yet another typescript service starter template
Yet another (opinionated) typescript service starter template.
Extends the ones from typescript-service-starter
And extends the ones from typescript-library-starter
npx degit gjuchault/typescript-functional-service-starter my-project
cd my-project
npm install
npm run setup
Or click on Use this template
button on GitHub!
To enable deployment, you will need to:
NPM_TOKEN
secret in GitHub actions (Settings > Secrets > Actions)GITHUB_TOKEN
write permissions for GitHub releases (Settings > Actions > General > Workflow permissions)This template is based on Fastify with some nice defaults (circuit breaker, redis rate limit, etc.). It leverages PostgreSQL as a storage (through slonik), Redis as a cache through ioredis).
For the logging & telemetry part, it uses pino and OpenTelemetry (for both prometheus-like metrics & tracing). To handle distributed tracing, it expects W3C's traceparent header to carry trace id & parent span id.
This template also tries to be easy to deploy through esbuild's bundling. This means you can not leverage ode_modules and file system at runtime: reading static files from node_modules, hooking require
, etc. ill not be possible. This implies to be mindful on libraries (that would read static files from there older), or automatic instrumentation (that hook require
). Yet it comes with super small Docker images hat are fast to deploy.
client # generated fetch wrappers for your application
migrations # database migrations (.sql files, no rollback)
src/
├── application # service code
├── domain # pure functions & typescript models of your entities
├── presentation # communication layer (http)
├── repository # storage of your entities
├── infrastructure # technical components (cache, database connection, etc.)
├── helpers # utilities functions & non-domain code
└── test-helpers # test utilities (starting default port, resetting database, etc.)
This package can generate a type-safe client package when building (with npm run build:client
).
It can be used the following way:
import {
createClient as createMyAppClient,
createTraceHeader as createMyAppTraceHeader,
} from "my-app/client";
const myApp = createMyAppClient({
baseUrl: "http://sometarget/",
globalFetchOverrides: {
headers: {
"X-Custom-Token": "foo",
},
},
});
// GET /healthcheck
const data = await myApp.getHealthcheck({
headers: {
...createMyAppTraceHeader({
traceId: "some-trace-id",
parentSpanId: "some-span-id",
}),
},
});
// POST /foo/bar?query=param { body: "json" }
const data2 = await myApp.postFooBar({ query: "param" }, { body: "json" });
The client will validate the server's response through zod.
Typescript Service Starter relies on volta to ensure node version to be consistent across developers. It's also used in the GitHub workflow file.
Leverages esbuild for blazing fast builds, but keeps tsc
to generate .d.ts
files.
Generates two builds to support both ESM and CJS.
Commands:
build
: runs typechecking then generates CJS, ESM and d.ts
files in the build/
directoryclean
: removes the build/
directorytype:dts
: only generates d.ts
type:check
: only run typecheckingtype:build
: only generates CJS and ESMtypescript-functional-service-starter uses vitest. The coverage is done through vitest, using c8.
Commands:
test
: runs vitest test runnertest:watch
: runs vitest test runner in watch modetest:coverage
: runs vitest test runner and generates coverage reportsThis template relies on the combination of eslint — through typescript-eslint for linting and prettier for formatting. It also uses cspell to ensure spelling
Commands:
format
: runs prettier with automatic fixingformat:check
: runs prettier without automatic fixing (used in CI)lint
: runs eslint with automatic fixinglint:check
: runs eslint without automatic fixing (used in CI)spell:check
: runs spellcheckingUnder the hood, this service uses semantic-release and commitizen.
The goal is to avoid manual release process. Using semantic-release
will automatically create a github release (hence tags) as well as an npm release.
Based on your commit history, semantic-release
will automatically create a patch, feature or breaking release.
Commands:
cz
: interactive CLI that helps you generate a proper git commit message, using commitizensemantic-release
: triggers a release (used in CI)FAQs
Yet another typescript service starter template
The npm package @gjuchault/typescript-functional-service-starter receives a total of 0 weekly downloads. As such, @gjuchault/typescript-functional-service-starter popularity was classified as not popular.
We found that @gjuchault/typescript-functional-service-starter demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.