@zintrust/core 1.2.0 → 1.5.1
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 +1 -1
- package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/GovernanceScaffolder.js +3 -32
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +2 -38
- package/src/cli/scaffolding/ScaffoldingVersionUtils.d.ts +1 -0
- package/src/cli/scaffolding/ScaffoldingVersionUtils.d.ts.map +1 -1
- package/src/cli/scaffolding/ScaffoldingVersionUtils.js +1 -0
- package/src/config/middleware.d.ts +3 -3
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +9 -9
- package/src/config/security.js +1 -1
- package/src/index.js +3 -3
- package/src/middleware/RateLimiter.d.ts +1 -1
- package/src/middleware/RateLimiter.d.ts.map +1 -1
- package/src/middleware/RateLimiter.js +8 -8
- package/src/orm/Model.d.ts +4 -3
- package/src/orm/Model.d.ts.map +1 -1
- package/src/orm/Model.js +13 -1
- package/src/zintrust.plugins.d.ts +6 -3
- package/src/zintrust.plugins.d.ts.map +1 -1
- package/src/zintrust.plugins.js +6 -3
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GovernanceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/GovernanceScaffolder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"GovernanceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/GovernanceScaffolder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAkSH,eAAO,MAAM,oBAAoB;0BAEhB,MAAM,YACV,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;EA+DpC,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
* - Architecture tests (Vitest)
|
|
7
7
|
*/
|
|
8
8
|
import { FileGenerator } from '../scaffolding/FileGenerator.js';
|
|
9
|
-
import {
|
|
10
|
-
import { VersionChecker } from '../services/VersionChecker.js';
|
|
9
|
+
import { PINNED_GOVERNANCE_SCAFFOLDER_VERSION } from '../scaffolding/ScaffoldingVersionUtils.js';
|
|
11
10
|
import { SpawnUtil } from '../utils/spawn.js';
|
|
12
11
|
import { resolvePackageManager } from '../../common/index.js';
|
|
13
12
|
import { Logger } from '../../config/logger.js';
|
|
@@ -51,41 +50,13 @@ const ensureDevDependency = (devDependencies, name, version) => {
|
|
|
51
50
|
devDependencies[name] = version;
|
|
52
51
|
}
|
|
53
52
|
};
|
|
54
|
-
const getBundledGovernanceVersion = () => {
|
|
55
|
-
try {
|
|
56
|
-
const pkgUrl = new URL('../../../packages/governance/package.json', import.meta.url);
|
|
57
|
-
const raw = FileGenerator.readFile(pkgUrl.toString());
|
|
58
|
-
const parsed = JSON.parse(raw);
|
|
59
|
-
return typeof parsed.version === 'string' && parsed.version.trim() !== ''
|
|
60
|
-
? toCompatibleGovernanceVersion(parsed.version)
|
|
61
|
-
: undefined;
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
53
|
const inferGovernanceVersion = (pkg) => {
|
|
68
54
|
const devDeps = getStringRecord(pkg.devDependencies);
|
|
69
55
|
const existingGovernance = devDeps?.['@zintrust/governance'];
|
|
70
56
|
if (typeof existingGovernance === 'string' && existingGovernance.trim() !== '') {
|
|
71
57
|
return existingGovernance;
|
|
72
58
|
}
|
|
73
|
-
|
|
74
|
-
const core = deps?.['@zintrust/core'];
|
|
75
|
-
const bundledGovernanceVersion = getBundledGovernanceVersion();
|
|
76
|
-
if (typeof core === 'string' && core.trim() !== '') {
|
|
77
|
-
if (bundledGovernanceVersion !== undefined) {
|
|
78
|
-
return bundledGovernanceVersion;
|
|
79
|
-
}
|
|
80
|
-
if (extractMajorMinorVersion(core) !== undefined) {
|
|
81
|
-
return toCompatibleGovernanceVersion(core);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const currentVersion = VersionChecker.getCurrentVersion().trim();
|
|
85
|
-
if (currentVersion !== '' && currentVersion !== '0.0.0') {
|
|
86
|
-
return bundledGovernanceVersion ?? toCompatibleGovernanceVersion(currentVersion);
|
|
87
|
-
}
|
|
88
|
-
return bundledGovernanceVersion ?? '^0.4.0';
|
|
59
|
+
return PINNED_GOVERNANCE_SCAFFOLDER_VERSION;
|
|
89
60
|
};
|
|
90
61
|
const writeEslintConfig = (projectRoot) => {
|
|
91
62
|
const eslintConfigPath = path.join(projectRoot, 'eslint.config.mjs');
|
|
@@ -159,7 +130,7 @@ const extractImportSpecifiers = (source: string, filePath: string): ImportHit[]
|
|
|
159
130
|
const visit = (node: ts.Node) => {
|
|
160
131
|
if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
|
|
161
132
|
const moduleSpecifier = node.moduleSpecifier;
|
|
162
|
-
|
|
133
|
+
// extractMajorMinorVersion,
|
|
163
134
|
addHit(moduleSpecifier.text, moduleSpecifier.getStart(sourceFile));
|
|
164
135
|
}
|
|
165
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AA8iBD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AAwJD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { EnvFileBackfill } from '../env/EnvFileBackfill.js';
|
|
6
6
|
import { EnvData } from '../scaffolding/env.js';
|
|
7
|
-
import {
|
|
7
|
+
import { PINNED_GOVERNANCE_SCAFFOLDER_VERSION } from '../scaffolding/ScaffoldingVersionUtils.js';
|
|
8
8
|
import { Logger } from '../../config/logger.js';
|
|
9
9
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
10
10
|
import { isNonEmptyString } from '../../helper/index.js';
|
|
@@ -13,15 +13,6 @@ import fs from '../../node-singletons/fs.js';
|
|
|
13
13
|
import * as path from '../../node-singletons/path.js';
|
|
14
14
|
import { fileURLToPath } from '../../node-singletons/url.js';
|
|
15
15
|
import { execFileSync } from 'node:child_process';
|
|
16
|
-
const readBundledGovernancePackage = () => {
|
|
17
|
-
try {
|
|
18
|
-
const packageUrl = new URL('../../../packages/governance/package.json', import.meta.url);
|
|
19
|
-
return JSON.parse(fs.readFileSync(packageUrl, 'utf-8'));
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
16
|
const SAFE_PATH = '/usr/local/bin:/usr/bin:/bin';
|
|
26
17
|
const NPM_VIEW_TIMEOUT_MS = 1500;
|
|
27
18
|
const publishedVersionCache = new Map();
|
|
@@ -78,22 +69,6 @@ const loadPublishedNpmVersion = (packageName) => {
|
|
|
78
69
|
return undefined;
|
|
79
70
|
}
|
|
80
71
|
};
|
|
81
|
-
const loadBundledPublishedCoreVersion = () => {
|
|
82
|
-
const bundledGovernancePackage = readBundledGovernancePackage();
|
|
83
|
-
const peerDependencies = bundledGovernancePackage?.peerDependencies;
|
|
84
|
-
if (typeof peerDependencies !== 'object' || peerDependencies === null) {
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
const corePeerRange = peerDependencies['@zintrust/core'];
|
|
88
|
-
if (typeof corePeerRange !== 'string' || corePeerRange.trim() === '') {
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
const publishedLineVersion = extractMajorMinorVersion(corePeerRange);
|
|
92
|
-
if (publishedLineVersion === undefined) {
|
|
93
|
-
return '0.9.2';
|
|
94
|
-
}
|
|
95
|
-
return `${publishedLineVersion.major}.${publishedLineVersion.minor}.2`;
|
|
96
|
-
};
|
|
97
72
|
const toCompatibleCoreDependencyRange = (version) => `^${version}`;
|
|
98
73
|
const loadScaffoldCoreVersion = () => {
|
|
99
74
|
const publishedVersion = loadPublishedNpmVersion('@zintrust/core');
|
|
@@ -102,17 +77,6 @@ const loadScaffoldCoreVersion = () => {
|
|
|
102
77
|
}
|
|
103
78
|
return '*';
|
|
104
79
|
};
|
|
105
|
-
const loadGovernanceVersion = () => {
|
|
106
|
-
const publishedVersion = loadPublishedNpmVersion('@zintrust/governance');
|
|
107
|
-
if (typeof publishedVersion === 'string') {
|
|
108
|
-
return publishedVersion;
|
|
109
|
-
}
|
|
110
|
-
const bundledPublishedCoreVersion = loadBundledPublishedCoreVersion();
|
|
111
|
-
if (typeof bundledPublishedCoreVersion === 'string') {
|
|
112
|
-
return bundledPublishedCoreVersion;
|
|
113
|
-
}
|
|
114
|
-
return '0.9.2';
|
|
115
|
-
};
|
|
116
80
|
const createDirectories = (projectPath, directories) => {
|
|
117
81
|
let count = 0;
|
|
118
82
|
if (!fs.existsSync(projectPath)) {
|
|
@@ -569,7 +533,7 @@ const prepareContext = (state, options) => {
|
|
|
569
533
|
.slice(0, 14);
|
|
570
534
|
state.variables = {
|
|
571
535
|
coreVersion: loadScaffoldCoreVersion(),
|
|
572
|
-
governanceVersion:
|
|
536
|
+
governanceVersion: PINNED_GOVERNANCE_SCAFFOLDER_VERSION,
|
|
573
537
|
projectName: options.name,
|
|
574
538
|
projectSlug: options.name,
|
|
575
539
|
author: options.author ?? 'Your Name',
|
|
@@ -2,5 +2,6 @@ export declare const extractMajorMinorVersion: (value: string) => {
|
|
|
2
2
|
major: string;
|
|
3
3
|
minor: string;
|
|
4
4
|
} | undefined;
|
|
5
|
+
export declare const PINNED_GOVERNANCE_SCAFFOLDER_VERSION = "^1.2.0";
|
|
5
6
|
export declare const toCompatibleGovernanceVersion: (value: string, fallback?: string) => string;
|
|
6
7
|
//# sourceMappingURL=ScaffoldingVersionUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScaffoldingVersionUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ScaffoldingVersionUtils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GACnC,OAAO,MAAM,KACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SA6BrC,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,EAAE,iBAAmB,KAAG,MAKlF,CAAC"}
|
|
1
|
+
{"version":3,"file":"ScaffoldingVersionUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ScaffoldingVersionUtils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GACnC,OAAO,MAAM,KACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SA6BrC,CAAC;AAEF,eAAO,MAAM,oCAAoC,WAAW,CAAC;AAE7D,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,EAAE,iBAAmB,KAAG,MAKlF,CAAC"}
|
|
@@ -26,6 +26,7 @@ export const extractMajorMinorVersion = (value) => {
|
|
|
26
26
|
return undefined;
|
|
27
27
|
return { major, minor };
|
|
28
28
|
};
|
|
29
|
+
export const PINNED_GOVERNANCE_SCAFFOLDER_VERSION = '^1.2.0';
|
|
29
30
|
export const toCompatibleGovernanceVersion = (value, fallback = '^1.0.0') => {
|
|
30
31
|
const parsed = extractMajorMinorVersion(value);
|
|
31
32
|
if (parsed === undefined)
|
|
@@ -32,17 +32,17 @@ export type MiddlewaresType = {
|
|
|
32
32
|
skipPaths: ReadonlyArray<string>;
|
|
33
33
|
fillRateLimit: {
|
|
34
34
|
windowMs: number;
|
|
35
|
-
|
|
35
|
+
maxRequests: number;
|
|
36
36
|
message: string;
|
|
37
37
|
};
|
|
38
38
|
authRateLimit: {
|
|
39
39
|
windowMs: number;
|
|
40
|
-
|
|
40
|
+
maxRequests: number;
|
|
41
41
|
message: string;
|
|
42
42
|
};
|
|
43
43
|
userMutationRateLimit: {
|
|
44
44
|
windowMs: number;
|
|
45
|
-
|
|
45
|
+
maxRequests: number;
|
|
46
46
|
message: string;
|
|
47
47
|
};
|
|
48
48
|
responders?: MiddlewareResponderConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/config/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAUzD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAoC9D,KAAK,iBAAiB,GAAG;IACvB,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,YAAY,EAAE,UAAU,CAAC;IACzB,aAAa,EAAE,UAAU,CAAC;IAC1B,aAAa,EAAE,UAAU,CAAC;IAC1B,qBAAqB,EAAE,UAAU,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,UAAU,CAAC;IAChB,WAAW,EAAE,UAAU,CAAC;IACxB,aAAa,EAAE,UAAU,CAAC;IAC1B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,iBAAiB,EAAE,UAAU,CAAC;IAC9B,kBAAkB,EAAE,UAAU,CAAC;IAC/B,gBAAgB,EAAE,UAAU,CAAC;CAC9B,CAAC;AAEF,KAAK,sBAAsB,GAAG,MAAM,iBAAiB,CAAC;AACtD,KAAK,yBAAyB,GAAG,OAAO,CACtC,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAC3D,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,MAAM,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EAkBuB,CAAC;AAEnD,MAAM,MAAM,mCAAmC,GAAG,aAAa,MAAM,IAAI,MAAM,EAAE,CAAC;AAElF,KAAK,mBAAmB,GAAG,MAAM,OAAO,cAAc,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,mCAAmC,CAAC;AAyBtF,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,aAI9D,CAAC;AAsUF,wBAAgB,sBAAsB,IAAI,oBAAoB,CAoE7D;AAID;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAO,IAE7C,CAAC;AAwBF,eAAO,MAAM,gBAAgB,EAAE,oBAY7B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
package/src/config/middleware.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Env } from './env.js';
|
|
2
|
+
import { securityConfig } from './security.js';
|
|
2
3
|
import { isArray, isObject } from '../helper/index.js';
|
|
3
4
|
import { bodyParsingMiddleware } from '../http/middleware/BodyParsingMiddleware.js';
|
|
4
5
|
import { fileUploadMiddleware } from '../http/middleware/FileUploadMiddleware.js';
|
|
@@ -44,16 +45,16 @@ const parseParameterizedRateLimitKey = (value) => {
|
|
|
44
45
|
const match = /^rateLimit:(\d+):(\d+(?:\.\d+)?)$/.exec(value.trim());
|
|
45
46
|
if (!match)
|
|
46
47
|
return undefined;
|
|
47
|
-
const
|
|
48
|
+
const maxRequests = Number.parseInt(match[1] ?? '', 10);
|
|
48
49
|
const windowMinutes = Number.parseFloat(match[2] ?? '');
|
|
49
|
-
if (!Number.isInteger(
|
|
50
|
+
if (!Number.isInteger(maxRequests) || maxRequests < 1)
|
|
50
51
|
return undefined;
|
|
51
52
|
if (!Number.isFinite(windowMinutes) || windowMinutes <= 0)
|
|
52
53
|
return undefined;
|
|
53
54
|
const windowMs = Math.round(windowMinutes * 60_000);
|
|
54
55
|
if (!Number.isFinite(windowMs) || windowMs < 1)
|
|
55
56
|
return undefined;
|
|
56
|
-
return Object.freeze({
|
|
57
|
+
return Object.freeze({ maxRequests, windowMs });
|
|
57
58
|
};
|
|
58
59
|
export const isKnownMiddlewareName = (value) => {
|
|
59
60
|
return (Object.hasOwn(MiddlewareKeys, value) || parseParameterizedRateLimitKey(value) !== undefined);
|
|
@@ -64,7 +65,7 @@ const Validation = ValidationMiddleware;
|
|
|
64
65
|
const resolveFillRateLimit = (loadMiddlewareConfig) => {
|
|
65
66
|
return {
|
|
66
67
|
windowMs: loadMiddlewareConfig.fillRateLimit?.windowMs ?? 60_000,
|
|
67
|
-
|
|
68
|
+
maxRequests: loadMiddlewareConfig.fillRateLimit?.maxRequests ?? 5,
|
|
68
69
|
message: loadMiddlewareConfig.fillRateLimit?.message ??
|
|
69
70
|
'Too many requests, please try again after 1 minute.',
|
|
70
71
|
};
|
|
@@ -72,7 +73,7 @@ const resolveFillRateLimit = (loadMiddlewareConfig) => {
|
|
|
72
73
|
const resolveAuthRateLimit = (loadMiddlewareConfig) => {
|
|
73
74
|
return {
|
|
74
75
|
windowMs: loadMiddlewareConfig.authRateLimit?.windowMs ?? 60_000,
|
|
75
|
-
|
|
76
|
+
maxRequests: loadMiddlewareConfig.authRateLimit?.maxRequests ?? 10,
|
|
76
77
|
message: loadMiddlewareConfig.authRateLimit?.message ??
|
|
77
78
|
'Too many login attempts, please try again after 1 minute.',
|
|
78
79
|
};
|
|
@@ -80,7 +81,7 @@ const resolveAuthRateLimit = (loadMiddlewareConfig) => {
|
|
|
80
81
|
const resolveUserMutationRateLimit = (loadMiddlewareConfig) => {
|
|
81
82
|
return {
|
|
82
83
|
windowMs: loadMiddlewareConfig.userMutationRateLimit?.windowMs ?? 60_000,
|
|
83
|
-
|
|
84
|
+
maxRequests: loadMiddlewareConfig.userMutationRateLimit?.maxRequests ?? 20,
|
|
84
85
|
message: loadMiddlewareConfig.userMutationRateLimit?.message ??
|
|
85
86
|
'Too many user requests, please try again after 1 minute.',
|
|
86
87
|
};
|
|
@@ -100,9 +101,8 @@ function createRateLimitMiddlewares(loadMiddlewareConfig, responders) {
|
|
|
100
101
|
});
|
|
101
102
|
return Object.freeze({
|
|
102
103
|
rateLimit: RateLimiter.create({
|
|
103
|
-
windowMs: 60_000,
|
|
104
|
-
max: 100,
|
|
105
104
|
onFailure: responders.rateLimit,
|
|
105
|
+
...securityConfig.rateLimit,
|
|
106
106
|
}),
|
|
107
107
|
fillRateLimit,
|
|
108
108
|
authRateLimit,
|
|
@@ -246,7 +246,7 @@ const createRouteMiddlewareRegistry = (resolvedShared, projectRoute, responders)
|
|
|
246
246
|
if (parsed === undefined)
|
|
247
247
|
return undefined;
|
|
248
248
|
const middleware = RateLimiter.create({
|
|
249
|
-
|
|
249
|
+
maxRequests: parsed.maxRequests,
|
|
250
250
|
windowMs: parsed.windowMs,
|
|
251
251
|
onFailure: responders.rateLimit,
|
|
252
252
|
});
|
package/src/config/security.js
CHANGED
|
@@ -106,7 +106,7 @@ const securityConfigObj = {
|
|
|
106
106
|
*/
|
|
107
107
|
rateLimit: {
|
|
108
108
|
enabled: Env.getBool('RATE_LIMIT_ENABLED', true),
|
|
109
|
-
windowMs: Env.getInt('RATE_LIMIT_WINDOW_MS',
|
|
109
|
+
windowMs: Env.getInt('RATE_LIMIT_WINDOW_MS', 60_000), // 1 minute
|
|
110
110
|
maxRequests: Env.getInt('RATE_LIMIT_MAX_REQUESTS', 100),
|
|
111
111
|
message: Env.get('RATE_LIMIT_MESSAGE', 'Too many requests, please try again later'),
|
|
112
112
|
},
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v1.
|
|
2
|
+
* @zintrust/core v1.5.1
|
|
3
3
|
*
|
|
4
4
|
* ZinTrust Framework - Production-Grade TypeScript Backend
|
|
5
5
|
* Built for performance, type safety, and exceptional developer experience
|
|
6
6
|
*
|
|
7
7
|
* Build Information:
|
|
8
|
-
* Built: 2026-04-
|
|
8
|
+
* Built: 2026-04-25T12:00:36.312Z
|
|
9
9
|
* Node: >=20.0.0
|
|
10
10
|
* License: MIT
|
|
11
11
|
*
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Available at runtime for debugging and health checks
|
|
22
22
|
*/
|
|
23
23
|
export const ZINTRUST_VERSION = '0.1.41';
|
|
24
|
-
export const ZINTRUST_BUILD_DATE = '2026-04-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-04-25T12:00:36.276Z'; // Replaced during build
|
|
25
25
|
export { Application } from './boot/Application.js';
|
|
26
26
|
export { AwsSigV4 } from './common/index.js';
|
|
27
27
|
export { SignedRequest } from './security/SignedRequest.js';
|
|
@@ -8,7 +8,7 @@ import { type MiddlewareFailureResponder } from './MiddlewareFailureResponder';
|
|
|
8
8
|
import type { Middleware } from './MiddlewareStack';
|
|
9
9
|
export interface RateLimitOptions {
|
|
10
10
|
windowMs: number;
|
|
11
|
-
|
|
11
|
+
maxRequests: number;
|
|
12
12
|
message?: string;
|
|
13
13
|
statusCode?: number;
|
|
14
14
|
headers?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/middleware/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/middleware/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,CAAC;IAEzC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAqKlE,eAAO,MAAM,WAAW;IACtB;;;OAGG;uBACgB;QAAE,KAAK,CAAC,EAAE,kBAAkB,CAAA;KAAE,GAAG,IAAI;IAKxD;;;;OAIG;iBACgB,MAAM,eAAe,MAAM,gBAAgB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYvF;;OAEG;yBACwB,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE;;;OAGG;cACa,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxC;;OAEG;eACc,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;qBACa,gBAAgB,GAAqB,UAAU;EAyF/D,CAAC"}
|
|
@@ -100,7 +100,7 @@ const consume = async (params) => {
|
|
|
100
100
|
return {
|
|
101
101
|
count: nextCount,
|
|
102
102
|
resetTime: nextState.resetTime,
|
|
103
|
-
allowed: nextCount <= params.
|
|
103
|
+
allowed: nextCount <= params.maxRequests,
|
|
104
104
|
};
|
|
105
105
|
};
|
|
106
106
|
const resolveRemoteAddress = (candidate) => {
|
|
@@ -124,7 +124,7 @@ const resolveRemoteAddressFromRaw = (raw) => {
|
|
|
124
124
|
};
|
|
125
125
|
const DEFAULT_OPTIONS = {
|
|
126
126
|
windowMs: 60 * 1000, // 1 minute
|
|
127
|
-
|
|
127
|
+
maxRequests: 100, // 100 requests per minute
|
|
128
128
|
message: 'Too many requests, please try again later.',
|
|
129
129
|
statusCode: 429,
|
|
130
130
|
headers: true,
|
|
@@ -158,7 +158,7 @@ export const RateLimiter = Object.freeze({
|
|
|
158
158
|
const out = await consume({
|
|
159
159
|
store: serviceStore,
|
|
160
160
|
key: namespacedKey,
|
|
161
|
-
|
|
161
|
+
maxRequests: maxAttempts,
|
|
162
162
|
windowMs,
|
|
163
163
|
});
|
|
164
164
|
return out.allowed;
|
|
@@ -237,26 +237,26 @@ export const RateLimiter = Object.freeze({
|
|
|
237
237
|
}
|
|
238
238
|
else {
|
|
239
239
|
// Include limiter config to avoid collisions between different middleware instances.
|
|
240
|
-
const middlewareKey = prefixKey('middleware', `${config.
|
|
240
|
+
const middlewareKey = prefixKey('middleware', `${config.maxRequests}:${config.windowMs}:${key}`);
|
|
241
241
|
const out = await consume({
|
|
242
242
|
store,
|
|
243
243
|
key: middlewareKey,
|
|
244
|
-
|
|
244
|
+
maxRequests: config.maxRequests,
|
|
245
245
|
windowMs: config.windowMs,
|
|
246
246
|
});
|
|
247
247
|
count = out.count;
|
|
248
248
|
resetAt = out.resetTime;
|
|
249
249
|
}
|
|
250
|
-
const remaining = Math.max(0, config.
|
|
250
|
+
const remaining = Math.max(0, config.maxRequests - count);
|
|
251
251
|
const resetTime = Math.ceil((resetAt - now) / 1000);
|
|
252
252
|
// Set headers
|
|
253
253
|
if (config.headers ?? false) {
|
|
254
|
-
res.setHeader('X-RateLimit-Limit', config.
|
|
254
|
+
res.setHeader('X-RateLimit-Limit', config.maxRequests.toString());
|
|
255
255
|
res.setHeader('X-RateLimit-Remaining', remaining.toString());
|
|
256
256
|
res.setHeader('X-RateLimit-Reset', resetTime.toString());
|
|
257
257
|
}
|
|
258
258
|
// Check limit
|
|
259
|
-
if (count > config.
|
|
259
|
+
if (count > config.maxRequests) {
|
|
260
260
|
Logger.warn(`Rate limit exceeded for IP: ${key}`);
|
|
261
261
|
const resolvedMessage = config.message ?? 'Too many requests';
|
|
262
262
|
await respondWithMiddlewareFailure(req, res, config.onFailure, {
|
package/src/orm/Model.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export interface ModelStatic {
|
|
|
38
38
|
query(): IQueryBuilder;
|
|
39
39
|
getTable?(): string;
|
|
40
40
|
name?: string;
|
|
41
|
-
hydrate?(attributes: Record<string, unknown>): IModel;
|
|
41
|
+
hydrate?(attributes: Record<string, unknown> | IModel): IModel;
|
|
42
42
|
}
|
|
43
43
|
export interface IModel {
|
|
44
44
|
fill(attributes: Record<string, unknown>): IModel;
|
|
@@ -95,7 +95,7 @@ export type DefinedModel<T extends BoundModelMethods> = {
|
|
|
95
95
|
create: (attributes?: Record<string, unknown> | undefined) => Promise<IModel & T>;
|
|
96
96
|
make: (attributes?: Record<string, unknown> | undefined) => IModel & T;
|
|
97
97
|
new: (attributes?: Record<string, unknown> | undefined) => IModel & T;
|
|
98
|
-
hydrate: (attributes: Record<string, unknown>) => IModel & T;
|
|
98
|
+
hydrate: (attributes: Record<string, unknown> | (IModel & T)) => IModel & T;
|
|
99
99
|
hydrateWithRelations(attributes: Record<string, unknown>, related: Record<string, unknown>): IModel & T;
|
|
100
100
|
find: (id: unknown) => Promise<(IModel & T) | null>;
|
|
101
101
|
all: () => Promise<Array<IModel & T>>;
|
|
@@ -126,7 +126,8 @@ export type DefinedModel<T extends BoundModelMethods> = {
|
|
|
126
126
|
/**
|
|
127
127
|
* Define a new model type
|
|
128
128
|
*/
|
|
129
|
-
export declare function define
|
|
129
|
+
export declare function define(config: ModelConfig): DefinedModel<BoundModelMethods>;
|
|
130
|
+
export declare function define<const T extends UnboundModelMethods>(config: ModelConfig, methods: T): DefinedModel<BoundFromUnbound<T>>;
|
|
130
131
|
export declare function define<const T extends BoundModelMethods>(config: ModelConfig, plan: (model: IModel) => T): DefinedModel<T>;
|
|
131
132
|
/**
|
|
132
133
|
* Model namespace - sealed namespace object grouping all model operations
|
package/src/orm/Model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/orm/Model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,iBAAiB,EAElB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAqBxD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC,CAAC;IACvF,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,aAAa,CAAC;IACvB,QAAQ,CAAC,IAAI,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/orm/Model.ts"],"names":[],"mappings":"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"}
|
package/src/orm/Model.js
CHANGED
|
@@ -6,7 +6,7 @@ import { generateUuid } from '../common/utility.js';
|
|
|
6
6
|
import { DEFAULTS } from '../config/constants.js';
|
|
7
7
|
import { Logger } from '../config/logger.js';
|
|
8
8
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
9
|
-
import { isMissingLike, isWhitespaceOnly } from '../helper/index.js';
|
|
9
|
+
import { isFunction, isMissingLike, isObject, isWhitespaceOnly } from '../helper/index.js';
|
|
10
10
|
import { useDatabase } from './Database.js';
|
|
11
11
|
import { QueryBuilder } from './QueryBuilder.js';
|
|
12
12
|
import { RelationBootstrapDiagnostics, } from './RelationBootstrapDiagnostics.js';
|
|
@@ -17,6 +17,15 @@ const getRelatedTableName = (relatedModel) => {
|
|
|
17
17
|
}
|
|
18
18
|
throw ErrorFactory.createConfigError('Related model does not provide a table name');
|
|
19
19
|
};
|
|
20
|
+
const isHydratedModelInstance = (value) => {
|
|
21
|
+
if (!isObject(value))
|
|
22
|
+
return false;
|
|
23
|
+
return (isFunction(value['getAttribute']) &&
|
|
24
|
+
isFunction(value['setAttribute']) &&
|
|
25
|
+
isFunction(value['getAttributes']) &&
|
|
26
|
+
isFunction(value['save']) &&
|
|
27
|
+
isFunction(value['exists']));
|
|
28
|
+
};
|
|
20
29
|
/**
|
|
21
30
|
* Cast attribute value based on config
|
|
22
31
|
*/
|
|
@@ -490,6 +499,9 @@ const createModelBuilder = (cfg) => {
|
|
|
490
499
|
};
|
|
491
500
|
const createHydrator = (cfg, attach) => {
|
|
492
501
|
return (attributes) => {
|
|
502
|
+
if (isHydratedModelInstance(attributes)) {
|
|
503
|
+
return attributes;
|
|
504
|
+
}
|
|
493
505
|
const model = createModel(cfg, attributes, { hydrate: true, exists: true });
|
|
494
506
|
return attach(model);
|
|
495
507
|
};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* ZinTrust plugin auto-imports
|
|
3
|
+
*
|
|
4
|
+
* In real projects, this file is managed by `zin plugin install` and contains
|
|
5
|
+
* side-effect imports (e.g. `@zintrust/db-sqlite/register`) that register
|
|
6
|
+
* optional adapters/drivers into core registries.
|
|
7
|
+
*
|
|
5
8
|
*/
|
|
6
9
|
export type {};
|
|
7
10
|
export declare const __zintrustGeneratedPluginStub = "zintrust.plugins.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zintrust.plugins.d.ts","sourceRoot":"","sources":["../../src/zintrust.plugins.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"zintrust.plugins.d.ts","sourceRoot":"","sources":["../../src/zintrust.plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,YAAY,EAAE,CAAC;AAgBf,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;;AACnE,wBAAkB"}
|
package/src/zintrust.plugins.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* ZinTrust plugin auto-imports
|
|
3
|
+
*
|
|
4
|
+
* In real projects, this file is managed by `zin plugin install` and contains
|
|
5
|
+
* side-effect imports (e.g. `@zintrust/db-sqlite/register`) that register
|
|
6
|
+
* optional adapters/drivers into core registries.
|
|
7
|
+
*
|
|
5
8
|
*/
|
|
6
9
|
import * as TraceRuntime from './runtime/plugins/trace-runtime.js';
|
|
7
10
|
globalThis.__zintrust_system_trace_plugin_requested__ = true;
|