@zintrust/core 0.4.55 → 0.4.56
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/README.md +2 -0
- package/package.json +3 -1
- package/src/boot/registry/registerRoute.d.ts.map +1 -1
- package/src/boot/registry/registerRoute.js +8 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +5 -0
- package/src/cli/scaffolding/GovernanceScaffolder.js +1 -1
- package/src/cli/utils/EnvFileLoader.d.ts +1 -0
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +2 -1
- package/src/index.js +3 -3
- package/src/start.d.ts +9 -4
- package/src/start.d.ts.map +1 -1
- package/src/start.js +51 -8
- package/src/templates/project/basic/eslint.config.mjs.tpl +5 -0
- package/src/templates/project/basic/package.json.tpl +4 -2
package/README.md
CHANGED
|
@@ -21,6 +21,8 @@ zin start
|
|
|
21
21
|
|
|
22
22
|
Your API is now running at `http://localhost:7777`
|
|
23
23
|
|
|
24
|
+
Fresh projects also include a default flat ESLint setup through `@zintrust/governance/eslint`, so `npm run lint` works immediately after scaffolding.
|
|
25
|
+
|
|
24
26
|
If you’re targeting a different runtime:
|
|
25
27
|
|
|
26
28
|
- Cloudflare Workers (Wrangler): `zin start --wg`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.56",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -57,6 +57,8 @@
|
|
|
57
57
|
"./package.json": "./package.json"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
+
"@cloudflare/containers": "^0.2.0",
|
|
61
|
+
"@zintrust/workers": "0.4.50",
|
|
60
62
|
"bcryptjs": "^3.0.3",
|
|
61
63
|
"bullmq": "^5.71.1",
|
|
62
64
|
"chalk": "^5.6.2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerRoute.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/registerRoute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAc3D,eAAO,MAAM,kBAAkB,QAAO,OAKrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAMpF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAOrF,CAAC;
|
|
1
|
+
{"version":3,"file":"registerRoute.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/registerRoute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAc3D,eAAO,MAAM,kBAAkB,QAAO,OAKrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAMpF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAOrF,CAAC;AAoMF,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,MAAM,EACxB,QAAQ,OAAO,KACd,OAAO,CAAC,IAAI,CAqBd,CAAC"}
|
|
@@ -86,6 +86,13 @@ const resolveServicePrefix = (entry) => {
|
|
|
86
86
|
}
|
|
87
87
|
return `/${entry.domain}/${entry.name}`;
|
|
88
88
|
};
|
|
89
|
+
const shouldPreferRootEnvInMonolith = () => {
|
|
90
|
+
if (typeof process === 'undefined' || process.env === undefined)
|
|
91
|
+
return false;
|
|
92
|
+
const raw = process.env['RUN_AS_MONOLITH'] ?? '';
|
|
93
|
+
const normalized = raw.trim().toLowerCase();
|
|
94
|
+
return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
|
|
95
|
+
};
|
|
89
96
|
const ensureManifestServiceEnvLoaded = async (entry) => {
|
|
90
97
|
if (isCloudflare)
|
|
91
98
|
return;
|
|
@@ -98,6 +105,7 @@ const ensureManifestServiceEnvLoaded = async (entry) => {
|
|
|
98
105
|
cwd: projectRoot,
|
|
99
106
|
includeCwd: true,
|
|
100
107
|
envPaths: [envPath],
|
|
108
|
+
envPathsOverrideExisting: !shouldPreferRootEnvInMonolith(),
|
|
101
109
|
});
|
|
102
110
|
};
|
|
103
111
|
const shouldRegisterManifestEntry = (entry, activeService) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsgCvF,eAAO,MAAM,YAAY;cACb,YAAY;;mCA18BU,MAAM,KAAG,OAAO;4CAaP,MAAM,KAAG,MAAM;4CA4Bf,MAAM,KAAG,OAAO;sCAetB,MAAM,WAAW,MAAM,KAAG,OAAO;oCAmBnC,MAAM,KAAG,OAAO;;EA06BjD,CAAC"}
|
|
@@ -337,6 +337,10 @@ const buildStartEnv = (projectRoot) => ({
|
|
|
337
337
|
...process.env,
|
|
338
338
|
ZINTRUST_PROJECT_ROOT: projectRoot,
|
|
339
339
|
});
|
|
340
|
+
const shouldPreferRootEnvInMonolith = () => {
|
|
341
|
+
const raw = readEnvString('RUN_AS_MONOLITH').trim().toLowerCase();
|
|
342
|
+
return raw === '1' || raw === 'true' || raw === 'yes' || raw === 'on';
|
|
343
|
+
};
|
|
340
344
|
const resolveManifestServiceEnvDir = (projectRoot, entry) => {
|
|
341
345
|
const configRoot = entry.configRoot;
|
|
342
346
|
if (isNonEmptyString(configRoot)) {
|
|
@@ -375,6 +379,7 @@ const preloadManifestServiceEnv = async (context, options) => {
|
|
|
375
379
|
cwd: context.projectRoot,
|
|
376
380
|
includeCwd: resolveRootEnvPreference(options),
|
|
377
381
|
envPaths,
|
|
382
|
+
envPathsOverrideExisting: !shouldPreferRootEnvInMonolith(),
|
|
378
383
|
});
|
|
379
384
|
};
|
|
380
385
|
const isFrameworkRepo = (packageJson) => packageJson.name === '@zintrust/core';
|
|
@@ -65,7 +65,7 @@ const inferGovernanceVersion = (pkg) => {
|
|
|
65
65
|
};
|
|
66
66
|
const writeEslintConfig = (projectRoot) => {
|
|
67
67
|
const eslintConfigPath = path.join(projectRoot, 'eslint.config.mjs');
|
|
68
|
-
const content = `import { zintrustAppEslintConfig } from '@zintrust/governance';
|
|
68
|
+
const content = `import { zintrustAppEslintConfig } from '@zintrust/governance/eslint';
|
|
69
69
|
|
|
70
70
|
export default zintrustAppEslintConfig({
|
|
71
71
|
tsconfigRootDir: import.meta.dirname,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AASA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AA8IzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAaF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AASA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AA8IzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAaF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAyMF,eAAO,MAAM,aAAa;qBAjDH,WAAW,KAAQ,SAAS;6BAapB,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,KAAQ,SAAS;mCAG/C,YAAY,KAAG,IAAI;oBA+BpC,SAAS;EAO5B,CAAC"}
|
|
@@ -207,6 +207,7 @@ const createLoadPlan = (options) => {
|
|
|
207
207
|
const extraCwds = normalizeCwdList(options.extraCwds);
|
|
208
208
|
const envPaths = normalizeEnvPathList(options.envPaths);
|
|
209
209
|
const overrideExisting = options.overrideExisting ?? true;
|
|
210
|
+
const envPathsOverrideExisting = options.envPathsOverrideExisting ?? true;
|
|
210
211
|
const sources = [];
|
|
211
212
|
if (includeCwd) {
|
|
212
213
|
sources.push({
|
|
@@ -230,7 +231,7 @@ const createLoadPlan = (options) => {
|
|
|
230
231
|
key: `${looksLikeFile ? 'file' : 'cwd'}:${envPath}`,
|
|
231
232
|
path: envPath,
|
|
232
233
|
kind: looksLikeFile ? 'file' : 'cwd',
|
|
233
|
-
overrideExisting:
|
|
234
|
+
overrideExisting: envPathsOverrideExisting,
|
|
234
235
|
});
|
|
235
236
|
}
|
|
236
237
|
return sources.filter((source, index, items) => items.findIndex((item) => item.key === source.key) === index);
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v0.4.
|
|
2
|
+
* @zintrust/core v0.4.56
|
|
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-04T16:43:22.388Z
|
|
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-04T16:43:22.354Z'; // 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';
|
package/src/start.d.ts
CHANGED
|
@@ -8,17 +8,22 @@ export declare const bootStandaloneService: (importMetaUrl: string, activeServic
|
|
|
8
8
|
* This uses a non-literal dynamic import so Worker bundlers don't pull Node-only modules.
|
|
9
9
|
*/
|
|
10
10
|
export declare const start: () => Promise<void>;
|
|
11
|
+
declare const cloudflareWorker: Readonly<{
|
|
12
|
+
fetch: (request: Request, env: unknown, ctx: unknown) => Promise<Response>;
|
|
13
|
+
}>;
|
|
14
|
+
declare const deno: (request: Request) => Promise<Response>;
|
|
15
|
+
declare const handler: (event: unknown, context: unknown) => Promise<unknown>;
|
|
11
16
|
/**
|
|
12
17
|
* Cloudflare Workers entry (module worker style).
|
|
13
18
|
*/
|
|
14
|
-
export
|
|
15
|
-
export {
|
|
19
|
+
export default cloudflareWorker;
|
|
20
|
+
export { cloudflareWorker };
|
|
16
21
|
/**
|
|
17
22
|
* Deno fetch handler.
|
|
18
23
|
*/
|
|
19
|
-
export {
|
|
24
|
+
export { deno };
|
|
20
25
|
/**
|
|
21
26
|
* AWS Lambda handler.
|
|
22
27
|
*/
|
|
23
|
-
export { handler }
|
|
28
|
+
export { handler };
|
|
24
29
|
//# sourceMappingURL=start.d.ts.map
|
package/src/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,gCAAgC,CAAC;AAqExC,eAAO,MAAM,UAAU,GAAI,eAAe,MAAM,KAAG,OAYlD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,eAAe,OAAO,KAAG,oBAOnE,CAAC;AAoEF,eAAO,MAAM,qBAAqB,GAChC,eAAe,MAAM,EACrB,eAAe,OAAO,KACrB,OAAO,CAAC,oBAAoB,CAS9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAW1C,CAAC;AAiBF,QAAA,MAAM,gBAAgB;qBAfkB,OAAO,OAAO,OAAO,OAAO,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC;EAiB7F,CAAC;AAEH,QAAA,MAAM,IAAI,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAKtD,CAAC;AAEF,QAAA,MAAM,OAAO,GAAU,OAAO,OAAO,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CAKxE,CAAC;AAEF;;GAEG;AACH,eAAe,gBAAgB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/src/start.js
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
|
-
import { ErrorFactory } from './exceptions/ZintrustError.js';
|
|
2
1
|
import { isArray, isNonEmptyString, isObject } from './helper/index.js';
|
|
3
2
|
import { ZintrustLang } from './lang/lang.js';
|
|
4
3
|
import { normalizeActiveServiceRuntime, } from './microservices/ServiceManifest.js';
|
|
5
4
|
import { ensureNodeStartupEnvLoaded } from './runtime/NodeStartup.js';
|
|
6
|
-
import { ProjectRuntime } from './runtime/ProjectRuntime.js';
|
|
7
5
|
import { resolveNodeProjectRoot } from './runtime/resolveNodeProjectRoot.js';
|
|
8
6
|
import { isNodeRuntime } from './runtime/detectRuntime.js';
|
|
7
|
+
const getProjectRuntimeGlobal = () => globalThis;
|
|
8
|
+
const getCachedProjectRuntime = () => {
|
|
9
|
+
return getProjectRuntimeGlobal().__zintrustProjectRuntime;
|
|
10
|
+
};
|
|
11
|
+
const setCachedProjectRuntime = (value) => {
|
|
12
|
+
const current = getCachedProjectRuntime();
|
|
13
|
+
const next = Object.freeze({
|
|
14
|
+
...(current?.serviceManifest === undefined ? {} : { serviceManifest: current.serviceManifest }),
|
|
15
|
+
...(current?.activeService === undefined ? {} : { activeService: current.activeService }),
|
|
16
|
+
...(value.serviceManifest === undefined ? {} : { serviceManifest: value.serviceManifest }),
|
|
17
|
+
...(value.activeService === undefined ? {} : { activeService: value.activeService }),
|
|
18
|
+
});
|
|
19
|
+
getProjectRuntimeGlobal().__zintrustProjectRuntime = next;
|
|
20
|
+
return next;
|
|
21
|
+
};
|
|
22
|
+
const createValidationError = (message) => {
|
|
23
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
24
|
+
const error = new Error(message);
|
|
25
|
+
error.name = 'ValidationError';
|
|
26
|
+
error.statusCode = 400;
|
|
27
|
+
error.code = 'VALIDATION_ERROR';
|
|
28
|
+
return error;
|
|
29
|
+
};
|
|
30
|
+
const loadCloudflareWorker = async () => {
|
|
31
|
+
return (await import('./functions/cloudflare.js'));
|
|
32
|
+
};
|
|
9
33
|
const isAbsolutePath = (value) => value.startsWith('/') || /^[A-Za-z]:[\\/]/.test(value);
|
|
10
34
|
const fileUrlToPathLike = (value) => {
|
|
11
35
|
if (!value.startsWith(ZintrustLang.FILE_PROTOCOL))
|
|
@@ -34,9 +58,9 @@ export const isNodeMain = (importMetaUrl) => {
|
|
|
34
58
|
export const configureStandaloneService = (activeService) => {
|
|
35
59
|
const normalized = normalizeActiveServiceRuntime(activeService);
|
|
36
60
|
if (normalized === undefined) {
|
|
37
|
-
throw
|
|
61
|
+
throw createValidationError('Standalone service runtime requires at least domain and name.');
|
|
38
62
|
}
|
|
39
|
-
return
|
|
63
|
+
return setCachedProjectRuntime({ activeService: normalized }).activeService ?? normalized;
|
|
40
64
|
};
|
|
41
65
|
const normalizeStandaloneEnvPaths = (value) => {
|
|
42
66
|
if (isNonEmptyString(value)) {
|
|
@@ -104,16 +128,35 @@ export const start = async () => {
|
|
|
104
128
|
const projectBootstrapModule = (await import('./runtime/ProjectBootstrap.js'));
|
|
105
129
|
await projectBootstrapModule.loadProjectBootstrap();
|
|
106
130
|
};
|
|
131
|
+
const cloudflareFetch = async (request, env, ctx) => {
|
|
132
|
+
const worker = await loadCloudflareWorker();
|
|
133
|
+
if (typeof worker.fetch === 'function') {
|
|
134
|
+
return worker.fetch(request, env, ctx);
|
|
135
|
+
}
|
|
136
|
+
const callable = worker;
|
|
137
|
+
return callable(request, env, ctx);
|
|
138
|
+
};
|
|
139
|
+
const cloudflareWorker = Object.freeze({
|
|
140
|
+
fetch: cloudflareFetch,
|
|
141
|
+
});
|
|
142
|
+
const deno = async (request) => {
|
|
143
|
+
const module = (await import('./functions/deno.js'));
|
|
144
|
+
return module.default(request);
|
|
145
|
+
};
|
|
146
|
+
const handler = async (event, context) => {
|
|
147
|
+
const module = (await import('./functions/lambda.js'));
|
|
148
|
+
return module.handler(event, context);
|
|
149
|
+
};
|
|
107
150
|
/**
|
|
108
151
|
* Cloudflare Workers entry (module worker style).
|
|
109
152
|
*/
|
|
110
|
-
export
|
|
111
|
-
export {
|
|
153
|
+
export default cloudflareWorker;
|
|
154
|
+
export { cloudflareWorker };
|
|
112
155
|
/**
|
|
113
156
|
* Deno fetch handler.
|
|
114
157
|
*/
|
|
115
|
-
export {
|
|
158
|
+
export { deno };
|
|
116
159
|
/**
|
|
117
160
|
* AWS Lambda handler.
|
|
118
161
|
*/
|
|
119
|
-
export { handler }
|
|
162
|
+
export { handler };
|
|
@@ -6,17 +6,19 @@
|
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "zin s",
|
|
8
8
|
"build": "tsc && tsc-alias",
|
|
9
|
+
"lint": "eslint .",
|
|
9
10
|
"start": "zin s --mode production --no-watch",
|
|
10
11
|
"test": "vitest run",
|
|
11
12
|
"type-check": "tsc --noEmit"
|
|
12
13
|
},
|
|
13
14
|
"dependencies": {
|
|
14
15
|
"@zintrust/core": "^{{coreVersion}}",
|
|
15
|
-
"@zintrust/d1-migrator": "^0.4.6"
|
|
16
|
-
"@zintrust/governance": "{{governanceVersion}}"
|
|
16
|
+
"@zintrust/d1-migrator": "^0.4.6"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
+
"@zintrust/governance": "{{governanceVersion}}",
|
|
19
20
|
"@types/node": "^25.0.3",
|
|
21
|
+
"eslint": "^10.0.0",
|
|
20
22
|
"tsx": "^4.21.0",
|
|
21
23
|
"tsc-alias": "^1.8.16",
|
|
22
24
|
"typescript": "^5.9.3",
|