@magnet-cms/common 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,395 @@
1
+ 'use strict';
2
+
3
+ require('reflect-metadata');
4
+ var fs = require('fs');
5
+ var path = require('path');
6
+ var common = require('@nestjs/common');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
11
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
12
+ }) : x)(function(x) {
13
+ if (typeof require !== "undefined") return require.apply(this, arguments);
14
+ throw Error('Dynamic require of "' + x + '" is not supported');
15
+ });
16
+
17
+ // src/constants.ts
18
+ var RESOLVER_METADATA_KEY = "magnet:resolver";
19
+ var RESOLVE_METADATA_KEY = "magnet:resolve";
20
+ var SCHEMA_METADATA_KEY = "magnet:schema";
21
+ var SCHEMA_OPTIONS_METADATA_KEY = "magnet:schema:options";
22
+ var BASE_SCHEMA_METADATA_KEY = "magnet:schema:base";
23
+ var PROP_METADATA_KEY = "magnet:schema:prop";
24
+ var UI_METADATA_KEY = "magnet:schema:ui";
25
+ var SETTING_METADATA_KEY = "magnet:setting";
26
+ var INJECT_MODEL = "magnet:inject:model";
27
+ var DESIGN_TYPE = "design:type";
28
+ var DESIGN_META = "design:metadata";
29
+ var DESIGN_PARAM_TYPES = "design:paramtypes";
30
+ var DESIGN_RETURN_TYPE = "design:returntype";
31
+
32
+ // src/decorators/resolver/resolver.decorator.ts
33
+ function Resolver(optionsOrFn) {
34
+ return (target) => {
35
+ let resolvedOptions;
36
+ if (typeof optionsOrFn === "function") {
37
+ resolvedOptions = {
38
+ schema: optionsOrFn()
39
+ };
40
+ } else {
41
+ if (!optionsOrFn.schema) {
42
+ throw new Error(`@Resolver object input must include a 'schema' property.`);
43
+ }
44
+ resolvedOptions = optionsOrFn;
45
+ }
46
+ Reflect.defineMetadata(RESOLVER_METADATA_KEY, resolvedOptions, target);
47
+ };
48
+ }
49
+ __name(Resolver, "Resolver");
50
+
51
+ // src/decorators/resolver/resolve.decorator.ts
52
+ function Resolve(optionsOrFn) {
53
+ return (target, propertyKey, descriptor) => {
54
+ const controller = target.constructor;
55
+ let resolvedOptions;
56
+ if (typeof optionsOrFn === "function") {
57
+ const resolvedType = optionsOrFn();
58
+ resolvedOptions = {
59
+ type: resolvedType,
60
+ isArray: false
61
+ };
62
+ } else if (Array.isArray(optionsOrFn)) {
63
+ if (!optionsOrFn.every((fn) => typeof fn === "function")) {
64
+ throw new Error("@Resolve array input must only contain functions.");
65
+ }
66
+ resolvedOptions = {
67
+ type: optionsOrFn.map((fn) => fn()),
68
+ isArray: true
69
+ };
70
+ } else {
71
+ if (!optionsOrFn || !optionsOrFn.type) {
72
+ throw new Error(`@Resolve object input must include a 'type' property.`);
73
+ }
74
+ resolvedOptions = {
75
+ ...optionsOrFn,
76
+ isArray: Array.isArray(optionsOrFn.type)
77
+ };
78
+ }
79
+ if (!descriptor.value) {
80
+ throw new Error(`@Resolve must be used within a method. Class: ${controller.name}`);
81
+ }
82
+ Reflect.defineMetadata(RESOLVE_METADATA_KEY, resolvedOptions, descriptor.value);
83
+ };
84
+ }
85
+ __name(Resolve, "Resolve");
86
+ var cachedAdapter = null;
87
+ function isPackageInstalled(packageName) {
88
+ try {
89
+ return fs.existsSync(path.join(__require.resolve(packageName), "../../"));
90
+ } catch {
91
+ return false;
92
+ }
93
+ }
94
+ __name(isPackageInstalled, "isPackageInstalled");
95
+ function detectDatabaseAdapter() {
96
+ if (cachedAdapter) return cachedAdapter;
97
+ if (isPackageInstalled("@magnet-cms/adapter-mongoose")) {
98
+ cachedAdapter = "mongoose";
99
+ } else if (isPackageInstalled("@magnet-cms/adapter-typeorm")) {
100
+ cachedAdapter = "typeorm";
101
+ } else {
102
+ throw new Error("\u274C No supported database adapter found. Install @magnet-cms/adapter-mongoose or @magnet-cms/adapter-typeorm.");
103
+ }
104
+ return cachedAdapter;
105
+ }
106
+ __name(detectDatabaseAdapter, "detectDatabaseAdapter");
107
+
108
+ // src/utils/get-model-token.util.ts
109
+ function getModelToken(schema) {
110
+ return `Magnet${schema.name}Model`;
111
+ }
112
+ __name(getModelToken, "getModelToken");
113
+
114
+ // src/utils/get-schema-token.util.ts
115
+ var getSchemaToken = /* @__PURE__ */ __name((schema) => {
116
+ return `${schema.name}Schema`;
117
+ }, "getSchemaToken");
118
+ var getSettingToken = /* @__PURE__ */ __name((setting) => {
119
+ return `${setting.name}Setting`;
120
+ }, "getSettingToken");
121
+
122
+ // src/decorators/schema/prop.decorator.ts
123
+ function Prop(options) {
124
+ return (target, propertyKey) => {
125
+ const adapter = detectDatabaseAdapter();
126
+ const existingProps = Reflect.getMetadata(PROP_METADATA_KEY, target) || [];
127
+ Reflect.defineMetadata(PROP_METADATA_KEY, [
128
+ ...existingProps,
129
+ {
130
+ propertyKey,
131
+ options
132
+ }
133
+ ], target);
134
+ const { Prop: Prop2 } = __require(`@magnet-cms/adapter-${adapter}`);
135
+ return Prop2(options)(target, propertyKey);
136
+ };
137
+ }
138
+ __name(Prop, "Prop");
139
+
140
+ // src/decorators/schema/schema.decorator.ts
141
+ var defaultSchemaOptions = {
142
+ versioning: true,
143
+ i18n: true
144
+ };
145
+ function Schema(options = {}) {
146
+ return (target) => {
147
+ const adapter = detectDatabaseAdapter();
148
+ const mergedOptions = {
149
+ ...defaultSchemaOptions,
150
+ ...options
151
+ };
152
+ Reflect.defineMetadata(SCHEMA_METADATA_KEY, true, target);
153
+ Reflect.defineMetadata(SCHEMA_OPTIONS_METADATA_KEY, mergedOptions, target);
154
+ const { Schema: Schema2 } = __require(`@magnet-cms/adapter-${adapter}`);
155
+ return Schema2()(target);
156
+ };
157
+ }
158
+ __name(Schema, "Schema");
159
+ function getSchemaOptions(target) {
160
+ return Reflect.getMetadata(SCHEMA_OPTIONS_METADATA_KEY, target) || defaultSchemaOptions;
161
+ }
162
+ __name(getSchemaOptions, "getSchemaOptions");
163
+
164
+ // src/decorators/schema/setting.decorator.ts
165
+ function Setting() {
166
+ return (target) => {
167
+ Reflect.defineMetadata(SETTING_METADATA_KEY, true, target);
168
+ };
169
+ }
170
+ __name(Setting, "Setting");
171
+
172
+ // src/decorators/schema/ui.decorator.ts
173
+ function UI(options) {
174
+ return (target, propertyKey) => {
175
+ const designType = Reflect.getMetadata("design:type", target, propertyKey);
176
+ const existingUIFields = Reflect.getMetadata(UI_METADATA_KEY, target) || [];
177
+ Reflect.defineMetadata(UI_METADATA_KEY, [
178
+ ...existingUIFields,
179
+ {
180
+ propertyKey,
181
+ options: {
182
+ ...options,
183
+ designType
184
+ }
185
+ }
186
+ ], target);
187
+ };
188
+ }
189
+ __name(UI, "UI");
190
+ var Validators = /* @__PURE__ */ __name((...validators) => {
191
+ return common.applyDecorators(...validators);
192
+ }, "Validators");
193
+
194
+ // src/decorators/schema/version.decorator.ts
195
+ var VERSION_METADATA_KEY = "version:metadata";
196
+ function Version(config = {}) {
197
+ return (target) => {
198
+ Reflect.defineMetadata(VERSION_METADATA_KEY, config, target);
199
+ };
200
+ }
201
+ __name(Version, "Version");
202
+
203
+ // src/decorators/inject.decorator.ts
204
+ function InjectModel(model) {
205
+ return (target, propertyKey, parameterIndex) => {
206
+ const adapter = detectDatabaseAdapter();
207
+ if (propertyKey !== void 0) {
208
+ Reflect.defineMetadata(INJECT_MODEL, model, target, propertyKey);
209
+ }
210
+ const { InjectModel: InjectModel2 } = __require(`@magnet-cms/adapter-${adapter}`);
211
+ return InjectModel2(model)(target, propertyKey, parameterIndex);
212
+ };
213
+ }
214
+ __name(InjectModel, "InjectModel");
215
+
216
+ // src/exceptions/validation.exception.ts
217
+ var ValidationException = class extends Error {
218
+ static {
219
+ __name(this, "ValidationException");
220
+ }
221
+ errors;
222
+ constructor(errors) {
223
+ super("ValidationException"), this.errors = errors;
224
+ }
225
+ };
226
+
227
+ // src/model/base.model.ts
228
+ var Model = class {
229
+ static {
230
+ __name(this, "Model");
231
+ }
232
+ /**
233
+ * Set the version for subsequent operations
234
+ * @param versionId The version ID or status ('draft', 'published', 'archived')
235
+ */
236
+ version(versionId) {
237
+ return this;
238
+ }
239
+ /**
240
+ * Find all versions of a document
241
+ * @param documentId The document ID
242
+ */
243
+ findVersions(documentId) {
244
+ return Promise.resolve([]);
245
+ }
246
+ /**
247
+ * Find a specific version by ID
248
+ * @param versionId The version ID
249
+ */
250
+ findVersionById(versionId) {
251
+ return Promise.resolve(null);
252
+ }
253
+ /**
254
+ * Restore a version
255
+ * @param versionId The version ID to restore
256
+ */
257
+ restoreVersion(versionId) {
258
+ return Promise.resolve(null);
259
+ }
260
+ /**
261
+ * Create a query builder for advanced queries with sorting, pagination, and operators.
262
+ * The query builder inherits the current locale/version context.
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * const results = await model.query()
267
+ * .where({ status: 'active', age: { $gte: 18 } })
268
+ * .sort({ createdAt: -1 })
269
+ * .limit(10)
270
+ * .exec()
271
+ * ```
272
+ */
273
+ query() {
274
+ throw new Error("QueryBuilder not implemented by this adapter");
275
+ }
276
+ /**
277
+ * Get access to the native database model/collection.
278
+ * Use with caution - bypasses Magnet abstractions like locale and versioning.
279
+ *
280
+ * @returns The underlying database model (e.g., Mongoose Model)
281
+ */
282
+ native() {
283
+ throw new Error("Native access not implemented by this adapter");
284
+ }
285
+ };
286
+
287
+ // src/model/mixed.model.ts
288
+ var Mixed = class {
289
+ static {
290
+ __name(this, "Mixed");
291
+ }
292
+ static schemaName;
293
+ defaultOptions;
294
+ };
295
+
296
+ // src/model/query-builder.ts
297
+ var QueryBuilder = class {
298
+ static {
299
+ __name(this, "QueryBuilder");
300
+ }
301
+ };
302
+
303
+ // src/types/auth.types.ts
304
+ var AuthStrategy = class {
305
+ static {
306
+ __name(this, "AuthStrategy");
307
+ }
308
+ /**
309
+ * Get the Passport strategy name (for guards)
310
+ * Returns the name to use with AuthGuard()
311
+ */
312
+ getPassportStrategyName() {
313
+ return this.name;
314
+ }
315
+ };
316
+
317
+ // src/types/config.types.ts
318
+ var MagnetModuleOptions = class {
319
+ static {
320
+ __name(this, "MagnetModuleOptions");
321
+ }
322
+ db;
323
+ jwt;
324
+ /**
325
+ * Auth configuration (optional, uses JWT by default)
326
+ */
327
+ auth;
328
+ internationalization;
329
+ playground;
330
+ storage;
331
+ /**
332
+ * Plugins to load with the Magnet module
333
+ */
334
+ plugins;
335
+ constructor({ db, jwt, auth, internationalization, playground, storage, plugins }) {
336
+ this.db = db;
337
+ this.jwt = jwt;
338
+ this.auth = auth;
339
+ this.internationalization = internationalization;
340
+ this.playground = playground;
341
+ this.storage = storage;
342
+ this.plugins = plugins;
343
+ }
344
+ };
345
+
346
+ // src/types/database.types.ts
347
+ var DatabaseAdapter = class {
348
+ static {
349
+ __name(this, "DatabaseAdapter");
350
+ }
351
+ };
352
+
353
+ // src/types/storage.types.ts
354
+ var StorageAdapter = class {
355
+ static {
356
+ __name(this, "StorageAdapter");
357
+ }
358
+ };
359
+
360
+ exports.AuthStrategy = AuthStrategy;
361
+ exports.BASE_SCHEMA_METADATA_KEY = BASE_SCHEMA_METADATA_KEY;
362
+ exports.DESIGN_META = DESIGN_META;
363
+ exports.DESIGN_PARAM_TYPES = DESIGN_PARAM_TYPES;
364
+ exports.DESIGN_RETURN_TYPE = DESIGN_RETURN_TYPE;
365
+ exports.DESIGN_TYPE = DESIGN_TYPE;
366
+ exports.DatabaseAdapter = DatabaseAdapter;
367
+ exports.INJECT_MODEL = INJECT_MODEL;
368
+ exports.InjectModel = InjectModel;
369
+ exports.MagnetModuleOptions = MagnetModuleOptions;
370
+ exports.Mixed = Mixed;
371
+ exports.Model = Model;
372
+ exports.PROP_METADATA_KEY = PROP_METADATA_KEY;
373
+ exports.Prop = Prop;
374
+ exports.QueryBuilder = QueryBuilder;
375
+ exports.RESOLVER_METADATA_KEY = RESOLVER_METADATA_KEY;
376
+ exports.RESOLVE_METADATA_KEY = RESOLVE_METADATA_KEY;
377
+ exports.Resolve = Resolve;
378
+ exports.Resolver = Resolver;
379
+ exports.SCHEMA_METADATA_KEY = SCHEMA_METADATA_KEY;
380
+ exports.SCHEMA_OPTIONS_METADATA_KEY = SCHEMA_OPTIONS_METADATA_KEY;
381
+ exports.SETTING_METADATA_KEY = SETTING_METADATA_KEY;
382
+ exports.Schema = Schema;
383
+ exports.Setting = Setting;
384
+ exports.StorageAdapter = StorageAdapter;
385
+ exports.UI = UI;
386
+ exports.UI_METADATA_KEY = UI_METADATA_KEY;
387
+ exports.VERSION_METADATA_KEY = VERSION_METADATA_KEY;
388
+ exports.ValidationException = ValidationException;
389
+ exports.Validators = Validators;
390
+ exports.Version = Version;
391
+ exports.detectDatabaseAdapter = detectDatabaseAdapter;
392
+ exports.getModelToken = getModelToken;
393
+ exports.getSchemaOptions = getSchemaOptions;
394
+ exports.getSchemaToken = getSchemaToken;
395
+ exports.getSettingToken = getSettingToken;