@bernierllc/content-storage-adapter 3.0.1 → 3.0.2
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/package.json +2 -2
- package/dist/ContentBatchOperations.d.ts +0 -22
- package/dist/ContentBatchOperations.d.ts.map +0 -1
- package/dist/ContentBatchOperations.js +0 -61
- package/dist/ContentBatchOperations.js.map +0 -1
- package/dist/ContentStorageAdapter.d.ts +0 -75
- package/dist/ContentStorageAdapter.d.ts.map +0 -1
- package/dist/ContentStorageAdapter.js +0 -382
- package/dist/ContentStorageAdapter.js.map +0 -1
- package/dist/errors.d.ts +0 -39
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -67
- package/dist/errors.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/models/IContent.d.ts +0 -92
- package/dist/models/IContent.d.ts.map +0 -1
- package/dist/models/IContent.js +0 -42
- package/dist/models/IContent.js.map +0 -1
- package/dist/models/IContentFilters.d.ts +0 -29
- package/dist/models/IContentFilters.d.ts.map +0 -1
- package/dist/models/IContentFilters.js +0 -10
- package/dist/models/IContentFilters.js.map +0 -1
- package/dist/models/IContentVersion.d.ts +0 -15
- package/dist/models/IContentVersion.d.ts.map +0 -1
- package/dist/models/IContentVersion.js +0 -10
- package/dist/models/IContentVersion.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bernierllc/content-storage-adapter",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"LICENSE"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@bernierllc/database-adapter-core": "3.0.
|
|
23
|
+
"@bernierllc/database-adapter-core": "3.0.2",
|
|
24
24
|
"@bernierllc/slug-generator": "1.3.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ContentStorageAdapter } from './ContentStorageAdapter';
|
|
2
|
-
import { ContentStatus } from './models/IContent';
|
|
3
|
-
/**
|
|
4
|
-
* Batch operations for content management
|
|
5
|
-
*/
|
|
6
|
-
export declare class ContentBatchOperations {
|
|
7
|
-
private adapter;
|
|
8
|
-
constructor(adapter: ContentStorageAdapter);
|
|
9
|
-
/**
|
|
10
|
-
* Bulk update status for multiple content items
|
|
11
|
-
*/
|
|
12
|
-
bulkUpdateStatus(ids: string[], status: ContentStatus): Promise<number>;
|
|
13
|
-
/**
|
|
14
|
-
* Bulk soft delete
|
|
15
|
-
*/
|
|
16
|
-
bulkDelete(ids: string[]): Promise<number>;
|
|
17
|
-
/**
|
|
18
|
-
* Bulk restore
|
|
19
|
-
*/
|
|
20
|
-
bulkRestore(ids: string[]): Promise<number>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=ContentBatchOperations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentBatchOperations.d.ts","sourceRoot":"","sources":["../src/ContentBatchOperations.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,qBAAa,sBAAsB;IACrB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;IAElD;;OAEG;IACG,gBAAgB,CACpB,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC;IAelB;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAchD;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAalD"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ContentBatchOperations = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* Batch operations for content management
|
|
13
|
-
*/
|
|
14
|
-
class ContentBatchOperations {
|
|
15
|
-
adapter;
|
|
16
|
-
constructor(adapter) {
|
|
17
|
-
this.adapter = adapter;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Bulk update status for multiple content items
|
|
21
|
-
*/
|
|
22
|
-
async bulkUpdateStatus(ids, status) {
|
|
23
|
-
let updated = 0;
|
|
24
|
-
for (const id of ids) {
|
|
25
|
-
try {
|
|
26
|
-
await this.adapter.update(id, { status });
|
|
27
|
-
updated++;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
// Continue on individual failures
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return updated;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Bulk soft delete
|
|
37
|
-
*/
|
|
38
|
-
async bulkDelete(ids) {
|
|
39
|
-
const db = this.adapter.db;
|
|
40
|
-
const result = await db.query(`
|
|
41
|
-
UPDATE content
|
|
42
|
-
SET deleted_at = NOW()
|
|
43
|
-
WHERE id = ANY($1) AND deleted_at IS NULL
|
|
44
|
-
`, [ids]);
|
|
45
|
-
return result.rowCount;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Bulk restore
|
|
49
|
-
*/
|
|
50
|
-
async bulkRestore(ids) {
|
|
51
|
-
const db = this.adapter.db;
|
|
52
|
-
const result = await db.query(`
|
|
53
|
-
UPDATE content
|
|
54
|
-
SET deleted_at = NULL
|
|
55
|
-
WHERE id = ANY($1) AND deleted_at IS NOT NULL
|
|
56
|
-
`, [ids]);
|
|
57
|
-
return result.rowCount;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.ContentBatchOperations = ContentBatchOperations;
|
|
61
|
-
//# sourceMappingURL=ContentBatchOperations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentBatchOperations.js","sourceRoot":"","sources":["../src/ContentBatchOperations.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAKF;;GAEG;AACH,MAAa,sBAAsB;IACb;IAApB,YAAoB,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAEtD;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,GAAa,EACb,MAAqB;QAErB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1C,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kCAAkC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,GAAa;QAC5B,MAAM,EAAE,GAAI,IAAI,CAAC,OAA2G,CAAC,EAAE,CAAC;QAChI,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B;;;;OAIC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,GAAa;QAC7B,MAAM,EAAE,GAAI,IAAI,CAAC,OAA2G,CAAC,EAAE,CAAC;QAChI,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B;;;;OAIC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;CACF;AAzDD,wDAyDC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { IDatabaseAdapter } from '@bernierllc/database-adapter-core';
|
|
2
|
-
import { IContent, IContentCreateData, IContentUpdateData } from './models/IContent';
|
|
3
|
-
import { IContentVersion } from './models/IContentVersion';
|
|
4
|
-
import { IContentFilters, IPaginatedResult } from './models/IContentFilters';
|
|
5
|
-
/**
|
|
6
|
-
* Content storage adapter
|
|
7
|
-
* Provides type-safe CRUD operations for content management
|
|
8
|
-
*/
|
|
9
|
-
export declare class ContentStorageAdapter {
|
|
10
|
-
private db;
|
|
11
|
-
constructor(db: IDatabaseAdapter);
|
|
12
|
-
/**
|
|
13
|
-
* Create new content with automatic slug generation
|
|
14
|
-
*/
|
|
15
|
-
create(data: IContentCreateData): Promise<IContent>;
|
|
16
|
-
/**
|
|
17
|
-
* Get content by ID (with soft-delete check)
|
|
18
|
-
*/
|
|
19
|
-
getById(id: string, options?: {
|
|
20
|
-
includeDeleted?: boolean;
|
|
21
|
-
}): Promise<IContent | null>;
|
|
22
|
-
/**
|
|
23
|
-
* Get content by slug
|
|
24
|
-
*/
|
|
25
|
-
getBySlug(slug: string): Promise<IContent | null>;
|
|
26
|
-
/**
|
|
27
|
-
* Update content with optimistic locking
|
|
28
|
-
*/
|
|
29
|
-
update(id: string, data: IContentUpdateData, expectedUpdatedAt?: Date): Promise<IContent>;
|
|
30
|
-
/**
|
|
31
|
-
* Soft delete content
|
|
32
|
-
*/
|
|
33
|
-
delete(id: string): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Permanently delete content (use sparingly)
|
|
36
|
-
*/
|
|
37
|
-
hardDelete(id: string): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Restore soft-deleted content
|
|
40
|
-
*/
|
|
41
|
-
restore(id: string): Promise<IContent>;
|
|
42
|
-
/**
|
|
43
|
-
* List content with filters and pagination
|
|
44
|
-
*/
|
|
45
|
-
list(filters?: IContentFilters): Promise<IPaginatedResult<IContent>>;
|
|
46
|
-
/**
|
|
47
|
-
* Get content versions
|
|
48
|
-
*/
|
|
49
|
-
getVersions(contentId: string): Promise<IContentVersion[]>;
|
|
50
|
-
/**
|
|
51
|
-
* Get specific version
|
|
52
|
-
*/
|
|
53
|
-
getVersion(contentId: string, versionNumber: number): Promise<IContentVersion | null>;
|
|
54
|
-
/**
|
|
55
|
-
* Ensure slug is unique by appending number if needed
|
|
56
|
-
*/
|
|
57
|
-
private ensureUniqueSlug;
|
|
58
|
-
/**
|
|
59
|
-
* Check if slug exists
|
|
60
|
-
*/
|
|
61
|
-
private slugExists;
|
|
62
|
-
/**
|
|
63
|
-
* Map database row to content model
|
|
64
|
-
*/
|
|
65
|
-
private mapRowToContent;
|
|
66
|
-
/**
|
|
67
|
-
* Map database row to version model
|
|
68
|
-
*/
|
|
69
|
-
private mapRowToVersion;
|
|
70
|
-
/**
|
|
71
|
-
* Map order field to database column
|
|
72
|
-
*/
|
|
73
|
-
private mapOrderField;
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=ContentStorageAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentStorageAdapter.d.ts","sourceRoot":"","sources":["../src/ContentStorageAdapter.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG7E;;;GAGG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,gBAAgB;IAExC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsCzD;;OAEG;IACG,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACzC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAe3B;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAWvD;;OAEG;IACG,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,kBAAkB,EACxB,iBAAiB,CAAC,EAAE,IAAI,GACvB,OAAO,CAAC,QAAQ,CAAC;IAoFpB;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevC;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkB5C;;OAEG;IACG,IAAI,CACR,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAqGtC;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAahE;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAclC;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,UAAU;IAQxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ContentStorageAdapter = void 0;
|
|
11
|
-
const slug_generator_1 = require("@bernierllc/slug-generator");
|
|
12
|
-
const IContent_1 = require("./models/IContent");
|
|
13
|
-
const errors_1 = require("./errors");
|
|
14
|
-
/**
|
|
15
|
-
* Content storage adapter
|
|
16
|
-
* Provides type-safe CRUD operations for content management
|
|
17
|
-
*/
|
|
18
|
-
class ContentStorageAdapter {
|
|
19
|
-
db;
|
|
20
|
-
constructor(db) {
|
|
21
|
-
this.db = db;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Create new content with automatic slug generation
|
|
25
|
-
*/
|
|
26
|
-
async create(data) {
|
|
27
|
-
// Generate unique slug from title
|
|
28
|
-
const baseSlug = (0, slug_generator_1.generateSlug)(data.title);
|
|
29
|
-
const slug = await this.ensureUniqueSlug(baseSlug);
|
|
30
|
-
const result = await this.db.query(`
|
|
31
|
-
INSERT INTO content (
|
|
32
|
-
user_id, title, slug, body, excerpt, type, format, status,
|
|
33
|
-
meta_title, meta_description, keywords,
|
|
34
|
-
ai_reviewed, view_count, share_count, generated_from_commit
|
|
35
|
-
) VALUES (
|
|
36
|
-
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15
|
|
37
|
-
)
|
|
38
|
-
RETURNING *
|
|
39
|
-
`, [
|
|
40
|
-
data.userId,
|
|
41
|
-
data.title,
|
|
42
|
-
slug,
|
|
43
|
-
data.body,
|
|
44
|
-
data.excerpt || null,
|
|
45
|
-
data.type || IContent_1.ContentType.BLOG,
|
|
46
|
-
data.format || IContent_1.ContentFormat.MARKDOWN,
|
|
47
|
-
data.status || IContent_1.ContentStatus.DRAFT,
|
|
48
|
-
data.metaTitle || null,
|
|
49
|
-
data.metaDescription || null,
|
|
50
|
-
data.keywords || [],
|
|
51
|
-
false, // ai_reviewed
|
|
52
|
-
0, // view_count
|
|
53
|
-
0, // share_count
|
|
54
|
-
false // generated_from_commit
|
|
55
|
-
]);
|
|
56
|
-
return this.mapRowToContent(result.rows[0]);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get content by ID (with soft-delete check)
|
|
60
|
-
*/
|
|
61
|
-
async getById(id, options = {}) {
|
|
62
|
-
const whereClause = options.includeDeleted
|
|
63
|
-
? 'id = $1'
|
|
64
|
-
: 'id = $1 AND deleted_at IS NULL';
|
|
65
|
-
const result = await this.db.query(`SELECT * FROM content WHERE ${whereClause}`, [id]);
|
|
66
|
-
return result.rows.length > 0
|
|
67
|
-
? this.mapRowToContent(result.rows[0])
|
|
68
|
-
: null;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get content by slug
|
|
72
|
-
*/
|
|
73
|
-
async getBySlug(slug) {
|
|
74
|
-
const result = await this.db.query('SELECT * FROM content WHERE slug = $1 AND deleted_at IS NULL', [slug]);
|
|
75
|
-
return result.rows.length > 0
|
|
76
|
-
? this.mapRowToContent(result.rows[0])
|
|
77
|
-
: null;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Update content with optimistic locking
|
|
81
|
-
*/
|
|
82
|
-
async update(id, data, expectedUpdatedAt) {
|
|
83
|
-
// Build dynamic UPDATE query
|
|
84
|
-
const updates = [];
|
|
85
|
-
const params = [];
|
|
86
|
-
let paramIndex = 1;
|
|
87
|
-
if (data.title !== undefined) {
|
|
88
|
-
updates.push(`title = $${paramIndex++}`);
|
|
89
|
-
params.push(data.title);
|
|
90
|
-
}
|
|
91
|
-
if (data.body !== undefined) {
|
|
92
|
-
updates.push(`body = $${paramIndex++}`);
|
|
93
|
-
params.push(data.body);
|
|
94
|
-
}
|
|
95
|
-
if (data.excerpt !== undefined) {
|
|
96
|
-
updates.push(`excerpt = $${paramIndex++}`);
|
|
97
|
-
params.push(data.excerpt);
|
|
98
|
-
}
|
|
99
|
-
if (data.status !== undefined) {
|
|
100
|
-
updates.push(`status = $${paramIndex++}`);
|
|
101
|
-
params.push(data.status);
|
|
102
|
-
}
|
|
103
|
-
if (data.workflowStage !== undefined) {
|
|
104
|
-
updates.push(`workflow_stage = $${paramIndex++}`);
|
|
105
|
-
params.push(data.workflowStage);
|
|
106
|
-
}
|
|
107
|
-
if (data.assignedTo !== undefined) {
|
|
108
|
-
updates.push(`assigned_to = $${paramIndex++}`);
|
|
109
|
-
params.push(data.assignedTo);
|
|
110
|
-
}
|
|
111
|
-
if (data.publishedAt !== undefined) {
|
|
112
|
-
updates.push(`published_at = $${paramIndex++}`);
|
|
113
|
-
params.push(data.publishedAt);
|
|
114
|
-
}
|
|
115
|
-
if (data.scheduledFor !== undefined) {
|
|
116
|
-
updates.push(`scheduled_for = $${paramIndex++}`);
|
|
117
|
-
params.push(data.scheduledFor);
|
|
118
|
-
}
|
|
119
|
-
if (data.metaTitle !== undefined) {
|
|
120
|
-
updates.push(`meta_title = $${paramIndex++}`);
|
|
121
|
-
params.push(data.metaTitle);
|
|
122
|
-
}
|
|
123
|
-
if (data.metaDescription !== undefined) {
|
|
124
|
-
updates.push(`meta_description = $${paramIndex++}`);
|
|
125
|
-
params.push(data.metaDescription);
|
|
126
|
-
}
|
|
127
|
-
if (data.keywords !== undefined) {
|
|
128
|
-
updates.push(`keywords = $${paramIndex++}`);
|
|
129
|
-
params.push(data.keywords);
|
|
130
|
-
}
|
|
131
|
-
if (updates.length === 0) {
|
|
132
|
-
throw new Error('No fields to update');
|
|
133
|
-
}
|
|
134
|
-
// Add optimistic locking check
|
|
135
|
-
params.push(id);
|
|
136
|
-
const idParam = paramIndex++;
|
|
137
|
-
let whereClause = `id = $${idParam} AND deleted_at IS NULL`;
|
|
138
|
-
if (expectedUpdatedAt) {
|
|
139
|
-
params.push(expectedUpdatedAt);
|
|
140
|
-
whereClause += ` AND updated_at = $${paramIndex++}`;
|
|
141
|
-
}
|
|
142
|
-
const sql = `
|
|
143
|
-
UPDATE content
|
|
144
|
-
SET ${updates.join(', ')}, updated_at = NOW()
|
|
145
|
-
WHERE ${whereClause}
|
|
146
|
-
RETURNING *
|
|
147
|
-
`;
|
|
148
|
-
const result = await this.db.query(sql, params);
|
|
149
|
-
if (result.rows.length === 0) {
|
|
150
|
-
if (expectedUpdatedAt) {
|
|
151
|
-
throw new errors_1.OptimisticLockError(id);
|
|
152
|
-
}
|
|
153
|
-
throw new errors_1.ContentNotFoundError(id);
|
|
154
|
-
}
|
|
155
|
-
return this.mapRowToContent(result.rows[0]);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Soft delete content
|
|
159
|
-
*/
|
|
160
|
-
async delete(id) {
|
|
161
|
-
const result = await this.db.query(`
|
|
162
|
-
UPDATE content
|
|
163
|
-
SET deleted_at = NOW()
|
|
164
|
-
WHERE id = $1 AND deleted_at IS NULL
|
|
165
|
-
`, [id]);
|
|
166
|
-
if (result.rowCount === 0) {
|
|
167
|
-
throw new errors_1.ContentNotFoundError(id);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Permanently delete content (use sparingly)
|
|
172
|
-
*/
|
|
173
|
-
async hardDelete(id) {
|
|
174
|
-
await this.db.query('DELETE FROM content WHERE id = $1', [id]);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Restore soft-deleted content
|
|
178
|
-
*/
|
|
179
|
-
async restore(id) {
|
|
180
|
-
const result = await this.db.query(`
|
|
181
|
-
UPDATE content
|
|
182
|
-
SET deleted_at = NULL
|
|
183
|
-
WHERE id = $1 AND deleted_at IS NOT NULL
|
|
184
|
-
RETURNING *
|
|
185
|
-
`, [id]);
|
|
186
|
-
if (result.rows.length === 0) {
|
|
187
|
-
throw new Error('Content not found or not deleted');
|
|
188
|
-
}
|
|
189
|
-
return this.mapRowToContent(result.rows[0]);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* List content with filters and pagination
|
|
193
|
-
*/
|
|
194
|
-
async list(filters = {}) {
|
|
195
|
-
// Build WHERE clause
|
|
196
|
-
const conditions = [];
|
|
197
|
-
const params = [];
|
|
198
|
-
let paramIndex = 1;
|
|
199
|
-
if (!filters.includeDeleted) {
|
|
200
|
-
conditions.push('deleted_at IS NULL');
|
|
201
|
-
}
|
|
202
|
-
if (filters.userId) {
|
|
203
|
-
conditions.push(`user_id = $${paramIndex++}`);
|
|
204
|
-
params.push(filters.userId);
|
|
205
|
-
}
|
|
206
|
-
if (filters.status) {
|
|
207
|
-
if (Array.isArray(filters.status)) {
|
|
208
|
-
conditions.push(`status = ANY($${paramIndex++})`);
|
|
209
|
-
params.push(filters.status);
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
conditions.push(`status = $${paramIndex++}`);
|
|
213
|
-
params.push(filters.status);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if (filters.type) {
|
|
217
|
-
if (Array.isArray(filters.type)) {
|
|
218
|
-
conditions.push(`type = ANY($${paramIndex++})`);
|
|
219
|
-
params.push(filters.type);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
conditions.push(`type = $${paramIndex++}`);
|
|
223
|
-
params.push(filters.type);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (filters.workflowStage) {
|
|
227
|
-
conditions.push(`workflow_stage = $${paramIndex++}`);
|
|
228
|
-
params.push(filters.workflowStage);
|
|
229
|
-
}
|
|
230
|
-
if (filters.publishedAfter) {
|
|
231
|
-
conditions.push(`published_at >= $${paramIndex++}`);
|
|
232
|
-
params.push(filters.publishedAfter);
|
|
233
|
-
}
|
|
234
|
-
if (filters.publishedBefore) {
|
|
235
|
-
conditions.push(`published_at <= $${paramIndex++}`);
|
|
236
|
-
params.push(filters.publishedBefore);
|
|
237
|
-
}
|
|
238
|
-
if (filters.searchQuery) {
|
|
239
|
-
conditions.push(`(
|
|
240
|
-
title ILIKE $${paramIndex} OR
|
|
241
|
-
body ILIKE $${paramIndex} OR
|
|
242
|
-
excerpt ILIKE $${paramIndex}
|
|
243
|
-
)`);
|
|
244
|
-
params.push(`%${filters.searchQuery}%`);
|
|
245
|
-
paramIndex++;
|
|
246
|
-
}
|
|
247
|
-
const whereClause = conditions.length > 0
|
|
248
|
-
? `WHERE ${conditions.join(' AND ')}`
|
|
249
|
-
: '';
|
|
250
|
-
// Build ORDER BY
|
|
251
|
-
const orderBy = filters.orderBy || 'createdAt';
|
|
252
|
-
const orderDirection = filters.orderDirection || 'DESC';
|
|
253
|
-
const orderClause = `ORDER BY ${this.mapOrderField(orderBy)} ${orderDirection}`;
|
|
254
|
-
// Pagination
|
|
255
|
-
const limit = filters.limit || 20;
|
|
256
|
-
const offset = filters.offset || 0;
|
|
257
|
-
// Get total count
|
|
258
|
-
const countResult = await this.db.query(`SELECT COUNT(*) as count FROM content ${whereClause}`, params);
|
|
259
|
-
const total = parseInt(countResult.rows[0].count);
|
|
260
|
-
// Get data
|
|
261
|
-
params.push(limit, offset);
|
|
262
|
-
const dataResult = await this.db.query(`
|
|
263
|
-
SELECT * FROM content
|
|
264
|
-
${whereClause}
|
|
265
|
-
${orderClause}
|
|
266
|
-
LIMIT $${paramIndex++} OFFSET $${paramIndex++}
|
|
267
|
-
`, params);
|
|
268
|
-
return {
|
|
269
|
-
data: dataResult.rows.map(row => this.mapRowToContent(row)),
|
|
270
|
-
total,
|
|
271
|
-
limit,
|
|
272
|
-
offset,
|
|
273
|
-
hasMore: offset + limit < total
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Get content versions
|
|
278
|
-
*/
|
|
279
|
-
async getVersions(contentId) {
|
|
280
|
-
const result = await this.db.query(`
|
|
281
|
-
SELECT * FROM content_versions
|
|
282
|
-
WHERE content_id = $1
|
|
283
|
-
ORDER BY version_number DESC
|
|
284
|
-
`, [contentId]);
|
|
285
|
-
return result.rows.map(row => this.mapRowToVersion(row));
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Get specific version
|
|
289
|
-
*/
|
|
290
|
-
async getVersion(contentId, versionNumber) {
|
|
291
|
-
const result = await this.db.query(`
|
|
292
|
-
SELECT * FROM content_versions
|
|
293
|
-
WHERE content_id = $1 AND version_number = $2
|
|
294
|
-
`, [contentId, versionNumber]);
|
|
295
|
-
return result.rows.length > 0
|
|
296
|
-
? this.mapRowToVersion(result.rows[0])
|
|
297
|
-
: null;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Ensure slug is unique by appending number if needed
|
|
301
|
-
*/
|
|
302
|
-
async ensureUniqueSlug(baseSlug) {
|
|
303
|
-
let slug = baseSlug;
|
|
304
|
-
let counter = 1;
|
|
305
|
-
while (await this.slugExists(slug)) {
|
|
306
|
-
slug = `${baseSlug}-${counter}`;
|
|
307
|
-
counter++;
|
|
308
|
-
}
|
|
309
|
-
return slug;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Check if slug exists
|
|
313
|
-
*/
|
|
314
|
-
async slugExists(slug) {
|
|
315
|
-
const result = await this.db.query('SELECT EXISTS(SELECT 1 FROM content WHERE slug = $1 AND deleted_at IS NULL) as exists', [slug]);
|
|
316
|
-
return result.rows[0].exists;
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Map database row to content model
|
|
320
|
-
*/
|
|
321
|
-
mapRowToContent(row) {
|
|
322
|
-
return {
|
|
323
|
-
id: row.id,
|
|
324
|
-
userId: row.user_id,
|
|
325
|
-
title: row.title,
|
|
326
|
-
slug: row.slug,
|
|
327
|
-
body: row.body,
|
|
328
|
-
excerpt: row.excerpt,
|
|
329
|
-
type: row.type,
|
|
330
|
-
format: row.format,
|
|
331
|
-
status: row.status,
|
|
332
|
-
workflowStage: row.workflow_stage,
|
|
333
|
-
assignedTo: row.assigned_to,
|
|
334
|
-
aiReviewed: row.ai_reviewed,
|
|
335
|
-
aiReviewScore: row.ai_review_score,
|
|
336
|
-
aiProvider: row.ai_provider,
|
|
337
|
-
publishedAt: row.published_at,
|
|
338
|
-
scheduledFor: row.scheduled_for,
|
|
339
|
-
deletedAt: row.deleted_at,
|
|
340
|
-
metaTitle: row.meta_title,
|
|
341
|
-
metaDescription: row.meta_description,
|
|
342
|
-
keywords: row.keywords,
|
|
343
|
-
viewCount: row.view_count,
|
|
344
|
-
shareCount: row.share_count,
|
|
345
|
-
generatedFromCommit: row.generated_from_commit,
|
|
346
|
-
sourceCommitSha: row.source_commit_sha,
|
|
347
|
-
sourceRepository: row.source_repository,
|
|
348
|
-
createdAt: row.created_at,
|
|
349
|
-
updatedAt: row.updated_at
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Map database row to version model
|
|
354
|
-
*/
|
|
355
|
-
mapRowToVersion(row) {
|
|
356
|
-
return {
|
|
357
|
-
id: row.id,
|
|
358
|
-
contentId: row.content_id,
|
|
359
|
-
versionNumber: row.version_number,
|
|
360
|
-
title: row.title,
|
|
361
|
-
body: row.body,
|
|
362
|
-
changeSummary: row.change_summary,
|
|
363
|
-
isAutosave: row.is_autosave,
|
|
364
|
-
createdAt: row.created_at,
|
|
365
|
-
createdBy: row.created_by
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* Map order field to database column
|
|
370
|
-
*/
|
|
371
|
-
mapOrderField(field) {
|
|
372
|
-
const fieldMap = {
|
|
373
|
-
createdAt: 'created_at',
|
|
374
|
-
updatedAt: 'updated_at',
|
|
375
|
-
publishedAt: 'published_at',
|
|
376
|
-
title: 'title'
|
|
377
|
-
};
|
|
378
|
-
return fieldMap[field] || 'created_at';
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
exports.ContentStorageAdapter = ContentStorageAdapter;
|
|
382
|
-
//# sourceMappingURL=ContentStorageAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentStorageAdapter.js","sourceRoot":"","sources":["../src/ContentStorageAdapter.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export type ContentStorageAdapterErrorCode = 'CONTENT_STORAGE_ADAPTER_ERROR' | 'CONTENT_NOT_FOUND' | 'DUPLICATE_SLUG' | 'OPTIMISTIC_LOCK_FAILED' | 'STORAGE_OPERATION_FAILED' | 'INVALID_INPUT';
|
|
2
|
-
export interface ContentStorageAdapterErrorOptions {
|
|
3
|
-
cause?: Error;
|
|
4
|
-
code?: ContentStorageAdapterErrorCode;
|
|
5
|
-
context?: Record<string, unknown>;
|
|
6
|
-
}
|
|
7
|
-
export declare class ContentStorageAdapterError extends Error {
|
|
8
|
-
readonly code: ContentStorageAdapterErrorCode;
|
|
9
|
-
readonly context?: Record<string, unknown>;
|
|
10
|
-
constructor(message: string, options?: ContentStorageAdapterErrorOptions);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Error thrown when content is not found or already deleted.
|
|
14
|
-
*/
|
|
15
|
-
export declare class ContentNotFoundError extends ContentStorageAdapterError {
|
|
16
|
-
constructor(id: string, options?: {
|
|
17
|
-
cause?: Error;
|
|
18
|
-
context?: Record<string, unknown>;
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Error thrown when a slug already exists.
|
|
23
|
-
*/
|
|
24
|
-
export declare class DuplicateSlugError extends ContentStorageAdapterError {
|
|
25
|
-
constructor(slug: string, options?: {
|
|
26
|
-
cause?: Error;
|
|
27
|
-
context?: Record<string, unknown>;
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Error thrown when optimistic locking fails.
|
|
32
|
-
*/
|
|
33
|
-
export declare class OptimisticLockError extends ContentStorageAdapterError {
|
|
34
|
-
constructor(id: string, options?: {
|
|
35
|
-
cause?: Error;
|
|
36
|
-
context?: Record<string, unknown>;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,8BAA8B,GACtC,+BAA+B,GAC/B,mBAAmB,GACnB,gBAAgB,GAChB,wBAAwB,GACxB,0BAA0B,GAC1B,eAAe,CAAC;AAEpB,MAAM,WAAW,iCAAiC;IAChD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,8BAA8B,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iCAAiC;CASzE;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,0BAA0B;gBAEhE,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CASjE;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,0BAA0B;gBAE9D,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CASjE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,0BAA0B;gBAE/D,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAYjE"}
|
package/dist/errors.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.OptimisticLockError = exports.DuplicateSlugError = exports.ContentNotFoundError = exports.ContentStorageAdapterError = void 0;
|
|
11
|
-
class ContentStorageAdapterError extends Error {
|
|
12
|
-
code;
|
|
13
|
-
context;
|
|
14
|
-
constructor(message, options) {
|
|
15
|
-
super(message, options?.cause ? { cause: options.cause } : undefined);
|
|
16
|
-
this.name = 'ContentStorageAdapterError';
|
|
17
|
-
this.code = options?.code ?? 'CONTENT_STORAGE_ADAPTER_ERROR';
|
|
18
|
-
if (options?.context !== undefined) {
|
|
19
|
-
this.context = options.context;
|
|
20
|
-
}
|
|
21
|
-
Error.captureStackTrace?.(this, this.constructor);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.ContentStorageAdapterError = ContentStorageAdapterError;
|
|
25
|
-
/**
|
|
26
|
-
* Error thrown when content is not found or already deleted.
|
|
27
|
-
*/
|
|
28
|
-
class ContentNotFoundError extends ContentStorageAdapterError {
|
|
29
|
-
constructor(id, options) {
|
|
30
|
-
super(`Content not found or already deleted: ${id}`, {
|
|
31
|
-
...options,
|
|
32
|
-
code: 'CONTENT_NOT_FOUND',
|
|
33
|
-
context: { id, ...options?.context }
|
|
34
|
-
});
|
|
35
|
-
this.name = 'ContentNotFoundError';
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
exports.ContentNotFoundError = ContentNotFoundError;
|
|
39
|
-
/**
|
|
40
|
-
* Error thrown when a slug already exists.
|
|
41
|
-
*/
|
|
42
|
-
class DuplicateSlugError extends ContentStorageAdapterError {
|
|
43
|
-
constructor(slug, options) {
|
|
44
|
-
super(`Slug already exists: ${slug}`, {
|
|
45
|
-
...options,
|
|
46
|
-
code: 'DUPLICATE_SLUG',
|
|
47
|
-
context: { slug, ...options?.context }
|
|
48
|
-
});
|
|
49
|
-
this.name = 'DuplicateSlugError';
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.DuplicateSlugError = DuplicateSlugError;
|
|
53
|
-
/**
|
|
54
|
-
* Error thrown when optimistic locking fails.
|
|
55
|
-
*/
|
|
56
|
-
class OptimisticLockError extends ContentStorageAdapterError {
|
|
57
|
-
constructor(id, options) {
|
|
58
|
-
super(`Optimistic lock failed for content ${id}: Content was modified by another user`, {
|
|
59
|
-
...options,
|
|
60
|
-
code: 'OPTIMISTIC_LOCK_FAILED',
|
|
61
|
-
context: { id, ...options?.context }
|
|
62
|
-
});
|
|
63
|
-
this.name = 'OptimisticLockError';
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
exports.OptimisticLockError = OptimisticLockError;
|
|
67
|
-
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAgBF,MAAa,0BAA2B,SAAQ,KAAK;IAC1C,IAAI,CAAiC;IACrC,OAAO,CAA2B;IAE3C,YAAY,OAAe,EAAE,OAA2C;QACtE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,+BAA+B,CAAC;QAC7D,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;CACF;AAbD,gEAaC;AAED;;GAEG;AACH,MAAa,oBAAqB,SAAQ,0BAA0B;IAClE,YACE,EAAU,EACV,OAA8D;QAE9D,KAAK,CAAC,yCAAyC,EAAE,EAAE,EAAE;YACnD,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAZD,oDAYC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,0BAA0B;IAChE,YACE,IAAY,EACZ,OAA8D;QAE9D,KAAK,CAAC,wBAAwB,IAAI,EAAE,EAAE;YACpC,GAAG,OAAO;YACV,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAZD,gDAYC;AAED;;GAEG;AACH,MAAa,mBAAoB,SAAQ,0BAA0B;IACjE,YACE,EAAU,EACV,OAA8D;QAE9D,KAAK,CACH,sCAAsC,EAAE,wCAAwC,EAChF;YACE,GAAG,OAAO;YACV,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;SACrC,CACF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAfD,kDAeC"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { ContentStorageAdapter } from './ContentStorageAdapter';
|
|
2
|
-
export { ContentBatchOperations } from './ContentBatchOperations';
|
|
3
|
-
export type { IContent, IContentCreateData, IContentUpdateData } from './models/IContent';
|
|
4
|
-
export { ContentType, ContentFormat, ContentStatus } from './models/IContent';
|
|
5
|
-
export type { IContentVersion } from './models/IContentVersion';
|
|
6
|
-
export type { IContentFilters, IPaginatedResult } from './models/IContentFilters';
|
|
7
|
-
export { ContentStorageAdapterError, ContentNotFoundError, OptimisticLockError, DuplicateSlugError } from './errors';
|
|
8
|
-
export type { ContentStorageAdapterErrorCode, ContentStorageAdapterErrorOptions } from './errors';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,8BAA8B,EAC9B,iCAAiC,EAClC,MAAM,UAAU,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.DuplicateSlugError = exports.OptimisticLockError = exports.ContentNotFoundError = exports.ContentStorageAdapterError = exports.ContentStatus = exports.ContentFormat = exports.ContentType = exports.ContentBatchOperations = exports.ContentStorageAdapter = void 0;
|
|
11
|
-
// Main classes
|
|
12
|
-
var ContentStorageAdapter_1 = require("./ContentStorageAdapter");
|
|
13
|
-
Object.defineProperty(exports, "ContentStorageAdapter", { enumerable: true, get: function () { return ContentStorageAdapter_1.ContentStorageAdapter; } });
|
|
14
|
-
var ContentBatchOperations_1 = require("./ContentBatchOperations");
|
|
15
|
-
Object.defineProperty(exports, "ContentBatchOperations", { enumerable: true, get: function () { return ContentBatchOperations_1.ContentBatchOperations; } });
|
|
16
|
-
var IContent_1 = require("./models/IContent");
|
|
17
|
-
Object.defineProperty(exports, "ContentType", { enumerable: true, get: function () { return IContent_1.ContentType; } });
|
|
18
|
-
Object.defineProperty(exports, "ContentFormat", { enumerable: true, get: function () { return IContent_1.ContentFormat; } });
|
|
19
|
-
Object.defineProperty(exports, "ContentStatus", { enumerable: true, get: function () { return IContent_1.ContentStatus; } });
|
|
20
|
-
// Errors
|
|
21
|
-
var errors_1 = require("./errors");
|
|
22
|
-
Object.defineProperty(exports, "ContentStorageAdapterError", { enumerable: true, get: function () { return errors_1.ContentStorageAdapterError; } });
|
|
23
|
-
Object.defineProperty(exports, "ContentNotFoundError", { enumerable: true, get: function () { return errors_1.ContentNotFoundError; } });
|
|
24
|
-
Object.defineProperty(exports, "OptimisticLockError", { enumerable: true, get: function () { return errors_1.OptimisticLockError; } });
|
|
25
|
-
Object.defineProperty(exports, "DuplicateSlugError", { enumerable: true, get: function () { return errors_1.DuplicateSlugError; } });
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAEF,eAAe;AACf,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAQ/B,8CAI2B;AAHzB,uGAAA,WAAW,OAAA;AACX,yGAAA,aAAa,OAAA;AACb,yGAAA,aAAa,OAAA;AAQf,SAAS;AACT,mCAKkB;AAJhB,oHAAA,0BAA0B,OAAA;AAC1B,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Content type enum
|
|
3
|
-
*/
|
|
4
|
-
export declare enum ContentType {
|
|
5
|
-
BLOG = "blog",
|
|
6
|
-
ARTICLE = "article",
|
|
7
|
-
PAGE = "page",
|
|
8
|
-
SOCIAL = "social"
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Content format enum
|
|
12
|
-
*/
|
|
13
|
-
export declare enum ContentFormat {
|
|
14
|
-
MARKDOWN = "markdown",
|
|
15
|
-
HTML = "html",
|
|
16
|
-
PLAINTEXT = "plaintext"
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Content status enum
|
|
20
|
-
*/
|
|
21
|
-
export declare enum ContentStatus {
|
|
22
|
-
DRAFT = "draft",
|
|
23
|
-
IN_REVIEW = "in_review",
|
|
24
|
-
APPROVED = "approved",
|
|
25
|
-
SCHEDULED = "scheduled",
|
|
26
|
-
PUBLISHED = "published",
|
|
27
|
-
ARCHIVED = "archived"
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Core content model
|
|
31
|
-
*/
|
|
32
|
-
export interface IContent {
|
|
33
|
-
id: string;
|
|
34
|
-
userId: string;
|
|
35
|
-
title: string;
|
|
36
|
-
slug: string;
|
|
37
|
-
body: string;
|
|
38
|
-
excerpt?: string;
|
|
39
|
-
type: ContentType;
|
|
40
|
-
format: ContentFormat;
|
|
41
|
-
status: ContentStatus;
|
|
42
|
-
workflowStage?: string;
|
|
43
|
-
assignedTo?: string;
|
|
44
|
-
aiReviewed: boolean;
|
|
45
|
-
aiReviewScore?: number;
|
|
46
|
-
aiProvider?: string;
|
|
47
|
-
publishedAt?: Date;
|
|
48
|
-
scheduledFor?: Date;
|
|
49
|
-
deletedAt?: Date;
|
|
50
|
-
metaTitle?: string;
|
|
51
|
-
metaDescription?: string;
|
|
52
|
-
keywords?: string[];
|
|
53
|
-
viewCount: number;
|
|
54
|
-
shareCount: number;
|
|
55
|
-
generatedFromCommit: boolean;
|
|
56
|
-
sourceCommitSha?: string;
|
|
57
|
-
sourceRepository?: string;
|
|
58
|
-
createdAt: Date;
|
|
59
|
-
updatedAt: Date;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Content creation data
|
|
63
|
-
*/
|
|
64
|
-
export interface IContentCreateData {
|
|
65
|
-
userId: string;
|
|
66
|
-
title: string;
|
|
67
|
-
body: string;
|
|
68
|
-
excerpt?: string;
|
|
69
|
-
type?: ContentType;
|
|
70
|
-
format?: ContentFormat;
|
|
71
|
-
status?: ContentStatus;
|
|
72
|
-
metaTitle?: string;
|
|
73
|
-
metaDescription?: string;
|
|
74
|
-
keywords?: string[];
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Content update data
|
|
78
|
-
*/
|
|
79
|
-
export interface IContentUpdateData {
|
|
80
|
-
title?: string;
|
|
81
|
-
body?: string;
|
|
82
|
-
excerpt?: string;
|
|
83
|
-
status?: ContentStatus;
|
|
84
|
-
workflowStage?: string;
|
|
85
|
-
assignedTo?: string;
|
|
86
|
-
publishedAt?: Date;
|
|
87
|
-
scheduledFor?: Date;
|
|
88
|
-
metaTitle?: string;
|
|
89
|
-
metaDescription?: string;
|
|
90
|
-
keywords?: string[];
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=IContent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContent.d.ts","sourceRoot":"","sources":["../../src/models/IContent.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,IAAI,CAAC;IAGjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IAGnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}
|
package/dist/models/IContent.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.ContentStatus = exports.ContentFormat = exports.ContentType = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* Content type enum
|
|
13
|
-
*/
|
|
14
|
-
var ContentType;
|
|
15
|
-
(function (ContentType) {
|
|
16
|
-
ContentType["BLOG"] = "blog";
|
|
17
|
-
ContentType["ARTICLE"] = "article";
|
|
18
|
-
ContentType["PAGE"] = "page";
|
|
19
|
-
ContentType["SOCIAL"] = "social";
|
|
20
|
-
})(ContentType || (exports.ContentType = ContentType = {}));
|
|
21
|
-
/**
|
|
22
|
-
* Content format enum
|
|
23
|
-
*/
|
|
24
|
-
var ContentFormat;
|
|
25
|
-
(function (ContentFormat) {
|
|
26
|
-
ContentFormat["MARKDOWN"] = "markdown";
|
|
27
|
-
ContentFormat["HTML"] = "html";
|
|
28
|
-
ContentFormat["PLAINTEXT"] = "plaintext";
|
|
29
|
-
})(ContentFormat || (exports.ContentFormat = ContentFormat = {}));
|
|
30
|
-
/**
|
|
31
|
-
* Content status enum
|
|
32
|
-
*/
|
|
33
|
-
var ContentStatus;
|
|
34
|
-
(function (ContentStatus) {
|
|
35
|
-
ContentStatus["DRAFT"] = "draft";
|
|
36
|
-
ContentStatus["IN_REVIEW"] = "in_review";
|
|
37
|
-
ContentStatus["APPROVED"] = "approved";
|
|
38
|
-
ContentStatus["SCHEDULED"] = "scheduled";
|
|
39
|
-
ContentStatus["PUBLISHED"] = "published";
|
|
40
|
-
ContentStatus["ARCHIVED"] = "archived";
|
|
41
|
-
})(ContentStatus || (exports.ContentStatus = ContentStatus = {}));
|
|
42
|
-
//# sourceMappingURL=IContent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContent.js","sourceRoot":"","sources":["../../src/models/IContent.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAEF;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,kCAAmB,CAAA;IACnB,4BAAa,CAAA;IACb,gCAAiB,CAAA;AACnB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED;;GAEG;AACH,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,8BAAa,CAAA;IACb,wCAAuB,CAAA;AACzB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED;;GAEG;AACH,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,wCAAuB,CAAA;IACvB,sCAAqB,CAAA;IACrB,wCAAuB,CAAA;IACvB,wCAAuB,CAAA;IACvB,sCAAqB,CAAA;AACvB,CAAC,EAPW,aAAa,6BAAb,aAAa,QAOxB"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ContentStatus, ContentType } from './IContent';
|
|
2
|
-
/**
|
|
3
|
-
* Content query filters
|
|
4
|
-
*/
|
|
5
|
-
export interface IContentFilters {
|
|
6
|
-
userId?: string;
|
|
7
|
-
status?: ContentStatus | ContentStatus[];
|
|
8
|
-
type?: ContentType | ContentType[];
|
|
9
|
-
workflowStage?: string;
|
|
10
|
-
publishedAfter?: Date;
|
|
11
|
-
publishedBefore?: Date;
|
|
12
|
-
searchQuery?: string;
|
|
13
|
-
limit?: number;
|
|
14
|
-
offset?: number;
|
|
15
|
-
orderBy?: 'createdAt' | 'updatedAt' | 'publishedAt' | 'title';
|
|
16
|
-
orderDirection?: 'ASC' | 'DESC';
|
|
17
|
-
includeDeleted?: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Paginated results
|
|
21
|
-
*/
|
|
22
|
-
export interface IPaginatedResult<T> {
|
|
23
|
-
data: T[];
|
|
24
|
-
total: number;
|
|
25
|
-
limit: number;
|
|
26
|
-
offset: number;
|
|
27
|
-
hasMore: boolean;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=IContentFilters.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContentFilters.d.ts","sourceRoot":"","sources":["../../src/models/IContentFilters.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC;IAC9D,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
//# sourceMappingURL=IContentFilters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContentFilters.js","sourceRoot":"","sources":["../../src/models/IContentFilters.ts"],"names":[],"mappings":";AAAA;;;;;;EAME"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Content version model
|
|
3
|
-
*/
|
|
4
|
-
export interface IContentVersion {
|
|
5
|
-
id: string;
|
|
6
|
-
contentId: string;
|
|
7
|
-
versionNumber: number;
|
|
8
|
-
title: string;
|
|
9
|
-
body: string;
|
|
10
|
-
changeSummary?: string;
|
|
11
|
-
isAutosave: boolean;
|
|
12
|
-
createdAt: Date;
|
|
13
|
-
createdBy: string;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=IContentVersion.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContentVersion.d.ts","sourceRoot":"","sources":["../../src/models/IContentVersion.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (c) 2025 Bernier LLC
|
|
4
|
-
|
|
5
|
-
This file is licensed to the client under a limited-use license.
|
|
6
|
-
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
-
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
//# sourceMappingURL=IContentVersion.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IContentVersion.js","sourceRoot":"","sources":["../../src/models/IContentVersion.ts"],"names":[],"mappings":";AAAA;;;;;;EAME"}
|