@nestjs-cms/core 0.1.3 → 0.1.5

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.
@@ -10,3 +10,4 @@ export { loadResources } from "./resource/resource.loader";
10
10
  export { createCmsDataSource } from "./database/create-data-source";
11
11
  export { AttachmentService } from "./storage/attachment.service";
12
12
  export { configureCmsApp } from "./setup";
13
+ export { matchesMimeType } from "./storage/mime-type";
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configureCmsApp = exports.AttachmentService = exports.createCmsDataSource = exports.loadResources = exports.defineResource = exports.ResourceRegistry = exports.ResourceService = exports.ResourceModule = exports.z = void 0;
3
+ exports.matchesMimeType = exports.configureCmsApp = exports.AttachmentService = exports.createCmsDataSource = exports.loadResources = exports.defineResource = exports.ResourceRegistry = exports.ResourceService = exports.ResourceModule = exports.z = void 0;
4
4
  require("reflect-metadata");
5
5
  var zod_1 = require("zod");
6
6
  Object.defineProperty(exports, "z", { enumerable: true, get: function () { return zod_1.z; } });
@@ -20,4 +20,6 @@ var attachment_service_1 = require("./storage/attachment.service");
20
20
  Object.defineProperty(exports, "AttachmentService", { enumerable: true, get: function () { return attachment_service_1.AttachmentService; } });
21
21
  var setup_1 = require("./setup");
22
22
  Object.defineProperty(exports, "configureCmsApp", { enumerable: true, get: function () { return setup_1.configureCmsApp; } });
23
+ var mime_type_1 = require("./storage/mime-type");
24
+ Object.defineProperty(exports, "matchesMimeType", { enumerable: true, get: function () { return mime_type_1.matchesMimeType; } });
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAC1B,2BAAwB;AAAf,wFAAA,CAAC,OAAA;AACV,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AAEvB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAUvB,8DAA2D;AAAlD,gHAAA,aAAa,OAAA;AACtB,oEAAoE;AAA3D,yHAAA,mBAAmB,OAAA;AAC5B,mEAAiE;AAAxD,uHAAA,iBAAiB,OAAA;AAC1B,iCAA0C;AAAjC,wGAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAC1B,2BAAwB;AAAf,wFAAA,CAAC,OAAA;AACV,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AAEvB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAUvB,8DAA2D;AAAlD,gHAAA,aAAa,OAAA;AACtB,oEAAoE;AAA3D,yHAAA,mBAAmB,OAAA;AAC5B,mEAAiE;AAAxD,uHAAA,iBAAiB,OAAA;AAC1B,iCAA0C;AAAjC,wGAAA,eAAe,OAAA;AAExB,iDAAsD;AAA7C,4GAAA,eAAe,OAAA"}
@@ -44,7 +44,11 @@ let ResourceRegistry = class ResourceRegistry {
44
44
  }
45
45
  const fields = def.attachments ?? [];
46
46
  if (new Set(fields.map((f) => f.field)).size !== fields.length ||
47
- fields.some((f) => !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(f.field) || !f.mimeTypes.length))
47
+ fields.some((f) => !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(f.field) ||
48
+ !f.mimeTypes.length ||
49
+ reserved.includes(f.field) ||
50
+ Object.hasOwn(def.columns, f.field) ||
51
+ Object.hasOwn(def.schema.shape, f.field)))
48
52
  throw new Error("Invalid attachment definition");
49
53
  this.definitions.set(def.name, def);
