@tailor-platform/sdk 2.0.1 → 2.2.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/CHANGELOG.md +117 -0
- package/{dist/cli/index.mjs → bin/tailor.mjs} +1 -1
- package/dist/{application-CM6hKnSK.mjs → application-BpLeawBg.mjs} +126 -28
- package/dist/application-BpLeawBg.mjs.map +1 -0
- package/dist/application-BxLLiLsr.mjs +3 -0
- package/dist/cli/commands/deploy/tailordb/index.d.mts +2 -1
- package/dist/cli/commands/deploy/types.d.mts +2 -1
- package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +11 -4
- package/dist/cli/commands/tailordb/migrate/file-state.d.mts +1 -0
- package/dist/cli/commands/tailordb/migrate/schema-checks.d.mts +2 -2
- package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +8 -1
- package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +5 -3
- package/dist/cli/lib.d.mts +4 -4
- package/dist/cli/lib.mjs +3 -482
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/cli/main.mjs +997 -202
- package/dist/cli/main.mjs.map +1 -1
- package/dist/completion/zsh-worker.zsh +145 -2
- package/dist/configure/config/types.d.mts +12 -1
- package/dist/configure/index.d.mts +3 -3
- package/dist/configure/services/index.d.mts +3 -2
- package/dist/configure/services/resolver/index.d.mts +1 -1
- package/dist/configure/services/resolver/resolver.d.mts +1 -1
- package/dist/configure/services/tailordb/index.d.mts +2 -1
- package/dist/configure/services/tailordb/schema.d.mts +46 -46
- package/dist/configure/services/tailordb/types.d.mts +30 -4
- package/dist/{crashreport-B5LqCTfF.mjs → crashreport-CIIfLnoO.mjs} +2 -2
- package/dist/{crashreport-B5LqCTfF.mjs.map → crashreport-CIIfLnoO.mjs.map} +1 -1
- package/dist/{crashreport-eI7ty7ok.mjs → crashreport-CINZ5dVN.mjs} +1 -1
- package/dist/errors-CWj21238.mjs +75 -0
- package/dist/errors-CWj21238.mjs.map +1 -0
- package/dist/{globals-TfAVItuK.mjs → globals-B2nlxBrz.mjs} +2 -10
- package/dist/globals-B2nlxBrz.mjs.map +1 -0
- package/dist/kysely/index.d.mts +52 -5
- package/dist/kysely/index.mjs +7 -2
- package/dist/kysely/index.mjs.map +1 -1
- package/dist/{logger-CXQq9YIp.mjs → logger-DSdExfor.mjs} +83 -42
- package/dist/logger-DSdExfor.mjs.map +1 -0
- package/dist/plugin/builtin/seed/index.mjs +1 -1
- package/dist/{register-ts-hook-LYV7zH-e.mjs → register-ts-hook-CTth1eqj.mjs} +1587 -272
- package/dist/register-ts-hook-CTth1eqj.mjs.map +1 -0
- package/dist/runtime/globals.d.mts +0 -7
- package/dist/runtime/workflow.d.mts +2 -7
- package/dist/schema--xYWRGfe.mjs.map +1 -1
- package/dist/seed/index.d.mts +52 -3
- package/dist/seed/index.mjs +200 -44
- package/dist/seed/index.mjs.map +1 -1
- package/dist/{seed-B-yckgQY.mjs → seed-xqM9WIHP.mjs} +8 -8
- package/dist/seed-xqM9WIHP.mjs.map +1 -0
- package/dist/{service-B5WynBHQ.mjs → service-CCwl3Avt.mjs} +3 -3
- package/dist/{service-B5WynBHQ.mjs.map → service-CCwl3Avt.mjs.map} +1 -1
- package/dist/service-_XmjSEGr.mjs +3 -0
- package/dist/{service-k1xy_A5G.mjs → service-goqlJJgA.mjs} +2 -2
- package/dist/{service-k1xy_A5G.mjs.map → service-goqlJJgA.mjs.map} +1 -1
- package/dist/{service_pb-D5--My_M.mjs → service_pb-BEWj1pOV.mjs} +2 -2
- package/dist/{service_pb-D5--My_M.mjs.map → service_pb-BEWj1pOV.mjs.map} +1 -1
- package/dist/{service_pb-i8CmnQP4.mjs → service_pb-BjlhvK9E.mjs} +1 -1
- package/dist/utils/test/index.d.mts +9 -3
- package/dist/utils/test/index.mjs +49 -25
- package/dist/utils/test/index.mjs.map +1 -1
- package/dist/vitest/environment.mjs +1 -1
- package/dist/vitest/index.d.mts +2 -1
- package/dist/vitest/index.mjs +84 -2
- package/dist/vitest/index.mjs.map +1 -1
- package/dist/vitest/mocks/file.d.mts +1 -1
- package/dist/vitest/pglite-kysely.d.mts +43 -0
- package/dist/vitest/setup.mjs +1 -1
- package/dist/workflow-Bamae_Yc.mjs.map +1 -1
- package/dist/{workspace_resource_pb-DXnO2AT-.mjs → workspace_resource_pb-HNIL_Vfj.mjs} +10 -2
- package/dist/{workspace_resource_pb-DXnO2AT-.mjs.map → workspace_resource_pb-HNIL_Vfj.mjs.map} +1 -1
- package/docs/cli/tailordb.md +87 -22
- package/docs/cli-reference.md +13 -11
- package/docs/configuration.md +4 -1
- package/docs/migration/v2.md +1 -1
- package/docs/plugin/custom.md +48 -48
- package/docs/plugin/index.md +24 -24
- package/docs/services/auth.md +10 -10
- package/docs/services/executor.md +1 -1
- package/docs/services/resolver.md +34 -2
- package/docs/services/tailordb-migration.md +375 -76
- package/docs/services/tailordb.md +28 -28
- package/docs/testing.md +3 -1
- package/package.json +13 -8
- package/dist/application-CM6hKnSK.mjs.map +0 -1
- package/dist/application-CXNaUNhv.mjs +0 -3
- package/dist/errors-D7583Zz7.mjs +0 -58
- package/dist/errors-D7583Zz7.mjs.map +0 -1
- package/dist/globals-TfAVItuK.mjs.map +0 -1
- package/dist/logger-CXQq9YIp.mjs.map +0 -1
- package/dist/register-ts-hook-LYV7zH-e.mjs.map +0 -1
- package/dist/seed-B-yckgQY.mjs.map +0 -1
- package/dist/service-M7OYziQP.mjs +0 -3
|
@@ -8,22 +8,22 @@ TailorDB provides:
|
|
|
8
8
|
|
|
9
9
|
- Type-safe schema definitions using TypeScript
|
|
10
10
|
- Automatic GraphQL API generation (CRUD operations)
|
|
11
|
-
- Relations between
|
|
11
|
+
- Relations between tables with automatic index and foreign key constraints
|
|
12
12
|
- Permission system for access control
|
|
13
13
|
- Field-level hooks and validations
|
|
14
14
|
|
|
15
15
|
For the official Tailor Platform documentation, see [TailorDB Guide](https://docs.tailor.tech/guides/tailordb/overview).
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Table Definition
|
|
18
18
|
|
|
19
|
-
Define TailorDB
|
|
19
|
+
Define TailorDB tables in files matching glob patterns specified in `tailor.config.ts`.
|
|
20
20
|
|
|
21
21
|
**Definition Rules:**
|
|
22
22
|
|
|
23
|
-
- **Multiple
|
|
23
|
+
- **Multiple tables per file**: You can define multiple TailorDB tables in a single file
|
|
24
24
|
- **Export method**: Use named exports (`export const`)
|
|
25
25
|
- **Export both value and type**: Always export both the runtime value and TypeScript type
|
|
26
|
-
- **Uniqueness**:
|
|
26
|
+
- **Uniqueness**: Table names must be unique across all TailorDB namespaces in the application
|
|
27
27
|
|
|
28
28
|
```typescript
|
|
29
29
|
import { db } from "@tailor-platform/sdk";
|
|
@@ -37,7 +37,7 @@ export const user = db.table("User", {
|
|
|
37
37
|
});
|
|
38
38
|
export type user = typeof user;
|
|
39
39
|
|
|
40
|
-
// You can define multiple
|
|
40
|
+
// You can define multiple tables in the same file
|
|
41
41
|
export const role = db.table("Role", {
|
|
42
42
|
name: db.string().unique(),
|
|
43
43
|
});
|
|
@@ -254,8 +254,8 @@ type User {
|
|
|
254
254
|
}
|
|
255
255
|
```
|
|
256
256
|
|
|
257
|
-
- `toward.as` - Customizes the field name for accessing the related
|
|
258
|
-
- `backward` - Customizes the field name for accessing this
|
|
257
|
+
- `toward.as` - Customizes the field name for accessing the related table from this table
|
|
258
|
+
- `backward` - Customizes the field name for accessing this table from the related table
|
|
259
259
|
|
|
260
260
|
Relation names share the same GraphQL field namespace as fields, files, and other relations on
|
|
261
261
|
the table. The SDK rejects duplicate or empty relation names. When `toward.as` is omitted, the
|
|
@@ -356,7 +356,7 @@ export const order = db
|
|
|
356
356
|
});
|
|
357
357
|
```
|
|
358
358
|
|
|
359
|
-
**Note:** `.hooks()` can only be called once on a
|
|
359
|
+
**Note:** `.hooks()` can only be called once on a table. Duplicate type-level calls fail at compile time and throw at runtime.
|
|
360
360
|
|
|
361
361
|
### Validation
|
|
362
362
|
|
|
@@ -415,7 +415,7 @@ For datetime/date/time fields, pass `"now"` to use the operation timestamp:
|
|
|
415
415
|
db.datetime().default("now");
|
|
416
416
|
```
|
|
417
417
|
|
|
418
|
-
**Note:** `.validate()` can only be called once on a
|
|
418
|
+
**Note:** `.validate()` can only be called once on a table. Duplicate type-level calls fail at compile time and throw at runtime.
|
|
419
419
|
|
|
420
420
|
### Vector Search
|
|
421
421
|
|
|
@@ -448,14 +448,14 @@ export const user = db.table("User", {
|
|
|
448
448
|
|
|
449
449
|
`db.fields.timestamps()` adds non-null `createdAt` and `updatedAt` datetime fields. Both fields are populated when a record is created; provided values are preserved so seed data can use historical timestamps. `updatedAt` is also refreshed automatically when a record is updated.
|
|
450
450
|
|
|
451
|
-
##
|
|
451
|
+
## Table Modifiers
|
|
452
452
|
|
|
453
|
-
|
|
453
|
+
Table builder methods that set one type-level configuration can be called only once on the same table. Duplicate calls fail at compile time and throw at runtime. This applies to `.description()`, `.hooks()`, `.validate()`, `.features()`, `.indexes()`, `.files()`, `.permission()`, and `.gqlPermission()`.
|
|
454
454
|
|
|
455
455
|
Conditional assignment is still supported when only one branch calls the method:
|
|
456
456
|
|
|
457
457
|
```typescript
|
|
458
|
-
let user = db.
|
|
458
|
+
let user = db.table("User", {
|
|
459
459
|
name: db.string(),
|
|
460
460
|
});
|
|
461
461
|
|
|
@@ -502,7 +502,7 @@ db.table("User", {
|
|
|
502
502
|
|
|
503
503
|
#### Event Publishing
|
|
504
504
|
|
|
505
|
-
Enable event publishing for a
|
|
505
|
+
Enable event publishing for a table to trigger executors on record changes:
|
|
506
506
|
|
|
507
507
|
```typescript
|
|
508
508
|
db.table("User", {
|
|
@@ -515,15 +515,15 @@ db.table("User", {
|
|
|
515
515
|
**Behavior:**
|
|
516
516
|
|
|
517
517
|
- When `publishEvents: true`, record creation/update/deletion events are published
|
|
518
|
-
- When not specified, `deploy` sets it from the executors taking part in the same run: `true` while one of them uses this
|
|
519
|
-
- When explicitly set to `false` while an executor taking part in the same run uses this
|
|
518
|
+
- When not specified, `deploy` sets it from the executors taking part in the same run: `true` while one of them uses this table with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`, and `false` once none does. Removing the last such trigger turns publishing back off on the next `deploy`
|
|
519
|
+
- When explicitly set to `false` while an executor taking part in the same run uses this table, `deploy` fails
|
|
520
520
|
|
|
521
521
|
**Use cases:**
|
|
522
522
|
|
|
523
523
|
1. **Auto-detection (recommended)**: Don't set `publishEvents` - `deploy` enables it while an executor taking part in the same run needs it
|
|
524
524
|
|
|
525
525
|
```typescript
|
|
526
|
-
// publishEvents is automatically enabled because an executor uses this
|
|
526
|
+
// publishEvents is automatically enabled because an executor uses this table
|
|
527
527
|
export const order = db.table("Order", {
|
|
528
528
|
status: db.string(),
|
|
529
529
|
});
|
|
@@ -545,7 +545,7 @@ db.table("User", {
|
|
|
545
545
|
});
|
|
546
546
|
```
|
|
547
547
|
|
|
548
|
-
3. **Explicit disable**: Disable event publishing for a
|
|
548
|
+
3. **Explicit disable**: Disable event publishing for a table that doesn't need it (error if an executor taking part in the same run uses it)
|
|
549
549
|
|
|
550
550
|
```typescript
|
|
551
551
|
db.table("TempData", {
|
|
@@ -555,14 +555,14 @@ db.table("User", {
|
|
|
555
555
|
});
|
|
556
556
|
```
|
|
557
557
|
|
|
558
|
-
**Sharing a
|
|
558
|
+
**Sharing a table across configs:** an executor in another config auto-enables publishing the same way, as long as both configs take part in the same `deploy` (`--config a,b`). `deploy` records that dependency, so deploying the owning config alone later asks for confirmation instead of silently turning publishing off — it fails outright in a non-interactive environment. Set `publishEvents: true` on the table to keep it on regardless of which configs take part.
|
|
559
559
|
|
|
560
560
|
#### GraphQL Operations
|
|
561
561
|
|
|
562
|
-
Control which GraphQL operations (`create`, `update`, `delete`, `read`) are exposed for a
|
|
562
|
+
Control which GraphQL operations (`create`, `update`, `delete`, `read`) are exposed for a table. All operations are enabled by default.
|
|
563
563
|
|
|
564
564
|
```typescript
|
|
565
|
-
db.
|
|
565
|
+
db.table("Order", {
|
|
566
566
|
status: db.string(),
|
|
567
567
|
}).features({
|
|
568
568
|
gqlOperations: {
|
|
@@ -571,10 +571,10 @@ db.type("Order", {
|
|
|
571
571
|
});
|
|
572
572
|
```
|
|
573
573
|
|
|
574
|
-
Use the `"query"` alias to disable all mutations at once (read-only
|
|
574
|
+
Use the `"query"` alias to disable all mutations at once (read-only table: `create`/`update`/`delete` false, `read` true):
|
|
575
575
|
|
|
576
576
|
```typescript
|
|
577
|
-
db.
|
|
577
|
+
db.table("AuditLog", {
|
|
578
578
|
action: db.string(),
|
|
579
579
|
}).features({
|
|
580
580
|
gqlOperations: "query",
|
|
@@ -583,7 +583,7 @@ db.type("AuditLog", {
|
|
|
583
583
|
|
|
584
584
|
**Namespace-level default**
|
|
585
585
|
|
|
586
|
-
Set a default for every
|
|
586
|
+
Set a default for every table in a TailorDB namespace in `tailor.config.ts`. A table's own `.features({ gqlOperations })` always takes precedence over this default.
|
|
587
587
|
|
|
588
588
|
```typescript
|
|
589
589
|
// tailor.config.ts
|
|
@@ -591,13 +591,13 @@ export default defineConfig({
|
|
|
591
591
|
db: {
|
|
592
592
|
tailordb: {
|
|
593
593
|
files: ["./tailordb/*.ts"],
|
|
594
|
-
gqlOperations: { delete: false }, // Default for every
|
|
594
|
+
gqlOperations: { delete: false }, // Default for every table in this namespace
|
|
595
595
|
},
|
|
596
596
|
},
|
|
597
597
|
});
|
|
598
598
|
```
|
|
599
599
|
|
|
600
|
-
This default is re-evaluated on every `tailor deploy`, so changing it also updates
|
|
600
|
+
This default is re-evaluated on every `tailor deploy`, so changing it also updates tables that already exist on the platform, not only newly created ones.
|
|
601
601
|
|
|
602
602
|
### Field Extraction (`pickFields` / `omitFields`)
|
|
603
603
|
|
|
@@ -679,7 +679,7 @@ Configure Permission and GQLPermission. For details, see the [TailorDB Permissio
|
|
|
679
679
|
|
|
680
680
|
**Important**: Following the secure-by-default principle, all operations are denied if permissions are not configured. You must explicitly grant permissions for each operation (create, read, update, delete).
|
|
681
681
|
|
|
682
|
-
`generate`/`deploy` reject a
|
|
682
|
+
`generate`/`deploy` reject a table that has no `.permission()`, or no `.gqlPermission()` while GraphQL operations are enabled for it (see [GraphQL Operations](#graphql-operations) above). Disable GraphQL exposure entirely with `.features({ gqlOperations: { create: false, update: false, delete: false, read: false } })` if a table only needs record-level permission.
|
|
683
683
|
|
|
684
684
|
```typescript
|
|
685
685
|
db.table("User", {
|
|
@@ -723,6 +723,6 @@ db.table("User", {
|
|
|
723
723
|
|
|
724
724
|
## Migrations
|
|
725
725
|
|
|
726
|
-
When you change a TailorDB
|
|
726
|
+
When you change a TailorDB table definition, the SDK can generate a migration that captures the diff and, for breaking changes, runs a data transformation script during `tailor deploy`. See the [TailorDB Migrations guide](./tailordb-migration.md) for the full workflow, configuration, supported change types, team coordination, and troubleshooting.
|
|
727
727
|
|
|
728
728
|
For the CLI command reference, see [`tailordb migration`](../cli/tailordb.md#tailordb-migration).
|
package/docs/testing.md
CHANGED
|
@@ -59,7 +59,7 @@ export default defineConfig({
|
|
|
59
59
|
|
|
60
60
|
1. **Node.js module blocking** — `import { randomBytes } from "node:crypto"` in production code throws an error with a suggestion for the Web Standard API alternative (`globalThis.crypto`). Test files (`*.test.ts`, `*.spec.ts`) are exempt.
|
|
61
61
|
2. **Node.js globals removal** — Only globals available in the platform runtime are kept (whitelist). `Buffer`, `global`, `setImmediate`, `__dirname`, `__filename`, `performance`, and others are removed.
|
|
62
|
-
3. **Platform API mocks** — the platform error classes (`TailorErrors`, `
|
|
62
|
+
3. **Platform API mocks** — the platform error classes (`TailorErrors`, `TailorDBFileError`) and `tailor.context` are always available. The other namespaces (`tailordb.Client`, `tailor.workflow`, `tailor.secretmanager`, …) are mocked when you acquire the corresponding `mockX()` — see below.
|
|
63
63
|
|
|
64
64
|
### Acquiring mocks with `using`
|
|
65
65
|
|
|
@@ -582,6 +582,8 @@ describe("upsertUsers resolver", () => {
|
|
|
582
582
|
|
|
583
583
|
Reach for [`mockTailordb`](#mocking-the-tailordb-client) instead when you want to drive the raw query sequence at the `tailordb.Client` level rather than at the Kysely layer.
|
|
584
584
|
|
|
585
|
+
TailorDB migration scripts (`migrate.ts`) are unit-tested the same way: the generated `db.ts` exports the `Database` interface to type the mock, and `tailor tailordb migration script <N> --with-test` scaffolds a ready-to-fill test. To execute a migration script against real rows in an in-memory Postgres, use `createKyselyPGlite` with `@electric-sql/pglite`. See [Testing Migrations Locally](./services/tailordb-migration.md#testing-migrations-locally).
|
|
586
|
+
|
|
585
587
|
#### Resolvers that resume a workflow
|
|
586
588
|
|
|
587
589
|
Resolvers that call `waitPoint.resolve(...)` delegate to `tailor.workflow.resolve` at runtime. With the `tailor-runtime` environment active, use `mockWorkflow().waitPoint(definition)` to invoke the callback with the payload that originally suspended the job:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailor-platform/sdk",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Tailor Platform SDK - The SDK to work with Tailor Platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
"directory": "packages/sdk"
|
|
10
10
|
},
|
|
11
11
|
"bin": {
|
|
12
|
-
"tailor": "./
|
|
12
|
+
"tailor": "./bin/tailor.mjs"
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
|
+
"bin",
|
|
15
16
|
"CHANGELOG.md",
|
|
16
17
|
"dist",
|
|
17
18
|
"docs",
|
|
@@ -172,14 +173,13 @@
|
|
|
172
173
|
"@toiroakr/read-multiline": "0.4.1",
|
|
173
174
|
"@urql/core": "6.0.3",
|
|
174
175
|
"amaro": "1.1.11",
|
|
175
|
-
"chalk": "5.6.2",
|
|
176
176
|
"confbox": "0.2.4",
|
|
177
177
|
"date-fns": "4.4.0",
|
|
178
178
|
"es-toolkit": "1.50.0",
|
|
179
179
|
"find-up-simple": "1.0.1",
|
|
180
180
|
"get-east-asian-width": "1.6.0",
|
|
181
|
-
"get-tsconfig": "4.14.
|
|
182
|
-
"globals": "17.
|
|
181
|
+
"get-tsconfig": "4.14.1",
|
|
182
|
+
"globals": "17.9.0",
|
|
183
183
|
"graphql": "17.0.2",
|
|
184
184
|
"inflection": "3.0.2",
|
|
185
185
|
"kysely": "0.29.4",
|
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
"@opentelemetry/sdk-trace-base": "2.10.0",
|
|
205
205
|
"@types/mime-types": "3.0.1",
|
|
206
206
|
"@types/node": "24.13.3",
|
|
207
|
-
"@types/semver": "7.
|
|
207
|
+
"@types/semver": "7.8.0",
|
|
208
208
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
209
209
|
"@vitest/coverage-v8": "4.1.10",
|
|
210
210
|
"eslint-plugin-zod": "4.9.0",
|
|
@@ -216,13 +216,18 @@
|
|
|
216
216
|
"typescript": "6.0.3",
|
|
217
217
|
"vitest": "4.1.10",
|
|
218
218
|
"zinfer": "0.2.7",
|
|
219
|
-
"@tailor-platform/tailor-proto": "^0.0.1"
|
|
219
|
+
"@tailor-platform/tailor-proto": "^0.0.1",
|
|
220
|
+
"@tailor-platform/shared": "^0.0.0"
|
|
220
221
|
},
|
|
221
222
|
"peerDependencies": {
|
|
223
|
+
"@electric-sql/pglite": ">=0.2.0",
|
|
222
224
|
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
223
225
|
"vitest": ">=4"
|
|
224
226
|
},
|
|
225
227
|
"peerDependenciesMeta": {
|
|
228
|
+
"@electric-sql/pglite": {
|
|
229
|
+
"optional": true
|
|
230
|
+
},
|
|
226
231
|
"vite": {
|
|
227
232
|
"optional": true
|
|
228
233
|
},
|
|
@@ -241,7 +246,7 @@
|
|
|
241
246
|
"test:coverage": "vitest --coverage",
|
|
242
247
|
"docs:check": "vitest run --project=unit* src/cli/docs.test.ts",
|
|
243
248
|
"docs:update": "POLITTY_DOCS_UPDATE=true vitest run --project=unit* src/cli/docs.test.ts",
|
|
244
|
-
"build": "tsdown && politty generate-shim --entry
|
|
249
|
+
"build": "tsdown && politty generate-shim --entry ../dist/cli/main.mjs --program tailor && politty generate-worker --bin dist/cli/main.mjs --program tailor --shell zsh --verify",
|
|
245
250
|
"lint": "oxlint --type-aware .",
|
|
246
251
|
"check:public-api-jsdoc": "node --experimental-strip-types scripts/check-public-api-jsdoc.ts",
|
|
247
252
|
"check:zod-isolation": "node --experimental-strip-types scripts/check-zod-isolation.ts",
|