primitive-admin 1.2.0-alpha.7 → 1.2.0-alpha.8
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 +8 -2
- package/assets/skill/skills/primitive-platform/SKILL.md +12 -6
- package/dist/src/commands/apps-children.js +2 -0
- package/dist/src/commands/apps-children.js.map +1 -1
- package/dist/src/commands/auth.js +107 -33
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/databases.js +13 -1
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +70 -11
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +12 -2
- package/dist/src/commands/sync-app-settings.js +35 -10
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.js +44 -10
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +25 -6
- package/dist/src/lib/api-client.js +106 -72
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +38 -0
- package/dist/src/lib/app-settings-descriptor.js +96 -4
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/credentials-home.d.ts +51 -0
- package/dist/src/lib/credentials-home.js +169 -0
- package/dist/src/lib/credentials-home.js.map +1 -0
- package/dist/src/lib/credentials-lock.d.ts +80 -0
- package/dist/src/lib/credentials-lock.js +222 -0
- package/dist/src/lib/credentials-lock.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +56 -4
- package/dist/src/lib/credentials-store.js +236 -78
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/env-resolver-core.d.ts +1 -1
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/function-bundle.d.ts +38 -18
- package/dist/src/lib/function-bundle.js +60 -35
- package/dist/src/lib/function-bundle.js.map +1 -1
- package/dist/src/lib/function-document-types.d.ts +5 -3
- package/dist/src/lib/function-document-types.js +10 -14
- package/dist/src/lib/function-document-types.js.map +1 -1
- package/dist/src/lib/function-source-roots.d.ts +67 -0
- package/dist/src/lib/function-source-roots.js +148 -0
- package/dist/src/lib/function-source-roots.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +27 -0
- package/dist/src/lib/function-sync.js +16 -3
- package/dist/src/lib/function-sync.js.map +1 -1
- package/dist/src/lib/function-typecheck.d.ts +37 -2
- package/dist/src/lib/function-typecheck.js +210 -28
- package/dist/src/lib/function-typecheck.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.js +21 -10
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +1 -1
- package/dist/src/lib/generated-sdk-types.js +1 -1
- package/dist/src/lib/generated-sdk-types.js.map +1 -1
- package/dist/src/lib/login-scope-lines.d.ts +1 -1
- package/dist/src/lib/login-scope-lines.js +1 -1
- package/dist/src/lib/login-scope-lines.js.map +1 -1
- package/dist/src/lib/project-config.d.ts +7 -0
- package/dist/src/lib/project-config.js +22 -1
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/root-import-decision.d.ts +9 -4
- package/dist/src/lib/root-import-decision.js +24 -3
- package/dist/src/lib/root-import-decision.js.map +1 -1
- package/dist/src/lib/scope-request.d.ts +8 -5
- package/dist/src/lib/scope-request.js +17 -8
- package/dist/src/lib/scope-request.js.map +1 -1
- package/package.json +2 -2
|
@@ -28,7 +28,7 @@ import { existsSync, readFileSync, mkdirSync } from "fs";
|
|
|
28
28
|
import { join } from "path";
|
|
29
29
|
import { createHash } from "crypto";
|
|
30
30
|
import { parseConfigToml, stringifyConfigToml } from "../lib/config-toml.js";
|
|
31
|
-
import { APP_SETTINGS_DESCRIPTOR, APP_SETTINGS_SECTIONS, buildAppSettingsPayload, projectAppSettingsForComparison, serializeAppSettingsToToml, } from "../lib/app-settings-descriptor.js";
|
|
31
|
+
import { APP_SETTINGS_DESCRIPTOR, APP_SETTINGS_SECTIONS, LEGACY_PROTECTED_KEY, buildAppSettingsPayload, projectAppSettingsForComparison, requestedProtectionLevel, serializeAppSettingsToToml, settingsProtectionLevel, } from "../lib/app-settings-descriptor.js";
|
|
32
32
|
import { canonicalJsonStringify } from "../lib/canonical-json.js";
|
|
33
33
|
import { writePulledFile } from "../lib/pull-write.js";
|
|
34
34
|
import { resolveSyncStateReadPath } from "../lib/sync-paths.js";
|
|
@@ -149,12 +149,15 @@ export function renderAppSettings(settings) {
|
|
|
149
149
|
* A file that already states the same settings is left as it is (#4160): the
|
|
150
150
|
* comparison is the payload `config diff` and `config push` build from the
|
|
151
151
|
* file, so its comments, key order and explicit defaults survive the pull.
|
|
152
|
-
* `
|
|
152
|
+
* A file carrying the deprecated `[app].protected` key is always rewritten,
|
|
153
|
+
* so the pull the deprecation warning advertises removes it (#4564,
|
|
154
|
+
* DSO-4564-003). `written` says which happened.
|
|
153
155
|
*/
|
|
154
156
|
export function writePulledAppSettings(configDir, settings, options = {}) {
|
|
155
157
|
ensureDir(configDir);
|
|
156
158
|
const path = appTomlPath(configDir);
|
|
157
|
-
const
|
|
159
|
+
const stated = readStatedApp(path);
|
|
160
|
+
const statedName = options.keepStatedName ? stated?.name : undefined;
|
|
158
161
|
let content;
|
|
159
162
|
if (!options.keepStatedName) {
|
|
160
163
|
content = serializeAppSettings(settings);
|
|
@@ -166,10 +169,21 @@ export function writePulledAppSettings(configDir, settings, options = {}) {
|
|
|
166
169
|
data.app.name = statedName;
|
|
167
170
|
else
|
|
168
171
|
delete data.app.name;
|
|
172
|
+
const statedLevel = requestedProtectionLevel(stated);
|
|
173
|
+
if (statedLevel !== undefined)
|
|
174
|
+
data.app.protection = statedLevel;
|
|
175
|
+
else
|
|
176
|
+
delete data.app.protection;
|
|
169
177
|
}
|
|
170
178
|
content = stringifyConfigToml(data);
|
|
171
179
|
}
|
|
172
|
-
const
|
|
180
|
+
const carriesLegacyKey = !!stated && LEGACY_PROTECTED_KEY in stated;
|
|
181
|
+
const written = writePulledFile(path, content, options.tally, carriesLegacyKey
|
|
182
|
+
? undefined
|
|
183
|
+
: sameAppSettingsAs(content, {
|
|
184
|
+
nameOptional: options.keepStatedName,
|
|
185
|
+
excludeProtection: options.keepStatedName,
|
|
186
|
+
}));
|
|
173
187
|
if (written)
|
|
174
188
|
options.log?.(`Wrote ${path}`);
|
|
175
189
|
return {
|
|
@@ -192,6 +206,7 @@ export function writePulledAppSettings(configDir, settings, options = {}) {
|
|
|
192
206
|
function sameAppSettingsAs(serverContent, options) {
|
|
193
207
|
const payloadOf = (content) => buildAppSettingsPayload(parseConfigToml(content), {
|
|
194
208
|
nameOptional: options.nameOptional,
|
|
209
|
+
excludeProtection: options.excludeProtection,
|
|
195
210
|
});
|
|
196
211
|
return (localContent) => {
|
|
197
212
|
const local = payloadOf(localContent);
|
|
@@ -202,15 +217,16 @@ function sameAppSettingsAs(serverContent, options) {
|
|
|
202
217
|
};
|
|
203
218
|
}
|
|
204
219
|
/**
|
|
205
|
-
* The `[app]
|
|
206
|
-
* the file is absent, unparseable or
|
|
220
|
+
* The `[app]` table an `app.toml` states, as TOML stated it, or undefined
|
|
221
|
+
* when the file is absent, unparseable or has none.
|
|
207
222
|
*/
|
|
208
|
-
function
|
|
223
|
+
function readStatedApp(path) {
|
|
209
224
|
if (!existsSync(path))
|
|
210
225
|
return undefined;
|
|
211
226
|
try {
|
|
212
227
|
const parsed = parseConfigToml(readFileSync(path, "utf-8"));
|
|
213
|
-
|
|
228
|
+
const app = parsed?.app;
|
|
229
|
+
return app && typeof app === "object" && !Array.isArray(app) ? app : undefined;
|
|
214
230
|
}
|
|
215
231
|
catch {
|
|
216
232
|
return undefined;
|
|
@@ -291,7 +307,12 @@ export function appSettingsNameExcludedForState(state, appId, tomlData, localEnv
|
|
|
291
307
|
* app-settings row in the full `config diff`, and the push gate.
|
|
292
308
|
*/
|
|
293
309
|
export function appSettingsFieldDiffs(localSettings, remoteSettings, options = {}) {
|
|
294
|
-
|
|
310
|
+
// The local file's deprecated `protected` key reads against the remote
|
|
311
|
+
// level, as the server's write does (DSO-4564-001).
|
|
312
|
+
const local = projectAppSettingsForComparison(localSettings, {
|
|
313
|
+
...options,
|
|
314
|
+
legacyProtectedAgainst: settingsProtectionLevel(remoteSettings),
|
|
315
|
+
});
|
|
295
316
|
const remote = projectAppSettingsForComparison(remoteSettings, options);
|
|
296
317
|
const diffs = [];
|
|
297
318
|
for (const d of APP_SETTINGS_DESCRIPTOR) {
|
|
@@ -352,6 +373,7 @@ export async function diffAppSettings(client, appId, configDir, options = {}) {
|
|
|
352
373
|
const { settings: local, errors } = buildAppSettingsPayload(tomlData, {
|
|
353
374
|
excludeName,
|
|
354
375
|
nameOptional: localEnvironment,
|
|
376
|
+
excludeProtection: localEnvironment,
|
|
355
377
|
});
|
|
356
378
|
// A file with validation errors is unpushable, so diff must not present its
|
|
357
379
|
// surviving values as clean (or as a partial diff) — that would advertise
|
|
@@ -364,7 +386,10 @@ export async function diffAppSettings(client, appId, configDir, options = {}) {
|
|
|
364
386
|
process.exit(1);
|
|
365
387
|
}
|
|
366
388
|
const remote = (await client.getAppSettings(appId)) ?? {};
|
|
367
|
-
const diffs = appSettingsFieldDiffs(local, remote, {
|
|
389
|
+
const diffs = appSettingsFieldDiffs(local, remote, {
|
|
390
|
+
excludeName,
|
|
391
|
+
excludeProtection: localEnvironment,
|
|
392
|
+
});
|
|
368
393
|
if (options.json) {
|
|
369
394
|
json({ diffs });
|
|
370
395
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-app-settings.js","sourceRoot":"","sources":["../../../src/commands/sync-app-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,
|
|
1
|
+
{"version":3,"file":"sync-app-settings.js","sourceRoot":"","sources":["../../../src/commands/sync-app-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ import { canonicalizeServerTextFields } from "../lib/server-text-normalization.j
|
|
|
26
26
|
import { canonicalJsonStringify } from "../lib/canonical-json.js";
|
|
27
27
|
import { reconcileWorkflowIncludes } from "../lib/workflow-include-preserve.js";
|
|
28
28
|
import { newPullWriteTally, writePulledFile, } from "../lib/pull-write.js";
|
|
29
|
-
import { serializeSection, parseTomlToAppSettings, buildAppSettingsPayload, } from "../lib/app-settings-descriptor.js";
|
|
29
|
+
import { serializeSection, parseTomlToAppSettings, buildAppSettingsPayload, settingsProtectionLevel, } from "../lib/app-settings-descriptor.js";
|
|
30
30
|
import { collectAppSettingsPushErrors, writePulledAppSettings, diffAppSettings, appSettingsFieldDiffs, appSettingsNameExcluded, appSettingsNameExcludedForState, hashAppSettingsForDiff, } from "./sync-app-settings.js";
|
|
31
31
|
import { applyWorkflowBody, legacyDraftSlotWarning } from "../lib/workflow-apply.js";
|
|
32
32
|
// #2645 — named config bodies live in `workflows/<key>.configs/<name>.toml`.
|
|
@@ -59,7 +59,7 @@ import { agentFunctionChangeRefusals, agentFunctionUses, } from "../lib/generate
|
|
|
59
59
|
import { resolvePromptStrictOutput } from "../lib/generated-config-surfaces.js";
|
|
60
60
|
// #3179 — the function's two halves: the header payloads and the envelope
|
|
61
61
|
// `config push` sends, and the bytes `config pull` writes back.
|
|
62
|
-
import { applyFunctionPull, buildFunctionConfigPush, createDocumentSchemaDropWarner, documentSchemaRetentionFailure, buildFunctionCreatePayload, buildFunctionUpdatePayload, functionDiffEntity, functionTomlPreflightErrors, planDocumentSchemaPull, planFunctionPull, serializeFunction, } from "../lib/function-sync.js";
|
|
62
|
+
import { applyFunctionPull, buildFunctionConfigPush, buildFunctionConfigPushDetailed, createDocumentSchemaDropWarner, documentSchemaRetentionFailure, buildFunctionCreatePayload, buildFunctionUpdatePayload, functionDiffEntity, functionTomlPreflightErrors, planDocumentSchemaPull, planFunctionPull, serializeFunction, } from "../lib/function-sync.js";
|
|
63
63
|
import { newerVersionLine, pullNewerVersionLine, rollbackDiffHint, } from "../lib/function-versions.js";
|
|
64
64
|
import { FunctionBuildError } from "../lib/function-bundle.js";
|
|
65
65
|
// #3182 — the local half of capability validation. The grammar is the vendored
|
|
@@ -77,6 +77,7 @@ import { isFunctionDeclarationFile, resolveDocumentSchema, } from "../lib/functi
|
|
|
77
77
|
// #3331 — and the compiler is actually asked: a push holds the code it ships
|
|
78
78
|
// to the declarations it just generated.
|
|
79
79
|
import { createFunctionTypechecker, } from "../lib/function-typecheck.js";
|
|
80
|
+
import { resolveFunctionSourceRoots } from "../lib/function-source-roots.js";
|
|
80
81
|
import { detectLayout, migrateLegacyToV2 } from "../lib/block-layout.js";
|
|
81
82
|
import { ABSENT_FROM_EXPORT, LOCAL_ONLY_ABSENT, LOCAL_ONLY_NEW, PUSH_PRUNE_SPECS, REMOTE_ONLY_UNMANAGED, REMOTE_ONLY_WILL_DELETE, SYNC_RESOURCE_TYPES, VALIDATION_ERROR, applyPrune, attachmentWritePath, attemptFetch, classifyLocalOnly, classifyPruneDeleteFailure, classifyRemoteOnly, collectPushPruneCandidates, decidePushPruneCandidate, formatPrunePlan, hasUncommittedChanges, isSafeAttachmentFilename, isSafeSyncFilename, planPrune, preserveUnwrittenEntries, removePrunedSidecar, ruleSetFileKey, } from "../lib/sync-resource-types.js";
|
|
82
83
|
import { normalizeTestCaseKey, testCaseKeyError, } from "../lib/test-case-keys.js";
|
|
@@ -2688,6 +2689,9 @@ export async function runConfigPushPreflight(input) {
|
|
|
2688
2689
|
fileName: parsedApp?.app?.name,
|
|
2689
2690
|
}),
|
|
2690
2691
|
nameOptional: localEnvironment,
|
|
2692
|
+
// #4564 — the protection level follows the name on a machine-local
|
|
2693
|
+
// environment: out of the body, so out of what is validated.
|
|
2694
|
+
excludeProtection: localEnvironment,
|
|
2691
2695
|
});
|
|
2692
2696
|
for (const e of appErrors) {
|
|
2693
2697
|
preflightValidationErrors.push(` app.toml: ${e}`);
|
|
@@ -9670,6 +9674,7 @@ export function registerConfigSyncCommands(sync) {
|
|
|
9670
9674
|
// tree's name and whose baseline never includes one.
|
|
9671
9675
|
semanticHash: hashAppSettingsForDiff(settings, {
|
|
9672
9676
|
excludeName: pullsLocalEnvironment,
|
|
9677
|
+
excludeProtection: pullsLocalEnvironment,
|
|
9673
9678
|
}),
|
|
9674
9679
|
}
|
|
9675
9680
|
: pullSelection
|
|
@@ -10495,6 +10500,9 @@ What a push guarantees (two stages):
|
|
|
10495
10500
|
const { settings: appPayload, warnings: appWarnings } = buildAppSettingsPayload(tomlData, {
|
|
10496
10501
|
excludeName: payloadExcludesName,
|
|
10497
10502
|
nameOptional: localEnvironment,
|
|
10503
|
+
// #4564 — on a machine-local environment the level is the
|
|
10504
|
+
// shared tree's, like the name, and never this child's.
|
|
10505
|
+
excludeProtection: localEnvironment,
|
|
10498
10506
|
});
|
|
10499
10507
|
for (const w of appWarnings) {
|
|
10500
10508
|
warn(` ${w}`);
|
|
@@ -10524,6 +10532,7 @@ What a push guarantees (two stages):
|
|
|
10524
10532
|
excludeName: localEnvironment ||
|
|
10525
10533
|
options.recordExclusion !== undefined ||
|
|
10526
10534
|
(options.keepExclusion && compareExcludesName),
|
|
10535
|
+
excludeProtection: localEnvironment,
|
|
10527
10536
|
}),
|
|
10528
10537
|
...(options.recordExclusion !== undefined
|
|
10529
10538
|
? { excludedName: options.recordExclusion }
|
|
@@ -10534,8 +10543,17 @@ What a push guarantees (two stages):
|
|
|
10534
10543
|
};
|
|
10535
10544
|
let applyAppSettings = true;
|
|
10536
10545
|
if (appLiveOk) {
|
|
10537
|
-
const compareOptions = {
|
|
10538
|
-
|
|
10546
|
+
const compareOptions = {
|
|
10547
|
+
excludeName: compareExcludesName,
|
|
10548
|
+
excludeProtection: localEnvironment,
|
|
10549
|
+
};
|
|
10550
|
+
// The file's deprecated `protected` key reads against the live
|
|
10551
|
+
// level, as the server's write will (DSO-4564-001), so a change
|
|
10552
|
+
// made only through it is not skipped as unchanged.
|
|
10553
|
+
const localHash = hashAppSettingsForDiff(appPayload, {
|
|
10554
|
+
...compareOptions,
|
|
10555
|
+
legacyProtectedAgainst: settingsProtectionLevel(liveSettings ?? {}),
|
|
10556
|
+
});
|
|
10539
10557
|
const remoteHash = hashAppSettingsForDiff(liveSettings ?? {}, compareOptions);
|
|
10540
10558
|
if (options.force) {
|
|
10541
10559
|
// `--force` is the operator saying "local wins": no direction
|
|
@@ -14201,18 +14219,31 @@ What a push guarantees (two stages):
|
|
|
14201
14219
|
// consulted per function, so one broken file refuses itself and
|
|
14202
14220
|
// nothing else; `--no-typecheck` is the escape hatch, and an
|
|
14203
14221
|
// unavailable compiler warns rather than failing the push.
|
|
14222
|
+
const files = selectFiles("function", functionsPushDir, readdirSync(functionsPushDir).filter(isFunctionDeclarationFile));
|
|
14223
|
+
// #4502 — the directories outside the tree that function code may
|
|
14224
|
+
// import from, resolved once for the push so a dropped entry is
|
|
14225
|
+
// named once rather than once per function. The bundler and the
|
|
14226
|
+
// checker are handed the same list, so they agree on what is shared.
|
|
14227
|
+
const functionSourceRoots = files.length > 0
|
|
14228
|
+
? resolveFunctionSourceRoots(configDir)
|
|
14229
|
+
: { roots: [], warnings: [] };
|
|
14230
|
+
for (const warning of functionSourceRoots.warnings)
|
|
14231
|
+
warn(` ${warning}`);
|
|
14232
|
+
const sourceRoots = functionSourceRoots.roots.map((root) => root.absolute);
|
|
14204
14233
|
let typecheckSetup = null;
|
|
14205
14234
|
const functionTypechecker = () => {
|
|
14206
14235
|
if (options.typecheck === false)
|
|
14207
14236
|
return null;
|
|
14208
14237
|
if (typecheckSetup === null) {
|
|
14209
|
-
typecheckSetup = createFunctionTypechecker(configDir
|
|
14238
|
+
typecheckSetup = createFunctionTypechecker(configDir, {
|
|
14239
|
+
sourceRoots,
|
|
14240
|
+
onWarning: (message) => warn(` ${message}`),
|
|
14241
|
+
});
|
|
14210
14242
|
for (const warning of typecheckSetup.warnings)
|
|
14211
14243
|
warn(` ${warning}`);
|
|
14212
14244
|
}
|
|
14213
14245
|
return typecheckSetup.checker;
|
|
14214
14246
|
};
|
|
14215
|
-
const files = selectFiles("function", functionsPushDir, readdirSync(functionsPushDir).filter(isFunctionDeclarationFile));
|
|
14216
14247
|
const functionSpec = configDiffSpec("function");
|
|
14217
14248
|
const liveFunctions = new Map();
|
|
14218
14249
|
let functionsLiveOk = true;
|
|
@@ -14273,13 +14304,15 @@ What a push guarantees (two stages):
|
|
|
14273
14304
|
// Build first: nothing is sent for a function whose code does not
|
|
14274
14305
|
// compile or whose imports leave the tree.
|
|
14275
14306
|
let push;
|
|
14307
|
+
let projectSources;
|
|
14276
14308
|
try {
|
|
14277
|
-
push = await
|
|
14309
|
+
({ push, projectSources } = await buildFunctionConfigPushDetailed({
|
|
14278
14310
|
configDir,
|
|
14279
14311
|
functionKey: key,
|
|
14280
14312
|
filePath,
|
|
14281
14313
|
tomlData,
|
|
14282
|
-
|
|
14314
|
+
sourceRoots,
|
|
14315
|
+
}));
|
|
14283
14316
|
}
|
|
14284
14317
|
catch (err) {
|
|
14285
14318
|
if (!(err instanceof FunctionBuildError))
|
|
@@ -14309,7 +14342,7 @@ What a push guarantees (two stages):
|
|
|
14309
14342
|
// sent for it and whether or not this is a dry run.
|
|
14310
14343
|
const typechecker = functionTypechecker();
|
|
14311
14344
|
if (typechecker) {
|
|
14312
|
-
const failure = typechecker.check(key, push.sources.map((source) => source.path));
|
|
14345
|
+
const failure = typechecker.check(key, push.sources.map((source) => source.path), projectSources);
|
|
14313
14346
|
if (failure) {
|
|
14314
14347
|
applyFailures.push({
|
|
14315
14348
|
type: "function",
|
|
@@ -17093,6 +17126,7 @@ What a push guarantees (two stages):
|
|
|
17093
17126
|
const { settings: localAppSettings, errors: appErrors } = buildAppSettingsPayload(appTomlData, {
|
|
17094
17127
|
excludeName,
|
|
17095
17128
|
nameOptional: diffsLocalEnvironment,
|
|
17129
|
+
excludeProtection: diffsLocalEnvironment,
|
|
17096
17130
|
});
|
|
17097
17131
|
if (appErrors.length > 0) {
|
|
17098
17132
|
appRow(VALIDATION_ERROR, appErrors.join("; "));
|
|
@@ -17107,7 +17141,7 @@ What a push guarantees (two stages):
|
|
|
17107
17141
|
});
|
|
17108
17142
|
}
|
|
17109
17143
|
else {
|
|
17110
|
-
const fieldDiffs = appSettingsFieldDiffs(localAppSettings, settingsOutcome.value ?? {}, { excludeName });
|
|
17144
|
+
const fieldDiffs = appSettingsFieldDiffs(localAppSettings, settingsOutcome.value ?? {}, { excludeName, excludeProtection: diffsLocalEnvironment });
|
|
17111
17145
|
if (fieldDiffs.length === 0) {
|
|
17112
17146
|
appRow("exists");
|
|
17113
17147
|
}
|