noodleseed-cli 0.1.5 → 0.1.7
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/cli.d.ts.map +1 -1
- package/dist/cli.js +285 -14
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/control-plane.js +1 -1
- package/dist/control-plane.js.map +1 -1
- package/dist/deploy.d.ts +0 -11
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +0 -31
- package/dist/deploy.js.map +1 -1
- package/dist/dev.d.ts +0 -3
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +6 -6
- package/dist/dev.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/local-config.d.ts +38 -0
- package/dist/local-config.d.ts.map +1 -0
- package/dist/local-config.js +197 -0
- package/dist/local-config.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +2 -2
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js +2 -2
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +2 -3
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts +5 -6
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js +5 -6
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/execute.js +11 -5
- package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts +6 -3
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +185 -114
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +15 -3
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +144 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +59 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +107 -0
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/package.json +1 -1
package/dist/deploy.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ export interface DeployOptions {
|
|
|
3
3
|
readonly manifestPath: string;
|
|
4
4
|
/** Optional declarative connector-catalog file, so deployed tools can call APIs. */
|
|
5
5
|
readonly connectorsPath?: string;
|
|
6
|
-
/** Optional local JSON file of `name -> value` secrets (keep it out of the repo). */
|
|
7
|
-
readonly secretsPath?: string;
|
|
8
6
|
readonly serviceUrl?: string;
|
|
9
7
|
/** Control-plane bearer token for hosted management endpoints (`Authorization: Bearer <token>`). */
|
|
10
8
|
readonly authToken?: string;
|
|
@@ -18,8 +16,6 @@ export interface DeployOptions {
|
|
|
18
16
|
readonly accessMode?: AccessMode;
|
|
19
17
|
/** Injectable for tests; defaults to the global `fetch`. */
|
|
20
18
|
readonly fetchImpl?: typeof fetch;
|
|
21
|
-
/** Injectable for tests; defaults to `process.env`. Source of `NOODLE_SECRET_<NAME>` values. */
|
|
22
|
-
readonly secretsEnv?: NodeJS.ProcessEnv;
|
|
23
19
|
}
|
|
24
20
|
export type DeployOutcome = {
|
|
25
21
|
readonly ok: true;
|
|
@@ -40,13 +36,6 @@ export type DeployOutcome = {
|
|
|
40
36
|
*/
|
|
41
37
|
export declare function deploy(options: DeployOptions): Promise<DeployOutcome>;
|
|
42
38
|
export type AccessMode = 'caller-key' | 'owner-only' | 'org-members';
|
|
43
|
-
/**
|
|
44
|
-
* Collect deploy-time secret *values* from a local `--secrets` JSON file and/or `NOODLE_SECRET_<NAME>`
|
|
45
|
-
* environment variables, with env overriding the file. Returns `undefined` when nothing is supplied, so
|
|
46
|
-
* the deploy body omits `secrets` entirely. Secret values never touch the catalog or manifest — they ride
|
|
47
|
-
* this side channel only. Throws on a malformed file (caught by `deploy` and surfaced without any value).
|
|
48
|
-
*/
|
|
49
|
-
export declare function loadSecrets(secretsPath: string | undefined, env: NodeJS.ProcessEnv): Record<string, string> | undefined;
|
|
50
39
|
/**
|
|
51
40
|
* Read a deploy input into `{ manifest, connectors? }`. A `.yaml`/`.json` manifest is taken verbatim; an
|
|
52
41
|
* authored `.ts`/`.js` server is loaded and emits both its manifest and (if it has `.compute()` operations)
|
package/dist/deploy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEN;;;GAGG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA4E3E;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAerE;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUpD"}
|
package/dist/deploy.js
CHANGED
|
@@ -4,7 +4,6 @@ import { basename, dirname, extname, join, resolve } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
5
|
import ts from 'typescript';
|
|
6
6
|
export const DEFAULT_SERVICE_URL = 'http://127.0.0.1:8787';
|
|
7
|
-
const SECRET_ENV_PREFIX = 'NOODLE_SECRET_';
|
|
8
7
|
/**
|
|
9
8
|
* Read a manifest file and POST it to a deploy service. Returns the deployed server's id + endpoint URL,
|
|
10
9
|
* or a structured failure (unreachable service, or a `4xx` with compile errors).
|
|
@@ -17,7 +16,6 @@ export async function deploy(options) {
|
|
|
17
16
|
const doFetch = options.fetchImpl ?? fetch;
|
|
18
17
|
let manifest;
|
|
19
18
|
let connectors;
|
|
20
|
-
let secrets;
|
|
21
19
|
try {
|
|
22
20
|
const input = await readDeployInput(options.manifestPath);
|
|
23
21
|
manifest = input.manifest;
|
|
@@ -28,7 +26,6 @@ export async function deploy(options) {
|
|
|
28
26
|
else if (input.connectors !== undefined) {
|
|
29
27
|
connectors = input.connectors;
|
|
30
28
|
}
|
|
31
|
-
secrets = loadSecrets(options.secretsPath, options.secretsEnv ?? process.env);
|
|
32
29
|
}
|
|
33
30
|
catch (error) {
|
|
34
31
|
return { ok: false, status: 0, message: `cannot read input file: ${error.message}` };
|
|
@@ -44,7 +41,6 @@ export async function deploy(options) {
|
|
|
44
41
|
body: JSON.stringify({
|
|
45
42
|
manifest,
|
|
46
43
|
...(connectors !== undefined ? { connectors } : {}),
|
|
47
|
-
...(secrets !== undefined ? { secrets } : {}),
|
|
48
44
|
...(options.accessMode ? { accessMode: options.accessMode } : {}),
|
|
49
45
|
}),
|
|
50
46
|
});
|
|
@@ -90,33 +86,6 @@ function slug(value) {
|
|
|
90
86
|
.replace(/^-+|-+$/g, '') || 'app';
|
|
91
87
|
return out;
|
|
92
88
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Collect deploy-time secret *values* from a local `--secrets` JSON file and/or `NOODLE_SECRET_<NAME>`
|
|
95
|
-
* environment variables, with env overriding the file. Returns `undefined` when nothing is supplied, so
|
|
96
|
-
* the deploy body omits `secrets` entirely. Secret values never touch the catalog or manifest — they ride
|
|
97
|
-
* this side channel only. Throws on a malformed file (caught by `deploy` and surfaced without any value).
|
|
98
|
-
*/
|
|
99
|
-
export function loadSecrets(secretsPath, env) {
|
|
100
|
-
const out = {};
|
|
101
|
-
if (secretsPath !== undefined) {
|
|
102
|
-
const parsed = JSON.parse(readFileSync(secretsPath, 'utf8'));
|
|
103
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
104
|
-
throw new Error('secrets file must be a JSON object of string values');
|
|
105
|
-
}
|
|
106
|
-
for (const [name, value] of Object.entries(parsed)) {
|
|
107
|
-
if (typeof value !== 'string')
|
|
108
|
-
throw new Error(`secret "${name}" must be a string`);
|
|
109
|
-
out[name] = value;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Env overrides the file: NOODLE_SECRET_<NAME> binds the ref <NAME> verbatim.
|
|
113
|
-
for (const [key, value] of Object.entries(env)) {
|
|
114
|
-
if (key.startsWith(SECRET_ENV_PREFIX) && value !== undefined) {
|
|
115
|
-
out[key.slice(SECRET_ENV_PREFIX.length)] = value;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return Object.keys(out).length > 0 ? out : undefined;
|
|
119
|
-
}
|
|
120
89
|
/**
|
|
121
90
|
* Read a deploy input into `{ manifest, connectors? }`. A `.yaml`/`.json` manifest is taken verbatim; an
|
|
122
91
|
* authored `.ts`/`.js` server is loaded and emits both its manifest and (if it has `.compute()` operations)
|
package/dist/deploy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
|
package/dist/dev.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
export interface DevOptions {
|
|
2
2
|
readonly manifestPath: string;
|
|
3
3
|
readonly connectorsPath?: string;
|
|
4
|
-
readonly secretsPath?: string;
|
|
5
4
|
readonly org?: string;
|
|
6
5
|
readonly app?: string;
|
|
7
6
|
readonly env?: string;
|
|
8
7
|
/** Local port; default `0` (OS-assigned). */
|
|
9
8
|
readonly port?: number;
|
|
10
|
-
/** Source of `NOODLE_SECRET_*` values; defaults to `process.env`. */
|
|
11
|
-
readonly secretsEnv?: NodeJS.ProcessEnv;
|
|
12
9
|
/** Enable the readline "exercise a tool" prompt; defaults to whether stdin is a TTY. */
|
|
13
10
|
readonly interactive?: boolean;
|
|
14
11
|
/** Watch the input files and hot-reload on change; default `true`. Tests disable it and call `reload()`. */
|
package/dist/dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,4GAA4G;IAC5G,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAmED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA0KjE"}
|
package/dist/dev.js
CHANGED
|
@@ -2,7 +2,8 @@ import { readFileSync, watch } from 'node:fs';
|
|
|
2
2
|
import { basename, dirname, extname, resolve } from 'node:path';
|
|
3
3
|
import { createInterface } from 'node:readline';
|
|
4
4
|
import { serveService } from '@noodle-borg/service';
|
|
5
|
-
import {
|
|
5
|
+
import { readDeployInput } from './deploy.js';
|
|
6
|
+
import { createLocalConfigStore } from './local-config.js';
|
|
6
7
|
const PROTOCOL = '2025-11-25';
|
|
7
8
|
const ACCEPT = 'application/json, text/event-stream';
|
|
8
9
|
/** A default app slug that prefers the containing directory when the file is a generic `manifest`/`server`. */
|
|
@@ -72,17 +73,17 @@ export async function dev(options) {
|
|
|
72
73
|
const org = slug(options.org ?? 'local');
|
|
73
74
|
const app = slug(options.app ?? defaultApp(options.manifestPath));
|
|
74
75
|
const env = slug(options.env ?? 'dev');
|
|
75
|
-
const
|
|
76
|
+
const configStore = createLocalConfigStore(process.cwd());
|
|
76
77
|
const service = await serveService({
|
|
77
78
|
host: '127.0.0.1',
|
|
78
79
|
port: options.port ?? 0,
|
|
80
|
+
configStore,
|
|
79
81
|
});
|
|
80
82
|
const url = buildMcpUrl(service.url, org, app, env);
|
|
81
83
|
let callerKey;
|
|
82
84
|
async function deployOnce() {
|
|
83
85
|
let manifest;
|
|
84
86
|
let connectors;
|
|
85
|
-
let secrets;
|
|
86
87
|
try {
|
|
87
88
|
const input = await readDeployInput(options.manifestPath);
|
|
88
89
|
manifest = input.manifest;
|
|
@@ -90,7 +91,6 @@ export async function dev(options) {
|
|
|
90
91
|
options.connectorsPath !== undefined
|
|
91
92
|
? readFileSync(options.connectorsPath, 'utf8')
|
|
92
93
|
: input.connectors;
|
|
93
|
-
secrets = loadSecrets(options.secretsPath, secretsEnv);
|
|
94
94
|
}
|
|
95
95
|
catch (error) {
|
|
96
96
|
return {
|
|
@@ -99,7 +99,7 @@ export async function dev(options) {
|
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
101
|
// reuseCallerKey: keep the same key across reloads (first deploy has no prior, so it mints).
|
|
102
|
-
const result = await service.registry.deploy({ org, app, env }, manifest, connectors,
|
|
102
|
+
const result = await service.registry.deploy({ org, app, env }, manifest, connectors, undefined, 'caller-key', true);
|
|
103
103
|
if (!result.ok) {
|
|
104
104
|
return {
|
|
105
105
|
ok: false,
|
|
@@ -146,7 +146,7 @@ export async function dev(options) {
|
|
|
146
146
|
return r;
|
|
147
147
|
}
|
|
148
148
|
if (options.watch !== false) {
|
|
149
|
-
const files = [options.manifestPath, options.connectorsPath
|
|
149
|
+
const files = [options.manifestPath, options.connectorsPath].filter((f) => typeof f === 'string');
|
|
150
150
|
for (const file of files) {
|
|
151
151
|
try {
|
|
152
152
|
watchers.push(watch(file, () => {
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ export { run } from './cli.js';
|
|
|
2
2
|
export { appendServer, clearConfig, configPath, type NoodleConfig, maskToken, readConfig, readServers, resolveAuthToken, resolveServiceUrl, type SavedServer, serversPath, writeConfig, } from './config.js';
|
|
3
3
|
export { DEFAULT_SERVICE_URL, type DeployOptions, type DeployOutcome, deploy } from './deploy.js';
|
|
4
4
|
export { type DevHandle, type DevOptions, type DevReloadResult, dev } from './dev.js';
|
|
5
|
+
export { deleteLocalConfigValue, type LocalConfigKind, type LocalConfigRecord, localConfigPath, type LocalConfigScope, readLocalConfigValues, resolveLocalConfigValues, setLocalConfigValue, } from './local-config.js';
|
|
5
6
|
export { type ValidateOptions, type ValidateOutcome, type ValidationIssue, validate, } from './validate.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,KAAK,YAAY,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,KAAK,YAAY,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,5 +2,6 @@ export { run } from './cli.js';
|
|
|
2
2
|
export { appendServer, clearConfig, configPath, maskToken, readConfig, readServers, resolveAuthToken, resolveServiceUrl, serversPath, writeConfig, } from './config.js';
|
|
3
3
|
export { DEFAULT_SERVICE_URL, deploy } from './deploy.js';
|
|
4
4
|
export { dev } from './dev.js';
|
|
5
|
+
export { deleteLocalConfigValue, localConfigPath, readLocalConfigValues, resolveLocalConfigValues, setLocalConfigValue, } from './local-config.js';
|
|
5
6
|
export { validate, } from './validate.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA0C,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAyD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAIL,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA0C,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAyD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EAGtB,eAAe,EAEf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ConfigStore } from '@noodle-borg/service';
|
|
2
|
+
export type LocalConfigKind = 'secret' | 'variable';
|
|
3
|
+
export type LocalConfigScope = {
|
|
4
|
+
readonly level: 'org';
|
|
5
|
+
readonly org: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly level: 'app';
|
|
8
|
+
readonly org: string;
|
|
9
|
+
readonly app: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly level: 'env';
|
|
12
|
+
readonly org: string;
|
|
13
|
+
readonly app: string;
|
|
14
|
+
readonly env: string;
|
|
15
|
+
};
|
|
16
|
+
export interface LocalConfigRecord {
|
|
17
|
+
readonly kind: LocalConfigKind;
|
|
18
|
+
readonly scope: LocalConfigScope;
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly value?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LocalTenantRef {
|
|
23
|
+
readonly org: string;
|
|
24
|
+
readonly app: string;
|
|
25
|
+
readonly env: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function localConfigPath(cwd?: string): string;
|
|
28
|
+
export declare function setLocalConfigValue(cwd: string, input: {
|
|
29
|
+
readonly kind: LocalConfigKind;
|
|
30
|
+
readonly scope: LocalConfigScope;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly value: string;
|
|
33
|
+
}): void;
|
|
34
|
+
export declare function deleteLocalConfigValue(cwd: string, kind: LocalConfigKind, scope: LocalConfigScope, name: string): boolean;
|
|
35
|
+
export declare function readLocalConfigValues(cwd: string, kind: LocalConfigKind, scope: LocalConfigScope): readonly LocalConfigRecord[];
|
|
36
|
+
export declare function resolveLocalConfigValues(cwd: string, kind: LocalConfigKind, ref: LocalTenantRef): Record<string, string>;
|
|
37
|
+
export declare function createLocalConfigStore(cwd?: string): ConfigStore;
|
|
38
|
+
//# sourceMappingURL=local-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config.d.ts","sourceRoot":"","sources":["../src/local-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE;IACL,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACA,IAAI,CAYN;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAUT;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,gBAAgB,GACtB,SAAS,iBAAiB,EAAE,CAM9B;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAsB,GAAG,WAAW,CAE/E"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { chmodSync, existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const FILE = '.env.noodle';
|
|
4
|
+
const NAME = /^[A-Za-z0-9_]+$/;
|
|
5
|
+
const SLUG = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
6
|
+
export function localConfigPath(cwd = process.cwd()) {
|
|
7
|
+
return join(cwd, FILE);
|
|
8
|
+
}
|
|
9
|
+
export function setLocalConfigValue(cwd, input) {
|
|
10
|
+
const safe = {
|
|
11
|
+
...input,
|
|
12
|
+
scope: validateScope(input.scope),
|
|
13
|
+
name: validateName(input.name),
|
|
14
|
+
};
|
|
15
|
+
const records = parseLocalConfig(cwd).filter((record) => !(record.kind === safe.kind && sameScope(record.scope, safe.scope) && record.name === safe.name));
|
|
16
|
+
records.push(safe);
|
|
17
|
+
writeLocalConfig(cwd, records);
|
|
18
|
+
}
|
|
19
|
+
export function deleteLocalConfigValue(cwd, kind, scope, name) {
|
|
20
|
+
const safeScope = validateScope(scope);
|
|
21
|
+
const safeName = validateName(name);
|
|
22
|
+
const records = parseLocalConfig(cwd);
|
|
23
|
+
const next = records.filter((record) => !(record.kind === kind && sameScope(record.scope, safeScope) && record.name === safeName));
|
|
24
|
+
if (next.length === records.length)
|
|
25
|
+
return false;
|
|
26
|
+
writeLocalConfig(cwd, next);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
export function readLocalConfigValues(cwd, kind, scope) {
|
|
30
|
+
const safeScope = validateScope(scope);
|
|
31
|
+
return parseLocalConfig(cwd)
|
|
32
|
+
.filter((record) => record.kind === kind && sameScope(record.scope, safeScope))
|
|
33
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
34
|
+
.map((record) => toPublicRecord(record));
|
|
35
|
+
}
|
|
36
|
+
export function resolveLocalConfigValues(cwd, kind, ref) {
|
|
37
|
+
const scope = validateScope({ level: 'env', org: ref.org, app: ref.app, env: ref.env });
|
|
38
|
+
const out = {};
|
|
39
|
+
for (const current of scopeChain(scope)) {
|
|
40
|
+
for (const record of parseLocalConfig(cwd)) {
|
|
41
|
+
if (record.kind === kind && sameScope(record.scope, current))
|
|
42
|
+
out[record.name] = record.value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
export function createLocalConfigStore(cwd = process.cwd()) {
|
|
48
|
+
return new LocalFileConfigStore(cwd);
|
|
49
|
+
}
|
|
50
|
+
class LocalFileConfigStore {
|
|
51
|
+
#cwd;
|
|
52
|
+
constructor(cwd) {
|
|
53
|
+
this.#cwd = cwd;
|
|
54
|
+
}
|
|
55
|
+
setConfigValue(input) {
|
|
56
|
+
setLocalConfigValue(this.#cwd, input);
|
|
57
|
+
return Promise.resolve({
|
|
58
|
+
kind: input.kind,
|
|
59
|
+
scope: input.scope,
|
|
60
|
+
name: input.name,
|
|
61
|
+
updatedAt: new Date().toISOString(),
|
|
62
|
+
...(input.kind === 'variable' ? { value: input.value } : {}),
|
|
63
|
+
...(input.updatedBySubject !== undefined ? { updatedBySubject: input.updatedBySubject } : {}),
|
|
64
|
+
...(input.updatedByEmail !== undefined ? { updatedByEmail: input.updatedByEmail } : {}),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
deleteConfigValue(kind, scope, name) {
|
|
68
|
+
return Promise.resolve(deleteLocalConfigValue(this.#cwd, kind, scope, name));
|
|
69
|
+
}
|
|
70
|
+
listConfigValues(kind, scope) {
|
|
71
|
+
return Promise.resolve(readLocalConfigValues(this.#cwd, kind, scope).map((record) => ({
|
|
72
|
+
kind: record.kind,
|
|
73
|
+
scope: record.scope,
|
|
74
|
+
name: record.name,
|
|
75
|
+
updatedAt: new Date().toISOString(),
|
|
76
|
+
...(record.kind === 'variable' && record.value !== undefined ? { value: record.value } : {}),
|
|
77
|
+
})));
|
|
78
|
+
}
|
|
79
|
+
resolveConfigValues(kind, scope) {
|
|
80
|
+
const envScope = scope.level === 'env'
|
|
81
|
+
? scope
|
|
82
|
+
: scope.level === 'app'
|
|
83
|
+
? { level: 'env', org: scope.org, app: scope.app, env: 'dev' }
|
|
84
|
+
: { level: 'env', org: scope.org, app: 'app', env: 'dev' };
|
|
85
|
+
return Promise.resolve(resolveLocalConfigValues(this.#cwd, kind, envScope));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function parseLocalConfig(cwd) {
|
|
89
|
+
const path = localConfigPath(cwd);
|
|
90
|
+
if (!existsSync(path))
|
|
91
|
+
return [];
|
|
92
|
+
const records = [];
|
|
93
|
+
const lines = readFileSync(path, 'utf8').split(/\r?\n/);
|
|
94
|
+
for (const raw of lines) {
|
|
95
|
+
const line = raw.trim();
|
|
96
|
+
if (line === '' || line.startsWith('#'))
|
|
97
|
+
continue;
|
|
98
|
+
const match = /^(secret|var)\s+(\S+)\s+([A-Za-z0-9_]+)=(.*)$/.exec(line);
|
|
99
|
+
if (!match)
|
|
100
|
+
throw new Error(`invalid .env.noodle line: ${raw}`);
|
|
101
|
+
records.push({
|
|
102
|
+
kind: match[1] === 'secret' ? 'secret' : 'variable',
|
|
103
|
+
scope: parseScope(match[2]),
|
|
104
|
+
name: validateName(match[3]),
|
|
105
|
+
value: match[4],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return records;
|
|
109
|
+
}
|
|
110
|
+
function writeLocalConfig(cwd, records) {
|
|
111
|
+
const body = [...records]
|
|
112
|
+
.sort((a, b) => `${scopePath(a.scope)}/${a.kind}/${a.name}`.localeCompare(`${scopePath(b.scope)}/${b.kind}/${b.name}`))
|
|
113
|
+
.map((record) => `${record.kind === 'secret' ? 'secret' : 'var'} ${scopePath(record.scope)} ` +
|
|
114
|
+
`${record.name}=${record.value}`)
|
|
115
|
+
.join('\n');
|
|
116
|
+
const path = localConfigPath(cwd);
|
|
117
|
+
writeFileSync(path, body.length > 0 ? `${body}\n` : '', { mode: 0o600 });
|
|
118
|
+
chmodSync(path, 0o600);
|
|
119
|
+
}
|
|
120
|
+
function toPublicRecord(record) {
|
|
121
|
+
return {
|
|
122
|
+
kind: record.kind,
|
|
123
|
+
scope: record.scope,
|
|
124
|
+
name: record.name,
|
|
125
|
+
...(record.kind === 'variable' ? { value: record.value } : {}),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function parseScope(raw) {
|
|
129
|
+
const parts = raw.split('/');
|
|
130
|
+
if (parts.length === 2 && parts[0] === 'org') {
|
|
131
|
+
return validateScope({ level: 'org', org: parts[1] });
|
|
132
|
+
}
|
|
133
|
+
if (parts.length === 4 && parts[0] === 'org' && parts[2] === 'app') {
|
|
134
|
+
return validateScope({ level: 'app', org: parts[1], app: parts[3] });
|
|
135
|
+
}
|
|
136
|
+
if (parts.length === 6 &&
|
|
137
|
+
parts[0] === 'org' &&
|
|
138
|
+
parts[2] === 'app' &&
|
|
139
|
+
parts[4] === 'env') {
|
|
140
|
+
return validateScope({
|
|
141
|
+
level: 'env',
|
|
142
|
+
org: parts[1],
|
|
143
|
+
app: parts[3],
|
|
144
|
+
env: parts[5],
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
throw new Error(`invalid config scope "${raw}"`);
|
|
148
|
+
}
|
|
149
|
+
function validateScope(scope) {
|
|
150
|
+
if (scope.level === 'org')
|
|
151
|
+
return { level: 'org', org: validateSlug('org', scope.org) };
|
|
152
|
+
if (scope.level === 'app') {
|
|
153
|
+
return {
|
|
154
|
+
level: 'app',
|
|
155
|
+
org: validateSlug('org', scope.org),
|
|
156
|
+
app: validateSlug('app', scope.app),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
level: 'env',
|
|
161
|
+
org: validateSlug('org', scope.org),
|
|
162
|
+
app: validateSlug('app', scope.app),
|
|
163
|
+
env: validateSlug('env', scope.env),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function validateSlug(kind, value) {
|
|
167
|
+
if (!SLUG.test(value))
|
|
168
|
+
throw new Error(`invalid ${kind} slug "${value}"`);
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
function validateName(name) {
|
|
172
|
+
if (!NAME.test(name))
|
|
173
|
+
throw new Error(`invalid config name "${name}"`);
|
|
174
|
+
return name;
|
|
175
|
+
}
|
|
176
|
+
function scopeChain(scope) {
|
|
177
|
+
if (scope.level === 'org')
|
|
178
|
+
return [scope];
|
|
179
|
+
if (scope.level === 'app')
|
|
180
|
+
return [{ level: 'org', org: scope.org }, scope];
|
|
181
|
+
return [
|
|
182
|
+
{ level: 'org', org: scope.org },
|
|
183
|
+
{ level: 'app', org: scope.org, app: scope.app },
|
|
184
|
+
scope,
|
|
185
|
+
];
|
|
186
|
+
}
|
|
187
|
+
function scopePath(scope) {
|
|
188
|
+
if (scope.level === 'org')
|
|
189
|
+
return `org/${scope.org}`;
|
|
190
|
+
if (scope.level === 'app')
|
|
191
|
+
return `org/${scope.org}/app/${scope.app}`;
|
|
192
|
+
return `org/${scope.org}/app/${scope.app}/env/${scope.env}`;
|
|
193
|
+
}
|
|
194
|
+
function sameScope(a, b) {
|
|
195
|
+
return scopePath(a) === scopePath(b);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=local-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config.js","sourceRoot":"","sources":["../src/local-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,8 @@ import type { CompileError } from '../errors.js';
|
|
|
13
13
|
* - {@link parseCondition} — for a step's `if`. Produces a boolean condition node (equality + boolean
|
|
14
14
|
* only, per docs/SPEC.md "Equality and boolean checks only for `if` conditions").
|
|
15
15
|
*
|
|
16
|
-
* Allowed roots this phase: `input`, `steps`. `user`/`item
|
|
17
|
-
* `expr_root_unavailable` (Phase 3 / option-list
|
|
16
|
+
* Allowed roots this phase: `input`, `steps`, `env`. `user`/`item` are recognized but rejected with
|
|
17
|
+
* `expr_root_unavailable` (Phase 3 / option-list contexts do not exist yet).
|
|
18
18
|
*/
|
|
19
19
|
/**
|
|
20
20
|
* Roots an expression may read. Manifest expressions use `input`/`steps`; other contexts (e.g. connector
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Default roots for manifest `args`/`map`/`output`/`if` expressions. */
|
|
2
|
-
const ALLOWED_ROOTS = new Set(['input', 'steps']);
|
|
2
|
+
const ALLOWED_ROOTS = new Set(['input', 'steps', 'env']);
|
|
3
3
|
/** Recognized but not available this phase (forward-compatible rejection). */
|
|
4
|
-
const DEFERRED_ROOTS = new Set(['user', 'item'
|
|
4
|
+
const DEFERRED_ROOTS = new Set(['user', 'item']);
|
|
5
5
|
/** Guard against pathological nesting (docs/SPEC.md "bounded depth"). */
|
|
6
6
|
const MAX_DEPTH = 32;
|
|
7
7
|
const MAX_TEMPLATE_PARTS = 64;
|