@drhomet/mithaq 0.0.0-stage → 0.1.1
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/LICENSE +22 -0
- package/LICENSES/payload.txt +22 -0
- package/LICENSES/ponytail.txt +21 -0
- package/dist/asas/actor.d.ts +96 -0
- package/dist/asas/actor.js +114 -0
- package/dist/asas/build.d.ts +231 -0
- package/dist/asas/build.js +787 -0
- package/dist/asas/cli/mithaq.d.ts +2 -0
- package/dist/asas/cli/mithaq.js +145 -0
- package/dist/asas/cli/upgrade.d.ts +20 -0
- package/dist/asas/cli/upgrade.js +147 -0
- package/dist/asas/http/fetch.d.ts +23 -0
- package/dist/asas/http/fetch.js +115 -0
- package/dist/asas/http/orpc.d.ts +43 -0
- package/dist/asas/http/orpc.js +135 -0
- package/dist/asas/runner/bulk.d.ts +20 -0
- package/dist/asas/runner/bulk.js +191 -0
- package/dist/asas/runner/errors.d.ts +60 -0
- package/dist/asas/runner/errors.js +59 -0
- package/dist/asas/runner/read.d.ts +68 -0
- package/dist/asas/runner/read.js +579 -0
- package/dist/asas/runner/runtime.d.ts +21 -0
- package/dist/asas/runner/runtime.js +8 -0
- package/dist/asas/runner/steps.d.ts +400 -0
- package/dist/asas/runner/steps.js +271 -0
- package/dist/asas/runner/tenant.d.ts +54 -0
- package/dist/asas/runner/tenant.js +213 -0
- package/dist/asas/runner/write.d.ts +444 -0
- package/dist/asas/runner/write.js +791 -0
- package/dist/auth/better-auth/access.d.ts +15 -0
- package/dist/auth/better-auth/access.js +71 -0
- package/dist/auth/better-auth/generate.d.ts +29 -0
- package/dist/auth/better-auth/generate.js +310 -0
- package/dist/auth/better-auth/index.d.ts +92 -0
- package/dist/auth/better-auth/index.js +81 -0
- package/dist/auth/better-auth/tenant.d.ts +18 -0
- package/dist/auth/better-auth/tenant.js +26 -0
- package/dist/auth/local/index.d.ts +285 -0
- package/dist/auth/local/index.js +736 -0
- package/dist/base/decimal.d.ts +9 -0
- package/dist/base/decimal.js +16 -0
- package/dist/base/fields.d.ts +123 -0
- package/dist/base/fields.js +51 -0
- package/dist/base/index.d.ts +46 -0
- package/dist/base/index.js +5 -0
- package/dist/base/kinds.d.ts +54 -0
- package/dist/base/kinds.js +78 -0
- package/dist/base/rules.d.ts +73 -0
- package/dist/base/rules.js +80 -0
- package/dist/drizzle/index.d.ts +438 -0
- package/dist/drizzle/index.js +832 -0
- package/dist/drizzle/kinds.d.ts +27 -0
- package/dist/drizzle/kinds.js +41 -0
- package/dist/drizzle/migrate.d.ts +133 -0
- package/dist/drizzle/migrate.js +1285 -0
- package/dist/drizzle/proxy/index.d.ts +1 -0
- package/dist/drizzle/proxy/index.js +1 -0
- package/dist/drizzle/proxy/node-postgres.d.ts +1 -0
- package/dist/drizzle/proxy/node-postgres.js +1 -0
- package/dist/drizzle/proxy/pg-core.d.ts +1 -0
- package/dist/drizzle/proxy/pg-core.js +1 -0
- package/dist/drizzle/rules.d.ts +336 -0
- package/dist/drizzle/rules.js +44 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +36 -0
- package/dist/mithaq/define.d.ts +288 -0
- package/dist/mithaq/define.js +43 -0
- package/dist/mithaq/generate-messages.d.ts +38 -0
- package/dist/mithaq/generate-messages.js +234 -0
- package/dist/mithaq/language.d.ts +335 -0
- package/dist/mithaq/language.js +76 -0
- package/dist/mithaq/lock.d.ts +71 -0
- package/dist/mithaq/lock.js +329 -0
- package/dist/mithaq/messages.d.ts +55 -0
- package/dist/mithaq/messages.js +106 -0
- package/dist/mithaq/refusal.d.ts +6 -0
- package/dist/mithaq/refusal.js +6 -0
- package/dist/mithaq/resolve.d.ts +10 -0
- package/dist/mithaq/resolve.js +954 -0
- package/dist/mithaq/rows.d.ts +87 -0
- package/dist/mithaq/rows.js +174 -0
- package/dist/mithaq/rukn.d.ts +72 -0
- package/dist/mithaq/rukn.js +15 -0
- package/dist/mithaq/standard-schema.d.ts +38 -0
- package/dist/mithaq/standard-schema.js +2 -0
- package/dist/mithaq/types.d.ts +358 -0
- package/dist/mithaq/types.js +15 -0
- package/dist/mithaq/user.d.ts +19 -0
- package/dist/mithaq/user.js +16 -0
- package/dist/mithaq/where.d.ts +32 -0
- package/dist/mithaq/where.js +87 -0
- package/dist/rbac/index.d.ts +105 -0
- package/dist/rbac/index.js +182 -0
- package/dist/rbac/steps.d.ts +22 -0
- package/dist/rbac/steps.js +161 -0
- package/dist/rich-text/index.d.ts +27 -0
- package/dist/rich-text/index.js +58 -0
- package/dist/rich-text/rich-text.d.ts +159 -0
- package/dist/rich-text/rich-text.js +372 -0
- package/dist/screen/client.d.ts +153 -0
- package/dist/screen/client.js +68 -0
- package/dist/screen/generate.d.ts +14 -0
- package/dist/screen/generate.js +226 -0
- package/dist/screen/index.d.ts +479 -0
- package/dist/screen/index.js +645 -0
- package/dist/screen/react.d.ts +95 -0
- package/dist/screen/react.js +58 -0
- package/dist/screen/studio.d.ts +24 -0
- package/dist/screen/studio.js +68 -0
- package/dist/service/index.d.ts +63 -0
- package/dist/service/index.js +15 -0
- package/dist/storage/allowed-type.d.ts +5 -0
- package/dist/storage/allowed-type.js +7 -0
- package/dist/storage/index.d.ts +43 -0
- package/dist/storage/index.js +44 -0
- package/dist/storage/storage.d.ts +384 -0
- package/dist/storage/storage.js +405 -0
- package/dist/versions/index.d.ts +37 -0
- package/dist/versions/index.js +8 -0
- package/dist/versions/versions.d.ts +104 -0
- package/dist/versions/versions.js +160 -0
- package/dist/zod/index.d.ts +184 -0
- package/dist/zod/index.js +121 -0
- package/dist/zod/kinds.d.ts +34 -0
- package/dist/zod/kinds.js +49 -0
- package/dist/zod/rules.d.ts +117 -0
- package/dist/zod/rules.js +67 -0
- package/package.json +63 -4
- package/r/mithaq-cells.json +20 -0
- package/r/mithaq-controls.json +37 -0
- package/r/mithaq-directional-icon.json +15 -0
- package/r/mithaq-expected-updated-at.json +15 -0
- package/r/mithaq-field-shell.json +18 -0
- package/r/mithaq-filter-operators.json +15 -0
- package/r/mithaq-form.json +33 -0
- package/r/mithaq-list-columns.json +23 -0
- package/r/mithaq-list-filters.json +24 -0
- package/r/mithaq-list-pagination.json +24 -0
- package/r/mithaq-list-query.json +18 -0
- package/r/mithaq-list-selection.json +19 -0
- package/r/mithaq-list.json +33 -0
- package/r/mithaq-nav.json +24 -0
- package/r/mithaq-nodes.json +34 -0
- package/r/mithaq-relationship-cell.json +20 -0
- package/r/mithaq-relationship-control.json +20 -0
- package/r/mithaq-rich-text.json +40 -0
- package/r/mithaq-screens-host.json +96 -0
- package/r/mithaq-storage.json +44 -0
- package/r/mithaq-upload.json +29 -0
- package/r/registry.json +550 -0
- package/README.md +0 -3
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
import { type SQL } from 'drizzle-orm';
|
|
2
|
+
import { type NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
3
|
+
import { pgTable, type AnyPgColumnBuilder, type PgBooleanBuilder, type PgBuildColumns, type PgEnum, type PgDateStringBuilder, type PgIntegerBuilder, type PgNumericBuilder, type PgNumericNumberBuilder, type PgSchema, type PgSerialBuilder, type PgTable, type PgTableWithColumns, type PgTextBuilder, type PgTimestampBuilder, type PgUUIDBuilder, type PgVarcharBuilder, type SetDimensions, type SetHasDefault, type SetNotNull } from 'drizzle-orm/pg-core';
|
|
4
|
+
import type { ResolvedField, ResolvedKayan, RuntimeField } from '../mithaq/types.ts';
|
|
5
|
+
import type { Store } from '../mithaq/language.ts';
|
|
6
|
+
import type { Operator } from '../mithaq/where.ts';
|
|
7
|
+
type Database = NodePgDatabase;
|
|
8
|
+
export type Tables = Record<string, ReturnType<typeof pgTable>>;
|
|
9
|
+
export type Schemas = Record<string, PgSchema | null>;
|
|
10
|
+
/** Every enum a built column uses, keyed `<schema>.<name>`. */
|
|
11
|
+
export type Enums = Record<string, PgEnum<[string, ...string[]]>>;
|
|
12
|
+
type Registry = readonly {
|
|
13
|
+
name: string;
|
|
14
|
+
fields: Record<string, RuntimeField>;
|
|
15
|
+
}[];
|
|
16
|
+
type Related<F, List extends Registry> = F extends {
|
|
17
|
+
relationTo: infer Relation;
|
|
18
|
+
} ? Relation extends string ? Extract<List[number], {
|
|
19
|
+
name: Relation;
|
|
20
|
+
}> : Relation extends () => {
|
|
21
|
+
name: infer Name;
|
|
22
|
+
} ? Extract<List[number], {
|
|
23
|
+
name: Name;
|
|
24
|
+
}> : never : never;
|
|
25
|
+
type OwnBuilder<F, Kinds> = F extends {
|
|
26
|
+
kind: infer Kind extends keyof Kinds;
|
|
27
|
+
} ? Kinds[Kind] extends {
|
|
28
|
+
readonly targets: {
|
|
29
|
+
readonly drizzle: (...args: never[]) => infer Own extends AnyPgColumnBuilder;
|
|
30
|
+
};
|
|
31
|
+
} ? Own : never : never;
|
|
32
|
+
type BaseBuilder<F, List extends Registry, Name, Store extends PropertyKey, Kinds> = F extends {
|
|
33
|
+
targets: Record<Store, infer Override extends AnyPgColumnBuilder>;
|
|
34
|
+
} ? Override : F extends {
|
|
35
|
+
relationTo: unknown;
|
|
36
|
+
} ? ReferenceBuilder<F, List> : [OwnBuilder<F, Kinds>] extends [never] ? ShippedBuilder<F, List, Name> : OwnBuilder<F, Kinds>;
|
|
37
|
+
/** A foreign key takes the type of the id it points at. */
|
|
38
|
+
type ReferenceBuilder<F, List extends Registry> = Related<F, List> extends {
|
|
39
|
+
fields: {
|
|
40
|
+
id: {
|
|
41
|
+
kind: 'number';
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
} ? PgIntegerBuilder : Related<F, List> extends {
|
|
45
|
+
fields: {
|
|
46
|
+
id: {
|
|
47
|
+
kind: 'uuid';
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
} ? PgUUIDBuilder : PgTextBuilder;
|
|
51
|
+
type ShippedBuilder<F, List extends Registry, Name> = F extends {
|
|
52
|
+
kind: 'number';
|
|
53
|
+
} ? Name extends 'id' ? PgSerialBuilder : PgNumericNumberBuilder : F extends {
|
|
54
|
+
kind: 'integer';
|
|
55
|
+
} ? PgIntegerBuilder : F extends {
|
|
56
|
+
kind: 'decimal';
|
|
57
|
+
} ? PgNumericBuilder : F extends {
|
|
58
|
+
kind: 'uuid';
|
|
59
|
+
} ? PgUUIDBuilder : F extends {
|
|
60
|
+
kind: 'checkbox';
|
|
61
|
+
} ? PgBooleanBuilder : F extends {
|
|
62
|
+
kind: 'textArray';
|
|
63
|
+
} ? SetDimensions<PgTextBuilder, 1> : F extends {
|
|
64
|
+
kind: 'datetime';
|
|
65
|
+
} ? PgTimestampBuilder : F extends {
|
|
66
|
+
kind: 'date';
|
|
67
|
+
} ? PgDateStringBuilder : F extends {
|
|
68
|
+
rules: {
|
|
69
|
+
maxLength: number;
|
|
70
|
+
};
|
|
71
|
+
} ? PgVarcharBuilder : PgTextBuilder;
|
|
72
|
+
type DefaultedBuilder<B extends AnyPgColumnBuilder, F, Name> = Name extends 'id' ? SetHasDefault<B> : F extends {
|
|
73
|
+
rules: {
|
|
74
|
+
defaultValue: unknown;
|
|
75
|
+
};
|
|
76
|
+
} | {
|
|
77
|
+
rules: {
|
|
78
|
+
defaultNow: true;
|
|
79
|
+
};
|
|
80
|
+
} ? SetHasDefault<B> : B;
|
|
81
|
+
type PreparedBuilder<B extends AnyPgColumnBuilder, F, Name> = B extends AnyPgColumnBuilder ? F extends {
|
|
82
|
+
rules: {
|
|
83
|
+
required: true;
|
|
84
|
+
};
|
|
85
|
+
} ? SetNotNull<DefaultedBuilder<B, F, Name>> : DefaultedBuilder<B, F, Name> : never;
|
|
86
|
+
type NameOf<K> = K extends {
|
|
87
|
+
name: infer Name extends string;
|
|
88
|
+
} ? Name : string;
|
|
89
|
+
type TableName<K> = K extends {
|
|
90
|
+
dbName?: infer Name extends string;
|
|
91
|
+
} ? string extends Name ? NameOf<K> : Name : NameOf<K>;
|
|
92
|
+
type Builders<K, List extends Registry, Store extends PropertyKey, Kinds> = K extends {
|
|
93
|
+
fields: infer Fields extends Record<string, RuntimeField>;
|
|
94
|
+
} ? {
|
|
95
|
+
[Name in keyof Fields as Fields[Name] extends {
|
|
96
|
+
hasMany: true;
|
|
97
|
+
} | {
|
|
98
|
+
kind: 'join';
|
|
99
|
+
} ? never : Name]: PreparedBuilder<BaseBuilder<Fields[Name], List, Name, Store, Kinds>, Fields[Name], Name>;
|
|
100
|
+
} : never;
|
|
101
|
+
type SnakeRest<S extends string> = S extends `${infer Head}${infer Rest}` ? Lowercase<Head> extends Head ? `${Head}${SnakeRest<Rest>}` : `_${Lowercase<Head>}${SnakeRest<Rest>}` : '';
|
|
102
|
+
type SnakeCase<S extends string> = S extends `${infer Head}${infer Rest}` ? `${Lowercase<Head>}${SnakeRest<Rest>}` : S;
|
|
103
|
+
/** The join table names one kayan's `hasMany` fields ask for, as `joinTableOf` builds them. */
|
|
104
|
+
type JoinNames<K> = K extends {
|
|
105
|
+
fields: infer Fields;
|
|
106
|
+
} ? {
|
|
107
|
+
[Name in keyof Fields]: Fields[Name] extends {
|
|
108
|
+
hasMany: true;
|
|
109
|
+
} ? `${TableName<K>}_${SnakeCase<Name & string>}` : never;
|
|
110
|
+
}[keyof Fields] : never;
|
|
111
|
+
type VersionsName<K> = `_${TableName<K>}_versions`;
|
|
112
|
+
type StoreKayan<K, StoreName extends PropertyKey, DefaultStore extends PropertyKey> = K extends {
|
|
113
|
+
targets: {
|
|
114
|
+
service: {
|
|
115
|
+
store: infer Named;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
} ? Named extends StoreName ? K : never : DefaultStore extends StoreName ? K : never;
|
|
119
|
+
type TableFor<K, List extends Registry, Store extends PropertyKey, Kinds> = K extends {
|
|
120
|
+
targets: Record<Store, infer Override>;
|
|
121
|
+
} ? Override : PgTableWithColumns<{
|
|
122
|
+
name: TableName<K>;
|
|
123
|
+
schema: undefined;
|
|
124
|
+
columns: PgBuildColumns<TableName<K>, Builders<K, List, Store, Kinds>>;
|
|
125
|
+
dialect: 'pg';
|
|
126
|
+
}>;
|
|
127
|
+
/** Concrete tables built for one store, keyed by registered kayan names. */
|
|
128
|
+
export type BuiltTables<List extends Registry, StoreName extends PropertyKey, DefaultStore extends PropertyKey, Kinds = {}> = {
|
|
129
|
+
[K in StoreKayan<List[number], StoreName, DefaultStore> as K['name']]: TableFor<K, List, StoreName, Kinds>;
|
|
130
|
+
} & {
|
|
131
|
+
[K in StoreKayan<List[number], StoreName, DefaultStore> as JoinNames<K>]: ReturnType<typeof pgTable>;
|
|
132
|
+
} & {
|
|
133
|
+
[K in StoreKayan<List[number], StoreName, DefaultStore> as VersionsName<K>]?: ReturnType<typeof pgTable>;
|
|
134
|
+
};
|
|
135
|
+
/** Builds one field's column. `tables` is every table built so far, keyed by kayan name, which a foreign key reads lazily. */
|
|
136
|
+
export type ColumnBuilder = (field: ResolvedField, tables: Tables) => AnyPgColumnBuilder;
|
|
137
|
+
type Modifiable = AnyPgColumnBuilder & {
|
|
138
|
+
default(value: unknown): Modifiable;
|
|
139
|
+
notNull(): Modifiable;
|
|
140
|
+
primaryKey(): Modifiable;
|
|
141
|
+
unique(): Modifiable;
|
|
142
|
+
};
|
|
143
|
+
export declare const joinTableOf: (kayan: ResolvedKayan, field: ResolvedField) => string;
|
|
144
|
+
/** The fields of one kayan the store holds as a join table rather than a column. */
|
|
145
|
+
export declare const manyFields: (kayan: ResolvedKayan | undefined) => ({
|
|
146
|
+
access?: {
|
|
147
|
+
create?: import("../mithaq/types.ts").FieldAccess<unknown, Record<string, unknown>, unknown, Partial<Record<string, unknown>>> | (import("../mithaq/types.ts").ActorBoundAccess<unknown> & {
|
|
148
|
+
readonly __mithaqFieldData: unknown;
|
|
149
|
+
readonly __mithaqFieldId: unknown;
|
|
150
|
+
});
|
|
151
|
+
read?: import("../mithaq/types.ts").FieldAccess<unknown, Record<string, unknown>, unknown, Partial<Record<string, unknown>>> | (import("../mithaq/types.ts").ActorBoundAccess<unknown> & {
|
|
152
|
+
readonly __mithaqFieldData: unknown;
|
|
153
|
+
readonly __mithaqFieldId: unknown;
|
|
154
|
+
});
|
|
155
|
+
update?: import("../mithaq/types.ts").FieldAccess<unknown, Record<string, unknown>, unknown, Partial<Record<string, unknown>>> | (import("../mithaq/types.ts").ActorBoundAccess<unknown> & {
|
|
156
|
+
readonly __mithaqFieldData: unknown;
|
|
157
|
+
readonly __mithaqFieldId: unknown;
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
label?: import("../mithaq/types.ts").LabelFunction | Readonly<Record<string, string>> | undefined;
|
|
161
|
+
description?: import("../mithaq/types.ts").LabelFunction | Readonly<Record<string, string>> | undefined;
|
|
162
|
+
placeholder?: import("../mithaq/types.ts").LabelFunction | Readonly<Record<string, string>> | undefined;
|
|
163
|
+
prefix?: Readonly<Record<string, string>> | undefined;
|
|
164
|
+
suffix?: Readonly<Record<string, string>> | undefined;
|
|
165
|
+
options?: readonly {
|
|
166
|
+
readonly value: string;
|
|
167
|
+
readonly label: Readonly<Record<string, string>>;
|
|
168
|
+
}[] | undefined;
|
|
169
|
+
dbName?: string;
|
|
170
|
+
targets?: Record<string, unknown>;
|
|
171
|
+
custom?: Record<string, unknown>;
|
|
172
|
+
} & {
|
|
173
|
+
kind: string;
|
|
174
|
+
rules?: Record<string, unknown>;
|
|
175
|
+
relationTo?: string | (() => import("../mithaq/types.ts").Kayan);
|
|
176
|
+
hasMany?: true;
|
|
177
|
+
on?: string;
|
|
178
|
+
defaultLimit?: number;
|
|
179
|
+
defaultSort?: string;
|
|
180
|
+
} & {
|
|
181
|
+
name: string;
|
|
182
|
+
column: string;
|
|
183
|
+
kayan?: string;
|
|
184
|
+
schemaTarget?: string;
|
|
185
|
+
locales?: readonly string[];
|
|
186
|
+
now?: () => unknown;
|
|
187
|
+
kindTargets?: Readonly<Record<string, unknown>>;
|
|
188
|
+
operators?: readonly Operator[];
|
|
189
|
+
sortable?: false;
|
|
190
|
+
filesIn?: readonly string[];
|
|
191
|
+
richText?: (value: unknown) => import("../rich-text/rich-text.ts").RichTextRead;
|
|
192
|
+
target?: ResolvedKayan;
|
|
193
|
+
})[];
|
|
194
|
+
export declare const schemaOf: (table: unknown) => string;
|
|
195
|
+
export type ColumnRule<Value = never> = (args: {
|
|
196
|
+
column: Modifiable;
|
|
197
|
+
value: Value;
|
|
198
|
+
field: ResolvedField;
|
|
199
|
+
}) => Modifiable;
|
|
200
|
+
/** The drizzle store: a store, plus the drizzle instance and the tables it built, read off `asas.targets.drizzle`. */
|
|
201
|
+
export type Adapter = Omit<Store, 'kinds' | 'rules'> & {
|
|
202
|
+
kinds: Record<string, ColumnBuilder>;
|
|
203
|
+
rules: Record<string, ColumnRule>;
|
|
204
|
+
readonly type: 'drizzle';
|
|
205
|
+
/** Declared, never sniffed: what says the two members below are drizzle's. */
|
|
206
|
+
readonly sql: 'drizzle';
|
|
207
|
+
db: Database;
|
|
208
|
+
tables: Tables;
|
|
209
|
+
/** Every schema the built tables are in. The push hands them to drizzle-kit, which writes no `CREATE SCHEMA` otherwise. */
|
|
210
|
+
schemas: Schemas;
|
|
211
|
+
/** Every enum a built column uses, keyed `<schema>.<name>`. drizzle-kit writes no `CREATE TYPE` for one it is not handed. */
|
|
212
|
+
enums: Enums;
|
|
213
|
+
/** The string this adapter made its instance from, which `mithaq migrate` writes into the drizzle-kit config. */
|
|
214
|
+
readonly connectionString?: string;
|
|
215
|
+
};
|
|
216
|
+
export declare const devPushMarker = "mithaq_dev_push";
|
|
217
|
+
export declare const migrationsTable: {
|
|
218
|
+
readonly schema: 'drizzle';
|
|
219
|
+
readonly table: '__mithaq_migrations';
|
|
220
|
+
};
|
|
221
|
+
export declare const refuseStrangers: ({ db, tables, by }: {
|
|
222
|
+
db: {
|
|
223
|
+
execute(query: SQL): Promise<{
|
|
224
|
+
rows: unknown[];
|
|
225
|
+
}>;
|
|
226
|
+
};
|
|
227
|
+
tables: Tables;
|
|
228
|
+
/** What would drop the stranger, which the sentence names. */
|
|
229
|
+
by: 'push' | 'baseline';
|
|
230
|
+
}) => Promise<void>;
|
|
231
|
+
export declare const pushInput: ({ tables, schemas, held }: {
|
|
232
|
+
tables: Tables;
|
|
233
|
+
schemas: Schemas;
|
|
234
|
+
held?: {
|
|
235
|
+
schema: string;
|
|
236
|
+
name: string;
|
|
237
|
+
labels: string[];
|
|
238
|
+
owned: boolean;
|
|
239
|
+
}[];
|
|
240
|
+
}) => {
|
|
241
|
+
imports: Record<string, unknown>;
|
|
242
|
+
filter: {
|
|
243
|
+
schemas: string[];
|
|
244
|
+
tables: any[];
|
|
245
|
+
entities: undefined;
|
|
246
|
+
extensions: never[];
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
/** The history table as SQL, for the statements that read and write it. */
|
|
250
|
+
export declare const historyTable: SQL<unknown>;
|
|
251
|
+
/**
|
|
252
|
+
* The one lock every writer of the history takes, a production boot running drizzle's migrator
|
|
253
|
+
* and a connect making the table, since both create the `drizzle` schema. Keyed as a boot has
|
|
254
|
+
* always keyed it, so an instance of an older release booting beside this one still waits.
|
|
255
|
+
*/
|
|
256
|
+
export declare const historyLock: SQL<unknown>;
|
|
257
|
+
type HistoryDb = {
|
|
258
|
+
execute(query: SQL): Promise<unknown>;
|
|
259
|
+
transaction<T>(run: (tx: {
|
|
260
|
+
execute(query: SQL): Promise<unknown>;
|
|
261
|
+
}) => Promise<T>): Promise<T>;
|
|
262
|
+
};
|
|
263
|
+
export declare const createHistory: (db: HistoryDb) => Promise<void>;
|
|
264
|
+
export declare const recordMigration: ({ db, hash, createdAt, name }: {
|
|
265
|
+
db: HistoryDb;
|
|
266
|
+
hash: string;
|
|
267
|
+
createdAt: number;
|
|
268
|
+
name: string;
|
|
269
|
+
}) => Promise<void>;
|
|
270
|
+
/** The drizzle store target's maps: a map per kind and a map per rule. */
|
|
271
|
+
export declare const drizzleTarget: {
|
|
272
|
+
readonly capability: 'store';
|
|
273
|
+
readonly type: 'drizzle';
|
|
274
|
+
readonly idKinds: ("number" | "text" | "uuid")[];
|
|
275
|
+
readonly kinds: {
|
|
276
|
+
number: (field: ResolvedField) => PgNumericNumberBuilder | PgSerialBuilder;
|
|
277
|
+
integer: (field: ResolvedField) => PgIntegerBuilder;
|
|
278
|
+
decimal: (field: ResolvedField) => PgNumericBuilder;
|
|
279
|
+
text: (field: ResolvedField) => PgTextBuilder<[string, ...string[]]> | PgVarcharBuilder<[string, ...string[]]>;
|
|
280
|
+
email: (field: ResolvedField) => PgTextBuilder<[string, ...string[]]> | PgVarcharBuilder<[string, ...string[]]>;
|
|
281
|
+
checkbox: (field: ResolvedField) => PgBooleanBuilder;
|
|
282
|
+
textArray: (field: ResolvedField) => SetDimensions<PgTextBuilder<[string, ...string[]]>, 1>;
|
|
283
|
+
uuid: (field: ResolvedField) => PgUUIDBuilder;
|
|
284
|
+
datetime: (field: ResolvedField) => PgTimestampBuilder;
|
|
285
|
+
date: (field: ResolvedField) => PgDateStringBuilder;
|
|
286
|
+
join: (field: ResolvedField) => never;
|
|
287
|
+
relationship: ColumnBuilder;
|
|
288
|
+
};
|
|
289
|
+
readonly rules: {
|
|
290
|
+
primary: ({ column }: {
|
|
291
|
+
column: Modifiable;
|
|
292
|
+
value: undefined;
|
|
293
|
+
field: ResolvedField;
|
|
294
|
+
}) => Modifiable;
|
|
295
|
+
required: ({ column, value: on }: {
|
|
296
|
+
column: Modifiable;
|
|
297
|
+
value: boolean;
|
|
298
|
+
field: ResolvedField;
|
|
299
|
+
}) => Modifiable;
|
|
300
|
+
unique: ({ column }: {
|
|
301
|
+
column: Modifiable;
|
|
302
|
+
value: boolean;
|
|
303
|
+
field: ResolvedField;
|
|
304
|
+
}) => Modifiable;
|
|
305
|
+
index: ({ column }: {
|
|
306
|
+
column: Modifiable;
|
|
307
|
+
value: boolean;
|
|
308
|
+
field: ResolvedField;
|
|
309
|
+
}) => Modifiable;
|
|
310
|
+
defaultValue: ({ column, value }: {
|
|
311
|
+
column: Modifiable;
|
|
312
|
+
value: string | number | boolean | Date | readonly unknown[] | import("../index.ts").Ref;
|
|
313
|
+
field: ResolvedField;
|
|
314
|
+
}) => Modifiable;
|
|
315
|
+
defaultNow: ({ column, value: on, field }: {
|
|
316
|
+
column: Modifiable;
|
|
317
|
+
value: boolean;
|
|
318
|
+
field: ResolvedField;
|
|
319
|
+
}) => any;
|
|
320
|
+
nowOnUpdate: ({ column }: {
|
|
321
|
+
column: Modifiable;
|
|
322
|
+
value: boolean;
|
|
323
|
+
field: ResolvedField;
|
|
324
|
+
}) => Modifiable;
|
|
325
|
+
providedBy: ({ column }: {
|
|
326
|
+
column: Modifiable;
|
|
327
|
+
value: Readonly<{
|
|
328
|
+
create?: import("../base/rules.ts").Provider;
|
|
329
|
+
update?: import("../base/rules.ts").Provider;
|
|
330
|
+
}>;
|
|
331
|
+
field: ResolvedField;
|
|
332
|
+
}) => Modifiable;
|
|
333
|
+
onDelete: ({ column }: {
|
|
334
|
+
column: Modifiable;
|
|
335
|
+
value: import("../index.ts").OnDelete;
|
|
336
|
+
field: ResolvedField;
|
|
337
|
+
}) => Modifiable;
|
|
338
|
+
localized: ({ column }: {
|
|
339
|
+
column: Modifiable;
|
|
340
|
+
value: boolean;
|
|
341
|
+
field: ResolvedField;
|
|
342
|
+
}) => Modifiable;
|
|
343
|
+
maxLength: ({ column }: {
|
|
344
|
+
column: Modifiable;
|
|
345
|
+
value: number;
|
|
346
|
+
field: ResolvedField;
|
|
347
|
+
}) => Modifiable;
|
|
348
|
+
precision: ({ column }: {
|
|
349
|
+
column: Modifiable;
|
|
350
|
+
value: number;
|
|
351
|
+
field: ResolvedField;
|
|
352
|
+
}) => Modifiable;
|
|
353
|
+
scale: ({ column }: {
|
|
354
|
+
column: Modifiable;
|
|
355
|
+
value: number;
|
|
356
|
+
field: ResolvedField;
|
|
357
|
+
}) => Modifiable;
|
|
358
|
+
minLength: ({ column }: {
|
|
359
|
+
column: Modifiable;
|
|
360
|
+
value: number;
|
|
361
|
+
field: ResolvedField;
|
|
362
|
+
}) => Modifiable;
|
|
363
|
+
pattern: ({ column }: {
|
|
364
|
+
column: Modifiable;
|
|
365
|
+
value: RegExp;
|
|
366
|
+
field: ResolvedField;
|
|
367
|
+
}) => Modifiable;
|
|
368
|
+
min: ({ column }: {
|
|
369
|
+
column: Modifiable;
|
|
370
|
+
value: string | number;
|
|
371
|
+
field: ResolvedField;
|
|
372
|
+
}) => Modifiable;
|
|
373
|
+
max: ({ column }: {
|
|
374
|
+
column: Modifiable;
|
|
375
|
+
value: string | number;
|
|
376
|
+
field: ResolvedField;
|
|
377
|
+
}) => Modifiable;
|
|
378
|
+
minRows: ({ column }: {
|
|
379
|
+
column: Modifiable;
|
|
380
|
+
value: number;
|
|
381
|
+
field: ResolvedField;
|
|
382
|
+
}) => Modifiable;
|
|
383
|
+
maxRows: ({ column }: {
|
|
384
|
+
column: Modifiable;
|
|
385
|
+
value: number;
|
|
386
|
+
field: ResolvedField;
|
|
387
|
+
}) => Modifiable;
|
|
388
|
+
uppercase: ({ column }: {
|
|
389
|
+
column: Modifiable;
|
|
390
|
+
value: boolean;
|
|
391
|
+
field: ResolvedField;
|
|
392
|
+
}) => Modifiable;
|
|
393
|
+
lowercase: ({ column }: {
|
|
394
|
+
column: Modifiable;
|
|
395
|
+
value: boolean;
|
|
396
|
+
field: ResolvedField;
|
|
397
|
+
}) => Modifiable;
|
|
398
|
+
trim: ({ column }: {
|
|
399
|
+
column: Modifiable;
|
|
400
|
+
value: boolean;
|
|
401
|
+
field: ResolvedField;
|
|
402
|
+
}) => Modifiable;
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
type DrizzleAdapterArguments<Kinds, Rules> = {
|
|
406
|
+
/** A ready drizzle instance, so the pool, logger and options are the developer's. */
|
|
407
|
+
db?: Database;
|
|
408
|
+
/** Or a connection string, and the adapter makes the instance. */
|
|
409
|
+
connectionString?: string;
|
|
410
|
+
kinds: Kinds;
|
|
411
|
+
rules: Rules;
|
|
412
|
+
/** The kinds this store builds an id of; set it where you replace the kinds map and its relationship builder. */
|
|
413
|
+
idKinds?: readonly string[];
|
|
414
|
+
/** Push the schema on connect instead of running migrations. */
|
|
415
|
+
push?: boolean;
|
|
416
|
+
/**
|
|
417
|
+
* What a production `connect()` does with migrations this database has not applied: `run` applies them
|
|
418
|
+
* in one transaction before serving, `refuse` refuses to start. Without it a production connect refuses.
|
|
419
|
+
*/
|
|
420
|
+
prodMigrations?: ProdMigrations;
|
|
421
|
+
};
|
|
422
|
+
/** Where a production connect finds the migrations folder, and what it does with pending ones. */
|
|
423
|
+
export type ProdMigrations = {
|
|
424
|
+
/** The folder of migration folders, as drizzle's own migrator takes it: relative to the working directory, or absolute. */
|
|
425
|
+
migrationsFolder: string;
|
|
426
|
+
pending: 'run' | 'refuse';
|
|
427
|
+
};
|
|
428
|
+
export declare const drizzleAdapter: <const Kinds extends Record<string, ColumnBuilder>, const Rules extends Record<string, ColumnRule>>({ db: ready, connectionString, kinds, rules, idKinds, push: named, prodMigrations, }: DrizzleAdapterArguments<Kinds, Rules>) => Omit<Adapter, 'kinds' | 'rules'> & {
|
|
429
|
+
kinds: Kinds;
|
|
430
|
+
rules: Rules;
|
|
431
|
+
};
|
|
432
|
+
declare module '../mithaq/rukn.ts' {
|
|
433
|
+
/** A kayan's entry under its drizzle store is its whole table, unbuilt, used as written. */
|
|
434
|
+
interface KayanConfigs<L, F, T> {
|
|
435
|
+
drizzle: PgTable;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
export {};
|