50
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource.registry.js","sourceRoot":"","sources":["../../../src/resource/resource.registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.registry.js","sourceRoot":"","sources":["../../../src/resource/resource.registry.ts"],"names":[],"mappings":"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"}
@@ -56,7 +56,7 @@ let ResourceService = class ResourceService {
56
56
  const def = this.registry.get(name);
57
57
  return rows.map((row) => ({
58
58
  ...row,
59
- attachments: Object.fromEntries((def.attachments ?? []).map((f) => {
59
+ ...Object.fromEntries((def.attachments ?? []).map((f) => {
60
60
  const matches = files
61
61
  .filter((a) => a.recordId === row.id && a.field === f.field)
62
62
  .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime() ||
@@ -1 +1 @@
1
- {"version":3,"file":"resource.service.js","sourceRoot":"","sources":["../../../src/resource/resource.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.service.js","sourceRoot":"","sources":["../../../src/resource/resource.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DataSource } from "typeorm";
1
+ import { DataSource, EntityManager } from "typeorm";
2
2
  import { ResourceRegistry } from "../resource/resource.registry";
3
3
  import { ResourceRecordStore } from "../resource/resource-record.store";
4
4
  import type { UploadedAttachment } from "./attachment.types";
@@ -17,6 +17,18 @@ export declare class AttachmentService {
17
17
  size: number;
18
18
  createdAt: Date;
19
19
  }>;
20
+ private validateFile;
21
+ /** Standalone import runner; close it after use to release the storage client. */
22
+ static forImport(db: DataSource, registry: ResourceRegistry): {
23
+ service: AttachmentService;
24
+ close: () => void;
25
+ };
26
+ importMaxBytes(resource: string, field: string): number;
27
+ hasImported(id: string, resource: string, recordId: string, field: string): Promise<boolean>;
28
+ /** Persist pending metadata outside the row transaction so failed imports remain cleanable. */
29
+ stageImport(resource: string, recordId: string, field: string, file: UploadedAttachment): Promise<`${string}-${string}-${string}-${string}-${string}`>;
30
+ /** Publish staged metadata atomically with imported rows, using a stable source identity. */
31
+ commitImport(manager: EntityManager, pendingId: string, id: string): Promise<void>;
20
32
  private findRecord;
21
33
  find(resource: string, id: string, field: string, attachmentId: string): Promise<{
22
34
  id: string;
@@ -8,8 +8,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var AttachmentService_1;
11
12
  Object.defineProperty(exports, "__esModule", { value: true });
12
13
  exports.AttachmentService = void 0;
14
+ const mime_type_1 = require("./mime-type");
13
15
  const common_1 = require("@nestjs/common");
14
16
  const typeorm_1 = require("typeorm");
15
17
  const node_crypto_1 = require("node:crypto");
@@ -20,7 +22,7 @@ const resource_record_store_1 = require("../resource/resource-record.store");
20
22
  const validation_1 = require("../resource/validation");
21
23
  const attachment_entity_1 = require("./attachment.entity");
22
24
  const s3_service_1 = require("./s3.service");
23
- let AttachmentService = class AttachmentService {
25
+ let AttachmentService = AttachmentService_1 = class AttachmentService {
24
26
  db;
25
27
  registry;
26
28
  records;
@@ -40,29 +42,8 @@ let AttachmentService = class AttachmentService {
40
42
  return definition;
41
43
  }
42
44
  async upload(resource, id, field, file) {
45
+ const input = this.validateFile(resource, field, file);
43
46
  const definition = this.field(resource, field);
44
- if (!file?.buffer)
45
- throw new common_1.BadRequestException("A multipart file field is required");
46
- const maxBytes = Math.min(definition.maxBytes ?? config_1.config.ATTACHMENT_MAX_BYTES, config_1.config.ATTACHMENT_MAX_BYTES);
47
- if (file.buffer.length > maxBytes)
48
- throw new common_1.PayloadTooLargeException("Attachment exceeds field size limit");
49
- const input = (0, validation_1.parse)(zod_1.z.object({
50
- name: zod_1.z
51
- .string()
52
- .trim()
53
- .min(1)
54
- .max(255)
55
- .refine((v) => !/[\x00-\x1f\x7f/\\]/.test(v), "Invalid filename"),
56
- mimeType: zod_1.z
57
- .string()
58
- .max(120)
59
- .refine((v) => definition.mimeTypes.includes(v), "Unsupported MIME type"),
60
- size: zod_1.z.number().int().min(1),
61
- }), {
62
- name: file.originalname,
63
- mimeType: file.mimetype,
64
- size: file.buffer.length,
65
- });
66
47
  const attachmentId = (0, node_crypto_1.randomUUID)();
67
48
  const key = `attachments/${resource}/${id}/${field}/${attachmentId}`;
68
49
  // Retain the existing storage schema so previously stored attachments remain readable.
@@ -100,6 +81,91 @@ let AttachmentService = class AttachmentService {
100
81
  return (0, attachment_entity_1.attachmentMetadata)(current);
101
82
  });
102
83
  }
84
+ validateFile(resource, field, file) {
85
+ const definition = this.field(resource, field);
86
+ if (!file?.buffer)
87
+ throw new common_1.BadRequestException("A multipart file field is required");
88
+ const maxBytes = Math.min(definition.maxBytes ?? config_1.config.ATTACHMENT_MAX_BYTES, config_1.config.ATTACHMENT_MAX_BYTES);
89
+ if (file.buffer.length > maxBytes)
90
+ throw new common_1.PayloadTooLargeException("Attachment exceeds field size limit");
91
+ const input = (0, validation_1.parse)(zod_1.z.object({
92
+ name: zod_1.z
93
+ .string()
94
+ .trim()
95
+ .min(1)
96
+ .max(255)
97
+ .refine((v) => !/[\x00-\x1f\x7f/\\]/.test(v), "Invalid filename"),
98
+ mimeType: zod_1.z
99
+ .string()
100
+ .max(120)
101
+ .refine((v) => (0, mime_type_1.matchesMimeType)(v, definition.mimeTypes), "Unsupported MIME type"),
102
+ size: zod_1.z.number().int().min(1),
103
+ }), {
104
+ name: file.originalname,
105
+ mimeType: file.mimetype,
106
+ size: file.buffer.length,
107
+ });
108
+ return input;
109
+ }
110
+ /** Standalone import runner; close it after use to release the storage client. */
111
+ static forImport(db, registry) {
112
+ const storage = new s3_service_1.S3Service();
113
+ return {
114
+ service: new AttachmentService_1(db, registry, new resource_record_store_1.ResourceRecordStore(registry), storage),
115
+ close: () => storage.onModuleDestroy(),
116
+ };
117
+ }
118
+ importMaxBytes(resource, field) {
119
+ return Math.min(this.field(resource, field).maxBytes ?? config_1.config.ATTACHMENT_MAX_BYTES, config_1.config.ATTACHMENT_MAX_BYTES);
120
+ }
121
+ async hasImported(id, resource, recordId, field) {
122
+ return this.db
123
+ .getRepository(attachment_entity_1.AttachmentEntity)
124
+ .existsBy({ id, resource, recordId, field, status: "ready" });
125
+ }
126
+ /** Persist pending metadata outside the row transaction so failed imports remain cleanable. */
127
+ async stageImport(resource, recordId, field, file) {
128
+ const input = this.validateFile(resource, field, file);
129
+ const id = (0, node_crypto_1.randomUUID)();
130
+ const pending = await this.db.getRepository(attachment_entity_1.AttachmentEntity).save({
131
+ id,
132
+ resource,
133
+ recordId,
134
+ field,
135
+ ...input,
136
+ key: `attachments/${resource}/${recordId}/${field}/${id}`,
137
+ stagingKey: "",
138
+ expiresAt: new Date(),
139
+ status: "pending",
140
+ });
141
+ await this.s3.upload(pending.key, file.buffer, input.mimeType);
142
+ return pending.id;
143
+ }
144
+ /** Publish staged metadata atomically with imported rows, using a stable source identity. */
145
+ async commitImport(manager, pendingId, id) {
146
+ const repo = manager.getRepository(attachment_entity_1.AttachmentEntity);
147
+ const pending = await repo.findOneByOrFail({
148
+ id: pendingId,
149
+ status: "pending",
150
+ });
151
+ const definition = this.field(pending.resource, pending.field);
152
+ const existing = await repo.findOneBy({ id });
153
+ if (existing?.status === "ready") {
154
+ await repo.update({ id: pendingId }, { status: "deleted" });
155
+ return;
156
+ }
157
+ if (!definition.multiple)
158
+ await repo.update({
159
+ resource: pending.resource,
160
+ recordId: pending.recordId,
161
+ field: pending.field,
162
+ status: "ready",
163
+ }, { status: "deleted" });
164
+ if (existing)
165
+ await repo.save({ ...existing, id: (0, node_crypto_1.randomUUID)(), status: "deleted" });
166
+ await repo.save({ ...pending, id, status: "ready" });
167
+ await repo.delete({ id: pendingId });
168
+ }
103
169
  async findRecord(resource, id, field, attachmentId) {
104
170
  this.field(resource, field);
105
171
  (0, validation_1.recordId)(attachmentId);
@@ -180,7 +246,7 @@ let AttachmentService = class AttachmentService {
180
246
  }
181
247
  };
182
248
  exports.AttachmentService = AttachmentService;
183
- exports.AttachmentService = AttachmentService = __decorate([
249
+ exports.AttachmentService = AttachmentService = AttachmentService_1 = __decorate([
184
250
  (0, common_1.Injectable)(),
185
251
  __metadata("design:paramtypes", [typeorm_1.DataSource,
186
252
  resource_registry_1.ResourceRegistry,
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.service.js","sourceRoot":"","sources":["../../../src/storage/attachment.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment.service.js","sourceRoot":"","sources":["../../../src/storage/attachment.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Match exact MIME types or a top-level wildcard such as image/*. */
2
+ export declare function matchesMimeType(mimeType: string, allowed: readonly string[]): boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchesMimeType = matchesMimeType;
4
+ /** Match exact MIME types or a top-level wildcard such as image/*. */
5
+ function matchesMimeType(mimeType, allowed) {
6
+ const value = mimeType.trim().toLowerCase();
7
+ if (!/^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+$/.test(value))
8
+ return false;
9
+ return allowed.some((entry) => {
10
+ const pattern = entry.trim().toLowerCase();
11
+ return pattern === value ||
12
+ (/^[a-z0-9!#$&^_.+-]+\/\*$/.test(pattern) &&
13
+ value.startsWith(pattern.slice(0, -1)));
14
+ });
15
+ }
16
+ //# sourceMappingURL=mime-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime-type.js","sourceRoot":"","sources":["../../../src/storage/mime-type.ts"],"names":[],"mappings":";;AACA,0CASC;AAVD,sEAAsE;AACtE,SAAgB,eAAe,CAAC,QAAgB,EAAE,OAA0B;IAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,OAAO,KAAK,KAAK;YACtB,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}
package/docs/api.md CHANGED
@@ -25,7 +25,8 @@ Create/get/update return the record itself:
25
25
  "categoryId": null,
26
26
  "createdAt": "2026-10-21T10:00:00.000Z",
27
27
  "updatedAt": "2026-10-21T10:00:00.000Z",
28
- "attachments": { "cover": null, "files": [] }
28
+ "cover": null,
29
+ "files": []
29
30
  }
30
31
  ```
31
32
 
@@ -164,3 +165,5 @@ The former `/uploads` and `/:attachmentId/complete` endpoints were removed in fa
164
165
  - 503: S3 upload/download unavailable, or metadata points to missing object content.
165
166
 
166
167
  Zod errors return `{ "message": "Validation failed", "issues": [...] }`. Other HTTP errors typically return `{ "statusCode": 400, "message": "...", "error": "Bad Request" }`. Clients should use the HTTP status to determine failure.
168
+
169
+ Attachment metadata appears directly on list, detail, create, and update records: `cover` is an object or `null`, and `files` is an array. The former `attachments` response wrapper is removed; clients must read `record[field]`. Storage and attachment operation URLs are unchanged.
package/docs/resources.md CHANGED
@@ -51,7 +51,7 @@ Resource names start with a lowercase letter and may contain lowercase letters,
51
51
 
52
52
  Normal payload fields should correspond to columns. Use `type: "json"` for nested objects and arrays. For compatibility with both databases, choose shared column types rather than database-specific types such as PostgreSQL `jsonb` or native arrays. UUIDs are stored as `varchar(36)`.
53
53
 
54
- Single attachment fields use `{ field, mimeTypes }`; add `multiple: true` for collections. Do not put attachment fields in the Zod schema or database columns: their metadata is stored separately. Responses expose `attachments[field]` as an object/null or an array. Resource write payloads do not accept attachment metadata, object keys, or bucket names.
54
+ Single attachment fields use `{ field, mimeTypes }`; add `multiple: true` for collections. Do not put attachment fields in the Zod schema or database columns: their metadata is stored separately. Responses expose each attachment field directly on the record (for example, `record.cover` and `record.files`) as an object/null or an array. Attachment field names cannot collide with system fields, schema fields, or database columns. Resource write payloads do not accept attachment metadata, object keys, or bucket names.
55
55
 
56
56
  Use `foreignKeys` for relationships between resources; see `resources/articles.ts`. Relations are not automatically expanded. The article hook checks `categoryId` before writing, and the database foreign key enforces referential integrity under concurrency. Categories referenced by articles cannot be deleted.
57
57
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs-cms/core",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Definition-driven NestJS CMS with S3 attachments",
5
5
  "engines": {
6
6
  "node": ">=22"