@farming-labs/orm-d1 0.0.42

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/dist/index.cjs ADDED
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createD1Driver: () => createD1Driver
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+ var import_orm = require("@farming-labs/orm");
27
+ var import_orm_sql = require("@farming-labs/orm-sql");
28
+ function isRecord(value) {
29
+ return !!value && typeof value === "object";
30
+ }
31
+ function hasFunction(value, name) {
32
+ return isRecord(value) && typeof value[name] === "function";
33
+ }
34
+ function toNumber(value) {
35
+ if (typeof value === "number" && Number.isFinite(value)) return value;
36
+ if (typeof value === "bigint") return Number(value);
37
+ if (typeof value === "string" && value.trim().length) {
38
+ const parsed = Number(value);
39
+ if (Number.isFinite(parsed)) {
40
+ return parsed;
41
+ }
42
+ }
43
+ return void 0;
44
+ }
45
+ function d1DriverCapabilities() {
46
+ return {
47
+ numericIds: "generated",
48
+ supportsJSON: true,
49
+ supportsDates: true,
50
+ supportsBooleans: true,
51
+ supportsTransactions: false,
52
+ supportsSchemaNamespaces: false,
53
+ supportsTransactionalDDL: false,
54
+ nativeRelationLoading: "partial",
55
+ textComparison: "database-default",
56
+ textMatching: {
57
+ equality: "database-default",
58
+ contains: "database-default",
59
+ ordering: "database-default"
60
+ },
61
+ upsert: "native",
62
+ returning: {
63
+ create: true,
64
+ update: true,
65
+ delete: false
66
+ },
67
+ returningMode: {
68
+ create: "record",
69
+ update: "record",
70
+ delete: "none"
71
+ },
72
+ nativeRelations: {
73
+ singularChains: true,
74
+ hasMany: true,
75
+ manyToMany: true,
76
+ filtered: false,
77
+ ordered: false,
78
+ paginated: false
79
+ }
80
+ };
81
+ }
82
+ function bindStatement(statement, params) {
83
+ return statement.bind(...params);
84
+ }
85
+ function normalizeQueryResult(result) {
86
+ const record = isRecord(result) ? result : {};
87
+ const meta = isRecord(record.meta) ? record.meta : void 0;
88
+ const rows = Array.isArray(record.results) ? record.results.filter((value) => isRecord(value)) : [];
89
+ return {
90
+ rows,
91
+ affectedRows: toNumber(meta?.changes) ?? toNumber(meta?.rows_written) ?? (rows.length > 0 ? rows.length : 0),
92
+ insertId: meta?.last_row_id
93
+ };
94
+ }
95
+ async function executeStatement(client, sql, params) {
96
+ const statement = bindStatement(client.prepare(sql), params);
97
+ return normalizeQueryResult(await statement.run());
98
+ }
99
+ function createD1Adapter(client, createSession = true) {
100
+ return {
101
+ dialect: "sqlite",
102
+ async query(sql, params) {
103
+ return executeStatement(client, sql, params);
104
+ },
105
+ async transaction(run) {
106
+ if (createSession && hasFunction(client, "withSession")) {
107
+ return run(createD1Adapter(client.withSession(), false));
108
+ }
109
+ return run(createD1Adapter(client, false));
110
+ }
111
+ };
112
+ }
113
+ function createD1Driver(config) {
114
+ const handle = config.handle ?? (0, import_orm.createDriverHandle)({
115
+ kind: "d1",
116
+ client: config.client,
117
+ dialect: "sqlite",
118
+ capabilities: {
119
+ ...d1DriverCapabilities(),
120
+ ...config.capabilities
121
+ }
122
+ });
123
+ return (0, import_orm_sql.createSqlDriverFromAdapter)(
124
+ createD1Adapter(config.client),
125
+ handle
126
+ );
127
+ }
128
+ // Annotate the CommonJS export names for ESM import in node:
129
+ 0 && (module.exports = {
130
+ createD1Driver
131
+ });
132
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createDriverHandle,\n type OrmDriver,\n type OrmDriverCapabilityInput,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport { createSqlDriverFromAdapter, type SqlAdapterLike } from \"@farming-labs/orm-sql\";\n\ntype D1Row = Record<string, unknown>;\n\ntype D1ResultMeta = {\n changes?: number | bigint;\n last_row_id?: number | bigint | string | null;\n rows_written?: number | bigint;\n};\n\ntype D1QueryResultLike = {\n results?: unknown[];\n meta?: D1ResultMeta;\n};\n\nexport type D1PreparedStatementLike = {\n bind(...params: unknown[]): D1PreparedStatementLike;\n run(): Promise<D1QueryResultLike> | D1QueryResultLike;\n};\n\nexport type D1DatabaseSessionLike = {\n prepare(sql: string): D1PreparedStatementLike;\n batch(statements: readonly D1PreparedStatementLike[]): Promise<unknown> | unknown;\n getBookmark?(): string;\n};\n\nexport type D1DatabaseLike = D1DatabaseSessionLike & {\n exec?(sql: string): Promise<unknown> | unknown;\n withSession?(bookmark?: string): D1DatabaseSessionLike;\n dump?(): Promise<ArrayBuffer> | ArrayBuffer;\n};\n\nexport type D1DriverClient = D1DatabaseLike | D1DatabaseSessionLike;\n\nexport type D1DriverHandle<TClient = D1DriverClient> = OrmDriverHandle<\"d1\", TClient, \"sqlite\">;\n\nexport type D1DriverConfig<TSchema extends SchemaDefinition<any>> = {\n client: D1DriverClient;\n capabilities?: OrmDriverCapabilityInput;\n handle?: D1DriverHandle<D1DriverClient>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction toNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"bigint\") return Number(value);\n if (typeof value === \"string\" && value.trim().length) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction d1DriverCapabilities(): OrmDriverCapabilityInput {\n return {\n numericIds: \"generated\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: false,\n supportsSchemaNamespaces: false,\n supportsTransactionalDDL: false,\n nativeRelationLoading: \"partial\",\n textComparison: \"database-default\",\n textMatching: {\n equality: \"database-default\",\n contains: \"database-default\",\n ordering: \"database-default\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: true,\n hasMany: true,\n manyToMany: true,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n };\n}\n\nfunction bindStatement(statement: D1PreparedStatementLike, params: unknown[]) {\n return statement.bind(...params);\n}\n\nfunction normalizeQueryResult(result: unknown) {\n const record = isRecord(result) ? result : {};\n const meta = isRecord(record.meta) ? (record.meta as D1ResultMeta) : undefined;\n const rows = Array.isArray(record.results)\n ? record.results.filter((value): value is D1Row => isRecord(value))\n : [];\n\n return {\n rows,\n affectedRows:\n toNumber(meta?.changes) ??\n toNumber(meta?.rows_written) ??\n (rows.length > 0 ? rows.length : 0),\n insertId: meta?.last_row_id,\n };\n}\n\nasync function executeStatement(client: D1DriverClient, sql: string, params: unknown[]) {\n const statement = bindStatement(client.prepare(sql), params);\n return normalizeQueryResult(await statement.run());\n}\n\nfunction createD1Adapter(client: D1DriverClient, createSession = true): SqlAdapterLike {\n return {\n dialect: \"sqlite\",\n async query(sql, params) {\n return executeStatement(client, sql, params);\n },\n async transaction(run) {\n if (createSession && hasFunction(client, \"withSession\")) {\n return run(createD1Adapter(client.withSession() as D1DatabaseSessionLike, false));\n }\n\n return run(createD1Adapter(client, false));\n },\n };\n}\n\nexport function createD1Driver<TSchema extends SchemaDefinition<any>>(\n config: D1DriverConfig<TSchema>,\n): OrmDriver<TSchema, D1DriverHandle<D1DriverClient>> {\n const handle =\n config.handle ??\n createDriverHandle({\n kind: \"d1\",\n client: config.client,\n dialect: \"sqlite\",\n capabilities: {\n ...d1DriverCapabilities(),\n ...config.capabilities,\n },\n });\n\n return createSqlDriverFromAdapter<TSchema, D1DriverHandle<D1DriverClient>>(\n createD1Adapter(config.client),\n handle,\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,35 @@
1
+ import { SchemaDefinition, OrmDriverCapabilityInput, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
2
+
3
+ type D1ResultMeta = {
4
+ changes?: number | bigint;
5
+ last_row_id?: number | bigint | string | null;
6
+ rows_written?: number | bigint;
7
+ };
8
+ type D1QueryResultLike = {
9
+ results?: unknown[];
10
+ meta?: D1ResultMeta;
11
+ };
12
+ type D1PreparedStatementLike = {
13
+ bind(...params: unknown[]): D1PreparedStatementLike;
14
+ run(): Promise<D1QueryResultLike> | D1QueryResultLike;
15
+ };
16
+ type D1DatabaseSessionLike = {
17
+ prepare(sql: string): D1PreparedStatementLike;
18
+ batch(statements: readonly D1PreparedStatementLike[]): Promise<unknown> | unknown;
19
+ getBookmark?(): string;
20
+ };
21
+ type D1DatabaseLike = D1DatabaseSessionLike & {
22
+ exec?(sql: string): Promise<unknown> | unknown;
23
+ withSession?(bookmark?: string): D1DatabaseSessionLike;
24
+ dump?(): Promise<ArrayBuffer> | ArrayBuffer;
25
+ };
26
+ type D1DriverClient = D1DatabaseLike | D1DatabaseSessionLike;
27
+ type D1DriverHandle<TClient = D1DriverClient> = OrmDriverHandle<"d1", TClient, "sqlite">;
28
+ type D1DriverConfig<TSchema extends SchemaDefinition<any>> = {
29
+ client: D1DriverClient;
30
+ capabilities?: OrmDriverCapabilityInput;
31
+ handle?: D1DriverHandle<D1DriverClient>;
32
+ };
33
+ declare function createD1Driver<TSchema extends SchemaDefinition<any>>(config: D1DriverConfig<TSchema>): OrmDriver<TSchema, D1DriverHandle<D1DriverClient>>;
34
+
35
+ export { type D1DatabaseLike, type D1DatabaseSessionLike, type D1DriverClient, type D1DriverConfig, type D1DriverHandle, type D1PreparedStatementLike, createD1Driver };
@@ -0,0 +1,35 @@
1
+ import { SchemaDefinition, OrmDriverCapabilityInput, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
2
+
3
+ type D1ResultMeta = {
4
+ changes?: number | bigint;
5
+ last_row_id?: number | bigint | string | null;
6
+ rows_written?: number | bigint;
7
+ };
8
+ type D1QueryResultLike = {
9
+ results?: unknown[];
10
+ meta?: D1ResultMeta;
11
+ };
12
+ type D1PreparedStatementLike = {
13
+ bind(...params: unknown[]): D1PreparedStatementLike;
14
+ run(): Promise<D1QueryResultLike> | D1QueryResultLike;
15
+ };
16
+ type D1DatabaseSessionLike = {
17
+ prepare(sql: string): D1PreparedStatementLike;
18
+ batch(statements: readonly D1PreparedStatementLike[]): Promise<unknown> | unknown;
19
+ getBookmark?(): string;
20
+ };
21
+ type D1DatabaseLike = D1DatabaseSessionLike & {
22
+ exec?(sql: string): Promise<unknown> | unknown;
23
+ withSession?(bookmark?: string): D1DatabaseSessionLike;
24
+ dump?(): Promise<ArrayBuffer> | ArrayBuffer;
25
+ };
26
+ type D1DriverClient = D1DatabaseLike | D1DatabaseSessionLike;
27
+ type D1DriverHandle<TClient = D1DriverClient> = OrmDriverHandle<"d1", TClient, "sqlite">;
28
+ type D1DriverConfig<TSchema extends SchemaDefinition<any>> = {
29
+ client: D1DriverClient;
30
+ capabilities?: OrmDriverCapabilityInput;
31
+ handle?: D1DriverHandle<D1DriverClient>;
32
+ };
33
+ declare function createD1Driver<TSchema extends SchemaDefinition<any>>(config: D1DriverConfig<TSchema>): OrmDriver<TSchema, D1DriverHandle<D1DriverClient>>;
34
+
35
+ export { type D1DatabaseLike, type D1DatabaseSessionLike, type D1DriverClient, type D1DriverConfig, type D1DriverHandle, type D1PreparedStatementLike, createD1Driver };
package/dist/index.js ADDED
@@ -0,0 +1,109 @@
1
+ // src/index.ts
2
+ import {
3
+ createDriverHandle
4
+ } from "@farming-labs/orm";
5
+ import { createSqlDriverFromAdapter } from "@farming-labs/orm-sql";
6
+ function isRecord(value) {
7
+ return !!value && typeof value === "object";
8
+ }
9
+ function hasFunction(value, name) {
10
+ return isRecord(value) && typeof value[name] === "function";
11
+ }
12
+ function toNumber(value) {
13
+ if (typeof value === "number" && Number.isFinite(value)) return value;
14
+ if (typeof value === "bigint") return Number(value);
15
+ if (typeof value === "string" && value.trim().length) {
16
+ const parsed = Number(value);
17
+ if (Number.isFinite(parsed)) {
18
+ return parsed;
19
+ }
20
+ }
21
+ return void 0;
22
+ }
23
+ function d1DriverCapabilities() {
24
+ return {
25
+ numericIds: "generated",
26
+ supportsJSON: true,
27
+ supportsDates: true,
28
+ supportsBooleans: true,
29
+ supportsTransactions: false,
30
+ supportsSchemaNamespaces: false,
31
+ supportsTransactionalDDL: false,
32
+ nativeRelationLoading: "partial",
33
+ textComparison: "database-default",
34
+ textMatching: {
35
+ equality: "database-default",
36
+ contains: "database-default",
37
+ ordering: "database-default"
38
+ },
39
+ upsert: "native",
40
+ returning: {
41
+ create: true,
42
+ update: true,
43
+ delete: false
44
+ },
45
+ returningMode: {
46
+ create: "record",
47
+ update: "record",
48
+ delete: "none"
49
+ },
50
+ nativeRelations: {
51
+ singularChains: true,
52
+ hasMany: true,
53
+ manyToMany: true,
54
+ filtered: false,
55
+ ordered: false,
56
+ paginated: false
57
+ }
58
+ };
59
+ }
60
+ function bindStatement(statement, params) {
61
+ return statement.bind(...params);
62
+ }
63
+ function normalizeQueryResult(result) {
64
+ const record = isRecord(result) ? result : {};
65
+ const meta = isRecord(record.meta) ? record.meta : void 0;
66
+ const rows = Array.isArray(record.results) ? record.results.filter((value) => isRecord(value)) : [];
67
+ return {
68
+ rows,
69
+ affectedRows: toNumber(meta?.changes) ?? toNumber(meta?.rows_written) ?? (rows.length > 0 ? rows.length : 0),
70
+ insertId: meta?.last_row_id
71
+ };
72
+ }
73
+ async function executeStatement(client, sql, params) {
74
+ const statement = bindStatement(client.prepare(sql), params);
75
+ return normalizeQueryResult(await statement.run());
76
+ }
77
+ function createD1Adapter(client, createSession = true) {
78
+ return {
79
+ dialect: "sqlite",
80
+ async query(sql, params) {
81
+ return executeStatement(client, sql, params);
82
+ },
83
+ async transaction(run) {
84
+ if (createSession && hasFunction(client, "withSession")) {
85
+ return run(createD1Adapter(client.withSession(), false));
86
+ }
87
+ return run(createD1Adapter(client, false));
88
+ }
89
+ };
90
+ }
91
+ function createD1Driver(config) {
92
+ const handle = config.handle ?? createDriverHandle({
93
+ kind: "d1",
94
+ client: config.client,
95
+ dialect: "sqlite",
96
+ capabilities: {
97
+ ...d1DriverCapabilities(),
98
+ ...config.capabilities
99
+ }
100
+ });
101
+ return createSqlDriverFromAdapter(
102
+ createD1Adapter(config.client),
103
+ handle
104
+ );
105
+ }
106
+ export {
107
+ createD1Driver
108
+ };
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createDriverHandle,\n type OrmDriver,\n type OrmDriverCapabilityInput,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport { createSqlDriverFromAdapter, type SqlAdapterLike } from \"@farming-labs/orm-sql\";\n\ntype D1Row = Record<string, unknown>;\n\ntype D1ResultMeta = {\n changes?: number | bigint;\n last_row_id?: number | bigint | string | null;\n rows_written?: number | bigint;\n};\n\ntype D1QueryResultLike = {\n results?: unknown[];\n meta?: D1ResultMeta;\n};\n\nexport type D1PreparedStatementLike = {\n bind(...params: unknown[]): D1PreparedStatementLike;\n run(): Promise<D1QueryResultLike> | D1QueryResultLike;\n};\n\nexport type D1DatabaseSessionLike = {\n prepare(sql: string): D1PreparedStatementLike;\n batch(statements: readonly D1PreparedStatementLike[]): Promise<unknown> | unknown;\n getBookmark?(): string;\n};\n\nexport type D1DatabaseLike = D1DatabaseSessionLike & {\n exec?(sql: string): Promise<unknown> | unknown;\n withSession?(bookmark?: string): D1DatabaseSessionLike;\n dump?(): Promise<ArrayBuffer> | ArrayBuffer;\n};\n\nexport type D1DriverClient = D1DatabaseLike | D1DatabaseSessionLike;\n\nexport type D1DriverHandle<TClient = D1DriverClient> = OrmDriverHandle<\"d1\", TClient, \"sqlite\">;\n\nexport type D1DriverConfig<TSchema extends SchemaDefinition<any>> = {\n client: D1DriverClient;\n capabilities?: OrmDriverCapabilityInput;\n handle?: D1DriverHandle<D1DriverClient>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\";\n}\n\nfunction hasFunction<TName extends string>(\n value: unknown,\n name: TName,\n): value is Record<TName, (...args: any[]) => unknown> {\n return isRecord(value) && typeof value[name] === \"function\";\n}\n\nfunction toNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"bigint\") return Number(value);\n if (typeof value === \"string\" && value.trim().length) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction d1DriverCapabilities(): OrmDriverCapabilityInput {\n return {\n numericIds: \"generated\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: false,\n supportsSchemaNamespaces: false,\n supportsTransactionalDDL: false,\n nativeRelationLoading: \"partial\",\n textComparison: \"database-default\",\n textMatching: {\n equality: \"database-default\",\n contains: \"database-default\",\n ordering: \"database-default\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: true,\n hasMany: true,\n manyToMany: true,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n };\n}\n\nfunction bindStatement(statement: D1PreparedStatementLike, params: unknown[]) {\n return statement.bind(...params);\n}\n\nfunction normalizeQueryResult(result: unknown) {\n const record = isRecord(result) ? result : {};\n const meta = isRecord(record.meta) ? (record.meta as D1ResultMeta) : undefined;\n const rows = Array.isArray(record.results)\n ? record.results.filter((value): value is D1Row => isRecord(value))\n : [];\n\n return {\n rows,\n affectedRows:\n toNumber(meta?.changes) ??\n toNumber(meta?.rows_written) ??\n (rows.length > 0 ? rows.length : 0),\n insertId: meta?.last_row_id,\n };\n}\n\nasync function executeStatement(client: D1DriverClient, sql: string, params: unknown[]) {\n const statement = bindStatement(client.prepare(sql), params);\n return normalizeQueryResult(await statement.run());\n}\n\nfunction createD1Adapter(client: D1DriverClient, createSession = true): SqlAdapterLike {\n return {\n dialect: \"sqlite\",\n async query(sql, params) {\n return executeStatement(client, sql, params);\n },\n async transaction(run) {\n if (createSession && hasFunction(client, \"withSession\")) {\n return run(createD1Adapter(client.withSession() as D1DatabaseSessionLike, false));\n }\n\n return run(createD1Adapter(client, false));\n },\n };\n}\n\nexport function createD1Driver<TSchema extends SchemaDefinition<any>>(\n config: D1DriverConfig<TSchema>,\n): OrmDriver<TSchema, D1DriverHandle<D1DriverClient>> {\n const handle =\n config.handle ??\n createDriverHandle({\n kind: \"d1\",\n client: config.client,\n dialect: \"sqlite\",\n capabilities: {\n ...d1DriverCapabilities(),\n ...config.capabilities,\n },\n });\n\n return createSqlDriverFromAdapter<TSchema, D1DriverHandle<D1DriverClient>>(\n createD1Adapter(config.client),\n handle,\n );\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@farming-labs/orm-d1",
3
+ "version": "0.0.42",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.cjs"
16
+ }
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "dependencies": {
22
+ "@farming-labs/orm-sql": "0.0.42",
23
+ "@farming-labs/orm": "0.0.42"
24
+ },
25
+ "devDependencies": {
26
+ "miniflare": "^4.20260329.0",
27
+ "tsup": "^8.4.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsx ./scripts/build.ts",
31
+ "test": "vitest run --config vitest.local.config.ts",
32
+ "typecheck": "tsc --noEmit"
33
+ }
34
+ }