@tstdl/base 0.92.85 → 0.92.87
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/ai/ai.service.d.ts +4 -4
- package/ai/ai.service.js +27 -14
- package/ai/types.d.ts +5 -4
- package/api/server/gateway.js +1 -1
- package/authentication/authentication.api.d.ts +9 -9
- package/authentication/models/schemas.d.ts +2 -2
- package/authentication/server/authentication-ancillary.service.d.ts +6 -4
- package/authentication/server/authentication-ancillary.service.js +5 -5
- package/cancellation/token.d.ts +1 -1
- package/context/context.d.ts +1 -9
- package/context/context.js +8 -5
- package/document-management/api/document-management.api.d.ts +142 -110
- package/document-management/models/document-category.model.d.ts +1 -0
- package/document-management/models/document-category.model.js +2 -0
- package/document-management/models/document-collection-document.model.js +7 -3
- package/document-management/models/document-property-value.model.d.ts +13 -14
- package/document-management/models/document-property-value.model.js +60 -27
- package/document-management/models/document-property.model.d.ts +2 -0
- package/document-management/models/document-property.model.js +4 -1
- package/document-management/models/document-request-assignment-task-collection.model.d.ts +7 -0
- package/document-management/models/document-request-assignment-task-collection.model.js +32 -0
- package/document-management/models/document-request-assignment-task.model.d.ts +14 -0
- package/document-management/models/document-request-assignment-task.model.js +72 -0
- package/document-management/models/document-request-collection.model.d.ts +1 -0
- package/document-management/models/document-request-collection.model.js +7 -3
- package/document-management/models/document-request-file.model.d.ts +7 -2
- package/document-management/models/document-request-file.model.js +29 -4
- package/document-management/models/document-request.model.d.ts +1 -0
- package/document-management/models/document-requests-template.js +2 -0
- package/document-management/models/document-type-property.model.js +7 -3
- package/document-management/models/document-type.model.d.ts +1 -0
- package/document-management/models/document-type.model.js +7 -3
- package/document-management/models/document.model.d.ts +5 -2
- package/document-management/models/document.model.js +21 -6
- package/document-management/models/index.d.ts +2 -0
- package/document-management/models/index.js +2 -0
- package/document-management/models/service-models/document.service-model.d.ts +84 -65
- package/document-management/models/service-models/document.service-model.js +11 -6
- package/document-management/models/service-models/document.view-model.d.ts +1 -1
- package/document-management/models/service-models/document.view-model.js +2 -2
- package/document-management/server/drizzle/{0000_sloppy_fenris.sql → 0000_cool_victor_mancha.sql} +99 -43
- package/document-management/server/drizzle/meta/0000_snapshot.json +518 -130
- package/document-management/server/drizzle/meta/_journal.json +2 -2
- package/document-management/server/drizzle.config.js +1 -1
- package/document-management/server/module.d.ts +3 -2
- package/document-management/server/module.js +4 -2
- package/document-management/server/schemas.d.ts +36 -0
- package/document-management/server/schemas.js +37 -0
- package/document-management/server/services/document-management-ancillary.service.d.ts +4 -0
- package/document-management/server/services/document-management-ancillary.service.js +13 -0
- package/document-management/server/services/document-management.service.d.ts +71 -22
- package/document-management/server/services/document-management.service.js +528 -81
- package/document-management/server/services/index.d.ts +1 -0
- package/document-management/server/services/index.js +1 -0
- package/eslint.config.js +1 -0
- package/examples/document-management/main.d.ts +5 -0
- package/examples/document-management/main.js +20 -2
- package/examples/orm/schemas.d.ts +1 -1
- package/file/index.d.ts +1 -0
- package/file/index.js +1 -0
- package/file/temporary-file.d.ts +17 -0
- package/file/temporary-file.js +49 -0
- package/http/server/http-server-response.d.ts +2 -0
- package/http/server/http-server-response.js +13 -0
- package/injector/index.d.ts +1 -0
- package/injector/index.js +1 -0
- package/injector/injector.js +19 -7
- package/injector/interfaces.d.ts +1 -1
- package/injector/interfaces.js +1 -1
- package/injector/resolution.d.ts +15 -0
- package/injector/resolution.js +6 -0
- package/logger/console/logger.d.ts +1 -1
- package/logger/logger.d.ts +1 -1
- package/mail/drizzle.config.js +1 -1
- package/mail/models/schemas.d.ts +1 -1
- package/object-storage/object-storage.d.ts +5 -7
- package/object-storage/s3/s3.object-storage.d.ts +0 -1
- package/object-storage/s3/s3.object-storage.js +0 -3
- package/orm/{server/data-types → data-types}/numeric-date.js +2 -3
- package/orm/decorators.d.ts +17 -8
- package/orm/decorators.js +13 -7
- package/orm/entity.d.ts +5 -7
- package/orm/entity.js +11 -7
- package/orm/index.d.ts +2 -0
- package/orm/index.js +2 -0
- package/orm/query.d.ts +1 -3
- package/orm/query.js +0 -1
- package/orm/repository.types.d.ts +32 -0
- package/orm/repository.types.js +1 -0
- package/orm/server/database-schema.d.ts +4 -4
- package/orm/server/drizzle/schema-converter.d.ts +1 -1
- package/orm/server/drizzle/schema-converter.js +48 -19
- package/orm/server/index.d.ts +1 -0
- package/orm/server/index.js +1 -0
- package/orm/server/query-converter.d.ts +1 -2
- package/orm/server/query-converter.js +66 -61
- package/orm/server/repository.d.ts +80 -43
- package/orm/server/repository.js +219 -112
- package/orm/server/sqls.d.ts +15 -0
- package/orm/server/sqls.js +19 -0
- package/orm/server/types.d.ts +3 -3
- package/orm/types.d.ts +4 -4
- package/orm/utils.d.ts +3 -0
- package/orm/utils.js +6 -0
- package/package.json +23 -19
- package/pdf/pdf.service.d.ts +0 -1
- package/pdf/pdf.service.js +1 -95
- package/pdf/utils.d.ts +3 -1
- package/pdf/utils.js +129 -4
- package/promise/lazy-promise.d.ts +3 -3
- package/queue/enqueue-batch.d.ts +1 -0
- package/queue/enqueue-batch.js +1 -1
- package/queue/mongo/queue.d.ts +9 -4
- package/queue/mongo/queue.js +5 -6
- package/queue/postgres/drizzle/0000_zippy_moondragon.sql +11 -0
- package/queue/postgres/drizzle/meta/0000_snapshot.json +90 -0
- package/queue/postgres/drizzle/meta/_journal.json +13 -0
- package/queue/postgres/drizzle.config.d.ts +2 -0
- package/queue/postgres/drizzle.config.js +11 -0
- package/queue/postgres/index.d.ts +4 -0
- package/queue/postgres/index.js +4 -0
- package/queue/postgres/job.model.d.ts +13 -0
- package/queue/postgres/job.model.js +55 -0
- package/queue/postgres/module.d.ts +9 -0
- package/queue/postgres/module.js +29 -0
- package/queue/postgres/queue.d.ts +28 -0
- package/queue/postgres/queue.js +147 -0
- package/queue/postgres/queue.provider.d.ts +7 -0
- package/queue/postgres/queue.provider.js +21 -0
- package/queue/postgres/schemas.d.ts +3 -0
- package/queue/postgres/schemas.js +4 -0
- package/queue/provider.d.ts +2 -1
- package/queue/queue.d.ts +32 -6
- package/queue/queue.js +43 -0
- package/schema/schemas/object.d.ts +1 -1
- package/utils/date-time.d.ts +4 -2
- package/utils/date-time.js +10 -3
- package/utils/format-error.js +0 -1
- package/utils/object/lazy-property.js +0 -1
- package/utils/timing.d.ts +4 -3
- package/utils/timing.js +3 -1
- package/utils/try-ignore.d.ts +9 -2
- package/utils/try-ignore.js +30 -6
- package/document-management/models/schemas.d.ts +0 -33
- package/document-management/models/schemas.js +0 -34
- /package/orm/{server/data-types → data-types}/bytea.d.ts +0 -0
- /package/orm/{server/data-types → data-types}/bytea.js +0 -0
- /package/orm/{server/data-types → data-types}/index.d.ts +0 -0
- /package/orm/{server/data-types → data-types}/index.js +0 -0
- /package/orm/{server/data-types → data-types}/numeric-date.d.ts +0 -0
- /package/orm/{server/data-types → data-types}/timestamp.d.ts +0 -0
- /package/orm/{server/data-types → data-types}/timestamp.js +0 -0
package/orm/server/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { PgColumnBuilder, PgTableWithColumns } from 'drizzle-orm/pg-core';
|
|
|
3
3
|
import type { CamelCase, ConditionalPick, SnakeCase } from 'type-fest';
|
|
4
4
|
import type { JsonPath } from '../../json-path/json-path.js';
|
|
5
5
|
import type { Record } from '../../schema/index.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { UnionToIntersection } from '../../types.js';
|
|
7
7
|
import type { Tagged } from '../../types/index.js';
|
|
8
8
|
import type { OrmColumnReflectionData } from '../decorators.js';
|
|
9
9
|
import type { EntityType } from '../entity.js';
|
|
@@ -23,11 +23,11 @@ export type ColumnDefinition = {
|
|
|
23
23
|
export type TransformContext = {
|
|
24
24
|
encryptionKey?: CryptoKey;
|
|
25
25
|
};
|
|
26
|
-
type Column<Name extends string, T> = null extends T ? ColumnBuilder<T, Name> : NotNull<ColumnBuilder<T, Name>>;
|
|
26
|
+
type Column<Name extends string, T> = null extends T ? ColumnBuilder<Exclude<T, null>, Name> : NotNull<ColumnBuilder<T, Name>>;
|
|
27
27
|
export type ColumnPrefix<T> = T extends Tagged<unknown, EmbeddedConfigTag, {
|
|
28
28
|
prefix: infer Prefix;
|
|
29
29
|
}> ? Prefix extends string ? Prefix : '' : '';
|
|
30
|
-
export type PgTableFromType<
|
|
30
|
+
export type PgTableFromType<T extends EntityType = EntityType, S extends string = string, TableName extends string = T extends Required<EntityType> ? SnakeCase<T['entityName']> : string> = PgTableWithColumns<{
|
|
31
31
|
name: TableName;
|
|
32
32
|
schema: S;
|
|
33
33
|
columns: BuildColumns<TableName, {
|
package/orm/types.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { $Type, HasDefault as DrizzleHasDefault, IsPrimaryKey as DrizzleIsPrimaryKey } from 'drizzle-orm';
|
|
2
|
-
import type { boolean,
|
|
2
|
+
import type { boolean, doublePrecision, integer, jsonb, PgColumnBuilder, PgColumnBuilderBase, PgEnumColumnBuilderInitial, text, uuid } from 'drizzle-orm/pg-core';
|
|
3
3
|
import { Array, Integer } from '../schema/index.js';
|
|
4
4
|
import type { AbstractConstructor, EnumerationObject, EnumerationValue, ObjectLiteral, UnionToTuple } from '../types.js';
|
|
5
5
|
import type { GetTagMetadata, HasTag, Tagged, UnwrapTagged } from '../types/index.js';
|
|
6
|
+
import type { bytea, numericDate, timestamp } from './data-types/index.js';
|
|
6
7
|
import { Check, Column, Embedded, Encrypted, Index, PrimaryKey, References, Unique } from './decorators.js';
|
|
7
8
|
import { Json, NumericDate, Timestamp, Uuid } from './schemas/index.js';
|
|
8
|
-
import type { bytea } from './server/data-types/index.js';
|
|
9
9
|
export type ColumnTypeTag = 'column';
|
|
10
10
|
export type EmbeddedConfigTag = 'embedded';
|
|
11
11
|
export type IsPrimaryKey<T> = T extends Tagged<unknown, ColumnTypeTag, PgColumnBuilderBase> ? Tagged<UnwrapTagged<T>, ColumnTypeTag, DrizzleIsPrimaryKey<GetTagMetadata<T, ColumnTypeTag>>> : Tagged<T, ColumnTypeTag, DrizzleIsPrimaryKey<ColumnBuilder<T>>>;
|
|
@@ -16,14 +16,14 @@ export type Embedded<T = AbstractConstructor, P extends string = ''> = Tagged<T,
|
|
|
16
16
|
prefix: P;
|
|
17
17
|
}>;
|
|
18
18
|
export type Array<T extends Tagged<ObjectLiteral, ColumnTypeTag, PgColumnBuilder<any>>> = Tagged<UnwrapTagged<T>[], ColumnTypeTag, ReturnType<GetTagMetadata<T, ColumnTypeTag>['array']>>;
|
|
19
|
-
export type Json<T
|
|
19
|
+
export type Json<T> = Tagged<T, ColumnTypeTag, $Type<ReturnType<typeof jsonb>, T>>;
|
|
20
20
|
export type Enum<T extends EnumerationObject> = Tagged<EnumerationValue<T>, ColumnTypeTag, EnumColumn<T>>;
|
|
21
21
|
export type Text = Tagged<string, ColumnTypeTag, ReturnType<typeof text<string, [string, ...string[]]>>>;
|
|
22
22
|
export type Uuid = Tagged<string, ColumnTypeTag, ReturnType<typeof uuid>>;
|
|
23
23
|
export type Integer = Tagged<number, ColumnTypeTag, ReturnType<typeof integer>>;
|
|
24
24
|
export type DoublePrecision = Tagged<number, ColumnTypeTag, ReturnType<typeof doublePrecision>>;
|
|
25
25
|
export type Boolean = Tagged<number, ColumnTypeTag, ReturnType<typeof boolean>>;
|
|
26
|
-
export type NumericDate = Tagged<number, ColumnTypeTag, ReturnType<typeof
|
|
26
|
+
export type NumericDate = Tagged<number, ColumnTypeTag, ReturnType<typeof numericDate>>;
|
|
27
27
|
export type Timestamp = Tagged<number, ColumnTypeTag, ReturnType<typeof timestamp>>;
|
|
28
28
|
export type Bytea = Tagged<Uint8Array, ColumnTypeTag, ReturnType<typeof bytea>>;
|
|
29
29
|
export type Encrypted<T> = Tagged<T, ColumnTypeTag, ReturnType<typeof bytea>>;
|
package/orm/utils.d.ts
ADDED
package/orm/utils.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tstdl/base",
|
|
3
|
-
"version": "0.92.
|
|
3
|
+
"version": "0.92.87",
|
|
4
4
|
"author": "Patrick Hein",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -17,14 +17,16 @@
|
|
|
17
17
|
"pub": "npm run build:production && rm -vf dist/test* && rm -vrf dist/tools/ && npm publish dist/",
|
|
18
18
|
"tsc:watch": "tsc --watch",
|
|
19
19
|
"tsc-alias:watch": "tsc-alias --watch",
|
|
20
|
-
"generate:
|
|
21
|
-
"generate:
|
|
22
|
-
"generate:
|
|
23
|
-
"generate:
|
|
24
|
-
"
|
|
25
|
-
"copy:
|
|
26
|
-
"copy:
|
|
27
|
-
"copy:
|
|
20
|
+
"generate:migration": "npm run generate:migration:document-management && npm run generate:migration:authentication && npm run generate:migration:mail && npm run generate:migration:queue",
|
|
21
|
+
"generate:migration:document-management": "drizzle-kit generate --config dist/document-management/server/drizzle.config.js",
|
|
22
|
+
"generate:migration:authentication": "drizzle-kit generate --config dist/authentication/server/drizzle.config.js",
|
|
23
|
+
"generate:migration:mail": "drizzle-kit generate --config dist/mail/drizzle.config.js",
|
|
24
|
+
"generate:migration:queue": "drizzle-kit generate --config dist/queue/postgres/drizzle.config.js",
|
|
25
|
+
"copy:orm": "npm run copy:orm:document-management && npm run copy:orm:authentication && npm run copy:orm:mail && npm run copy:orm:queue",
|
|
26
|
+
"copy:orm:document-management": "rm -rf ./dist/document-management/server/drizzle && cp -r ./source/document-management/server/drizzle ./dist/document-management/server/",
|
|
27
|
+
"copy:orm:authentication": "rm -rf ./dist/authentication/server/drizzle && cp -r ./source/authentication/server/drizzle ./dist/authentication/server/",
|
|
28
|
+
"copy:orm:mail": "rm -rf ./dist/mail/drizzle && cp -r ./source/mail/drizzle ./dist/mail/",
|
|
29
|
+
"copy:orm:queue": "rm -rf ./dist/queue/postgres/drizzle && cp -r ./source/queue/postgres/drizzle ./dist/queue/postgres/"
|
|
28
30
|
},
|
|
29
31
|
"exports": {
|
|
30
32
|
"./tsconfig.json": "./tsconfig.json",
|
|
@@ -127,16 +129,18 @@
|
|
|
127
129
|
"./utils/string": "./utils/string/index.js"
|
|
128
130
|
},
|
|
129
131
|
"dependencies": {
|
|
130
|
-
"@google-cloud/storage": "7.15",
|
|
131
|
-
"@google-cloud/vertexai": "1.9",
|
|
132
|
-
"disposablestack": "1.1",
|
|
132
|
+
"@google-cloud/storage": "^7.15",
|
|
133
|
+
"@google-cloud/vertexai": "^1.9",
|
|
134
|
+
"disposablestack": "^1.1",
|
|
133
135
|
"luxon": "^3.5",
|
|
134
136
|
"reflect-metadata": "^0.2",
|
|
135
137
|
"rxjs": "^7.8",
|
|
136
|
-
"
|
|
138
|
+
"ts-pattern": "^5.6",
|
|
139
|
+
"type-fest": "^4.37"
|
|
137
140
|
},
|
|
138
141
|
"devDependencies": {
|
|
139
|
-
"@
|
|
142
|
+
"@biomejs/biome": "1.9",
|
|
143
|
+
"@stylistic/eslint-plugin": "4.2",
|
|
140
144
|
"@types/chroma-js": "2.4",
|
|
141
145
|
"@types/koa__router": "12.0",
|
|
142
146
|
"@types/luxon": "3.4",
|
|
@@ -145,17 +149,17 @@
|
|
|
145
149
|
"@types/node": "22",
|
|
146
150
|
"@types/nodemailer": "6.4",
|
|
147
151
|
"@types/pg": "8.11",
|
|
148
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
152
|
+
"@typescript-eslint/eslint-plugin": "8.26",
|
|
149
153
|
"concurrently": "9.1",
|
|
150
154
|
"drizzle-kit": "0.30",
|
|
151
155
|
"eslint": "9.21",
|
|
152
156
|
"globals": "16.0",
|
|
153
157
|
"tsc-alias": "1.8",
|
|
154
|
-
"typescript": "5.
|
|
158
|
+
"typescript": "5.8"
|
|
155
159
|
},
|
|
156
160
|
"peerDependencies": {
|
|
157
161
|
"@elastic/elasticsearch": "^8.17",
|
|
158
|
-
"@google/generative-ai": "^0.
|
|
162
|
+
"@google/generative-ai": "^0.23",
|
|
159
163
|
"@tstdl/angular": "^0.92",
|
|
160
164
|
"@zxcvbn-ts/core": "^3.0",
|
|
161
165
|
"@zxcvbn-ts/language-common": "^3.0",
|
|
@@ -166,13 +170,13 @@
|
|
|
166
170
|
"handlebars": "^4.7",
|
|
167
171
|
"minio": "^8.0",
|
|
168
172
|
"mjml": "^4.15",
|
|
169
|
-
"mongodb": "^6.
|
|
173
|
+
"mongodb": "^6.14",
|
|
170
174
|
"nodemailer": "^6.10",
|
|
171
175
|
"pg": "^8.13",
|
|
172
176
|
"playwright": "^1.50",
|
|
173
177
|
"preact": "^10.26",
|
|
174
178
|
"preact-render-to-string": "^6.5",
|
|
175
|
-
"undici": "^7.
|
|
179
|
+
"undici": "^7.4",
|
|
176
180
|
"urlpattern-polyfill": "^10.0"
|
|
177
181
|
},
|
|
178
182
|
"peerDependenciesMeta": {
|
package/pdf/pdf.service.d.ts
CHANGED
|
@@ -92,7 +92,6 @@ export declare class PdfService implements Resolvable<PdfServiceArgument> {
|
|
|
92
92
|
* @returns pdf bytes
|
|
93
93
|
*/
|
|
94
94
|
renderTemplate(keyOrTemplate: string | PdfTemplate, templateContext?: object, options?: PdfServiceRenderOptions): Promise<Uint8Array>;
|
|
95
|
-
merge(pdfs: (string | Uint8Array)[]): Promise<Uint8Array>;
|
|
96
95
|
private renderStream;
|
|
97
96
|
}
|
|
98
97
|
export declare function pdfTemplate(name: string, fields: {
|
package/pdf/pdf.service.js
CHANGED
|
@@ -12,62 +12,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
12
12
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
13
13
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14
14
|
};
|
|
15
|
-
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
16
|
-
if (value !== null && value !== void 0) {
|
|
17
|
-
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
18
|
-
var dispose, inner;
|
|
19
|
-
if (async) {
|
|
20
|
-
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
21
|
-
dispose = value[Symbol.asyncDispose];
|
|
22
|
-
}
|
|
23
|
-
if (dispose === void 0) {
|
|
24
|
-
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
25
|
-
dispose = value[Symbol.dispose];
|
|
26
|
-
if (async) inner = dispose;
|
|
27
|
-
}
|
|
28
|
-
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
29
|
-
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
30
|
-
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
31
|
-
}
|
|
32
|
-
else if (async) {
|
|
33
|
-
env.stack.push({ async: true });
|
|
34
|
-
}
|
|
35
|
-
return value;
|
|
36
|
-
};
|
|
37
|
-
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
38
|
-
return function (env) {
|
|
39
|
-
function fail(e) {
|
|
40
|
-
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
41
|
-
env.hasError = true;
|
|
42
|
-
}
|
|
43
|
-
var r, s = 0;
|
|
44
|
-
function next() {
|
|
45
|
-
while (r = env.stack.pop()) {
|
|
46
|
-
try {
|
|
47
|
-
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
48
|
-
if (r.dispose) {
|
|
49
|
-
var result = r.dispose.call(r.value);
|
|
50
|
-
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
51
|
-
}
|
|
52
|
-
else s |= 1;
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
fail(e);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
59
|
-
if (env.hasError) throw env.error;
|
|
60
|
-
}
|
|
61
|
-
return next();
|
|
62
|
-
};
|
|
63
|
-
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
64
|
-
var e = new Error(message);
|
|
65
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
66
|
-
});
|
|
67
|
-
import { execFile as execFileCallback } from 'node:child_process';
|
|
68
|
-
import { access, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
69
|
-
import { tmpdir } from 'node:os';
|
|
70
|
-
import { promisify } from 'node:util';
|
|
71
15
|
import { BrowserContextController } from '../browser/browser-context-controller.js';
|
|
72
16
|
import { BrowserController } from '../browser/browser-controller.js';
|
|
73
17
|
import { PdfRenderOptions } from '../browser/pdf-options.js';
|
|
@@ -80,8 +24,7 @@ import { finalizeStream } from '../utils/stream/finalize-stream.js';
|
|
|
80
24
|
import { readableStreamFromPromise } from '../utils/stream/readable-stream-from-promise.js';
|
|
81
25
|
import { readBinaryStream } from '../utils/stream/stream-reader.js';
|
|
82
26
|
import { timeout } from '../utils/timing.js';
|
|
83
|
-
import { isDefined
|
|
84
|
-
const execFile = promisify(execFileCallback);
|
|
27
|
+
import { isDefined } from '../utils/type-guards.js';
|
|
85
28
|
export class PdfServiceRenderOptions extends PdfRenderOptions {
|
|
86
29
|
browserContext;
|
|
87
30
|
locale;
|
|
@@ -196,43 +139,6 @@ let PdfService = class PdfService {
|
|
|
196
139
|
const stream = this.renderTemplateStream(keyOrTemplate, templateContext, options);
|
|
197
140
|
return readBinaryStream(stream);
|
|
198
141
|
}
|
|
199
|
-
async merge(pdfs) {
|
|
200
|
-
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
201
|
-
try {
|
|
202
|
-
const stack = __addDisposableResource(env_1, new AsyncDisposableStack(), true);
|
|
203
|
-
const tmp = tmpdir();
|
|
204
|
-
const sourceFiles = await Promise.all(pdfs.map(async (pdf) => {
|
|
205
|
-
if (isString(pdf)) {
|
|
206
|
-
return pdf;
|
|
207
|
-
}
|
|
208
|
-
const file = `${tmp}/${crypto.randomUUID()}.pdf`;
|
|
209
|
-
await writeFile(file, pdf);
|
|
210
|
-
stack.defer(async () => unlink(file));
|
|
211
|
-
return file;
|
|
212
|
-
}));
|
|
213
|
-
const resultFile = `${tmp}/${crypto.randomUUID()}.pdf`;
|
|
214
|
-
const resultPromise = execFile('pdfunite', [...sourceFiles, resultFile]);
|
|
215
|
-
const result = await resultPromise;
|
|
216
|
-
try {
|
|
217
|
-
await access(resultFile);
|
|
218
|
-
stack.defer(async () => unlink(resultFile));
|
|
219
|
-
}
|
|
220
|
-
catch { /* ignore */ }
|
|
221
|
-
if (resultPromise.child.exitCode != 0) {
|
|
222
|
-
throw new Error(result.stderr);
|
|
223
|
-
}
|
|
224
|
-
return readFile(resultFile);
|
|
225
|
-
}
|
|
226
|
-
catch (e_1) {
|
|
227
|
-
env_1.error = e_1;
|
|
228
|
-
env_1.hasError = true;
|
|
229
|
-
}
|
|
230
|
-
finally {
|
|
231
|
-
const result_1 = __disposeResources(env_1);
|
|
232
|
-
if (result_1)
|
|
233
|
-
await result_1;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
142
|
renderStream(handler, options = {}) {
|
|
237
143
|
return readableStreamFromPromise(async () => {
|
|
238
144
|
const context = options.browserContext ?? await this.browserController.newContext({ locale: options.locale ?? this.defaultLocale });
|
package/pdf/utils.d.ts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export declare function getPdfPageCount(file: string): Promise<number>;
|
|
1
|
+
export declare function getPdfPageCount(file: string | Uint8Array | ReadableStream<Uint8Array>): Promise<number>;
|
|
2
|
+
export declare function mergePdfs(pdfs: (string | Uint8Array | ReadableStream<Uint8Array>)[]): Promise<Uint8Array>;
|
|
3
|
+
export declare function mergePdfsStream(pdfs: (string | Uint8Array | ReadableStream<Uint8Array>)[]): Promise<ReadableStream<Uint8Array>>;
|
package/pdf/utils.js
CHANGED
|
@@ -1,11 +1,136 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { TemporaryFile } from '../file/temporary-file.js';
|
|
1
54
|
import { spawnCommand } from '../process/spawn.js';
|
|
55
|
+
import { isString } from '../utils/type-guards.js';
|
|
2
56
|
export async function getPdfPageCount(file) {
|
|
3
|
-
const
|
|
57
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
58
|
+
try {
|
|
59
|
+
const fileIsPath = isString(file);
|
|
60
|
+
const tmpFile = __addDisposableResource(env_1, fileIsPath ? await TemporaryFile.from(file) : undefined, true);
|
|
61
|
+
const path = fileIsPath ? file : tmpFile.path;
|
|
62
|
+
const process = await spawnCommand('qpdf', ['--show-npages', path]);
|
|
63
|
+
const { code } = await process.wait();
|
|
64
|
+
if (code != 0) {
|
|
65
|
+
const errorOutput = await process.readError();
|
|
66
|
+
throw new Error(errorOutput.trim());
|
|
67
|
+
}
|
|
68
|
+
const output = await process.readOutput();
|
|
69
|
+
return Number(output);
|
|
70
|
+
}
|
|
71
|
+
catch (e_1) {
|
|
72
|
+
env_1.error = e_1;
|
|
73
|
+
env_1.hasError = true;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
const result_1 = __disposeResources(env_1);
|
|
77
|
+
if (result_1)
|
|
78
|
+
await result_1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function mergePdfs(pdfs) {
|
|
82
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
83
|
+
try {
|
|
84
|
+
const stack = __addDisposableResource(env_2, new AsyncDisposableStack(), true);
|
|
85
|
+
const resultFile = __addDisposableResource(env_2, TemporaryFile.create(), true);
|
|
86
|
+
const sourceFiles = await getPdfSourceFiles(pdfs, stack);
|
|
87
|
+
await pdfunite(sourceFiles, resultFile);
|
|
88
|
+
return await resultFile.read();
|
|
89
|
+
}
|
|
90
|
+
catch (e_2) {
|
|
91
|
+
env_2.error = e_2;
|
|
92
|
+
env_2.hasError = true;
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
const result_2 = __disposeResources(env_2);
|
|
96
|
+
if (result_2)
|
|
97
|
+
await result_2;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function mergePdfsStream(pdfs) {
|
|
101
|
+
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
102
|
+
try {
|
|
103
|
+
const stack = __addDisposableResource(env_3, new AsyncDisposableStack(), true);
|
|
104
|
+
const resultFile = __addDisposableResource(env_3, TemporaryFile.create(), true);
|
|
105
|
+
const sourceFiles = await getPdfSourceFiles(pdfs, stack);
|
|
106
|
+
await pdfunite(sourceFiles, resultFile);
|
|
107
|
+
return resultFile.readStream();
|
|
108
|
+
}
|
|
109
|
+
catch (e_3) {
|
|
110
|
+
env_3.error = e_3;
|
|
111
|
+
env_3.hasError = true;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
const result_3 = __disposeResources(env_3);
|
|
115
|
+
if (result_3)
|
|
116
|
+
await result_3;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function getPdfSourceFiles(pdfs, stack) {
|
|
120
|
+
return await Promise.all(pdfs.map(async (pdf) => {
|
|
121
|
+
if (isString(pdf)) {
|
|
122
|
+
return pdf;
|
|
123
|
+
}
|
|
124
|
+
const tmpFile = await TemporaryFile.from(pdf);
|
|
125
|
+
stack.use(tmpFile);
|
|
126
|
+
return tmpFile.path;
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
async function pdfunite(sourceFiles, resultFile) {
|
|
130
|
+
const process = await spawnCommand('pdfunite', [...sourceFiles, resultFile.path]);
|
|
4
131
|
const { code } = await process.wait();
|
|
5
132
|
if (code != 0) {
|
|
6
133
|
const errorOutput = await process.readError();
|
|
7
|
-
throw new Error(errorOutput
|
|
134
|
+
throw new Error(errorOutput);
|
|
8
135
|
}
|
|
9
|
-
const output = await process.readOutput();
|
|
10
|
-
return Number(output);
|
|
11
136
|
}
|
|
@@ -4,8 +4,8 @@ export declare class LazyPromise<T> extends CustomPromise<T> {
|
|
|
4
4
|
#private;
|
|
5
5
|
readonly [Symbol.toStringTag] = "LazyPromise";
|
|
6
6
|
constructor(executorOrPromiseProvider: PromiseExecutor<T> | (() => PromiseLike<T>));
|
|
7
|
-
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null
|
|
8
|
-
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null
|
|
9
|
-
finally(onfinally?: (() => void) | null
|
|
7
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
8
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<T | TResult>;
|
|
9
|
+
finally(onfinally?: (() => void) | null): Promise<T>;
|
|
10
10
|
private execute;
|
|
11
11
|
}
|
package/queue/enqueue-batch.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export declare class QueueEnqueueBatch<T> implements QueueEnqueueBatchMethods<T>
|
|
|
13
13
|
/** enqueues all added items */
|
|
14
14
|
enqueue(returnJobs?: false): Promise<void>;
|
|
15
15
|
enqueue(returnJobs: true): Promise<Job<T>[]>;
|
|
16
|
+
enqueue(returnJobs?: boolean): Promise<Job<T>[] | undefined>;
|
|
16
17
|
}
|
package/queue/enqueue-batch.js
CHANGED
|
@@ -13,7 +13,7 @@ export class QueueEnqueueBatch {
|
|
|
13
13
|
async enqueue(returnJobs) {
|
|
14
14
|
const items = this.items;
|
|
15
15
|
this.items = [];
|
|
16
|
-
const result = await this.queue.enqueueMany(items, returnJobs);
|
|
16
|
+
const result = await this.queue.enqueueMany(items, { returnJobs });
|
|
17
17
|
return result;
|
|
18
18
|
}
|
|
19
19
|
}
|
package/queue/mongo/queue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CancellationSignal } from '../../cancellation/index.js';
|
|
2
2
|
import { Lock } from '../../lock/index.js';
|
|
3
3
|
import { MessageBusProvider } from '../../message-bus/index.js';
|
|
4
|
-
import type { EnqueueManyItem,
|
|
4
|
+
import type { EnqueueManyItem, EnqueueManyOptions, EnqueueOneOptions, Job, JobTag } from '../../queue/index.js';
|
|
5
5
|
import { Queue, type QueueConfig } from '../../queue/index.js';
|
|
6
6
|
import { MongoJobRepository } from './mongo-job.repository.js';
|
|
7
7
|
export declare class MongoQueue<T = unknown> extends Queue<T> {
|
|
@@ -12,9 +12,14 @@ export declare class MongoQueue<T = unknown> extends Queue<T> {
|
|
|
12
12
|
private readonly maxTries;
|
|
13
13
|
private readonly messageBus;
|
|
14
14
|
constructor(repository: MongoJobRepository<T>, lock: Lock, messageBusProvider: MessageBusProvider, key: string, config?: QueueConfig);
|
|
15
|
-
enqueue(data: T, options?:
|
|
16
|
-
enqueueMany(items: EnqueueManyItem<T>[],
|
|
17
|
-
|
|
15
|
+
enqueue(data: T, options?: EnqueueOneOptions): Promise<Job<T>>;
|
|
16
|
+
enqueueMany(items: EnqueueManyItem<T>[], options?: EnqueueManyOptions & {
|
|
17
|
+
returnJobs?: false;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
enqueueMany(items: EnqueueManyItem<T>[], options: EnqueueManyOptions & {
|
|
20
|
+
returnJobs: true;
|
|
21
|
+
}): Promise<Job<T>[]>;
|
|
22
|
+
enqueueMany(items: EnqueueManyItem<T>[], options?: EnqueueManyOptions): Promise<void | Job<T>[]>;
|
|
18
23
|
has(id: string): Promise<boolean>;
|
|
19
24
|
countByTag(tag: JobTag): Promise<number>;
|
|
20
25
|
get(id: string): Promise<Job<T> | undefined>;
|
package/queue/mongo/queue.js
CHANGED
|
@@ -66,12 +66,12 @@ let MongoQueue = class MongoQueue extends Queue {
|
|
|
66
66
|
: await this.repository.insertWithUniqueTagStrategy(newJob, uniqueTag);
|
|
67
67
|
return toModelJob(job);
|
|
68
68
|
}
|
|
69
|
-
async enqueueMany(items,
|
|
69
|
+
async enqueueMany(items, options) {
|
|
70
70
|
const now = currentTimestamp();
|
|
71
71
|
const nonUnique = [];
|
|
72
72
|
const keepOld = [];
|
|
73
73
|
const takeNew = [];
|
|
74
|
-
for (const { data, tag = null,
|
|
74
|
+
for (const { data, tag = null, priority = defaultJobPriority } of items) {
|
|
75
75
|
const newMongoJob = {
|
|
76
76
|
queue: this.queueKey,
|
|
77
77
|
jobId: getNewId(),
|
|
@@ -83,7 +83,7 @@ let MongoQueue = class MongoQueue extends Queue {
|
|
|
83
83
|
lastDequeueTimestamp: 0,
|
|
84
84
|
batch: null
|
|
85
85
|
};
|
|
86
|
-
switch (uniqueTag) {
|
|
86
|
+
switch (options?.uniqueTag) {
|
|
87
87
|
case undefined:
|
|
88
88
|
nonUnique.push(newMongoJob);
|
|
89
89
|
break;
|
|
@@ -102,7 +102,7 @@ let MongoQueue = class MongoQueue extends Queue {
|
|
|
102
102
|
(keepOld.length > 0) ? this.repository.bulkInsertWithUniqueTagStrategy(keepOld, UniqueTagStrategy.KeepOld) : undefined,
|
|
103
103
|
(takeNew.length > 0) ? this.repository.bulkInsertWithUniqueTagStrategy(takeNew, UniqueTagStrategy.TakeNew) : undefined
|
|
104
104
|
]);
|
|
105
|
-
if (returnJobs) {
|
|
105
|
+
if (options?.returnJobs == true) {
|
|
106
106
|
const keepOldTags = keepOld.map((job) => job.tag);
|
|
107
107
|
const takeNewTags = takeNew.map((job) => job.tag);
|
|
108
108
|
const uniqueTagJobs = await this.repository.loadManyByFilter({ queue: this.queueKey, tag: { $in: [...keepOldTags, ...takeNewTags] } });
|
|
@@ -225,7 +225,7 @@ MongoQueue = __decorate([
|
|
|
225
225
|
if (isString(argument)) {
|
|
226
226
|
return provider.get(argument, defaultQueueConfig);
|
|
227
227
|
}
|
|
228
|
-
return provider.get(argument.
|
|
228
|
+
return provider.get(argument.name, { ...defaultQueueConfig, ...argument });
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
}),
|
|
@@ -241,7 +241,6 @@ function toModelJob(mongoJob) {
|
|
|
241
241
|
};
|
|
242
242
|
return job;
|
|
243
243
|
}
|
|
244
|
-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
245
244
|
function getDequeueFindParameters(queueKey, maxTries, processTimeout, batch = null) {
|
|
246
245
|
const now = currentTimestamp();
|
|
247
246
|
const maximumLastDequeueTimestamp = now - processTimeout;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE "queue"."job" (
|
|
2
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
3
|
+
"queue" text NOT NULL,
|
|
4
|
+
"tag" text,
|
|
5
|
+
"priority" integer NOT NULL,
|
|
6
|
+
"enqueue_timestamp" timestamp with time zone NOT NULL,
|
|
7
|
+
"tries" integer NOT NULL,
|
|
8
|
+
"last_dequeue_timestamp" timestamp with time zone,
|
|
9
|
+
"data" jsonb NOT NULL,
|
|
10
|
+
CONSTRAINT "job_queue_tag_unique" UNIQUE("queue","tag")
|
|
11
|
+
);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "1a2e63a5-b780-4f4d-ae41-ce8369aa1cf0",
|
|
3
|
+
"prevId": "00000000-0000-0000-0000-000000000000",
|
|
4
|
+
"version": "7",
|
|
5
|
+
"dialect": "postgresql",
|
|
6
|
+
"tables": {
|
|
7
|
+
"queue.job": {
|
|
8
|
+
"name": "job",
|
|
9
|
+
"schema": "queue",
|
|
10
|
+
"columns": {
|
|
11
|
+
"id": {
|
|
12
|
+
"name": "id",
|
|
13
|
+
"type": "uuid",
|
|
14
|
+
"primaryKey": true,
|
|
15
|
+
"notNull": true,
|
|
16
|
+
"default": "gen_random_uuid()"
|
|
17
|
+
},
|
|
18
|
+
"queue": {
|
|
19
|
+
"name": "queue",
|
|
20
|
+
"type": "text",
|
|
21
|
+
"primaryKey": false,
|
|
22
|
+
"notNull": true
|
|
23
|
+
},
|
|
24
|
+
"tag": {
|
|
25
|
+
"name": "tag",
|
|
26
|
+
"type": "text",
|
|
27
|
+
"primaryKey": false,
|
|
28
|
+
"notNull": false
|
|
29
|
+
},
|
|
30
|
+
"priority": {
|
|
31
|
+
"name": "priority",
|
|
32
|
+
"type": "integer",
|
|
33
|
+
"primaryKey": false,
|
|
34
|
+
"notNull": true
|
|
35
|
+
},
|
|
36
|
+
"enqueue_timestamp": {
|
|
37
|
+
"name": "enqueue_timestamp",
|
|
38
|
+
"type": "timestamp with time zone",
|
|
39
|
+
"primaryKey": false,
|
|
40
|
+
"notNull": true
|
|
41
|
+
},
|
|
42
|
+
"tries": {
|
|
43
|
+
"name": "tries",
|
|
44
|
+
"type": "integer",
|
|
45
|
+
"primaryKey": false,
|
|
46
|
+
"notNull": true
|
|
47
|
+
},
|
|
48
|
+
"last_dequeue_timestamp": {
|
|
49
|
+
"name": "last_dequeue_timestamp",
|
|
50
|
+
"type": "timestamp with time zone",
|
|
51
|
+
"primaryKey": false,
|
|
52
|
+
"notNull": false
|
|
53
|
+
},
|
|
54
|
+
"data": {
|
|
55
|
+
"name": "data",
|
|
56
|
+
"type": "jsonb",
|
|
57
|
+
"primaryKey": false,
|
|
58
|
+
"notNull": true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"indexes": {},
|
|
62
|
+
"foreignKeys": {},
|
|
63
|
+
"compositePrimaryKeys": {},
|
|
64
|
+
"uniqueConstraints": {
|
|
65
|
+
"job_queue_tag_unique": {
|
|
66
|
+
"name": "job_queue_tag_unique",
|
|
67
|
+
"nullsNotDistinct": false,
|
|
68
|
+
"columns": [
|
|
69
|
+
"queue",
|
|
70
|
+
"tag"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"policies": {},
|
|
75
|
+
"checkConstraints": {},
|
|
76
|
+
"isRLSEnabled": false
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"enums": {},
|
|
80
|
+
"schemas": {},
|
|
81
|
+
"sequences": {},
|
|
82
|
+
"roles": {},
|
|
83
|
+
"policies": {},
|
|
84
|
+
"views": {},
|
|
85
|
+
"_meta": {
|
|
86
|
+
"columns": {},
|
|
87
|
+
"schemas": {},
|
|
88
|
+
"tables": {}
|
|
89
|
+
}
|
|
90
|
+
}
|