zitejs 0.9.114 → 0.9.116

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.
Files changed (36) hide show
  1. package/dist/cjs/auth/useAuth.test.d.ts +1 -0
  2. package/dist/cjs/auth/useAuth.test.js +96 -0
  3. package/dist/cjs/backend/index.d.ts +13 -0
  4. package/dist/cjs/backend/index.js +63 -1
  5. package/dist/cjs/backend/index.test.d.ts +1 -0
  6. package/dist/cjs/backend/index.test.js +203 -0
  7. package/dist/cjs/bundle/index.js +2 -0
  8. package/dist/cjs/runtime/index.js +108 -22
  9. package/dist/cjs/runtime/index.test.d.ts +1 -0
  10. package/dist/cjs/runtime/index.test.js +133 -0
  11. package/dist/cjs/sync/lib.js +14 -0
  12. package/dist/cjs/sync/sdkNames.d.ts +2 -1
  13. package/dist/cjs/sync/sdkNames.js +17 -1
  14. package/dist/cjs/sync/sdkNames.test.js +48 -0
  15. package/dist/esm/auth/useAuth.test.d.ts +1 -0
  16. package/dist/esm/auth/useAuth.test.js +94 -0
  17. package/dist/esm/backend/index.d.ts +13 -0
  18. package/dist/esm/backend/index.js +63 -1
  19. package/dist/esm/backend/index.test.d.ts +1 -0
  20. package/dist/esm/backend/index.test.js +201 -0
  21. package/dist/esm/bundle/index.js +2 -0
  22. package/dist/esm/cli.js +0 -0
  23. package/dist/esm/runtime/index.js +108 -22
  24. package/dist/esm/runtime/index.test.d.ts +1 -0
  25. package/dist/esm/runtime/index.test.js +131 -0
  26. package/dist/esm/sync/lib.js +14 -0
  27. package/dist/esm/sync/sdkNames.d.ts +2 -1
  28. package/dist/esm/sync/sdkNames.js +17 -1
  29. package/dist/esm/sync/sdkNames.test.js +48 -0
  30. package/package.json +2 -2
  31. package/dist/cjs/api/index.js +0 -5
  32. package/dist/cjs/db/index.js +0 -5
  33. package/dist/esm/api/index.d.ts +0 -2
  34. package/dist/esm/api/index.js +0 -1
  35. package/dist/esm/db/index.d.ts +0 -2
  36. package/dist/esm/db/index.js +0 -1
@@ -57,6 +57,8 @@ const PREBUNDLED_LIBS = {
57
57
  'intercom-client': '__intercom__.js',
58
58
  '@google/generative-ai': '__gemini__.js',
59
59
  '@elevenlabs/elevenlabs-js': '__elevenlabs__.js',
60
+ 'resend': '__resend__.js',
61
+ '@clickhouse/client-web': '__clickhouse__.js',
60
62
  };
