@mayhem93/nexxus-core-lib 0.0.1 → 0.0.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/dist-cjs/common/BuiltinSchemas.js +24 -5
- package/dist-cjs/common/BuiltinSchemas.js.map +1 -1
- package/dist-cjs/common/FilterQuery.js +5 -18
- package/dist-cjs/common/FilterQuery.js.map +1 -1
- package/dist-cjs/common/InferModel.js +3 -0
- package/dist-cjs/common/InferModel.js.map +1 -0
- package/dist-cjs/common/JsonPatch.js +42 -225
- package/dist-cjs/common/JsonPatch.js.map +1 -1
- package/dist-cjs/common/SchemaValidator.js +100 -29
- package/dist-cjs/common/SchemaValidator.js.map +1 -1
- package/dist-cjs/index.js +4 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/lib/BaseService.js +6 -6
- package/dist-cjs/lib/BaseService.js.map +1 -1
- package/dist-cjs/lib/ConfigManager.js +56 -25
- package/dist-cjs/lib/ConfigManager.js.map +1 -1
- package/dist-cjs/lib/ConfigProvider.js +14 -1
- package/dist-cjs/lib/ConfigProvider.js.map +1 -1
- package/dist-cjs/lib/Exceptions.js +22 -4
- package/dist-cjs/lib/Exceptions.js.map +1 -1
- package/dist-cjs/lib/Logger.js +138 -65
- package/dist-cjs/lib/Logger.js.map +1 -1
- package/dist-cjs/lib/ServiceResolver.js +57 -0
- package/dist-cjs/lib/ServiceResolver.js.map +1 -0
- package/dist-cjs/models/AppModel.js +17 -3
- package/dist-cjs/models/AppModel.js.map +1 -1
- package/dist-cjs/models/Application.js +51 -12
- package/dist-cjs/models/Application.js.map +1 -1
- package/dist-cjs/models/BaseModel.js.map +1 -1
- package/dist-cjs/models/BuiltinModel.js +8 -0
- package/dist-cjs/models/BuiltinModel.js.map +1 -0
- package/dist-cjs/models/User.js +12 -3
- package/dist-cjs/models/User.js.map +1 -1
- package/dist-esm/common/BuiltinSchemas.js +23 -4
- package/dist-esm/common/BuiltinSchemas.js.map +1 -1
- package/dist-esm/common/FilterQuery.js +6 -19
- package/dist-esm/common/FilterQuery.js.map +1 -1
- package/dist-esm/common/InferModel.js +2 -0
- package/dist-esm/common/InferModel.js.map +1 -0
- package/dist-esm/common/JsonPatch.js +44 -227
- package/dist-esm/common/JsonPatch.js.map +1 -1
- package/dist-esm/common/SchemaValidator.js +100 -29
- package/dist-esm/common/SchemaValidator.js.map +1 -1
- package/dist-esm/index.js +4 -0
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/lib/BaseService.js +8 -8
- package/dist-esm/lib/BaseService.js.map +1 -1
- package/dist-esm/lib/ConfigManager.js +56 -25
- package/dist-esm/lib/ConfigManager.js.map +1 -1
- package/dist-esm/lib/ConfigProvider.js +14 -1
- package/dist-esm/lib/ConfigProvider.js.map +1 -1
- package/dist-esm/lib/Exceptions.js +20 -3
- package/dist-esm/lib/Exceptions.js.map +1 -1
- package/dist-esm/lib/Logger.js +139 -66
- package/dist-esm/lib/Logger.js.map +1 -1
- package/dist-esm/lib/ServiceResolver.js +52 -0
- package/dist-esm/lib/ServiceResolver.js.map +1 -0
- package/dist-esm/models/AppModel.js +17 -3
- package/dist-esm/models/AppModel.js.map +1 -1
- package/dist-esm/models/Application.js +52 -13
- package/dist-esm/models/Application.js.map +1 -1
- package/dist-esm/models/BaseModel.js.map +1 -1
- package/dist-esm/models/BuiltinModel.js +4 -0
- package/dist-esm/models/BuiltinModel.js.map +1 -0
- package/dist-esm/models/User.js +11 -2
- package/dist-esm/models/User.js.map +1 -1
- package/dist-types/common/BuiltinSchemas.d.ts +59 -5
- package/dist-types/common/FilterQuery.d.ts +3 -11
- package/dist-types/common/InferModel.d.ts +29 -0
- package/dist-types/common/JsonPatch.d.ts +4 -45
- package/dist-types/common/ModelTypes.d.ts +1 -0
- package/dist-types/common/QueuePayloads.d.ts +48 -26
- package/dist-types/common/SchemaValidator.d.ts +42 -2
- package/dist-types/index.d.ts +4 -0
- package/dist-types/lib/BaseService.d.ts +51 -1
- package/dist-types/lib/ConfigManager.d.ts +50 -13
- package/dist-types/lib/ConfigProvider.d.ts +6 -0
- package/dist-types/lib/Exceptions.d.ts +15 -2
- package/dist-types/lib/Logger.d.ts +84 -14
- package/dist-types/lib/ServiceResolver.d.ts +23 -0
- package/dist-types/models/AppModel.d.ts +31 -5
- package/dist-types/models/Application.d.ts +36 -8
- package/dist-types/models/BaseModel.d.ts +14 -12
- package/dist-types/models/BuiltinModel.d.ts +3 -0
- package/dist-types/models/User.d.ts +15 -13
- package/package.json +4 -4
- package/src/schemas/winston-logger.schema.json +51 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/lib/Logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAuB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/lib/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { NexxusBaseService } from './BaseService';
|
|
2
|
+
import { InvalidConfigException } from './Exceptions';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
const requireFromApp = createRequire(path.join(process.cwd(), 'package.json'));
|
|
7
|
+
async function loadPackage(configuredName) {
|
|
8
|
+
let resolvedPath;
|
|
9
|
+
try {
|
|
10
|
+
resolvedPath = requireFromApp.resolve(configuredName);
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
throw new InvalidConfigException(`Service package "${configuredName}" could not be resolved — make sure it's installed in your deployment. Underlying error: ${e.message}`);
|
|
14
|
+
}
|
|
15
|
+
return import(pathToFileURL(resolvedPath).href);
|
|
16
|
+
}
|
|
17
|
+
function assertNexxusService(cls, configuredName) {
|
|
18
|
+
if (typeof cls !== 'function' || !(cls.prototype instanceof NexxusBaseService)) {
|
|
19
|
+
throw new InvalidConfigException(`Class resolved from "${configuredName}" does not extend NexxusBaseService. Make sure the adapter extends NexxusBaseService.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function pickDefaultExport(mod, configuredName) {
|
|
23
|
+
if (typeof mod.default === 'function') {
|
|
24
|
+
return mod.default;
|
|
25
|
+
}
|
|
26
|
+
if (typeof mod === 'function') {
|
|
27
|
+
return mod;
|
|
28
|
+
}
|
|
29
|
+
throw new InvalidConfigException(`Package "${configuredName}" does not default-export a class. Nexxus adapters must default-export the adapter class itself.`);
|
|
30
|
+
}
|
|
31
|
+
export async function resolveConstructableServiceClass(configuredName, builtins) {
|
|
32
|
+
if (configuredName in builtins) {
|
|
33
|
+
return builtins[configuredName];
|
|
34
|
+
}
|
|
35
|
+
const mod = await loadPackage(configuredName);
|
|
36
|
+
const cls = pickDefaultExport(mod, configuredName);
|
|
37
|
+
assertNexxusService(cls, configuredName);
|
|
38
|
+
return cls;
|
|
39
|
+
}
|
|
40
|
+
export async function resolveFactoryServiceClass(configuredName, builtins) {
|
|
41
|
+
if (configuredName in builtins) {
|
|
42
|
+
return builtins[configuredName];
|
|
43
|
+
}
|
|
44
|
+
const mod = await loadPackage(configuredName);
|
|
45
|
+
const cls = pickDefaultExport(mod, configuredName);
|
|
46
|
+
assertNexxusService(cls, configuredName);
|
|
47
|
+
if (typeof cls.create !== 'function') {
|
|
48
|
+
throw new InvalidConfigException(`Class resolved from "${configuredName}" does not expose a static create() method — required for factory-style services.`);
|
|
49
|
+
}
|
|
50
|
+
return cls;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=ServiceResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceResolver.js","sourceRoot":"","sources":["../../src/lib/ServiceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGlB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AASlC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AAQ/E,KAAK,UAAU,WAAW,CAAC,cAAsB;IAC/C,IAAI,YAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,sBAAsB,CAC9B,oBAAoB,cAAc,4FAA6F,CAAW,CAAC,OAAO,EAAE,CACrJ,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAOD,SAAS,mBAAmB,CAAC,GAAY,EAAE,cAAsB;IAC/D,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,CAAC,CAAE,GAA8B,CAAC,SAAS,YAAY,iBAAiB,CAAC,EAAE,CAAC;QAC3G,MAAM,IAAI,sBAAsB,CAC9B,wBAAwB,cAAc,uFAAuF,CAC9H,CAAC;IACJ,CAAC;AACH,CAAC;AASD,SAAS,iBAAiB,CAAC,GAAQ,EAAE,cAAsB;IACzD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,IAAI,sBAAsB,CAC9B,YAAY,cAAc,kGAAkG,CAC7H,CAAC;AACJ,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,cAAsB,EACtB,QAAyD;IAEzD,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEnD,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEzC,OAAO,GAAsC,CAAC;AAChD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,cAAsB,EACtB,QAAmD;IAEnD,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEnD,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEzC,IAAI,OAAQ,GAA4B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/D,MAAM,IAAI,sBAAsB,CAC9B,wBAAwB,cAAc,mFAAmF,CAC1H,CAAC;IACJ,CAAC;IAED,OAAO,GAAgC,CAAC;AAC1C,CAAC"}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
import { NexxusBaseModel } from "./BaseModel";
|
|
2
|
+
import { NexxusSchemaValidator } from "../common/SchemaValidator";
|
|
3
|
+
import { InvalidSchemaDataException } from "../lib/Exceptions";
|
|
2
4
|
export class NexxusAppModel extends NexxusBaseModel {
|
|
3
|
-
constructor(props) {
|
|
4
|
-
super(props);
|
|
5
|
+
constructor(props, appSchema) {
|
|
5
6
|
if (!props.appId) {
|
|
6
|
-
throw new Error('AppModel requires
|
|
7
|
+
throw new Error('AppModel requires AppId');
|
|
7
8
|
}
|
|
9
|
+
if (appSchema === null) {
|
|
10
|
+
super(props);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const modelDef = appSchema[props.type];
|
|
14
|
+
if (!modelDef) {
|
|
15
|
+
throw new InvalidSchemaDataException(`Unknown app model type "${props.type}" for app "${props.appId}"`);
|
|
16
|
+
}
|
|
17
|
+
const normalized = NexxusSchemaValidator.validateAgainstSchema(props, modelDef);
|
|
18
|
+
super(normalized);
|
|
19
|
+
}
|
|
20
|
+
static fromStorage(props) {
|
|
21
|
+
return new NexxusAppModel(props, null);
|
|
8
22
|
}
|
|
9
23
|
}
|
|
10
24
|
//# sourceMappingURL=AppModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppModel.js","sourceRoot":"","sources":["../../src/models/AppModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AppModel.js","sourceRoot":"","sources":["../../src/models/AppModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAiB/D,MAAM,OAAO,cAAe,SAAQ,eAAgC;IAUlE,YAAY,KAAsB,EAAE,SAAyC;QAC3E,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAGvB,KAAK,CAAC,KAAK,CAAC,CAAC;YAEb,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,0BAA0B,CAAC,2BAA2B,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1G,CAAC;QAMD,MAAM,UAAU,GAAG,qBAAqB,CAAC,qBAAqB,CAC5D,KAAgC,EAChC,QAAQ,CACT,CAAC;QAEF,KAAK,CAAC,UAA6B,CAAC,CAAC;IACvC,CAAC;IAQM,MAAM,CAAC,WAAW,CAAC,KAAsB;QAC9C,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -1,46 +1,85 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL_REGISTRY } from "./BaseModel";
|
|
2
|
+
import { NexxusBuiltinModel } from "./BuiltinModel";
|
|
3
|
+
import { NEXXUS_BUILTIN_MODEL_SCHEMAS, NEXXUS_RESERVED_FIELD_NAMES } from "../common/BuiltinSchemas";
|
|
2
4
|
import * as Dot from 'dot-prop';
|
|
3
|
-
export class NexxusApplication extends
|
|
5
|
+
export class NexxusApplication extends NexxusBuiltinModel {
|
|
4
6
|
constructor(data) {
|
|
5
7
|
super({ ...data, type: MODEL_REGISTRY.application });
|
|
6
8
|
if (Object.keys(data.schema).length === 0) {
|
|
7
9
|
throw new Error("Application schema cannot be empty");
|
|
8
10
|
}
|
|
11
|
+
for (const [modelName, modelDef] of Object.entries(data.schema)) {
|
|
12
|
+
for (const fieldName of Object.keys(modelDef)) {
|
|
13
|
+
if (NEXXUS_RESERVED_FIELD_NAMES.has(fieldName)) {
|
|
14
|
+
throw new Error(`Application schema: model "${modelName}" declares a field "${fieldName}", ` +
|
|
15
|
+
`which is a Nexxus-reserved name. Reserved: ${[...NEXXUS_RESERVED_FIELD_NAMES].join(', ')}.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
9
19
|
if (data.description !== undefined && typeof data.description !== 'string') {
|
|
10
20
|
throw new Error("Application 'description' must be a string if provided");
|
|
11
21
|
}
|
|
12
22
|
if (data.name === undefined || typeof data.name !== 'string') {
|
|
13
23
|
throw new Error("Application 'name' is required and must be a string");
|
|
14
24
|
}
|
|
15
|
-
if (data.
|
|
16
|
-
throw new Error("Application '
|
|
25
|
+
if (data.defaultLimit !== undefined && (typeof data.defaultLimit !== 'number' || data.defaultLimit <= 10)) {
|
|
26
|
+
throw new Error("Application 'defaultLimit' must be a greater than 10 if provided");
|
|
27
|
+
}
|
|
28
|
+
data.defaultLimit = data.defaultLimit ?? 10;
|
|
29
|
+
if (data.maxLimit !== undefined && (typeof data.maxLimit !== 'number' || data.maxLimit <= 0 || data.maxLimit < data.defaultLimit)) {
|
|
30
|
+
throw new Error("Application 'maxLimit' must be a positive number if provided and must be greater than or equal to 'defaultLimit'");
|
|
17
31
|
}
|
|
18
|
-
|
|
32
|
+
data.maxLimit = data.maxLimit ?? 100;
|
|
33
|
+
if (data.auth) {
|
|
19
34
|
if (!data.userDetailSchema || typeof data.userDetailSchema !== 'object') {
|
|
20
35
|
throw new Error("Application 'userSchema' must be provided when 'authEnabled' is enabled");
|
|
21
36
|
}
|
|
22
|
-
if (typeof data.allowMultipleLogin !== 'boolean' && data.allowMultipleLogin !== undefined) {
|
|
23
|
-
throw new Error("Application 'allowMultipleLogin' must be a boolean when 'authEnabled' is enabled");
|
|
24
|
-
}
|
|
25
37
|
if (data.userTypes !== undefined && typeof data.userTypes !== 'object') {
|
|
26
38
|
throw new Error("Application 'userTypes' must be an object when 'authEnabled' is enabled");
|
|
27
39
|
}
|
|
28
|
-
|
|
40
|
+
if (!data.auth || typeof data.auth !== 'object') {
|
|
41
|
+
throw new Error("Application 'auth' must be provided when 'authEnabled' is enabled");
|
|
42
|
+
}
|
|
43
|
+
if (typeof data.auth.jwtSecret !== 'string' || data.auth.jwtSecret.length === 0) {
|
|
44
|
+
throw new Error("Application 'auth.jwtSecret' is required and must be a non-empty string when 'authEnabled' is enabled");
|
|
45
|
+
}
|
|
46
|
+
if (data.auth.jwtExpiresIn !== undefined && typeof data.auth.jwtExpiresIn !== 'string') {
|
|
47
|
+
throw new Error("Application 'auth.jwtExpiresIn' must be a string if provided");
|
|
48
|
+
}
|
|
49
|
+
if (!data.auth.strategies
|
|
50
|
+
|| typeof data.auth.strategies !== 'object'
|
|
51
|
+
|| Object.keys(data.auth.strategies).length === 0) {
|
|
52
|
+
throw new Error("Application 'auth.strategies' must be a non-empty object when 'authEnabled' is enabled");
|
|
53
|
+
}
|
|
29
54
|
this.data.userTypes = data.userTypes ? { ...data.userTypes, ...{ default: {} } } : { default: {} };
|
|
30
55
|
}
|
|
31
|
-
else {
|
|
32
|
-
this.data.allowMultipleLogin = null;
|
|
33
|
-
}
|
|
34
56
|
}
|
|
35
57
|
getSchema() {
|
|
36
58
|
return this.data.schema;
|
|
37
59
|
}
|
|
38
60
|
getUserDetailSchema(userType = 'default') {
|
|
39
|
-
if (!this.data.userDetailSchema) {
|
|
61
|
+
if (!this.hasAuthEnabled() || !this.data.userDetailSchema) {
|
|
40
62
|
return null;
|
|
41
63
|
}
|
|
42
64
|
return this.data.userDetailSchema[userType];
|
|
43
65
|
}
|
|
66
|
+
hasAuthEnabled() {
|
|
67
|
+
return !!this.data.auth;
|
|
68
|
+
}
|
|
69
|
+
getAppModelSchema(modelType) {
|
|
70
|
+
const appModelDef = this.data.schema[modelType];
|
|
71
|
+
if (!appModelDef) {
|
|
72
|
+
throw new Error(`Unknown app model type: ${modelType}`);
|
|
73
|
+
}
|
|
74
|
+
const appModelSchema = structuredClone(appModelDef);
|
|
75
|
+
if (this.hasAuthEnabled()) {
|
|
76
|
+
appModelSchema.userId = { type: 'string', required: true, filterable: true };
|
|
77
|
+
}
|
|
78
|
+
return appModelSchema;
|
|
79
|
+
}
|
|
80
|
+
static getModelSchema() {
|
|
81
|
+
return { ...NEXXUS_BUILTIN_MODEL_SCHEMAS.application };
|
|
82
|
+
}
|
|
44
83
|
getAppModelFieldType(modelType, fieldPath) {
|
|
45
84
|
const appModelFieldType = Dot.getProperty(this.getSchema(), `${modelType}.${fieldPath}.type`);
|
|
46
85
|
return appModelFieldType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/models/Application.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/models/Application.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../../src/models/BaseModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../../src/models/BaseModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;CACJ,CAAC;AAYX,MAAM,OAAgB,eAAe;IACzB,IAAI,CAAI;IAEX,MAAM,CAAU,SAAS,CAAqB;IAErD,YAAY,IAAO;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAC,IAAI,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuiltinModel.js","sourceRoot":"","sources":["../../src/models/BuiltinModel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGhB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAgB,kBAEpB,SAAQ,eAAkB;CAAG"}
|
package/dist-esm/models/User.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL_REGISTRY } from "./BaseModel";
|
|
2
|
+
import { NexxusBuiltinModel } from "./BuiltinModel";
|
|
3
|
+
import { NEXXUS_BUILTIN_MODEL_SCHEMAS } from "../common/BuiltinSchemas";
|
|
2
4
|
import { InvalidUserModelException } from "../lib/Exceptions";
|
|
3
|
-
export class
|
|
5
|
+
export class NexxusUser extends NexxusBuiltinModel {
|
|
6
|
+
static getModelSchema(userDetails) {
|
|
7
|
+
const base = { ...NEXXUS_BUILTIN_MODEL_SCHEMAS.user };
|
|
8
|
+
if (userDetails) {
|
|
9
|
+
base.details = { type: 'object', required: false, properties: userDetails };
|
|
10
|
+
}
|
|
11
|
+
return base;
|
|
12
|
+
}
|
|
4
13
|
constructor(data) {
|
|
5
14
|
super({ ...data, type: MODEL_REGISTRY.user });
|
|
6
15
|
if (this.data.appId === undefined || typeof this.data.appId !== 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Universal fields present in all models
|
|
3
|
-
*
|
|
2
|
+
* Universal fields present in all models (auto-managed by NexxusBaseModel).
|
|
3
|
+
* 'type' and 'appId' are excluded as they are handled separately in queries.
|
|
4
4
|
*/
|
|
5
5
|
export declare const NEXXUS_UNIVERSAL_FIELDS: {
|
|
6
6
|
readonly id: {
|
|
@@ -17,13 +17,31 @@ export declare const NEXXUS_UNIVERSAL_FIELDS: {
|
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Field names reserved by Nexxus across ALL app models. App developers cannot
|
|
21
|
+
* declare a field of these names in their application schemas — the
|
|
22
|
+
* `NexxusApplication` constructor enforces this on schema registration.
|
|
23
|
+
*
|
|
24
|
+
* Most of these are caller-settable at model construction time (e.g. `appId`,
|
|
25
|
+
* `userId`, `type` — set by the API/Worker). `version` is the sole exception:
|
|
26
|
+
* it's set exclusively by the database adapter and rejected from user input
|
|
27
|
+
* (see the inline check in `NexxusSchemaValidator.validateAgainstSchema`).
|
|
28
|
+
*/
|
|
29
|
+
export declare const NEXXUS_RESERVED_FIELD_NAMES: ReadonlySet<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Schema definitions for built-in (reserved) models. These are the runtime
|
|
32
|
+
* source of truth for built-in model field shapes; the corresponding TS
|
|
33
|
+
* interfaces (INexxusUser, INexxusApplication) are derived from these.
|
|
21
34
|
*/
|
|
22
35
|
export declare const NEXXUS_BUILTIN_MODEL_SCHEMAS: {
|
|
23
36
|
readonly user: {
|
|
37
|
+
readonly appId: {
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
readonly required: true;
|
|
40
|
+
readonly filterable: true;
|
|
41
|
+
};
|
|
24
42
|
readonly userType: {
|
|
25
43
|
readonly type: "string";
|
|
26
|
-
readonly required:
|
|
44
|
+
readonly required: true;
|
|
27
45
|
readonly filterable: true;
|
|
28
46
|
};
|
|
29
47
|
readonly username: {
|
|
@@ -33,7 +51,8 @@ export declare const NEXXUS_BUILTIN_MODEL_SCHEMAS: {
|
|
|
33
51
|
};
|
|
34
52
|
readonly password: {
|
|
35
53
|
readonly type: "string";
|
|
36
|
-
readonly required:
|
|
54
|
+
readonly required: true;
|
|
55
|
+
readonly nullable: true;
|
|
37
56
|
};
|
|
38
57
|
readonly authProviders: {
|
|
39
58
|
readonly type: "array";
|
|
@@ -57,6 +76,41 @@ export declare const NEXXUS_BUILTIN_MODEL_SCHEMAS: {
|
|
|
57
76
|
readonly required: true;
|
|
58
77
|
readonly filterable: true;
|
|
59
78
|
};
|
|
79
|
+
readonly description: {
|
|
80
|
+
readonly type: "string";
|
|
81
|
+
readonly required: false;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Per-application auth block. When `authEnabled` is true this must be
|
|
85
|
+
* present and contain a non-empty `strategies` map; when false it should
|
|
86
|
+
* be absent or have an empty `strategies`. The conditional rule isn't
|
|
87
|
+
* expressible in the static schema — it's enforced imperatively in the
|
|
88
|
+
* `NexxusApplication` constructor.
|
|
89
|
+
*
|
|
90
|
+
* `strategies` is a free-form map keyed by strategy name (e.g. 'local',
|
|
91
|
+
* 'google'). The shape of each value is validated by that strategy's
|
|
92
|
+
* own JSON Schema, loaded by the `NexxusAuthStrategy` base class.
|
|
93
|
+
*/
|
|
94
|
+
readonly auth: {
|
|
95
|
+
readonly type: "object";
|
|
96
|
+
readonly required: false;
|
|
97
|
+
readonly nullable: true;
|
|
98
|
+
readonly properties: {
|
|
99
|
+
readonly jwtSecret: {
|
|
100
|
+
readonly type: "string";
|
|
101
|
+
readonly required: true;
|
|
102
|
+
};
|
|
103
|
+
readonly jwtExpiresIn: {
|
|
104
|
+
readonly type: "string";
|
|
105
|
+
readonly required: false;
|
|
106
|
+
};
|
|
107
|
+
readonly strategies: {
|
|
108
|
+
readonly type: "object";
|
|
109
|
+
readonly required: true;
|
|
110
|
+
readonly properties: {};
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
};
|
|
60
114
|
};
|
|
61
115
|
};
|
|
62
116
|
/**
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { NexxusModelDef } from '../common/ModelTypes';
|
|
2
|
-
import {
|
|
3
|
-
import type { NexxusAppModelType } from '../models/AppModel';
|
|
4
|
-
import type { NexxusUserDetailSchema } from '../models/User';
|
|
2
|
+
import type { INexxusAppModel } from '../models/AppModel';
|
|
5
3
|
export type NexxusComparisonOperator = 'gte' | 'lte' | 'gt' | 'lt' | 'ne' | 'in';
|
|
6
4
|
export type NexxusLogicalOperator = '$and' | '$or';
|
|
7
5
|
export type NexxusFieldValue = string | number | boolean;
|
|
@@ -30,21 +28,15 @@ type FilterNodeWithContext = FilterNode & {
|
|
|
30
28
|
depth: number;
|
|
31
29
|
parentOperator?: NexxusLogicalOperator;
|
|
32
30
|
};
|
|
33
|
-
export type NexxusFilterQueryConfig = {
|
|
34
|
-
appModelDef: NexxusModelDef;
|
|
35
|
-
} | {
|
|
36
|
-
modelType: NexxusBuiltinModelType;
|
|
37
|
-
userDetailsSchema?: NexxusUserDetailSchema;
|
|
38
|
-
};
|
|
39
31
|
export declare class NexxusFilterQuery {
|
|
40
32
|
private query;
|
|
41
33
|
private nodes;
|
|
42
34
|
private modelDef;
|
|
43
|
-
constructor(query: NexxusFilterQueryType,
|
|
35
|
+
constructor(query: NexxusFilterQueryType, schema: NexxusModelDef);
|
|
44
36
|
getNodes(): FilterNode[];
|
|
45
37
|
getNormalizedQuery(): NexxusFilterQueryType;
|
|
46
38
|
[Symbol.iterator](): Generator<FilterNodeWithContext>;
|
|
47
|
-
test(object: Partial<
|
|
39
|
+
test(object: Partial<INexxusAppModel>): boolean;
|
|
48
40
|
private testNode;
|
|
49
41
|
private validateAndParse;
|
|
50
42
|
private parseQuery;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type InferFieldDef<D> = D extends {
|
|
2
|
+
type: 'string';
|
|
3
|
+
} ? string : D extends {
|
|
4
|
+
type: 'number';
|
|
5
|
+
} ? number : D extends {
|
|
6
|
+
type: 'boolean';
|
|
7
|
+
} ? boolean : D extends {
|
|
8
|
+
type: 'date';
|
|
9
|
+
} ? number : D extends {
|
|
10
|
+
type: 'array';
|
|
11
|
+
arrayType: infer AT;
|
|
12
|
+
properties?: infer P;
|
|
13
|
+
} ? AT extends 'object' ? P extends Record<string, any> ? Array<InferModel<P>> : never : AT extends 'string' ? string[] : AT extends 'number' ? number[] : AT extends 'boolean' ? boolean[] : AT extends 'date' ? number[] : never : D extends {
|
|
14
|
+
type: 'object';
|
|
15
|
+
properties: infer P;
|
|
16
|
+
} ? P extends Record<string, any> ? InferModel<P> : never : never;
|
|
17
|
+
type ApplyNullable<D, T> = D extends {
|
|
18
|
+
nullable: true;
|
|
19
|
+
} ? T | null : T;
|
|
20
|
+
export type InferModel<S> = {
|
|
21
|
+
-readonly [K in keyof S as S[K] extends {
|
|
22
|
+
required: true;
|
|
23
|
+
} ? K : never]: ApplyNullable<S[K], InferFieldDef<S[K]>>;
|
|
24
|
+
} & {
|
|
25
|
+
-readonly [K in keyof S as S[K] extends {
|
|
26
|
+
required: true;
|
|
27
|
+
} ? never : K]?: ApplyNullable<S[K], InferFieldDef<S[K]>>;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import { NexxusAppModelType } from '../models/AppModel';
|
|
4
|
-
import { NexxusBuiltinModelType } from './BuiltinSchemas';
|
|
5
|
-
import type { NexxusUserDetailSchema } from '../models/User';
|
|
1
|
+
import type { NexxusModelDef, NexxusModelFieldType } from '../common/ModelTypes';
|
|
2
|
+
import { INexxusAppModel } from '../models/AppModel';
|
|
6
3
|
declare const JSON_OPS: readonly ["replace", "append", "prepend", "incr", "decr"];
|
|
7
4
|
export type NexxusJsonPatchConstructor = {
|
|
8
5
|
op: typeof JSON_OPS[number];
|
|
@@ -26,12 +23,6 @@ type NexxusJsonPatchMetadataInternal = NexxusJsonPatchMetadata & {
|
|
|
26
23
|
pathFieldTypes?: NexxusModelFieldType[];
|
|
27
24
|
};
|
|
28
25
|
export type NexxusJsonPatchMetadataConstructor = Omit<NexxusJsonPatchMetadata, 'pathFieldTypes'>;
|
|
29
|
-
export type NexxusJsonPatchValidationConfig = {
|
|
30
|
-
appSchema: NexxusApplicationSchema;
|
|
31
|
-
} | {
|
|
32
|
-
modelType: NexxusBuiltinModelType;
|
|
33
|
-
userDetailsSchema?: NexxusUserDetailSchema;
|
|
34
|
-
};
|
|
35
26
|
export declare class NexxusJsonPatch {
|
|
36
27
|
private valid;
|
|
37
28
|
private fullPatch;
|
|
@@ -39,40 +30,8 @@ export declare class NexxusJsonPatch {
|
|
|
39
30
|
constructor(fullPatch: NexxusJsonPatchConstructor | NexxusJsonPatchInternal);
|
|
40
31
|
get(): NexxusJsonPatchInternal;
|
|
41
32
|
isValid(): boolean;
|
|
42
|
-
getPartialModel(): Partial<
|
|
43
|
-
validate(
|
|
44
|
-
private static validateAgainstType;
|
|
33
|
+
getPartialModel(): Partial<INexxusAppModel>;
|
|
34
|
+
validate(schema: NexxusModelDef): void;
|
|
45
35
|
private static traverseSchema;
|
|
46
|
-
private static validateValueType;
|
|
47
|
-
/**
|
|
48
|
-
* Validate string type
|
|
49
|
-
*/
|
|
50
|
-
private static validateString;
|
|
51
|
-
/**
|
|
52
|
-
* Validate number type
|
|
53
|
-
*/
|
|
54
|
-
private static validateNumber;
|
|
55
|
-
/**
|
|
56
|
-
* Validate boolean type
|
|
57
|
-
*/
|
|
58
|
-
private static validateBoolean;
|
|
59
|
-
/**
|
|
60
|
-
* Validate date type
|
|
61
|
-
*/
|
|
62
|
-
private static validateDate;
|
|
63
|
-
/**
|
|
64
|
-
* Validate object type (recursively validates properties)
|
|
65
|
-
*/
|
|
66
|
-
private static validateObject;
|
|
67
|
-
/**
|
|
68
|
-
* Validate array type (recursively validates elements)
|
|
69
|
-
*/
|
|
70
|
-
private static validateArray;
|
|
71
|
-
/**
|
|
72
|
-
* Helper to validate primitive types (reusable for arrays)
|
|
73
|
-
*/
|
|
74
|
-
private static validatePrimitiveType;
|
|
75
|
-
private static isObjectFieldDef;
|
|
76
|
-
private static isArrayFieldDef;
|
|
77
36
|
}
|
|
78
37
|
export {};
|
|
@@ -3,6 +3,7 @@ export type NexxusModelFieldType = NexxusModelPrimitiveType | 'array' | 'object'
|
|
|
3
3
|
interface BaseFieldDef {
|
|
4
4
|
type: NexxusModelFieldType;
|
|
5
5
|
required?: boolean;
|
|
6
|
+
nullable?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export interface PrimitiveFieldDef extends BaseFieldDef {
|
|
8
9
|
type: NexxusModelPrimitiveType;
|