@appweaver/core 1.3.1 → 1.4.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/export/export-service.d.ts +4 -3
- package/export/export-service.js +33 -22
- package/factory/create-model.js +36 -21
- package/factory/create-service.js +5 -3
- package/package.json +2 -2
- package/prisma/client/commonInputTypes.d.ts +0 -50
- package/prisma/client/internal/class.js +3 -3
- package/prisma/client/models/File.d.ts +15 -28
- package/resource/resource-loader.js +6 -0
- package/resource/resource-routes.js +2 -2
- package/resource/resource-schema.d.ts +38 -12
- package/resource/resource-schema.js +63 -15
- package/resource/resource-service.d.ts +25 -16
- package/resource/resource-service.js +61 -26
- package/resource/schemas/resource-sort-schema.js +2 -2
- package/resource/utils/cursor-util.d.ts +60 -0
- package/resource/utils/cursor-util.js +117 -0
- package/resource/utils/index.d.ts +1 -0
- package/resource/utils/index.js +1 -0
- package/resource/utils/relation-util.d.ts +3 -3
- package/resource/utils/relation-util.js +1 -1
- package/resource/utils/sort-util.d.ts +11 -0
- package/resource/utils/sort-util.js +18 -0
- package/security/api-key/api-key-auth.js +4 -1
- package/security/auth-service.d.ts +7 -7
- package/security/auth-service.js +43 -5
- package/security/create-auth-resources.d.ts +2 -1
- package/security/oauth2/create-oauth2-plugin.js +3 -34
- package/security/oauth2/oauth2-microsoft.js +1 -1
- package/security/oauth2/oauth2-util.d.ts +9 -7
- package/security/oauth2/oauth2-util.js +17 -10
- package/security/resources/api-key/model.js +2 -0
- package/security/resources/connected-account/model.js +2 -0
- package/security/store/database-security-store.js +2 -1
- package/storage/file-service.d.ts +19 -4
- package/storage/file-service.js +199 -146
- package/storage/resources/file/model.js +4 -2
- package/types/auth.d.ts +8 -8
- package/types/generated.d.ts +8 -2
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/storage.d.ts +16 -0
- package/types/storage.js +2 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/model-util.d.ts +12 -0
- package/utils/model-util.js +113 -0
|
@@ -8,12 +8,13 @@ export type ExportStream = {
|
|
|
8
8
|
export declare class ExportService {
|
|
9
9
|
/**
|
|
10
10
|
* Exports data as a CSV stream based on the provided filter and sort parameters.
|
|
11
|
-
* The
|
|
11
|
+
* The records are read batch by batch, each following the cursor of the
|
|
12
|
+
* previous one, so the export never counts the records up front.
|
|
12
13
|
*
|
|
13
14
|
* @param {string} modelName - The resource name for which to export data.
|
|
14
15
|
* @param {Object} [filter={}] - The filter conditions to apply when retrieving the data. Default is an empty object.
|
|
15
|
-
* @param {QuerySort} [sort='-createdAt
|
|
16
|
-
* field list or as an object of field directions.
|
|
16
|
+
* @param {QuerySort} [sort='-createdAt'] - The sorting criteria for the data, given either as a comma-separated
|
|
17
|
+
* field list or as an object of field directions.
|
|
17
18
|
* @return {Promise<ExportStream>} A promise resolving to the export stream object, which includes the readable
|
|
18
19
|
* stream, MIME type, and file name for the CSV.
|
|
19
20
|
*/
|
package/export/export-service.js
CHANGED
|
@@ -9,48 +9,59 @@ const utils_1 = require("../utils");
|
|
|
9
9
|
class ExportService {
|
|
10
10
|
/**
|
|
11
11
|
* Exports data as a CSV stream based on the provided filter and sort parameters.
|
|
12
|
-
* The
|
|
12
|
+
* The records are read batch by batch, each following the cursor of the
|
|
13
|
+
* previous one, so the export never counts the records up front.
|
|
13
14
|
*
|
|
14
15
|
* @param {string} modelName - The resource name for which to export data.
|
|
15
16
|
* @param {Object} [filter={}] - The filter conditions to apply when retrieving the data. Default is an empty object.
|
|
16
|
-
* @param {QuerySort} [sort='-createdAt
|
|
17
|
-
* field list or as an object of field directions.
|
|
17
|
+
* @param {QuerySort} [sort='-createdAt'] - The sorting criteria for the data, given either as a comma-separated
|
|
18
|
+
* field list or as an object of field directions.
|
|
18
19
|
* @return {Promise<ExportStream>} A promise resolving to the export stream object, which includes the readable
|
|
19
20
|
* stream, MIME type, and file name for the CSV.
|
|
20
21
|
*/
|
|
21
|
-
async exportCsv(modelName, filter = {}, sort = '-createdAt
|
|
22
|
+
async exportCsv(modelName, filter = {}, sort = '-createdAt') {
|
|
22
23
|
const service = (0, context_1.injectService)(modelName);
|
|
23
24
|
let exportStream;
|
|
24
25
|
try {
|
|
25
|
-
// Initial query is also useful to expose any errors before stream start.
|
|
26
|
-
const checkResult = await service.query(filter, 1, 0, sort);
|
|
27
|
-
const totalCount = checkResult.totalCount;
|
|
28
26
|
const batchSize = common_1.config.EXPORT_BATCH_SIZE;
|
|
29
|
-
let page = 0;
|
|
30
27
|
const mapValues = (items) => this.mapProperties(modelName, items);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
const readBatch = (cursor) => service.query(filter, 1, batchSize, sort, cursor, false);
|
|
29
|
+
// Read before the stream is handed out, so a failing query becomes an
|
|
30
|
+
// error response instead of a truncated download
|
|
31
|
+
const firstBatch = await readBatch();
|
|
32
|
+
// A generator rather than a `read` callback, which the stream may re-enter
|
|
33
|
+
// while an awaited batch is pending and would then write it twice
|
|
34
|
+
async function* rows() {
|
|
35
|
+
if (common_1.config.EXPORT_CSV_ADD_SEP_ROW) {
|
|
36
|
+
yield `SEP=${common_1.config.EXPORT_CSV_DELIMITER}\n`;
|
|
37
|
+
}
|
|
38
|
+
let batch = firstBatch;
|
|
39
|
+
let addHeaders = common_1.config.EXPORT_CSV_ADD_HEADERS;
|
|
40
|
+
while (batch) {
|
|
41
|
+
let chunk;
|
|
42
|
+
let next;
|
|
34
43
|
try {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.push((0, utils_1.toCsv)(data, common_1.config.EXPORT_CSV_ADD_HEADERS ? page === 1 : false));
|
|
44
|
+
if (batch.resultCount > 0) {
|
|
45
|
+
chunk = (0, utils_1.toCsv)(mapValues(batch.items), addHeaders);
|
|
46
|
+
addHeaders = false;
|
|
39
47
|
}
|
|
48
|
+
// A next cursor is returned only while further records match
|
|
49
|
+
next = batch.nextCursor
|
|
50
|
+
? await readBatch(batch.nextCursor)
|
|
51
|
+
: undefined;
|
|
40
52
|
}
|
|
41
53
|
catch (e) {
|
|
54
|
+
// End early rather than fail a download already in flight
|
|
42
55
|
common_1.logger.error(e, `${modelName} export error`);
|
|
43
|
-
|
|
44
|
-
return;
|
|
56
|
+
next = undefined;
|
|
45
57
|
}
|
|
46
|
-
if (
|
|
47
|
-
|
|
58
|
+
if (chunk !== undefined) {
|
|
59
|
+
yield chunk;
|
|
48
60
|
}
|
|
61
|
+
batch = next;
|
|
49
62
|
}
|
|
50
|
-
});
|
|
51
|
-
if (common_1.config.EXPORT_CSV_ADD_SEP_ROW) {
|
|
52
|
-
exportStream.push(`SEP=${common_1.config.EXPORT_CSV_DELIMITER}\n`);
|
|
53
63
|
}
|
|
64
|
+
exportStream = node_stream_1.Readable.from(rows(), { objectMode: false });
|
|
54
65
|
}
|
|
55
66
|
catch (e) {
|
|
56
67
|
throw new errors_1.HttpError(`${modelName} export error`, 500, e);
|
package/factory/create-model.js
CHANGED
|
@@ -10,8 +10,20 @@ const common_1 = require("@appweaver/common");
|
|
|
10
10
|
const context_1 = require("../context");
|
|
11
11
|
const resource_1 = require("../resource");
|
|
12
12
|
function createModel(config, override = false) {
|
|
13
|
+
const resourceModel = buildModel(config);
|
|
14
|
+
common_1.logger.debug({ modelName: resourceModel.name }, 'Created resource model');
|
|
15
|
+
(0, context_1.define)(resourceModel, undefined, override ? 'override' : undefined);
|
|
16
|
+
// The relation inputs and audit fields reference the primary key of another
|
|
17
|
+
// model, which may not be loaded yet. Loaders call this hook once every model
|
|
18
|
+
// is registered, so those references resolve against their final id type.
|
|
19
|
+
resourceModel[common_1.RESOURCE_MODEL_RELINK] = () => {
|
|
20
|
+
Object.assign(resourceModel, buildModel(config));
|
|
21
|
+
};
|
|
22
|
+
return resourceModel;
|
|
23
|
+
}
|
|
24
|
+
function buildModel(config) {
|
|
13
25
|
const name = (0, common_1.capitalize)(config.name || node_path_1.default.basename(node_path_1.default.dirname(__dirname)));
|
|
14
|
-
const idSchema =
|
|
26
|
+
const idSchema = (0, resource_1.idSchema)(config?.id);
|
|
15
27
|
const auditSchema = buildAuditSchema(config?.audit);
|
|
16
28
|
const scalarsSchema = buildScalarsSchema(config?.scalars);
|
|
17
29
|
const virtualSchema = buildScalarsSchema(config?.virtual);
|
|
@@ -43,6 +55,7 @@ function createModel(config, override = false) {
|
|
|
43
55
|
const resourceModel = {
|
|
44
56
|
name,
|
|
45
57
|
config: config,
|
|
58
|
+
idModel: idSchema,
|
|
46
59
|
readModel,
|
|
47
60
|
createModel,
|
|
48
61
|
updateModel,
|
|
@@ -66,22 +79,20 @@ function createModel(config, override = false) {
|
|
|
66
79
|
}
|
|
67
80
|
resourceModel[common_1.RESOURCE_NAME] = name;
|
|
68
81
|
resourceModel[common_1.RESOURCE_TYPE] = common_1.RESOURCE_MODEL_TYPE;
|
|
69
|
-
common_1.logger.debug({ modelName: name }, 'Created resource model');
|
|
70
|
-
(0, context_1.define)(resourceModel, undefined, override ? 'override' : undefined);
|
|
71
82
|
return resourceModel;
|
|
72
83
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
function referencedIdField(modelName) {
|
|
85
|
+
if (!modelName) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
return context_1.context.resource.models.get((0, common_1.capitalize)(modelName))?.config?.id;
|
|
89
|
+
}
|
|
90
|
+
function authIdField() {
|
|
91
|
+
for (const model of context_1.context.resource.models.values()) {
|
|
92
|
+
if ((0, common_1.isResourceAuthModel)(model)) {
|
|
93
|
+
return model.config?.id;
|
|
94
|
+
}
|
|
83
95
|
}
|
|
84
|
-
return idType;
|
|
85
96
|
}
|
|
86
97
|
function buildAuditSchema(audit = {}) {
|
|
87
98
|
const defaultAudit = {
|
|
@@ -96,7 +107,7 @@ function buildAuditSchema(audit = {}) {
|
|
|
96
107
|
fields.push(name);
|
|
97
108
|
}
|
|
98
109
|
}
|
|
99
|
-
return typebox_1.Type.Pick(resource_1.
|
|
110
|
+
return typebox_1.Type.Pick((0, resource_1.auditSchema)(authIdField()), fields);
|
|
100
111
|
}
|
|
101
112
|
function buildScalarsSchema(fields = {}) {
|
|
102
113
|
const properties = {};
|
|
@@ -294,13 +305,17 @@ function relationInputProperties(object, relationConfig, inputType) {
|
|
|
294
305
|
// requests accept them
|
|
295
306
|
const acceptsInlineWrite = config?.input?.allowCreate ||
|
|
296
307
|
(config?.input?.allowUpdate && inputType === 'update');
|
|
297
|
-
// Existing records are connected by an id object or a bare id value
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
// the union, since the server
|
|
308
|
+
// Existing records are connected by an id object or a bare id value, both
|
|
309
|
+
// typed after the primary key of the related model. Relations accepting
|
|
310
|
+
// inline writes take the permissive input model instead, which also covers
|
|
311
|
+
// a lone id. Only one object schema may join the union, since the server
|
|
312
|
+
// strips undeclared properties.
|
|
313
|
+
const relatedIdField = referencedIdField(config?.model);
|
|
301
314
|
const itemSchemas = [
|
|
302
|
-
acceptsInlineWrite
|
|
303
|
-
|
|
315
|
+
acceptsInlineWrite
|
|
316
|
+
? typebox_1.Type.Ref(`${config.model}RelationInput`)
|
|
317
|
+
: (0, resource_1.idSchema)(relatedIdField),
|
|
318
|
+
(0, resource_1.idValueSchema)(relatedIdField)
|
|
304
319
|
];
|
|
305
320
|
const isArrayType = type === 'array';
|
|
306
321
|
const isOptional = config?.required === false;
|
|
@@ -24,15 +24,17 @@ function createService(config, override = false) {
|
|
|
24
24
|
await config.afterFind?.(result);
|
|
25
25
|
return result;
|
|
26
26
|
}
|
|
27
|
-
async query(filter = {}, page = 1, size = 50, sort = '-createdAt,
|
|
28
|
-
await config.beforeQuery?.(filter, page, size, sort);
|
|
29
|
-
const result = await super.query(filter, page, size, sort);
|
|
27
|
+
async query(filter = {}, page = 1, size = 50, sort = '-createdAt', cursor, totalCount = true) {
|
|
28
|
+
await config.beforeQuery?.(filter, page, size, sort, cursor, totalCount);
|
|
29
|
+
const result = await super.query(filter, page, size, sort, cursor, totalCount);
|
|
30
30
|
await config.afterQuery?.(result);
|
|
31
31
|
return result;
|
|
32
32
|
}
|
|
33
33
|
async aggregate(filter = {}, select, dateField = 'createdAt', from, to, step, safeIncrement = true) {
|
|
34
34
|
await config.beforeAggregate?.(filter, select, dateField, from, to, step, safeIncrement);
|
|
35
35
|
const result = await super.aggregate(filter, select, dateField, from, to, step, safeIncrement);
|
|
36
|
+
// The hook is declared once for the model, so it takes the response of
|
|
37
|
+
// every selection, of which this one holds a subset of the fields
|
|
36
38
|
await config.afterAggregate?.(result);
|
|
37
39
|
return result;
|
|
38
40
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appweaver/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Appweaver - the backend framework for AI-first development (@core)",
|
|
5
5
|
"author": "Luka Matosevic",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"generate": "weaver generate --modelPattern ./**/model.ts --typesPath ./types/generated.ts --schemaPath ./prisma/schema.prisma --clientPath ./prisma/client",
|
|
29
|
-
"db:recreate": "rimraf dev.db && rimraf prisma/migrations
|
|
29
|
+
"db:recreate": "rimraf dev.db && rimraf prisma/migrations && weaver migration new init"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@fastify/auth": "5.0.4",
|
|
@@ -171,31 +171,6 @@ export type JsonWithAggregatesFilterBase<$PrismaModel = never> = {
|
|
|
171
171
|
_min?: Prisma.NestedJsonFilter<$PrismaModel>;
|
|
172
172
|
_max?: Prisma.NestedJsonFilter<$PrismaModel>;
|
|
173
173
|
};
|
|
174
|
-
export type IntNullableFilter<$PrismaModel = never> = {
|
|
175
|
-
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
|
|
176
|
-
in?: number[] | null;
|
|
177
|
-
notIn?: number[] | null;
|
|
178
|
-
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
179
|
-
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
180
|
-
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
181
|
-
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
182
|
-
not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null;
|
|
183
|
-
};
|
|
184
|
-
export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
|
|
185
|
-
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
|
|
186
|
-
in?: number[] | null;
|
|
187
|
-
notIn?: number[] | null;
|
|
188
|
-
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
189
|
-
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
190
|
-
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
191
|
-
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
192
|
-
not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null;
|
|
193
|
-
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
194
|
-
_avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>;
|
|
195
|
-
_sum?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
196
|
-
_min?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
197
|
-
_max?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
198
|
-
};
|
|
199
174
|
export type NestedIntFilter<$PrismaModel = never> = {
|
|
200
175
|
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
201
176
|
in?: number[];
|
|
@@ -368,28 +343,3 @@ export type NestedJsonFilterBase<$PrismaModel = never> = {
|
|
|
368
343
|
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null;
|
|
369
344
|
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter;
|
|
370
345
|
};
|
|
371
|
-
export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
|
|
372
|
-
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
|
|
373
|
-
in?: number[] | null;
|
|
374
|
-
notIn?: number[] | null;
|
|
375
|
-
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
376
|
-
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
377
|
-
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
378
|
-
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
|
|
379
|
-
not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null;
|
|
380
|
-
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
381
|
-
_avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>;
|
|
382
|
-
_sum?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
383
|
-
_min?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
384
|
-
_max?: Prisma.NestedIntNullableFilter<$PrismaModel>;
|
|
385
|
-
};
|
|
386
|
-
export type NestedFloatNullableFilter<$PrismaModel = never> = {
|
|
387
|
-
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null;
|
|
388
|
-
in?: number[] | null;
|
|
389
|
-
notIn?: number[] | null;
|
|
390
|
-
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
|
|
391
|
-
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
|
|
392
|
-
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
|
|
393
|
-
gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
|
|
394
|
-
not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null;
|
|
395
|
-
};
|
|
@@ -51,7 +51,7 @@ const config = {
|
|
|
51
51
|
"clientVersion": "7.9.1",
|
|
52
52
|
"engineVersion": "e922089b7d7502aff4249d5da3420f6fa55fc6ad",
|
|
53
53
|
"activeProvider": "sqlite",
|
|
54
|
-
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String\n purpose String\n expiresAt DateTime\n data Json\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([tokenHash, purpose])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId
|
|
54
|
+
"inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String\n purpose String\n expiresAt DateTime\n data Json\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([tokenHash, purpose])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId String?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([resourceField, resourceName, resourceId])\n}\n",
|
|
55
55
|
"runtimeDataModel": {
|
|
56
56
|
"models": {},
|
|
57
57
|
"enums": {},
|
|
@@ -62,10 +62,10 @@ const config = {
|
|
|
62
62
|
"graph": ""
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
|
-
config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"
|
|
65
|
+
config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}");
|
|
66
66
|
config.parameterizationSchema = {
|
|
67
67
|
strings: JSON.parse("[\"where\",\"ApiKey.findUnique\",\"ApiKey.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"ApiKey.findFirst\",\"ApiKey.findFirstOrThrow\",\"ApiKey.findMany\",\"data\",\"ApiKey.createOne\",\"ApiKey.createMany\",\"ApiKey.createManyAndReturn\",\"ApiKey.updateOne\",\"ApiKey.updateMany\",\"ApiKey.updateManyAndReturn\",\"create\",\"update\",\"ApiKey.upsertOne\",\"ApiKey.deleteOne\",\"ApiKey.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"ApiKey.groupBy\",\"ApiKey.aggregate\",\"ConnectedAccount.findUnique\",\"ConnectedAccount.findUniqueOrThrow\",\"ConnectedAccount.findFirst\",\"ConnectedAccount.findFirstOrThrow\",\"ConnectedAccount.findMany\",\"ConnectedAccount.createOne\",\"ConnectedAccount.createMany\",\"ConnectedAccount.createManyAndReturn\",\"ConnectedAccount.updateOne\",\"ConnectedAccount.updateMany\",\"ConnectedAccount.updateManyAndReturn\",\"ConnectedAccount.upsertOne\",\"ConnectedAccount.deleteOne\",\"ConnectedAccount.deleteMany\",\"ConnectedAccount.groupBy\",\"ConnectedAccount.aggregate\",\"OneTimeToken.findUnique\",\"OneTimeToken.findUniqueOrThrow\",\"OneTimeToken.findFirst\",\"OneTimeToken.findFirstOrThrow\",\"OneTimeToken.findMany\",\"OneTimeToken.createOne\",\"OneTimeToken.createMany\",\"OneTimeToken.createManyAndReturn\",\"OneTimeToken.updateOne\",\"OneTimeToken.updateMany\",\"OneTimeToken.updateManyAndReturn\",\"OneTimeToken.upsertOne\",\"OneTimeToken.deleteOne\",\"OneTimeToken.deleteMany\",\"OneTimeToken.groupBy\",\"OneTimeToken.aggregate\",\"permissions\",\"roles\",\"Permission.findUnique\",\"Permission.findUniqueOrThrow\",\"Permission.findFirst\",\"Permission.findFirstOrThrow\",\"Permission.findMany\",\"Permission.createOne\",\"Permission.createMany\",\"Permission.createManyAndReturn\",\"Permission.updateOne\",\"Permission.updateMany\",\"Permission.updateManyAndReturn\",\"Permission.upsertOne\",\"Permission.deleteOne\",\"Permission.deleteMany\",\"Permission.groupBy\",\"Permission.aggregate\",\"Role.findUnique\",\"Role.findUniqueOrThrow\",\"Role.findFirst\",\"Role.findFirstOrThrow\",\"Role.findMany\",\"Role.createOne\",\"Role.createMany\",\"Role.createManyAndReturn\",\"Role.updateOne\",\"Role.updateMany\",\"Role.updateManyAndReturn\",\"Role.upsertOne\",\"Role.deleteOne\",\"Role.deleteMany\",\"Role.groupBy\",\"Role.aggregate\",\"Seeder.findUnique\",\"Seeder.findUniqueOrThrow\",\"Seeder.findFirst\",\"Seeder.findFirstOrThrow\",\"Seeder.findMany\",\"Seeder.createOne\",\"Seeder.createMany\",\"Seeder.createManyAndReturn\",\"Seeder.updateOne\",\"Seeder.updateMany\",\"Seeder.updateManyAndReturn\",\"Seeder.upsertOne\",\"Seeder.deleteOne\",\"Seeder.deleteMany\",\"Seeder.groupBy\",\"Seeder.aggregate\",\"File.findUnique\",\"File.findUniqueOrThrow\",\"File.findFirst\",\"File.findFirstOrThrow\",\"File.findMany\",\"File.createOne\",\"File.createMany\",\"File.createManyAndReturn\",\"File.updateOne\",\"File.updateMany\",\"File.updateManyAndReturn\",\"File.upsertOne\",\"File.deleteOne\",\"File.deleteMany\",\"File.groupBy\",\"File.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"name\",\"originalName\",\"mimeType\",\"sizeBytes\",\"checksum\",\"title\",\"description\",\"resourceField\",\"resourceName\",\"resourceId\",\"updatedAt\",\"createdAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"seederName\",\"startedAt\",\"finishedAt\",\"logs\",\"every\",\"some\",\"none\",\"tokenHash\",\"purpose\",\"expiresAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"provider\",\"providerAccountId\",\"scope\",\"lastLoginAt\",\"key\",\"keyHash\",\"enabled\",\"connectOrCreate\",\"upsert\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
|
|
68
|
-
graph: "qQJHcAx-AADiAQAwfwAABAAQgAEAAOIBADCBAQIAAAABggEBAMkBACGIAQEAyQEAIYwBQADLAQAhjQFAAMsBACGiAUAA5AEAIawBAQDIAQAhrQEBAAAAAa4BIADjAQAhAQAAAAEAIAEAAAABACAMfgAA4gEAMH8AAAQAEIABAADiAQAwgQECAMcBACGCAQEAyQEAIYgBAQDJAQAhjAFAAMsBACGNAUAAywEAIaIBQADkAQAhrAEBAMgBACGtAQEAyAEAIa4BIADjAQAhA4IBAADlAQAgiAEAAOUBACCiAQAA5QEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAmBAQIAAAABggEBAAAAAYgBAQAAAAGMAUAAAAABjQFAAAAAAaIBQAAAAAGsAQEAAAABrQEBAAAAAa4BIAAAAAEBCAAACQAgCYEBAgAAAAGCAQEAAAABiAEBAAAAAYwBQAAAAAGNAUAAAAABogFAAAAAAawBAQAAAAGtAQEAAAABrgEgAAAAAQEIAAALADABCAAACwAwCYEBAgDsAQAhggEBAO0BACGIAQEA7QEAIYwBQADvAQAhjQFAAO8BACGiAUAAqQIAIawBAQDrAQAhrQEBAOsBACGuASAAqAIAIQIAAAABACAIAAAOACAJgQECAOwBACGCAQEA7QEAIYgBAQDtAQAhjAFAAO8BACGNAUAA7wEAIaIBQACpAgAhrAEBAOsBACGtAQEA6wEAIa4BIACoAgAhAgAAAAQAIAgAABAAIAIAAAAEACAIAAAQACADAAAAAQAgDwAACQAgEAAADgAgAQAAAAEAIAEAAAAEACAIFQAAowIAIBYAAKQCACAXAACnAgAgGAAApgIAIBkAAKUCACCCAQAA5QEAIIgBAADlAQAgogEAAOUBACAMfgAA2wEAMH8AABcAEIABAADbAQAwgQECALUBACGCAQEAtwEAIYgBAQC3AQAhjAFAALkBACGNAUAAuQEAIaIBQADdAQAhrAEBALYBACGtAQEAtgEAIa4BIADcAQAhAwAAAAQAIAMAABYAMBQAABcAIAMAAAAEACADAAAFADAEAAABACAKfgAA2gEAMH8AAB0AEIABAADaAQAwgQECAAAAAYwBQADLAQAhjQFAAMsBACGoAQEAyAEAIakBAQDIAQAhqgEBAMkBACGrAUAAywEAIQEAAAAaACABAAAAGgAgCn4AANoBADB_AAAdABCAAQAA2gEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIagBAQDIAQAhqQEBAMgBACGqAQEAyQEAIasBQADLAQAhAaoBAADlAQAgAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAIgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAJAAwAQgAACQAMAeBAQIA7AEAIYwBQADvAQAhjQFAAO8BACGoAQEA6wEAIakBAQDrAQAhqgEBAO0BACGrAUAA7wEAIQIAAAAaACAIAAAnACAHgQECAOwBACGMAUAA7wEAIY0BQADvAQAhqAEBAOsBACGpAQEA6wEAIaoBAQDtAQAhqwFAAO8BACECAAAAHQAgCAAAKQAgAgAAAB0AIAgAACkAIAMAAAAaACAPAAAiACAQAAAnACABAAAAGgAgAQAAAB0AIAYVAACeAgAgFgAAnwIAIBcAAKICACAYAAChAgAgGQAAoAIAIKoBAADlAQAgCn4AANkBADB_AAAwABCAAQAA2QEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC5AQAhAwAAAB0AIAMAAC8AMBQAADAAIAMAAAAdACADAAAeADAEAAAaACAKCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgAAAAGMAUAAywEAIY0BQADLAQAhoAEBAMgBACGhAQEAyAEAIaIBQADLAQAhAQAAADMAIAEAAAAzACAKCAAA2AEAIH4AANcBADB_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_AAB_ABCAAQAAzgEAMIEBAgC1AQAhggEBALYBACGMAUAAuQEAIY0BQAC5AQAhAwAAAE4AIAMAAH4AMBQAAH8AIAMAAABOACADAABPADAEAABQACAJfgAAzQEAMH8AAIUBABCAAQAAzQEAMIEBAQAAAAGGAQEAyAEAIZkBAQAAAAGaAUAAywEAIZsBQADLAQAhnAEBAMkBACEBAAAAggEAIAEAAACCAQAgCX4AAM0BADB_AACFAQAQgAEAAM0BADCBAQEAyAEAIYYBAQDIAQAhmQEBAMgBACGaAUAAywEAIZsBQADLAQAhnAEBAMkBACEBnAEAAOUBACADAAAAhQEAIAMAAIYBADAEAACCAQAgAwAAAIUBACADAACGAQAwBAAAggEAIAMAAACFAQAgAwAAhgEAMAQAAIIBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIoBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIwBADABCAAAjAEAMAaBAQEA6wEAIYYBAQDrAQAhmQEBAOsBACGaAUAA7wEAIZsBQADvAQAhnAEBAO0BACECAAAAggEAIAgAAI8BACAGgQEBAOsBACGGAQEA6wEAIZkBAQDrAQAhmgFAAO8BACGbAUAA7wEAIZwBAQDtAQAhAgAAAIUBACAIAACRAQAgAgAAAIUBACAIAACRAQAgAwAAAIIBACAPAACKAQAgEAAAjwEAIAEAAACCAQAgAQAAAIUBACAEFQAA8AEAIBgAAPIBACAZAADxAQAgnAEAAOUBACAJfgAAzAEAMH8AAJgBABCAAQAAzAEAMIEBAQC2AQAhhgEBALYBACGZAQEAtgEAIZoBQAC5AQAhmwFAALkBACGcAQEAtwEAIQMAAACFAQAgAwAAlwEAMBQAAJgBACADAAAAhQEAIAMAAIYBADAEAACCAQAgEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAAAABggEBAAAAAYMBAQDIAQAhhAEBAMgBACGFAQIAxwEAIYYBAQDIAQAhhwEBAMkBACGIAQEAyQEAIYkBAQDJAQAhigEBAMkBACGLAQIAygEAIYwBQADLAQAhjQFAAMsBACEBAAAAmwEAIAEAAACbAQAgEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAgDKAQAhjAFAAMsBACGNAUAAywEAIQWHAQAA5QEAIIgBAADlAQAgiQEAAOUBACCKAQAA5QEAIIsBAADlAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIAMAAACeAQAgAwAAnwEAMAQAAJsBACADAAAAngEAIAMAAJ8BADAEAACbAQAgDYEBAgAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQIAAAABhgEBAAAAAYcBAQAAAAGIAQEAAAABiQEBAAAAAYoBAQAAAAGLAQIAAAABjAFAAAAAAY0BQAAAAAEBCAAAowEAIA2BAQIAAAABggEBAAAAAYMBAQAAAAGEAQEAAAABhQECAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAGKAQEAAAABiwECAAAAAYwBQAAAAAGNAUAAAAABAQgAAKUBADABCAAApQEAMA2BAQIA7AEAIYIBAQDrAQAhgwEBAOsBACGEAQEA6wEAIYUBAgDsAQAhhgEBAOsBACGHAQEA7QEAIYgBAQDtAQAhiQEBAO0BACGKAQEA7QEAIYsBAgDuAQAhjAFAAO8BACGNAUAA7wEAIQIAAACbAQAgCAAAqAEAIA2BAQIA7AEAIYIBAQDrAQAhgwEBAOsBACGEAQEA6wEAIYUBAgDsAQAhhgEBAOsBACGHAQEA7QEAIYgBAQDtAQAhiQEBAO0BACGKAQEA7QEAIYsBAgDuAQAhjAFAAO8BACGNAUAA7wEAIQIAAACeAQAgCAAAqgEAIAIAAACeAQAgCAAAqgEAIAMAAACbAQAgDwAAowEAIBAAAKgBACABAAAAmwEAIAEAAACeAQAgChUAAOYBACAWAADnAQAgFwAA6gEAIBgAAOkBACAZAADoAQAghwEAAOUBACCIAQAA5QEAIIkBAADlAQAgigEAAOUBACCLAQAA5QEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQIAuAEAIYwBQAC5AQAhjQFAALkBACEDAAAAngEAIAMAALABADAUAACxAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQIAuAEAIYwBQAC5AQAhjQFAALkBACENFQAAuwEAIBYAAMUBACAXAAC7AQAgGAAAuwEAIBkAALsBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMQBACEOFQAAuwEAIBgAAMMBACAZAADDAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDCAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAAL4BACAYAADBAQAgGQAAwQEAII4BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQ0VAAC-AQAgFgAAvwEAIBcAAL4BACAYAAC-AQAgGQAAvgEAII4BAgAAAAGPAQIAAAAFkAECAAAABZEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAvQEAIQsVAAC7AQAgGAAAvAEAIBkAALwBACCOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALoBACELFQAAuwEAIBgAALwBACAZAAC8AQAgjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC6AQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAuwEAIQiOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALwBACENFQAAvgEAIBYAAL8BACAXAAC-AQAgGAAAvgEAIBkAAL4BACCOAQIAAAABjwECAAAABZABAgAAAAWRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAL0BACEIjgECAAAAAY8BAgAAAAWQAQIAAAAFkQECAAAAAZIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgC-AQAhCI4BCAAAAAGPAQgAAAAFkAEIAAAABZEBCAAAAAGSAQgAAAABkwEIAAAAAZQBCAAAAAGVAQgAvwEAIQ4VAAC-AQAgGAAAwQEAIBkAAMEBACCOAQEAAAABjwEBAAAABZABAQAAAAWRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMABACGWAQEAAAABlwEBAAAAAZgBAQAAAAELjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDBAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAALsBACAYAADDAQAgGQAAwwEAII4BAQAAAAGPAQEAAAAEkAEBAAAABJEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwgEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQuOAQEAAAABjwEBAAAABJABAQAAAASRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMMBACGWAQEAAAABlwEBAAAAAZgBAQAAAAENFQAAuwEAIBYAAMUBACAXAAC7AQAgGAAAuwEAIBkAALsBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMQBACEIjgEIAAAAAY8BCAAAAASQAQgAAAAEkQEIAAAAAZIBCAAAAAGTAQgAAAABlAEIAAAAAZUBCADFAQAhEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAgDKAQAhjAFAAMsBACGNAUAAywEAIQiOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECALsBACELjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDDAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABC44BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwQEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQiOAQIAAAABjwECAAAABZABAgAAAAWRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAL4BACEIjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC8AQAhCX4AAMwBADB_AACYAQAQgAEAAMwBADCBAQEAtgEAIYYBAQC2AQAhmQEBALYBACGaAUAAuQEAIZsBQAC5AQAhnAEBALcBACEJfgAAzQEAMH8AAIUBABCAAQAAzQEAMIEBAQDIAQAhhgEBAMgBACGZAQEAyAEAIZoBQADLAQAhmwFAAMsBACGcAQEAyQEAIQd-AADOAQAwfwAAfwAQgAEAAM4BADCBAQIAtQEAIYIBAQC2AQAhjAFAALkBACGNAUAAuQEAIQd-AADPAQAwfwAAaQAQgAEAAM8BADCBAQIAtQEAIYIBAQC2AQAhjAFAALkBACGNAUAAuQEAIQg9AADRAQAgfgAA0AEAMH8AAFIAEIABAADQAQAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEDnQEAAE4AIJ4BAABOACCfAQAATgAgCDwAANMBACB-AADSAQAwfwAATgAQgAEAANIBADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQOdAQAAUgAgngEAAFIAIJ8BAABSACAKCAAA1QEAIH4AANQBADB_AABJABCAAQAA1AEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIaABAQC2AQAhoQEBALYBACGiAUAAuQEAIQoVAAC7AQAgGAAA1gEAIBkAANYBACCOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABB44BgAAAAAGVAYAAAAABowEBAAAAAaQBAQAAAAGlAQEAAAABpgGAAAAAAacBgAAAAAEKCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIaABAQDIAQAhoQEBAMgBACGiAUAAywEAIQeOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABCn4AANkBADB_AAAwABCAAQAA2QEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC5AQAhCn4AANoBADB_AAAdABCAAQAA2gEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIagBAQDIAQAhqQEBAMgBACGqAQEAyQEAIasBQADLAQAhDH4AANsBADB_AAAXABCAAQAA2wEAMIEBAgC1AQAhggEBALcBACGIAQEAtwEAIYwBQAC5AQAhjQFAALkBACGiAUAA3QEAIawBAQC2AQAhrQEBALYBACGuASAA3AEAIQUVAAC7AQAgGAAA4QEAIBkAAOEBACCOASAAAAABlQEgAOABACELFQAAvgEAIBgAAN8BACAZAADfAQAgjgFAAAAAAY8BQAAAAAWQAUAAAAAFkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQADeAQAhCxUAAL4BACAYAADfAQAgGQAA3wEAII4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA3gEAIQiOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAN8BACEFFQAAuwEAIBgAAOEBACAZAADhAQAgjgEgAAAAAZUBIADgAQAhAo4BIAAAAAGVASAA4QEAIQx-AADiAQAwfwAABAAQgAEAAOIBADCBAQIAxwEAIYIBAQDJAQAhiAEBAMkBACGMAUAAywEAIY0BQADLAQAhogFAAOQBACGsAQEAyAEAIa0BAQDIAQAhrgEgAOMBACECjgEgAAAAAZUBIADhAQAhCI4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA3wEAIQAAAAAAAAGxAQEAAAABBbEBAgAAAAG3AQIAAAABuAECAAAAAbkBAgAAAAG6AQIAAAABAbEBAQAAAAEFsQECAAAAAbcBAgAAAAG4AQIAAAABuQECAAAAAboBAgAAAAEBsQFAAAAAAQAAAAAAAAAACg8AAPkBADAQAAD9AQAwrwEAAPoBADCwAQAA-wEAMLEBAAD8AQAwsgEAAPwBADCzAQAA_AEAMLQBAAD8AQAwtQEAAP4BADC2AQAA_wEAMASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAgAAAEwAIA8AAIMCACADAAAATAAgDwAAgwIAIBAAAIICACAIPQAA0QEAIH4AANABADB_AABSABCAAQAA0AEAMIEBAgAAAAGCAQEAAAABjAFAAMsBACGNAUAAywEAIQIAAABMACAIAACCAgAgAgAAAIACACAIAACBAgAgB34AAP8BADB_AACAAgAQgAEAAP8BADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQd-AAD_AQAwfwAAgAIAEIABAAD_AQAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQMPAAD5AQAwrwEAAPoBADC0AQAA_AEAMAAAAAAACg8AAIsCADAQAACPAgAwrwEAAIwCADCwAQAAjQIAMLEBAACOAgAwsgEAAI4CADCzAQAAjgIAMLQBAACOAgAwtQEAAJACADC2AQAAkQIAMASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAgAAAFAAIA8AAJUCACADAAAAUAAgDwAAlQIAIBAAAJQCACAIPAAA0wEAIH4AANIBADB_AABOABCAAQAA0gEAMIEBAgAAAAGCAQEAAAABjAFAAMsBACGNAUAAywEAIQIAAABQACAIAACUAgAgAgAAAJICACAIAACTAgAgB34AAJECADB_AACSAgAQgAEAAJECADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQd-AACRAgAwfwAAkgIAEIABAACRAgAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQMPAACLAgAwrwEAAIwCADC0AQAAjgIAMAAAAAAAAAAAAAAAAAAAAAAAAbEBIAAAAAEBsQFAAAAAAQAAAAAFFQAGFgAHFwAIGAAJGQAKAAAAAAAFFQAGFgAHFwAIGAAJGQAKAAAABRUAEBYAERcAEhgAExkAFAAAAAAABRUAEBYAERcAEhgAExkAFAAAAAUVABoWABsXABwYAB0ZAB4AAAAAAAUVABoWABsXABwYAB0ZAB4CFQAjPVEhAhUAIjxUIAE8VQABPVYAAAAFFQAnFgAoFwApGAAqGQArAAAAAAAFFQAnFgAoFwApGAAqGQArAAAFFQAwFgAxFwAyGAAzGQA0AAAAAAAFFQAwFgAxFwAyGAAzGQA0AAAAAxUAOhgAOxkAPAAAAAMVADoYADsZADwAAAAFFQBCFgBDFwBEGABFGQBGAAAAAAAFFQBCFgBDFwBEGABFGQBGAQIBAgMBBQYBBgcBBwgBCQoBCgwCCw0DDA8BDRECDhIEERMBEhQBExUCGhgFGxkLHBsMHRwMHh8MHyAMICEMISMMIiUCIyYNJCgMJSoCJisOJywMKC0MKS4CKjEPKzIVLDQWLTUWLjgWLzkWMDoWMTwWMj4CMz8XNEEWNUMCNkQYN0UWOEYWOUcCOkoZO0sfPk0gP1cgQFggQVkgQlogQ1wgRF4CRV8kRmEgR2MCSGQlSWUgSmYgS2cCTGomTWssTmwhT20hUG4hUW8hUnAhU3IhVHQCVXUtVnchV3kCWHouWXshWnwhW30CXIABL12BATVegwE2X4QBNmCHATZhiAE2YokBNmOLATZkjQECZY4BN2aQATZnkgECaJMBOGmUATZqlQE2a5YBAmyZATltmgE9bpwBPm-dAT5woAE-caEBPnKiAT5zpAE-dKYBAnWnAT92qQE-d6sBAnisAUB5rQE-eq4BPnuvAQJ8sgFBfbMBRw"
|
|
68
|
+
graph: "pAJHcAx-AADeAQAwfwAABAAQgAEAAN4BADCBAQIAAAABggEBAMYBACGIAQEAxgEAIYwBQADHAQAhjQFAAMcBACGiAUAA4AEAIawBAQDFAQAhrQEBAAAAAa4BIADfAQAhAQAAAAEAIAEAAAABACAMfgAA3gEAMH8AAAQAEIABAADeAQAwgQECAMQBACGCAQEAxgEAIYgBAQDGAQAhjAFAAMcBACGNAUAAxwEAIaIBQADgAQAhrAEBAMUBACGtAQEAxQEAIa4BIADfAQAhA4IBAADhAQAgiAEAAOEBACCiAQAA4QEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAmBAQIAAAABggEBAAAAAYgBAQAAAAGMAUAAAAABjQFAAAAAAaIBQAAAAAGsAQEAAAABrQEBAAAAAa4BIAAAAAEBCAAACQAgCYEBAgAAAAGCAQEAAAABiAEBAAAAAYwBQAAAAAGNAUAAAAABogFAAAAAAawBAQAAAAGtAQEAAAABrgEgAAAAAQEIAAALADABCAAACwAwCYEBAgDoAQAhggEBAOkBACGIAQEA6QEAIYwBQADqAQAhjQFAAOoBACGiAUAApAIAIawBAQDnAQAhrQEBAOcBACGuASAAowIAIQIAAAABACAIAAAOACAJgQECAOgBACGCAQEA6QEAIYgBAQDpAQAhjAFAAOoBACGNAUAA6gEAIaIBQACkAgAhrAEBAOcBACGtAQEA5wEAIa4BIACjAgAhAgAAAAQAIAgAABAAIAIAAAAEACAIAAAQACADAAAAAQAgDwAACQAgEAAADgAgAQAAAAEAIAEAAAAEACAIFQAAngIAIBYAAJ8CACAXAACiAgAgGAAAoQIAIBkAAKACACCCAQAA4QEAIIgBAADhAQAgogEAAOEBACAMfgAA1wEAMH8AABcAEIABAADXAQAwgQECALUBACGCAQEAtwEAIYgBAQC3AQAhjAFAALgBACGNAUAAuAEAIaIBQADZAQAhrAEBALYBACGtAQEAtgEAIa4BIADYAQAhAwAAAAQAIAMAABYAMBQAABcAIAMAAAAEACADAAAFADAEAAABACAKfgAA1gEAMH8AAB0AEIABAADWAQAwgQECAAAAAYwBQADHAQAhjQFAAMcBACGoAQEAxQEAIakBAQDFAQAhqgEBAMYBACGrAUAAxwEAIQEAAAAaACABAAAAGgAgCn4AANYBADB_AAAdABCAAQAA1gEAMIEBAgDEAQAhjAFAAMcBACGNAUAAxwEAIagBAQDFAQAhqQEBAMUBACGqAQEAxgEAIasBQADHAQAhAaoBAADhAQAgAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAIgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAJAAwAQgAACQAMAeBAQIA6AEAIYwBQADqAQAhjQFAAOoBACGoAQEA5wEAIakBAQDnAQAhqgEBAOkBACGrAUAA6gEAIQIAAAAaACAIAAAnACAHgQECAOgBACGMAUAA6gEAIY0BQADqAQAhqAEBAOcBACGpAQEA5wEAIaoBAQDpAQAhqwFAAOoBACECAAAAHQAgCAAAKQAgAgAAAB0AIAgAACkAIAMAAAAaACAPAAAiACAQAAAnACABAAAAGgAgAQAAAB0AIAYVAACZAgAgFgAAmgIAIBcAAJ0CACAYAACcAgAgGQAAmwIAIKoBAADhAQAgCn4AANUBADB_AAAwABCAAQAA1QEAMIEBAgC1AQAhjAFAALgBACGNAUAAuAEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC4AQAhAwAAAB0AIAMAAC8AMBQAADAAIAMAAAAdACADAAAeADAEAAAaACAKCAAA1AEAIH4AANMBADB_AAA2ABCAAQAA0wEAMIEBAgAAAAGMAUAAxwEAIY0BQADHAQAhoAEBAMUBACGhAQEAxQEAIaIBQADHAQAhAQAAADMAIAEAAAAzACAKCAAA1AEAIH4AANMBADB_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_AAB_ABCAAQAAygEAMIEBAgC1AQAhggEBALYBACGMAUAAuAEAIY0BQAC4AQAhAwAAAE4AIAMAAH4AMBQAAH8AIAMAAABOACADAABPADAEAABQACAJfgAAyQEAMH8AAIUBABCAAQAAyQEAMIEBAQAAAAGGAQEAxQEAIZkBAQAAAAGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEBAAAAggEAIAEAAACCAQAgCX4AAMkBADB_AACFAQAQgAEAAMkBADCBAQEAxQEAIYYBAQDFAQAhmQEBAMUBACGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEBnAEAAOEBACADAAAAhQEAIAMAAIYBADAEAACCAQAgAwAAAIUBACADAACGAQAwBAAAggEAIAMAAACFAQAgAwAAhgEAMAQAAIIBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIoBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIwBADABCAAAjAEAMAaBAQEA5wEAIYYBAQDnAQAhmQEBAOcBACGaAUAA6gEAIZsBQADqAQAhnAEBAOkBACECAAAAggEAIAgAAI8BACAGgQEBAOcBACGGAQEA5wEAIZkBAQDnAQAhmgFAAOoBACGbAUAA6gEAIZwBAQDpAQAhAgAAAIUBACAIAACRAQAgAgAAAIUBACAIAACRAQAgAwAAAIIBACAPAACKAQAgEAAAjwEAIAEAAACCAQAgAQAAAIUBACAEFQAA6wEAIBgAAO0BACAZAADsAQAgnAEAAOEBACAJfgAAyAEAMH8AAJgBABCAAQAAyAEAMIEBAQC2AQAhhgEBALYBACGZAQEAtgEAIZoBQAC4AQAhmwFAALgBACGcAQEAtwEAIQMAAACFAQAgAwAAlwEAMBQAAJgBACADAAAAhQEAIAMAAIYBADAEAACCAQAgEH4AAMMBADB_AACeAQAQgAEAAMMBADCBAQIAAAABggEBAAAAAYMBAQDFAQAhhAEBAMUBACGFAQIAxAEAIYYBAQDFAQAhhwEBAMYBACGIAQEAxgEAIYkBAQDGAQAhigEBAMYBACGLAQEAxgEAIYwBQADHAQAhjQFAAMcBACEBAAAAmwEAIAEAAACbAQAgEH4AAMMBADB_AACeAQAQgAEAAMMBADCBAQIAxAEAIYIBAQDFAQAhgwEBAMUBACGEAQEAxQEAIYUBAgDEAQAhhgEBAMUBACGHAQEAxgEAIYgBAQDGAQAhiQEBAMYBACGKAQEAxgEAIYsBAQDGAQAhjAFAAMcBACGNAUAAxwEAIQWHAQAA4QEAIIgBAADhAQAgiQEAAOEBACCKAQAA4QEAIIsBAADhAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIAMAAACeAQAgAwAAnwEAMAQAAJsBACADAAAAngEAIAMAAJ8BADAEAACbAQAgDYEBAgAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQIAAAABhgEBAAAAAYcBAQAAAAGIAQEAAAABiQEBAAAAAYoBAQAAAAGLAQEAAAABjAFAAAAAAY0BQAAAAAEBCAAAowEAIA2BAQIAAAABggEBAAAAAYMBAQAAAAGEAQEAAAABhQECAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAGKAQEAAAABiwEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAKUBADABCAAApQEAMA2BAQIA6AEAIYIBAQDnAQAhgwEBAOcBACGEAQEA5wEAIYUBAgDoAQAhhgEBAOcBACGHAQEA6QEAIYgBAQDpAQAhiQEBAOkBACGKAQEA6QEAIYsBAQDpAQAhjAFAAOoBACGNAUAA6gEAIQIAAACbAQAgCAAAqAEAIA2BAQIA6AEAIYIBAQDnAQAhgwEBAOcBACGEAQEA5wEAIYUBAgDoAQAhhgEBAOcBACGHAQEA6QEAIYgBAQDpAQAhiQEBAOkBACGKAQEA6QEAIYsBAQDpAQAhjAFAAOoBACGNAUAA6gEAIQIAAACeAQAgCAAAqgEAIAIAAACeAQAgCAAAqgEAIAMAAACbAQAgDwAAowEAIBAAAKgBACABAAAAmwEAIAEAAACeAQAgChUAAOIBACAWAADjAQAgFwAA5gEAIBgAAOUBACAZAADkAQAghwEAAOEBACCIAQAA4QEAIIkBAADhAQAgigEAAOEBACCLAQAA4QEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQEAtwEAIYwBQAC4AQAhjQFAALgBACEDAAAAngEAIAMAALABADAUAACxAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQEAtwEAIYwBQAC4AQAhjQFAALgBACENFQAAugEAIBYAAMIBACAXAAC6AQAgGAAAugEAIBkAALoBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMEBACEOFQAAugEAIBgAAMABACAZAADAAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC_AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAAL0BACAYAAC-AQAgGQAAvgEAII4BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAvAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQsVAAC6AQAgGAAAuwEAIBkAALsBACCOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALkBACELFQAAugEAIBgAALsBACAZAAC7AQAgjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC5AQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAugEAIQiOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALsBACEOFQAAvQEAIBgAAL4BACAZAAC-AQAgjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC8AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABCI4BAgAAAAGPAQIAAAAFkAECAAAABZEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAvQEAIQuOAQEAAAABjwEBAAAABZABAQAAAAWRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAL4BACGWAQEAAAABlwEBAAAAAZgBAQAAAAEOFQAAugEAIBgAAMABACAZAADAAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC_AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABC44BAQAAAAGPAQEAAAAEkAEBAAAABJEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQ0VAAC6AQAgFgAAwgEAIBcAALoBACAYAAC6AQAgGQAAugEAII4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAwQEAIQiOAQgAAAABjwEIAAAABJABCAAAAASRAQgAAAABkgEIAAAAAZMBCAAAAAGUAQgAAAABlQEIAMIBACEQfgAAwwEAMH8AAJ4BABCAAQAAwwEAMIEBAgDEAQAhggEBAMUBACGDAQEAxQEAIYQBAQDFAQAhhQECAMQBACGGAQEAxQEAIYcBAQDGAQAhiAEBAMYBACGJAQEAxgEAIYoBAQDGAQAhiwEBAMYBACGMAUAAxwEAIY0BQADHAQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAugEAIQuOAQEAAAABjwEBAAAABJABAQAAAASRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMABACGWAQEAAAABlwEBAAAAAZgBAQAAAAELjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC-AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABCI4BQAAAAAGPAUAAAAAEkAFAAAAABJEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAuwEAIQl-AADIAQAwfwAAmAEAEIABAADIAQAwgQEBALYBACGGAQEAtgEAIZkBAQC2AQAhmgFAALgBACGbAUAAuAEAIZwBAQC3AQAhCX4AAMkBADB_AACFAQAQgAEAAMkBADCBAQEAxQEAIYYBAQDFAQAhmQEBAMUBACGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEHfgAAygEAMH8AAH8AEIABAADKAQAwgQECALUBACGCAQEAtgEAIYwBQAC4AQAhjQFAALgBACEHfgAAywEAMH8AAGkAEIABAADLAQAwgQECALUBACGCAQEAtgEAIYwBQAC4AQAhjQFAALgBACEIPQAAzQEAIH4AAMwBADB_AABSABCAAQAAzAEAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhA50BAABOACCeAQAATgAgnwEAAE4AIAg8AADPAQAgfgAAzgEAMH8AAE4AEIABAADOAQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEDnQEAAFIAIJ4BAABSACCfAQAAUgAgCggAANEBACB-AADQAQAwfwAASQAQgAEAANABADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGgAQEAtgEAIaEBAQC2AQAhogFAALgBACEKFQAAugEAIBgAANIBACAZAADSAQAgjgGAAAAAAZUBgAAAAAGjAQEAAAABpAEBAAAAAaUBAQAAAAGmAYAAAAABpwGAAAAAAQeOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABCggAANQBACB-AADTAQAwfwAANgAQgAEAANMBADCBAQIAxAEAIYwBQADHAQAhjQFAAMcBACGgAQEAxQEAIaEBAQDFAQAhogFAAMcBACEHjgGAAAAAAZUBgAAAAAGjAQEAAAABpAEBAAAAAaUBAQAAAAGmAYAAAAABpwGAAAAAAQp-AADVAQAwfwAAMAAQgAEAANUBADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGoAQEAtgEAIakBAQC2AQAhqgEBALcBACGrAUAAuAEAIQp-AADWAQAwfwAAHQAQgAEAANYBADCBAQIAxAEAIYwBQADHAQAhjQFAAMcBACGoAQEAxQEAIakBAQDFAQAhqgEBAMYBACGrAUAAxwEAIQx-AADXAQAwfwAAFwAQgAEAANcBADCBAQIAtQEAIYIBAQC3AQAhiAEBALcBACGMAUAAuAEAIY0BQAC4AQAhogFAANkBACGsAQEAtgEAIa0BAQC2AQAhrgEgANgBACEFFQAAugEAIBgAAN0BACAZAADdAQAgjgEgAAAAAZUBIADcAQAhCxUAAL0BACAYAADbAQAgGQAA2wEAII4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA2gEAIQsVAAC9AQAgGAAA2wEAIBkAANsBACCOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAANoBACEIjgFAAAAAAY8BQAAAAAWQAUAAAAAFkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQADbAQAhBRUAALoBACAYAADdAQAgGQAA3QEAII4BIAAAAAGVASAA3AEAIQKOASAAAAABlQEgAN0BACEMfgAA3gEAMH8AAAQAEIABAADeAQAwgQECAMQBACGCAQEAxgEAIYgBAQDGAQAhjAFAAMcBACGNAUAAxwEAIaIBQADgAQAhrAEBAMUBACGtAQEAxQEAIa4BIADfAQAhAo4BIAAAAAGVASAA3QEAIQiOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAANsBACEAAAAAAAABsQEBAAAAAQWxAQIAAAABtwECAAAAAbgBAgAAAAG5AQIAAAABugECAAAAAQGxAQEAAAABAbEBQAAAAAEAAAAAAAAAAAoPAAD0AQAwEAAA-AEAMK8BAAD1AQAwsAEAAPYBADCxAQAA9wEAMLIBAAD3AQAwswEAAPcBADC0AQAA9wEAMLUBAAD5AQAwtgEAAPoBADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABMACAPAAD-AQAgAwAAAEwAIA8AAP4BACAQAAD9AQAgCD0AAM0BACB-AADMAQAwfwAAUgAQgAEAAMwBADCBAQIAAAABggEBAAAAAYwBQADHAQAhjQFAAMcBACECAAAATAAgCAAA_QEAIAIAAAD7AQAgCAAA_AEAIAd-AAD6AQAwfwAA-wEAEIABAAD6AQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEHfgAA-gEAMH8AAPsBABCAAQAA-gEAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAA9AEAMK8BAAD1AQAwtAEAAPcBADAAAAAAAAoPAACGAgAwEAAAigIAMK8BAACHAgAwsAEAAIgCADCxAQAAiQIAMLIBAACJAgAwswEAAIkCADC0AQAAiQIAMLUBAACLAgAwtgEAAIwCADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABQACAPAACQAgAgAwAAAFAAIA8AAJACACAQAACPAgAgCDwAAM8BACB-AADOAQAwfwAATgAQgAEAAM4BADCBAQIAAAABggEBAAAAAYwBQADHAQAhjQFAAMcBACECAAAAUAAgCAAAjwIAIAIAAACNAgAgCAAAjgIAIAd-AACMAgAwfwAAjQIAEIABAACMAgAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEHfgAAjAIAMH8AAI0CABCAAQAAjAIAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAAhgIAMK8BAACHAgAwtAEAAIkCADAAAAAAAAAAAAAAAAAAAAAAAAGxASAAAAABAbEBQAAAAAEAAAAABRUABhYABxcACBgACRkACgAAAAAABRUABhYABxcACBgACRkACgAAAAUVABAWABEXABIYABMZABQAAAAAAAUVABAWABEXABIYABMZABQAAAAFFQAaFgAbFwAcGAAdGQAeAAAAAAAFFQAaFgAbFwAcGAAdGQAeAhUAIz1RIQIVACI8VCABPFUAAT1WAAAABRUAJxYAKBcAKRgAKhkAKwAAAAAABRUAJxYAKBcAKRgAKhkAKwAABRUAMBYAMRcAMhgAMxkANAAAAAAABRUAMBYAMRcAMhgAMxkANAAAAAMVADoYADsZADwAAAADFQA6GAA7GQA8AAAABRUAQhYAQxcARBgARRkARgAAAAAABRUAQhYAQxcARBgARRkARgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCxwbDB0cDB4fDB8gDCAhDCEjDCIlAiMmDSQoDCUqAiYrDicsDCgtDCkuAioxDysyFSw0Fi01Fi44Fi85FjA6FjE8FjI-AjM_FzRBFjVDAjZEGDdFFjhGFjlHAjpKGTtLHz5NID9XIEBYIEFZIEJaIENcIEReAkVfJEZhIEdjAkhkJUllIEpmIEtnAkxqJk1rLE5sIU9tIVBuIVFvIVJwIVNyIVR0AlV1LVZ3IVd5Alh6Lll7IVp8IVt9AlyAAS9dgQE1XoMBNl-EATZghwE2YYgBNmKJATZjiwE2ZI0BAmWOATdmkAE2Z5IBAmiTAThplAE2apUBNmuWAQJsmQE5bZoBPW6cAT5vnQE-cKABPnGhAT5yogE-c6QBPnSmAQJ1pwE_dqkBPnerAQJ4rAFAea0BPnquAT57rwECfLIBQX2zAUc"
|
|
69
69
|
};
|
|
70
70
|
async function decodeBase64AsWasm(wasmBase64) {
|
|
71
71
|
const { Buffer } = await Promise.resolve().then(() => __importStar(require('node:buffer')));
|
|
@@ -15,12 +15,10 @@ export type AggregateFile = {
|
|
|
15
15
|
export type FileAvgAggregateOutputType = {
|
|
16
16
|
id: number | null;
|
|
17
17
|
sizeBytes: number | null;
|
|
18
|
-
resourceId: number | null;
|
|
19
18
|
};
|
|
20
19
|
export type FileSumAggregateOutputType = {
|
|
21
20
|
id: number | null;
|
|
22
21
|
sizeBytes: number | null;
|
|
23
|
-
resourceId: number | null;
|
|
24
22
|
};
|
|
25
23
|
export type FileMinAggregateOutputType = {
|
|
26
24
|
id: number | null;
|
|
@@ -33,7 +31,7 @@ export type FileMinAggregateOutputType = {
|
|
|
33
31
|
description: string | null;
|
|
34
32
|
resourceField: string | null;
|
|
35
33
|
resourceName: string | null;
|
|
36
|
-
resourceId:
|
|
34
|
+
resourceId: string | null;
|
|
37
35
|
updatedAt: Date | null;
|
|
38
36
|
createdAt: Date | null;
|
|
39
37
|
};
|
|
@@ -48,7 +46,7 @@ export type FileMaxAggregateOutputType = {
|
|
|
48
46
|
description: string | null;
|
|
49
47
|
resourceField: string | null;
|
|
50
48
|
resourceName: string | null;
|
|
51
|
-
resourceId:
|
|
49
|
+
resourceId: string | null;
|
|
52
50
|
updatedAt: Date | null;
|
|
53
51
|
createdAt: Date | null;
|
|
54
52
|
};
|
|
@@ -71,12 +69,10 @@ export type FileCountAggregateOutputType = {
|
|
|
71
69
|
export type FileAvgAggregateInputType = {
|
|
72
70
|
id?: true;
|
|
73
71
|
sizeBytes?: true;
|
|
74
|
-
resourceId?: true;
|
|
75
72
|
};
|
|
76
73
|
export type FileSumAggregateInputType = {
|
|
77
74
|
id?: true;
|
|
78
75
|
sizeBytes?: true;
|
|
79
|
-
resourceId?: true;
|
|
80
76
|
};
|
|
81
77
|
export type FileMinAggregateInputType = {
|
|
82
78
|
id?: true;
|
|
@@ -211,7 +207,7 @@ export type FileGroupByOutputType = {
|
|
|
211
207
|
description: string | null;
|
|
212
208
|
resourceField: string | null;
|
|
213
209
|
resourceName: string | null;
|
|
214
|
-
resourceId:
|
|
210
|
+
resourceId: string | null;
|
|
215
211
|
updatedAt: Date;
|
|
216
212
|
createdAt: Date;
|
|
217
213
|
_count: FileCountAggregateOutputType | null;
|
|
@@ -237,7 +233,7 @@ export type FileWhereInput = {
|
|
|
237
233
|
description?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
238
234
|
resourceField?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
239
235
|
resourceName?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
240
|
-
resourceId?: Prisma.
|
|
236
|
+
resourceId?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
241
237
|
updatedAt?: Prisma.DateTimeFilter<"File"> | Date | string;
|
|
242
238
|
createdAt?: Prisma.DateTimeFilter<"File"> | Date | string;
|
|
243
239
|
};
|
|
@@ -270,7 +266,7 @@ export type FileWhereUniqueInput = Prisma.AtLeast<{
|
|
|
270
266
|
description?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
271
267
|
resourceField?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
272
268
|
resourceName?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
273
|
-
resourceId?: Prisma.
|
|
269
|
+
resourceId?: Prisma.StringNullableFilter<"File"> | string | null;
|
|
274
270
|
updatedAt?: Prisma.DateTimeFilter<"File"> | Date | string;
|
|
275
271
|
createdAt?: Prisma.DateTimeFilter<"File"> | Date | string;
|
|
276
272
|
}, "id" | "name">;
|
|
@@ -308,7 +304,7 @@ export type FileScalarWhereWithAggregatesInput = {
|
|
|
308
304
|
description?: Prisma.StringNullableWithAggregatesFilter<"File"> | string | null;
|
|
309
305
|
resourceField?: Prisma.StringNullableWithAggregatesFilter<"File"> | string | null;
|
|
310
306
|
resourceName?: Prisma.StringNullableWithAggregatesFilter<"File"> | string | null;
|
|
311
|
-
resourceId?: Prisma.
|
|
307
|
+
resourceId?: Prisma.StringNullableWithAggregatesFilter<"File"> | string | null;
|
|
312
308
|
updatedAt?: Prisma.DateTimeWithAggregatesFilter<"File"> | Date | string;
|
|
313
309
|
createdAt?: Prisma.DateTimeWithAggregatesFilter<"File"> | Date | string;
|
|
314
310
|
};
|
|
@@ -322,7 +318,7 @@ export type FileCreateInput = {
|
|
|
322
318
|
description?: string | null;
|
|
323
319
|
resourceField?: string | null;
|
|
324
320
|
resourceName?: string | null;
|
|
325
|
-
resourceId?:
|
|
321
|
+
resourceId?: string | null;
|
|
326
322
|
updatedAt?: Date | string;
|
|
327
323
|
createdAt?: Date | string;
|
|
328
324
|
};
|
|
@@ -337,7 +333,7 @@ export type FileUncheckedCreateInput = {
|
|
|
337
333
|
description?: string | null;
|
|
338
334
|
resourceField?: string | null;
|
|
339
335
|
resourceName?: string | null;
|
|
340
|
-
resourceId?:
|
|
336
|
+
resourceId?: string | null;
|
|
341
337
|
updatedAt?: Date | string;
|
|
342
338
|
createdAt?: Date | string;
|
|
343
339
|
};
|
|
@@ -351,7 +347,7 @@ export type FileUpdateInput = {
|
|
|
351
347
|
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
352
348
|
resourceField?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
353
349
|
resourceName?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
354
|
-
resourceId?: Prisma.
|
|
350
|
+
resourceId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
355
351
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
356
352
|
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
357
353
|
};
|
|
@@ -366,7 +362,7 @@ export type FileUncheckedUpdateInput = {
|
|
|
366
362
|
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
367
363
|
resourceField?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
368
364
|
resourceName?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
369
|
-
resourceId?: Prisma.
|
|
365
|
+
resourceId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
370
366
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
371
367
|
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
372
368
|
};
|
|
@@ -381,7 +377,7 @@ export type FileCreateManyInput = {
|
|
|
381
377
|
description?: string | null;
|
|
382
378
|
resourceField?: string | null;
|
|
383
379
|
resourceName?: string | null;
|
|
384
|
-
resourceId?:
|
|
380
|
+
resourceId?: string | null;
|
|
385
381
|
updatedAt?: Date | string;
|
|
386
382
|
createdAt?: Date | string;
|
|
387
383
|
};
|
|
@@ -395,7 +391,7 @@ export type FileUpdateManyMutationInput = {
|
|
|
395
391
|
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
396
392
|
resourceField?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
397
393
|
resourceName?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
398
|
-
resourceId?: Prisma.
|
|
394
|
+
resourceId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
399
395
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
400
396
|
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
401
397
|
};
|
|
@@ -410,7 +406,7 @@ export type FileUncheckedUpdateManyInput = {
|
|
|
410
406
|
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
411
407
|
resourceField?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
412
408
|
resourceName?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
413
|
-
resourceId?: Prisma.
|
|
409
|
+
resourceId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
414
410
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
415
411
|
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
416
412
|
};
|
|
@@ -432,7 +428,6 @@ export type FileCountOrderByAggregateInput = {
|
|
|
432
428
|
export type FileAvgOrderByAggregateInput = {
|
|
433
429
|
id?: Prisma.SortOrder;
|
|
434
430
|
sizeBytes?: Prisma.SortOrder;
|
|
435
|
-
resourceId?: Prisma.SortOrder;
|
|
436
431
|
};
|
|
437
432
|
export type FileMaxOrderByAggregateInput = {
|
|
438
433
|
id?: Prisma.SortOrder;
|
|
@@ -467,14 +462,6 @@ export type FileMinOrderByAggregateInput = {
|
|
|
467
462
|
export type FileSumOrderByAggregateInput = {
|
|
468
463
|
id?: Prisma.SortOrder;
|
|
469
464
|
sizeBytes?: Prisma.SortOrder;
|
|
470
|
-
resourceId?: Prisma.SortOrder;
|
|
471
|
-
};
|
|
472
|
-
export type NullableIntFieldUpdateOperationsInput = {
|
|
473
|
-
set?: number | null;
|
|
474
|
-
increment?: number;
|
|
475
|
-
decrement?: number;
|
|
476
|
-
multiply?: number;
|
|
477
|
-
divide?: number;
|
|
478
465
|
};
|
|
479
466
|
export type FileSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
|
480
467
|
id?: boolean;
|
|
@@ -551,7 +538,7 @@ export type $FilePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs =
|
|
|
551
538
|
description: string | null;
|
|
552
539
|
resourceField: string | null;
|
|
553
540
|
resourceName: string | null;
|
|
554
|
-
resourceId:
|
|
541
|
+
resourceId: string | null;
|
|
555
542
|
/**
|
|
556
543
|
* Audit columns
|
|
557
544
|
*/
|
|
@@ -921,7 +908,7 @@ export interface FileFieldRefs {
|
|
|
921
908
|
readonly description: Prisma.FieldRef<"File", 'String'>;
|
|
922
909
|
readonly resourceField: Prisma.FieldRef<"File", 'String'>;
|
|
923
910
|
readonly resourceName: Prisma.FieldRef<"File", 'String'>;
|
|
924
|
-
readonly resourceId: Prisma.FieldRef<"File", '
|
|
911
|
+
readonly resourceId: Prisma.FieldRef<"File", 'String'>;
|
|
925
912
|
readonly updatedAt: Prisma.FieldRef<"File", 'DateTime'>;
|
|
926
913
|
readonly createdAt: Prisma.FieldRef<"File", 'DateTime'>;
|
|
927
914
|
}
|
|
@@ -51,6 +51,12 @@ async function loadModels(baseDir, modelPattern) {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
// Resolve the schemas referencing the primary key of another model, now that
|
|
55
|
+
// every model is registered
|
|
56
|
+
(0, common_1.relinkResourceModels)(models);
|
|
57
|
+
// Reject a default value that its own field constraints would reject, since
|
|
58
|
+
// the records it produces cannot be serialized by the routes of their model
|
|
59
|
+
(0, utils_1.validateScalarDefaults)(models);
|
|
54
60
|
// Reject file name patterns writing into a reserved storage path before any
|
|
55
61
|
// upload can reach the storage layer.
|
|
56
62
|
(0, utils_1.validateFileNamePatterns)(models);
|