61
63
  export const BASE_BUILD_OPTIONS = {
62
64
  bundle: true,
package/dist/esm/cli.js CHANGED
File without changes
@@ -1,5 +1,77 @@
1
1
  import { getSdkCall } from "../internal/sdkCall.js";
2
2
  const DB_INTEGRATION_ID = "databases";
3
+ function isPlainObject(value) {
4
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5
+ }
6
+ /**
7
+ * Not thrown — the miss is the answer. Logged so the author can still find out
8
+ * their value was missing, since a silent null looks exactly like a legitimate
9
+ * no-match and would otherwise hide the bug that caused it.
10
+ */
11
+ function warnEmptySelector(className, method, detail) {
12
+ console.warn(`${className}.${method}: ${detail} is undefined, so this query would have ` +
13
+ "run unnarrowed and returned an arbitrary record. Returning no match " +
14
+ "instead. Check the value before querying, or pass null to match " +
15
+ "records where the field is empty.");
16
+ }
17
+ /**
18
+ * Whether a selector was written with nothing in it.
19
+ *
20
+ * `JSON.stringify` drops an undefined value, so `{ filters: { token: undefined } }`
21
+ * reaches base-runner as `{ filters: {} }` — a valid request for no filter.
22
+ * `findOne` answers that with the first row of the table, and the caller reads
23
+ * it back as a match.
24
+ *
25
+ * `findOne` treats it as "matched nothing" instead, which is what asking for
26
+ * `token === undefined` should mean. Callers already handle the miss —
27
+ * `if (!row) return { status: 'invalid_token' }` — so the shape that caused the
28
+ * incident becomes correct on its own, with no app change and nothing to break.
29
+ *
30
+ * **`findOne` only.** On `findAll`, "no filter" is a coherent request, and
31
+ * `filters: { status: maybeUndefined }` meaning "don't narrow on status" is an
32
+ * idiom that type-checks today (`RecordFilters` is a `?:` map, and apps build
33
+ * without `exactOptionalPropertyTypes`). It is also what Prisma does with
34
+ * `undefined` in a `where`. Only `findOne` has no sane reading, because an
35
+ * unnarrowed single-row query returns an arbitrary record rather than everything.
36
+ *
37
+ * A key the caller never wrote is untouched: `findOne({ filters: {} })` still
38
+ * means "no filter" and still returns the first row. Only a key written with
39
+ * nothing in it counts. (Unknown filter keys have the same consequence — see
40
+ * `RecordFilters` — but those are `keyof T` and caught at build time.)
41
+ */
42
+ function selectorMatchesNothing(className, method, params) {
43
+ if (!params)
44
+ return false;
45
+ const { filters } = params;
46
+ if (isPlainObject(filters)) {
47
+ for (const [key, value] of Object.entries(filters)) {
48
+ if (value === undefined) {
49
+ warnEmptySelector(className, method, `filter "${key}"`);
50
+ return true;
51
+ }
52
+ // `{ field: { contains: undefined } }` collapses to `{ field: {} }` — no
53
+ // condition on that field at all.
54
+ if (isPlainObject(value)) {
55
+ for (const [operator, operand] of Object.entries(value)) {
56
+ if (operand === undefined) {
57
+ warnEmptySelector(className, method, `filter "${key}.${operator}"`);
58
+ return true;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ // An undefined `id` leaves the query with no selector at all. Only counts
65
+ // when nothing else narrows it, so `findOne({ id: maybeId, filters: {...} })`
66
+ // still runs on the filters.
67
+ const wroteId = Object.prototype.hasOwnProperty.call(params, "id");
68
+ const hasFilters = isPlainObject(filters) && Object.keys(filters).length > 0;
69
+ if (wroteId && params.id === undefined && !hasFilters) {
70
+ warnEmptySelector(className, method, "`id`");
71
+ return true;
72
+ }
73
+ return false;
74
+ }
3
75
  function getBaseId() {
4
76
  try {
5
77
  return (globalThis.__ZITE_EXECUTION_CONFIG__?.baseId ??
@@ -26,16 +98,22 @@ function resolveTableId(className) {
26
98
  }
27
99
  export function createTableClient(className) {
28
100
  return {
29
- findAll: (params) => getSdkCall()(DB_INTEGRATION_ID, className, "findAll", {
30
- baseId: getBaseId(),
31
- tableId: resolveTableId(className),
32
- ...params,
33
- }),
34
- findOne: (params) => getSdkCall()(DB_INTEGRATION_ID, className, "findOne", {
35
- baseId: getBaseId(),
36
- tableId: resolveTableId(className),
37
- ...params,
38
- }),
101
+ findAll: async (params) => {
102
+ return getSdkCall()(DB_INTEGRATION_ID, className, "findAll", {
103
+ baseId: getBaseId(),
104
+ tableId: resolveTableId(className),
105
+ ...params,
106
+ });
107
+ },
108
+ findOne: async (params) => {
109
+ if (selectorMatchesNothing(className, "findOne", params))
110
+ return undefined;
111
+ return getSdkCall()(DB_INTEGRATION_ID, className, "findOne", {
112
+ baseId: getBaseId(),
113
+ tableId: resolveTableId(className),
114
+ ...params,
115
+ });
116
+ },
39
117
  create: (params) => getSdkCall()(DB_INTEGRATION_ID, className, "create", {
40
118
  baseId: getBaseId(),
41
119
  tableId: resolveTableId(className),
@@ -66,10 +144,12 @@ export function createSqlClient() {
66
144
  }
67
145
  export function createAuthClient() {
68
146
  return {
69
- findAllUsers: (options) => getSdkCall()(DB_INTEGRATION_ID, "Auth", "findAllUsers", {
70
- baseId: getBaseId(),
71
- ...options,
72
- }),
147
+ findAllUsers: async (options) => {
148
+ return getSdkCall()(DB_INTEGRATION_ID, "Auth", "findAllUsers", {
149
+ baseId: getBaseId(),
150
+ ...options,
151
+ });
152
+ },
73
153
  updateUserProfile: (userId, profile) => getSdkCall()(DB_INTEGRATION_ID, "Auth", "updateUserProfile", {
74
154
  baseId: getBaseId(),
75
155
  userId,
@@ -79,14 +159,20 @@ export function createAuthClient() {
79
159
  }
80
160
  export function createAirtableClient(integrationId, className, implicitParams) {
81
161
  return {
82
- findAll: (params) => getSdkCall()(integrationId, className, "findAll", {
83
- ...implicitParams,
84
- ...params,
85
- }),
86
- findOne: (params) => getSdkCall()(integrationId, className, "findOne", {
87
- ...implicitParams,
88
- ...params,
89
- }),
162
+ findAll: async (params) => {
163
+ return getSdkCall()(integrationId, className, "findAll", {
164
+ ...implicitParams,
165
+ ...params,
166
+ });
167
+ },
168
+ findOne: async (params) => {
169
+ if (selectorMatchesNothing(className, "findOne", params))
170
+ return undefined;
171
+ return getSdkCall()(integrationId, className, "findOne", {
172
+ ...implicitParams,
173
+ ...params,
174
+ });
175
+ },
90
176
  create: (params) => getSdkCall()(integrationId, className, "create", {
91
177
  ...implicitParams,
92
178
  ...params,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,131 @@
1
+ import { describe, it, expect, afterEach, vi } from "vitest";
2
+ import { createTableClient, createAirtableClient, createAuthClient, } from "./index.js";
3
+ /** Captures what the runtime would have dispatched to the workflow-runner. */
4
+ function stubSdkCall(result = undefined) {
5
+ const calls = [];
6
+ vi.stubGlobal("__wrapSdkCall", async (_integrationId, _className, method, params) => {
7
+ calls.push({ method, params });
8
+ return result;
9
+ });
10
+ return calls;
11
+ }
12
+ afterEach(() => {
13
+ vi.unstubAllGlobals();
14
+ });
15
+ describe("the mechanism", () => {
16
+ it("drops an undefined filter value on serialization, leaving an unfiltered read", () => {
17
+ const token = undefined;
18
+ const wire = JSON.stringify({ filters: { tokenFraisAdmin: token } });
19
+ expect(wire).toBe('{"filters":{}}');
20
+ expect(JSON.parse(wire).filters).toEqual({});
21
+ });
22
+ });
23
+ describe("findOne", () => {
24
+ it("matches nothing when a filter value is undefined, without dispatching", async () => {
25
+ // The incident shape. `if (!row) return { status: 'invalid_token' }` is
26
+ // what callers already write, so answering "no match" makes that code
27
+ // correct on its own — where returning the first row made it lie.
28
+ const calls = stubSdkCall();
29
+ const clients = createTableClient("Clients");
30
+ const token = undefined;
31
+ const row = await clients.findOne({
32
+ filters: { tokenFraisAdmin: token },
33
+ });
34
+ expect(row).toBeUndefined();
35
+ expect(calls).toHaveLength(0);
36
+ });
37
+ it("warns so a missing value is still discoverable in the run log", async () => {
38
+ // A silent miss looks exactly like a legitimate no-match, which would hide
39
+ // the bug that produced it.
40
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
41
+ stubSdkCall();
42
+ const clients = createTableClient("Clients");
43
+ await clients.findOne({ filters: { tokenFraisAdmin: undefined } });
44
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining('filter "tokenFraisAdmin" is undefined'));
45
+ warn.mockRestore();
46
+ });
47
+ it("matches nothing on an undefined operand inside a filter condition", async () => {
48
+ const calls = stubSdkCall();
49
+ const clients = createTableClient("Clients");
50
+ const row = await clients.findOne({
51
+ filters: { nom: { contains: undefined } },
52
+ });
53
+ expect(row).toBeUndefined();
54
+ expect(calls).toHaveLength(0);
55
+ });
56
+ it("matches nothing on an undefined id when nothing else narrows the query", async () => {
57
+ const calls = stubSdkCall();
58
+ const clients = createTableClient("Clients");
59
+ const id = undefined;
60
+ const row = await clients.findOne({ id });
61
+ expect(row).toBeUndefined();
62
+ expect(calls).toHaveLength(0);
63
+ });
64
+ it("still allows an undefined id when filters narrow the query", async () => {
65
+ const calls = stubSdkCall();
66
+ const clients = createTableClient("Clients");
67
+ await clients.findOne({ id: undefined, filters: { nom: "Henry" } });
68
+ expect(calls).toHaveLength(1);
69
+ });
70
+ it("still allows a deliberate unfiltered lookup", async () => {
71
+ const calls = stubSdkCall();
72
+ const clients = createTableClient("Clients");
73
+ await clients.findOne({ filters: {} });
74
+ await clients.findOne({});
75
+ expect(calls).toHaveLength(2);
76
+ });
77
+ it("passes real values through untouched", async () => {
78
+ const calls = stubSdkCall();
79
+ const clients = createTableClient("Clients");
80
+ await clients.findOne({ filters: { tokenFraisAdmin: "b69779ae-eeea" } });
81
+ expect(calls[0]?.params).toMatchObject({
82
+ filters: { tokenFraisAdmin: "b69779ae-eeea" },
83
+ });
84
+ });
85
+ it("allows null, which means the field is empty", async () => {
86
+ const calls = stubSdkCall();
87
+ const clients = createTableClient("Clients");
88
+ await clients.findOne({ filters: { nom: { not: null } } });
89
+ expect(calls).toHaveLength(1);
90
+ });
91
+ });
92
+ describe("findAll", () => {
93
+ it("treats an undefined filter value as 'do not narrow on this'", async () => {
94
+ // Deliberately NOT guarded, unlike findOne. On a list query "no filter" is
95
+ // a coherent request, `filters: { x: maybeUndefined }` type-checks today,
96
+ // and this is what Prisma does with undefined in a `where`. The dangerous
97
+ // reading is findOne's, where an unnarrowed query returns an arbitrary row
98
+ // that the caller treats as a match.
99
+ const calls = stubSdkCall({ records: [], hasMore: false });
100
+ const clients = createTableClient("Clients");
101
+ await clients.findAll({ filters: { tokenFraisAdmin: undefined } });
102
+ expect(calls).toHaveLength(1);
103
+ });
104
+ it("still allows listing a whole table on purpose", async () => {
105
+ const calls = stubSdkCall({ records: [], hasMore: false });
106
+ const clients = createTableClient("Clients");
107
+ await clients.findAll();
108
+ await clients.findAll({ limit: 10 });
109
+ expect(calls).toHaveLength(2);
110
+ });
111
+ });
112
+ describe("other clients on the same path", () => {
113
+ it("guards the Airtable client", async () => {
114
+ const calls = stubSdkCall();
115
+ const table = createAirtableClient("airtable", "Clients", {
116
+ baseId: "app1",
117
+ tableId: "tbl1",
118
+ });
119
+ const row = await table.findOne({
120
+ filters: { tokenFraisAdmin: undefined },
121
+ });
122
+ expect(row).toBeUndefined();
123
+ expect(calls).toHaveLength(0);
124
+ });
125
+ it("leaves auth user lookups alone, as a findAll", async () => {
126
+ const calls = stubSdkCall({ records: [], total: 0, hasMore: false });
127
+ const auth = createAuthClient();
128
+ await auth.findAllUsers({ filters: { email: undefined } });
129
+ expect(calls).toHaveLength(1);
130
+ });
131
+ });
@@ -528,6 +528,7 @@ export function generateDbTs(inputSchema) {
528
528
  lines.push('// `not: null` means "is set". An empty `in: []` matches nothing; an', "// empty `notIn: []` applies no filter.");
529
529
  lines.push("// sort is currently IGNORED here — it is stripped before the request.", "// (it does work on zite.auth.findAllUsers). Order in SQL instead.");
530
530
  lines.push("// limit defaults to 500, max 2000; offset is a row count (a number)");
531
+ lines.push('// a filter value of `undefined` is REJECTED (it would query unfiltered', '// and match an arbitrary record). Check the value first.');
531
532
  lines.push("// .findOne({ id?, filters?, fields? }) → T | undefined");
532
533
  lines.push("// .create({ record }) → T");
533
534
  lines.push("// .update({ id, record }) → { id: string, fields: Partial<T> }");
@@ -1144,6 +1145,13 @@ export function generateAirtableTs(inputLock) {
1144
1145
  "// Auto-generated by zitejs generate from zite.lock. Do not edit manually.",
1145
1146
  "// Airtable SDK — uses createAirtableClient from zitejs/runtime.",
1146
1147
  "//",
1148
+ "// Usage in endpoint files (src/api/*.ts) — one client is exported per table:",
1149
+ `// import { ${lock.tables[0]?.sdkName ?? "TableName"} } from 'zitejs/integrations';`,
1150
+ "//",
1151
+ "// Always use 'zitejs/integrations' — never a relative path like",
1152
+ "// '../../.zite/integrations/airtable'. The tsconfig aliases resolve zitejs/*",
1153
+ "// imports to the correct .zite/ files.",
1154
+ "//",
1147
1155
  "// Each exported table client has these methods (all take a single params object):",
1148
1156
  "// findAll({ offset?, limit?, filters? }) => { records: T[], offset: string | undefined, hasMore: boolean }",
1149
1157
  "// findOne({ id?, filters? }) => T | undefined",
@@ -1361,6 +1369,12 @@ export function generateEmailSdk(integrationId) {
1361
1369
  "// Auto-generated by zitejs generate from zite.config.json. Do not edit manually.",
1362
1370
  "// Email SDK — sends through the Zite email gateway via the runtime bridge.",
1363
1371
  "//",
1372
+ "// Usage in endpoint files (src/api/*.ts):",
1373
+ "// import { Email } from 'zitejs/email';",
1374
+ "//",
1375
+ "// Always use 'zitejs/email' — never a relative path like '../../.zite/integrations/email'.",
1376
+ "// The tsconfig aliases resolve zitejs/* imports to the correct .zite/ files.",
1377
+ "//",
1364
1378
  "// await Email.send({ to, subject, body: [{ type: 'text', content: '...' }] })",
1365
1379
  "// => { success: boolean; messageId: string }",
1366
1380
  "//",
@@ -25,7 +25,8 @@ export declare function toPascalCase(name: string): string;
25
25
  export declare function toCamelCase(name: string): string;
26
26
  /**
27
27
  * camelCase for a FRESH sdkName, reading acronym runs as words: "VIP" ->
28
- * "vip", "APIKey" -> "apiKey" (plain toCamelCase yields "vIP" / "aPIKey").
28
+ * "vip", "APIKey" -> "apiKey" (plain toCamelCase yields "vIP" / "aPIKey"), and
29
+ * folding a diacritic into its base letter: "Filières" -> "filieres".
29
30
  *
30
31
  * Deliberately not folded into toCamelCase: that also derives endpoint
31
32
  * identifiers from existing filenames on every generate, where normalizing
@@ -40,7 +40,8 @@ export function toCamelCase(name) {
40
40
  }
41
41
  /**
42
42
  * camelCase for a FRESH sdkName, reading acronym runs as words: "VIP" ->
43
- * "vip", "APIKey" -> "apiKey" (plain toCamelCase yields "vIP" / "aPIKey").
43
+ * "vip", "APIKey" -> "apiKey" (plain toCamelCase yields "vIP" / "aPIKey"), and
44
+ * folding a diacritic into its base letter: "Filières" -> "filieres".
44
45
  *
45
46
  * Deliberately not folded into toCamelCase: that also derives endpoint
46
47
  * identifiers from existing filenames on every generate, where normalizing
@@ -48,7 +49,22 @@ export function toCamelCase(name) {
48
49
  * chosen for the first time — generateSchema preserves existing sdkNames.
49
50
  */
50
51
  export function toSdkName(name) {
52
+ // Decompose, then drop the combining marks, so an accented letter keeps its
53
+ // base rather than being read as punctuation. `toPascalCase` treats anything
54
+ // outside [a-zA-Z0-9] as a word separator and uppercases what follows it, so
55
+ // without this a table called "Fiches Filières" allocates `fichesFiliRes`.
56
+ //
57
+ // The bar is not "looks nicer" — it is Zite 1.0, which sanitised names this
58
+ // exact way (`getIntegrationNameMapping`) and therefore allocated
59
+ // `fichesFilieres`. Every app carried over from 1.0 compiles against that
60
+ // name, so a generator that disagrees hands a non-English base an accessor
61
+ // nobody would write and nothing resolves to.
62
+ //
63
+ // Only Latin diacritics fold. A name with no ASCII letters at all (Cyrillic,
64
+ // CJK, emoji) still collapses to `_` here, exactly as it did in 1.0.
51
65
  const deAcronymed = name
66
+ .normalize("NFD")
67
+ .replace(/[\u0300-\u036f]/g, "")
52
68
  .replace(/([A-Z]+)([A-Z][a-z])/g, (_, run, next) => run.charAt(0) + run.slice(1).toLowerCase() + next)
53
69
  .replace(/([A-Z])([A-Z]+)/g, (_, first, rest) => first + rest.toLowerCase());
54
70
  return toCamelCase(deAcronymed);
@@ -233,3 +233,51 @@ describe("table display names", () => {
233
233
  expect(schema.tables[0].name).toBe("Deals");
234
234
  });
235
235
  });
236
+ /**
237
+ * `toPascalCase` reads anything outside [a-zA-Z0-9] as a word separator and
238
+ * uppercases what follows, so an accent used to split the word it sat inside:
239
+ * "Filières" -> `filiRes`. Zite 1.0 stripped the combining mark instead, and
240
+ * every app carried over from it compiles against THAT name — so this is a
241
+ * disagreement with the apps in the wild, not a cosmetic preference.
242
+ */
243
+ describe("diacritics in a fresh sdkName", () => {
244
+ const nameFor = (tableName) => generateSchema(database([{ id: "tbl_1", name: tableName, fields: [] }]))
245
+ .tables[0].sdkName;
246
+ it.each([
247
+ ["Fiches Filières", "fichesFilieres"],
248
+ ["Recherches Métiers", "recherchesMetiers"],
249
+ ["Profil Compétences", "profilCompetences"],
250
+ ["Café Menu", "cafeMenu"],
251
+ ["Señor Clients", "senorClients"],
252
+ // Real, from a migrated base: an all-caps name where the accent sits inside
253
+ // an acronym run, so the de-acronym pass has to see the folded letter.
254
+ ["XICOH TRÁMITES", "xicohTramites"],
255
+ ])("folds %s into %s", (display, sdkName) => {
256
+ expect(nameFor(display)).toBe(sdkName);
257
+ });
258
+ it("folds a field name the same way", () => {
259
+ const schema = generateSchema(database([
260
+ {
261
+ id: "tbl_1",
262
+ name: "Trámites",
263
+ fields: [field("fld_1", "Horario de Atención")],
264
+ },
265
+ ]));
266
+ expect(schema.tables[0].fields[0].sdkName).toBe("horarioDeAtencion");
267
+ });
268
+ it("leaves a name with no ASCII letters degenerate, as 1.0 did", () => {
269
+ // NFD only folds Latin diacritics. Nothing here to fold onto, so this
270
+ // collapses exactly as before — called out so the narrower scope is a
271
+ // decision on the record rather than an oversight.
272
+ expect(nameFor("Посещения")).toBe("_");
273
+ });
274
+ it("does not rename a table already locked to the old spelling", () => {
275
+ // The whole point of the lock: an app compiling against `fichesFiliRes`
276
+ // keeps it. Only names allocated from here on change.
277
+ const existingSchema = {
278
+ tables: [{ id: "tbl_1", sdkName: "fichesFiliRes", fields: [] }],
279
+ };
280
+ const schema = generateSchema(database([{ id: "tbl_1", name: "Fiches Filières", fields: [] }]), existingSchema);
281
+ expect(schema.tables[0].sdkName).toBe("fichesFiliRes");
282
+ });
283
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zitejs",
3
- "version": "0.9.114",
4
- "description": "The Zite framework — build apps on Zite Database",
3
+ "version": "0.9.116",
4
+ "description": "The Zite framework \u2014 build apps on Zite Database",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
7
7
  "module": "./dist/esm/index.js",
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCaller = void 0;
4
- var index_js_1 = require("../caller/index.js");
5
- Object.defineProperty(exports, "createCaller", { enumerable: true, get: function () { return index_js_1.createCaller; } });
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTableClient = void 0;
4
- var index_js_1 = require("../runtime/index.js");
5
- Object.defineProperty(exports, "createTableClient", { enumerable: true, get: function () { return index_js_1.createTableClient; } });
@@ -1,2 +0,0 @@
1
- export { createCaller } from '../caller/index.js';
2
- export type { EndpointConfig } from '../caller/index.js';
@@ -1 +0,0 @@
1
- export { createCaller } from '../caller/index.js';
@@ -1,2 +0,0 @@
1
- export { createTableClient } from '../runtime/index.js';
2
- export type { TableClient } from '../runtime/index.js';
@@ -1 +0,0 @@
1
- export { createTableClient } from '../runtime/index.js';