@byline/db-postgres 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +18 -0
- package/dist/database/schema/auth.d.ts +857 -0
- package/dist/database/schema/auth.d.ts.map +1 -0
- package/dist/database/schema/auth.js +176 -0
- package/dist/database/schema/auth.js.map +1 -0
- package/dist/database/schema/index.d.ts +2955 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/database/schema/index.js +500 -0
- package/dist/database/schema/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/test-helper.d.ts +17 -0
- package/dist/lib/test-helper.d.ts.map +1 -0
- package/dist/lib/test-helper.js +47 -0
- package/dist/lib/test-helper.js.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts +17 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.js +76 -0
- package/dist/modules/admin/admin-permissions-repository.js.map +1 -0
- package/dist/modules/admin/admin-roles-repository.d.ts +12 -0
- package/dist/modules/admin/admin-roles-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-roles-repository.js +168 -0
- package/dist/modules/admin/admin-roles-repository.js.map +1 -0
- package/dist/modules/admin/admin-store.d.ts +20 -0
- package/dist/modules/admin/admin-store.d.ts.map +1 -0
- package/dist/modules/admin/admin-store.js +28 -0
- package/dist/modules/admin/admin-store.js.map +1 -0
- package/dist/modules/admin/admin-users-repository.d.ts +12 -0
- package/dist/modules/admin/admin-users-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-users-repository.js +208 -0
- package/dist/modules/admin/admin-users-repository.js.map +1 -0
- package/dist/modules/admin/index.d.ts +27 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +27 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts +16 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.js +132 -0
- package/dist/modules/admin/refresh-tokens-repository.js.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts +9 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.js +392 -0
- package/dist/modules/admin/tests/auth-integration.test.js.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts +9 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.js +370 -0
- package/dist/modules/admin/tests/session-provider.test.js.map +1 -0
- package/dist/modules/storage/@types.d.ts +116 -0
- package/dist/modules/storage/@types.d.ts.map +1 -0
- package/dist/modules/storage/@types.js +9 -0
- package/dist/modules/storage/@types.js.map +1 -0
- package/dist/modules/storage/storage-commands.d.ts +136 -0
- package/dist/modules/storage/storage-commands.d.ts.map +1 -0
- package/dist/modules/storage/storage-commands.js +272 -0
- package/dist/modules/storage/storage-commands.js.map +1 -0
- package/dist/modules/storage/storage-flatten.d.ts +19 -0
- package/dist/modules/storage/storage-flatten.d.ts.map +1 -0
- package/dist/modules/storage/storage-flatten.js +261 -0
- package/dist/modules/storage/storage-flatten.js.map +1 -0
- package/dist/modules/storage/storage-insert.d.ts +22 -0
- package/dist/modules/storage/storage-insert.d.ts.map +1 -0
- package/dist/modules/storage/storage-insert.js +115 -0
- package/dist/modules/storage/storage-insert.js.map +1 -0
- package/dist/modules/storage/storage-queries.d.ts +377 -0
- package/dist/modules/storage/storage-queries.d.ts.map +1 -0
- package/dist/modules/storage/storage-queries.js +976 -0
- package/dist/modules/storage/storage-queries.js.map +1 -0
- package/dist/modules/storage/storage-restore.d.ts +19 -0
- package/dist/modules/storage/storage-restore.d.ts.map +1 -0
- package/dist/modules/storage/storage-restore.js +350 -0
- package/dist/modules/storage/storage-restore.js.map +1 -0
- package/dist/modules/storage/storage-store-manifest.d.ts +71 -0
- package/dist/modules/storage/storage-store-manifest.d.ts.map +1 -0
- package/dist/modules/storage/storage-store-manifest.js +294 -0
- package/dist/modules/storage/storage-store-manifest.js.map +1 -0
- package/dist/modules/storage/storage-utils.d.ts +23 -0
- package/dist/modules/storage/storage-utils.d.ts.map +1 -0
- package/dist/modules/storage/storage-utils.js +72 -0
- package/dist/modules/storage/storage-utils.js.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.js +146 -0
- package/dist/modules/storage/tests/storage-field-types.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js +327 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js +141 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.js +336 -0
- package/dist/modules/storage/tests/storage-versioning.test.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { ERR_DATABASE, getLogger } from '@byline/core';
|
|
9
|
+
import { v7 as uuidv7 } from 'uuid';
|
|
10
|
+
// ------------------------------------------------------------------------------
|
|
11
|
+
// Flattening logic: take a document's nested field data and flatten it into an
|
|
12
|
+
// array of field values with associated metadata such as field path and locale.
|
|
13
|
+
// ------------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Main entrypoint for flattening a document's (nested) field data into a flat
|
|
16
|
+
* array of field values.
|
|
17
|
+
*
|
|
18
|
+
* @param fields - The field definitions for the collection.
|
|
19
|
+
* @param data - The document's field data to flatten.
|
|
20
|
+
* @param locale - The locale to flatten for (or 'all' to flatten all locales).
|
|
21
|
+
*/
|
|
22
|
+
export const flattenFieldSetData = (fields, data, locale) => {
|
|
23
|
+
return Array.from(flattenFieldSetDataGen(fields, data, locale));
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Flatten data for a FieldSet (Field[]) -- this could be the top-level field
|
|
27
|
+
* data for a document, or the data inside a group, array or blocks field.
|
|
28
|
+
*
|
|
29
|
+
* @param fields - The field definitions for the current field set.
|
|
30
|
+
* @param data - The field data for the current field set.
|
|
31
|
+
* @param locale - The locale to flatten for (or 'all' to flatten all locales).
|
|
32
|
+
* @param parent_path - The path segments leading up to the current field set.
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
function* flattenFieldSetDataGen(fields, data, locale, parent_path = []) {
|
|
36
|
+
if (data === undefined) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const fieldData = data;
|
|
40
|
+
for (const field of fields) {
|
|
41
|
+
yield* flattenFieldDataGen(field, fieldData[field.name], locale, [...parent_path, field.name]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Flatten data for a single field.
|
|
46
|
+
*
|
|
47
|
+
* @param field - The field definition for the current field.
|
|
48
|
+
* @param data - The field data for the current field.
|
|
49
|
+
* @param locale - The locale to flatten for (or 'all' to flatten all locales).
|
|
50
|
+
* @param field_path - The path segments up to and including the current field.
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
function* flattenFieldDataGen(field, data, locale, field_path) {
|
|
54
|
+
if (data === undefined) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Group fields are simple -- just use flattenFieldSetDataGen. It will handle
|
|
58
|
+
// adding the appropriate field names to field_path.
|
|
59
|
+
if (field.type === 'group') {
|
|
60
|
+
yield* flattenFieldSetDataGen(field.fields, data, locale, field_path);
|
|
61
|
+
}
|
|
62
|
+
// For array fields, we must emit a single FlattenedMetaFieldData for each
|
|
63
|
+
// item to capture the item's stable ID, and then flatten the fields within
|
|
64
|
+
// each item using flattenFieldSetDataGen().
|
|
65
|
+
else if (field.type === 'array') {
|
|
66
|
+
const items = data;
|
|
67
|
+
for (let i = 0; i < items.length; i++) {
|
|
68
|
+
// biome-ignore lint/style/noNonNullAssertion: i is always in-bounds
|
|
69
|
+
const { _id, ...item_data } = items[i];
|
|
70
|
+
const item_path = [...field_path, `${i}`];
|
|
71
|
+
yield {
|
|
72
|
+
locale: 'all',
|
|
73
|
+
field_path: item_path,
|
|
74
|
+
field_type: 'meta',
|
|
75
|
+
type: 'array_item',
|
|
76
|
+
item_id: _id ?? uuidv7(),
|
|
77
|
+
meta: null,
|
|
78
|
+
};
|
|
79
|
+
yield* flattenFieldSetDataGen(field.fields, item_data, locale, item_path);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Blocks are similar to arrays, but with an additional type discriminator for
|
|
83
|
+
// block variants.
|
|
84
|
+
else if (field.type === 'blocks') {
|
|
85
|
+
const items = data;
|
|
86
|
+
for (let i = 0; i < items.length; i++) {
|
|
87
|
+
// biome-ignore lint/style/noNonNullAssertion: i is always in-bounds
|
|
88
|
+
const { _id, _type, ...item_data } = items[i];
|
|
89
|
+
const item_path = [...field_path, `${i}`, _type];
|
|
90
|
+
const block = field.blocks.find((f) => f.blockType === _type);
|
|
91
|
+
if (!block) {
|
|
92
|
+
throw ERR_DATABASE({
|
|
93
|
+
message: `invalid block type: ${_type}`,
|
|
94
|
+
details: { blockType: _type },
|
|
95
|
+
}).log(getLogger());
|
|
96
|
+
}
|
|
97
|
+
yield {
|
|
98
|
+
locale: 'all',
|
|
99
|
+
field_path: item_path,
|
|
100
|
+
field_type: 'meta',
|
|
101
|
+
type: 'group',
|
|
102
|
+
item_id: _id ?? uuidv7(),
|
|
103
|
+
meta: null,
|
|
104
|
+
};
|
|
105
|
+
yield* flattenFieldSetDataGen(block.fields, item_data, locale, item_path);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Handle localized fields separately.
|
|
109
|
+
else if (field.localized) {
|
|
110
|
+
// If locale is 'all', data is expected to be an object that maps locales to
|
|
111
|
+
// the corresponding localized values, and we emit a separate
|
|
112
|
+
// FlattenedFieldData for each.
|
|
113
|
+
if (locale === 'all') {
|
|
114
|
+
const localizedData = data;
|
|
115
|
+
for (const [locale, value] of Object.entries(localizedData)) {
|
|
116
|
+
if (value !== undefined) {
|
|
117
|
+
yield flattenValueFieldData(field, field_path, value, locale);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// If locale is not 'all', data is expected to be a single localized value
|
|
122
|
+
// for the specified locale, and we emit a single FlattenedFieldData for
|
|
123
|
+
// that locale.
|
|
124
|
+
else {
|
|
125
|
+
yield flattenValueFieldData(field, field_path, data, locale);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// For non-localized fields, data is expected to be the (non-localized) field
|
|
129
|
+
// value, and we emit a single FlattenedFieldData with locale 'all'.
|
|
130
|
+
else {
|
|
131
|
+
yield flattenValueFieldData(field, field_path, data, 'all');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const flattenValueFieldData = (field, field_path, value, locale) => {
|
|
135
|
+
const field_type = field.type;
|
|
136
|
+
switch (field_type) {
|
|
137
|
+
case 'text':
|
|
138
|
+
case 'textArea':
|
|
139
|
+
case 'select':
|
|
140
|
+
return {
|
|
141
|
+
locale,
|
|
142
|
+
field_path,
|
|
143
|
+
field_type: 'text',
|
|
144
|
+
value: value,
|
|
145
|
+
};
|
|
146
|
+
case 'float':
|
|
147
|
+
return {
|
|
148
|
+
locale,
|
|
149
|
+
field_path,
|
|
150
|
+
field_type: 'numeric',
|
|
151
|
+
number_type: 'float',
|
|
152
|
+
value_float: value,
|
|
153
|
+
};
|
|
154
|
+
case 'integer':
|
|
155
|
+
return {
|
|
156
|
+
locale,
|
|
157
|
+
field_path,
|
|
158
|
+
field_type: 'numeric',
|
|
159
|
+
number_type: 'integer',
|
|
160
|
+
value_integer: value,
|
|
161
|
+
};
|
|
162
|
+
case 'decimal':
|
|
163
|
+
return {
|
|
164
|
+
locale,
|
|
165
|
+
field_path,
|
|
166
|
+
field_type: 'numeric',
|
|
167
|
+
number_type: 'decimal',
|
|
168
|
+
value_decimal: value,
|
|
169
|
+
};
|
|
170
|
+
case 'boolean':
|
|
171
|
+
case 'checkbox':
|
|
172
|
+
return {
|
|
173
|
+
locale,
|
|
174
|
+
field_path,
|
|
175
|
+
field_type: 'boolean',
|
|
176
|
+
value: value,
|
|
177
|
+
};
|
|
178
|
+
case 'time':
|
|
179
|
+
return {
|
|
180
|
+
locale,
|
|
181
|
+
field_path,
|
|
182
|
+
field_type: 'datetime',
|
|
183
|
+
date_type: 'time',
|
|
184
|
+
value_time: value,
|
|
185
|
+
};
|
|
186
|
+
case 'date':
|
|
187
|
+
return {
|
|
188
|
+
locale,
|
|
189
|
+
field_path,
|
|
190
|
+
field_type: 'datetime',
|
|
191
|
+
date_type: 'date',
|
|
192
|
+
value_date: value,
|
|
193
|
+
};
|
|
194
|
+
case 'datetime':
|
|
195
|
+
return {
|
|
196
|
+
locale,
|
|
197
|
+
field_path,
|
|
198
|
+
field_type: 'datetime',
|
|
199
|
+
date_type: 'datetime',
|
|
200
|
+
value_timestamp_tz: value,
|
|
201
|
+
};
|
|
202
|
+
case 'file':
|
|
203
|
+
case 'image': {
|
|
204
|
+
const v = value;
|
|
205
|
+
return {
|
|
206
|
+
locale,
|
|
207
|
+
field_path,
|
|
208
|
+
field_type: 'file',
|
|
209
|
+
file_id: v.fileId,
|
|
210
|
+
filename: v.filename,
|
|
211
|
+
original_filename: v.originalFilename,
|
|
212
|
+
mime_type: v.mimeType,
|
|
213
|
+
file_size: v.fileSize,
|
|
214
|
+
storage_provider: v.storageProvider,
|
|
215
|
+
storage_path: v.storagePath,
|
|
216
|
+
storage_url: v.storageUrl,
|
|
217
|
+
file_hash: v.fileHash,
|
|
218
|
+
image_width: v.imageWidth,
|
|
219
|
+
image_height: v.imageHeight,
|
|
220
|
+
image_format: v.imageFormat,
|
|
221
|
+
processing_status: v.processingStatus,
|
|
222
|
+
thumbnail_generated: v.thumbnailGenerated,
|
|
223
|
+
variants: v.variants?.map((variant) => ({
|
|
224
|
+
name: variant.name,
|
|
225
|
+
storage_path: variant.storagePath,
|
|
226
|
+
storage_url: variant.storageUrl,
|
|
227
|
+
width: variant.width,
|
|
228
|
+
height: variant.height,
|
|
229
|
+
format: variant.format,
|
|
230
|
+
})),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
case 'relation': {
|
|
234
|
+
const v = value;
|
|
235
|
+
return {
|
|
236
|
+
locale,
|
|
237
|
+
field_path,
|
|
238
|
+
field_type: 'relation',
|
|
239
|
+
target_document_id: v.targetDocumentId,
|
|
240
|
+
target_collection_id: v.targetCollectionId,
|
|
241
|
+
relationship_type: v.relationshipType,
|
|
242
|
+
cascade_delete: v.cascadeDelete,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
case 'richText':
|
|
246
|
+
case 'json':
|
|
247
|
+
case 'object':
|
|
248
|
+
return {
|
|
249
|
+
locale,
|
|
250
|
+
field_path,
|
|
251
|
+
field_type: 'json',
|
|
252
|
+
value,
|
|
253
|
+
};
|
|
254
|
+
default:
|
|
255
|
+
throw ERR_DATABASE({
|
|
256
|
+
message: `unsupported field type: ${field_type}`,
|
|
257
|
+
details: { fieldType: field_type },
|
|
258
|
+
}).log(getLogger());
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
//# sourceMappingURL=storage-flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-flatten.js","sourceRoot":"","sources":["../../../src/modules/storage/storage-flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import type { booleanStore, datetimeStore, fileStore, jsonStore, metaStore, numericStore, relationStore, textStore } from '../../database/schema/index.js';
|
|
9
|
+
import type { FlattenedFieldValue } from './@types.js';
|
|
10
|
+
type FieldInsertBuckets = {
|
|
11
|
+
text: (typeof textStore.$inferInsert)[];
|
|
12
|
+
numeric: (typeof numericStore.$inferInsert)[];
|
|
13
|
+
boolean: (typeof booleanStore.$inferInsert)[];
|
|
14
|
+
datetime: (typeof datetimeStore.$inferInsert)[];
|
|
15
|
+
file: (typeof fileStore.$inferInsert)[];
|
|
16
|
+
relation: (typeof relationStore.$inferInsert)[];
|
|
17
|
+
json: (typeof jsonStore.$inferInsert)[];
|
|
18
|
+
meta: (typeof metaStore.$inferInsert)[];
|
|
19
|
+
};
|
|
20
|
+
export declare const prepareFieldInsertBuckets: (flattenedFields: FlattenedFieldValue[], document_version_id: string, collection_id: string) => FieldInsertBuckets;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=storage-insert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-insert.d.ts","sourceRoot":"","sources":["../../../src/modules/storage/storage-insert.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAOtD,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,CAAA;IACvC,OAAO,EAAE,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC,EAAE,CAAA;IAC7C,OAAO,EAAE,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC,EAAE,CAAA;IAC7C,QAAQ,EAAE,CAAC,OAAO,aAAa,CAAC,YAAY,CAAC,EAAE,CAAA;IAC/C,IAAI,EAAE,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,CAAA;IACvC,QAAQ,EAAE,CAAC,OAAO,aAAa,CAAC,YAAY,CAAC,EAAE,CAAA;IAC/C,IAAI,EAAE,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,CAAA;IACvC,IAAI,EAAE,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,CAAA;CACxC,CAAA;AAED,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,mBAAmB,EAAE,EACtC,qBAAqB,MAAM,EAC3B,eAAe,MAAM,KACpB,kBAoHF,CAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
import { ERR_DATABASE, getLogger } from '@byline/core';
|
|
9
|
+
import { v7 as uuidv7 } from 'uuid';
|
|
10
|
+
export const prepareFieldInsertBuckets = (flattenedFields, document_version_id, collection_id) => {
|
|
11
|
+
const buckets = {
|
|
12
|
+
text: [],
|
|
13
|
+
numeric: [],
|
|
14
|
+
boolean: [],
|
|
15
|
+
datetime: [],
|
|
16
|
+
file: [],
|
|
17
|
+
relation: [],
|
|
18
|
+
json: [],
|
|
19
|
+
meta: [],
|
|
20
|
+
};
|
|
21
|
+
for (const field of flattenedFields) {
|
|
22
|
+
const { field_type, field_path, locale } = field;
|
|
23
|
+
if (field_type === 'meta') {
|
|
24
|
+
buckets.meta.push({
|
|
25
|
+
id: uuidv7(),
|
|
26
|
+
document_version_id,
|
|
27
|
+
collection_id,
|
|
28
|
+
type: field.type,
|
|
29
|
+
path: field_path.join('.'),
|
|
30
|
+
item_id: field.item_id,
|
|
31
|
+
});
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const base = {
|
|
35
|
+
id: uuidv7(),
|
|
36
|
+
document_version_id,
|
|
37
|
+
collection_id,
|
|
38
|
+
field_path: field_path.join('.'),
|
|
39
|
+
field_name: field_path[field_path.length - 1] ?? '',
|
|
40
|
+
locale,
|
|
41
|
+
parent_path: field_path.length > 1 ? field_path.slice(0, -1).join('.') : undefined,
|
|
42
|
+
};
|
|
43
|
+
switch (field_type) {
|
|
44
|
+
case 'text':
|
|
45
|
+
buckets.text.push({ ...base, value: field.value });
|
|
46
|
+
continue;
|
|
47
|
+
case 'numeric':
|
|
48
|
+
buckets.numeric.push({
|
|
49
|
+
...base,
|
|
50
|
+
number_type: field.number_type,
|
|
51
|
+
value_float: field.value_float,
|
|
52
|
+
value_integer: field.value_integer,
|
|
53
|
+
value_decimal: field.value_decimal,
|
|
54
|
+
});
|
|
55
|
+
continue;
|
|
56
|
+
case 'boolean':
|
|
57
|
+
buckets.boolean.push({
|
|
58
|
+
...base,
|
|
59
|
+
value: field.value,
|
|
60
|
+
});
|
|
61
|
+
continue;
|
|
62
|
+
case 'datetime':
|
|
63
|
+
buckets.datetime.push({
|
|
64
|
+
...base,
|
|
65
|
+
date_type: field.date_type,
|
|
66
|
+
value_date: field.value_date?.toISOString(), // TODO: Is this the appropriate conversion?
|
|
67
|
+
value_time: field.value_time,
|
|
68
|
+
value_timestamp_tz: field.value_timestamp_tz,
|
|
69
|
+
});
|
|
70
|
+
continue;
|
|
71
|
+
case 'file':
|
|
72
|
+
buckets.file.push({
|
|
73
|
+
...base,
|
|
74
|
+
file_id: field.file_id,
|
|
75
|
+
filename: field.filename,
|
|
76
|
+
original_filename: field.original_filename,
|
|
77
|
+
mime_type: field.mime_type,
|
|
78
|
+
file_size: field.file_size,
|
|
79
|
+
storage_provider: field.storage_provider,
|
|
80
|
+
storage_path: field.storage_path,
|
|
81
|
+
storage_url: field.storage_url,
|
|
82
|
+
file_hash: field.file_hash,
|
|
83
|
+
image_width: field.image_width,
|
|
84
|
+
image_height: field.image_height,
|
|
85
|
+
image_format: field.image_format,
|
|
86
|
+
processing_status: field.processing_status || 'pending', // TODO: Is 'pending' the appropriate default status?
|
|
87
|
+
thumbnail_generated: field.thumbnail_generated || false,
|
|
88
|
+
variants: field.variants,
|
|
89
|
+
});
|
|
90
|
+
continue;
|
|
91
|
+
case 'relation':
|
|
92
|
+
buckets.relation.push({
|
|
93
|
+
...base,
|
|
94
|
+
target_document_id: field.target_document_id,
|
|
95
|
+
target_collection_id: field.target_collection_id,
|
|
96
|
+
relationship_type: field.relationship_type || 'reference', // TODO: Is this the appropriate place to set this?
|
|
97
|
+
cascade_delete: field.cascade_delete || false, // TODO: Same question?
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
case 'json':
|
|
101
|
+
buckets.json.push({
|
|
102
|
+
...base,
|
|
103
|
+
value: field.value,
|
|
104
|
+
});
|
|
105
|
+
continue;
|
|
106
|
+
default:
|
|
107
|
+
throw ERR_DATABASE({
|
|
108
|
+
message: `unexpected field type: ${field_type}`,
|
|
109
|
+
details: { fieldType: field_type },
|
|
110
|
+
}).log(getLogger());
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return buckets;
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=storage-insert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-insert.js","sourceRoot":"","sources":["../../../src/modules/storage/storage-insert.ts"],"names":[],"mappings":"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"}
|