@snutils/snu 0.3.4 → 0.3.5

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.
Files changed (46) hide show
  1. package/dist/cli/format.d.ts +0 -3
  2. package/dist/cli/format.d.ts.map +1 -1
  3. package/dist/cli/format.js +45 -3
  4. package/dist/cli/format.js.map +1 -1
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +46 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/mcp/index.d.ts.map +1 -1
  9. package/dist/mcp/index.js +12 -1
  10. package/dist/mcp/index.js.map +1 -1
  11. package/dist/nowsdk/NowSdkBuild.d.ts +53 -0
  12. package/dist/nowsdk/NowSdkBuild.d.ts.map +1 -0
  13. package/dist/nowsdk/NowSdkBuild.js +152 -0
  14. package/dist/nowsdk/NowSdkBuild.js.map +1 -0
  15. package/dist/nowsdk/NowSdkFlows.d.ts +99 -0
  16. package/dist/nowsdk/NowSdkFlows.d.ts.map +1 -0
  17. package/dist/nowsdk/NowSdkFlows.js +203 -0
  18. package/dist/nowsdk/NowSdkFlows.js.map +1 -0
  19. package/dist/nowsdk/NowSdkProject.d.ts +71 -0
  20. package/dist/nowsdk/NowSdkProject.d.ts.map +1 -0
  21. package/dist/nowsdk/NowSdkProject.js +341 -0
  22. package/dist/nowsdk/NowSdkProject.js.map +1 -0
  23. package/dist/nowsdk/NowSdkPull.d.ts +147 -0
  24. package/dist/nowsdk/NowSdkPull.d.ts.map +1 -0
  25. package/dist/nowsdk/NowSdkPull.js +809 -0
  26. package/dist/nowsdk/NowSdkPull.js.map +1 -0
  27. package/dist/registry.d.ts.map +1 -1
  28. package/dist/registry.js +114 -0
  29. package/dist/registry.js.map +1 -1
  30. package/dist/server/dispatcher.d.ts +1 -0
  31. package/dist/server/dispatcher.d.ts.map +1 -1
  32. package/dist/server/dispatcher.js +65 -0
  33. package/dist/server/dispatcher.js.map +1 -1
  34. package/dist/server/httpBridge.d.ts.map +1 -1
  35. package/dist/server/httpBridge.js +2 -0
  36. package/dist/server/httpBridge.js.map +1 -1
  37. package/dist/server/policy.d.ts.map +1 -1
  38. package/dist/server/policy.js +8 -0
  39. package/dist/server/policy.js.map +1 -1
  40. package/dist/server/wsBridge.d.ts.map +1 -1
  41. package/dist/server/wsBridge.js +7 -1
  42. package/dist/server/wsBridge.js.map +1 -1
  43. package/dist/types.d.ts +6 -0
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/types.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ // ServiceNow SDK (NOW SDK / Fluent) project support.
3
+ //
4
+ // A folder containing `now.config.json` is a NOW SDK project. Its sources
5
+ // (`*.now.ts`, `src/server/**`) compile into an application package; they are
6
+ // never ScriptSync field files, so the field sync must skip them entirely and
7
+ // the app is deployed as a whole package instead (see NowSdkDeploy.ts).
8
+ //
9
+ // Kept free of `vscode` imports so it can be unit tested under plain Node.
10
+ // packages/snu/src/nowsdk/ holds a byte-identical copy for the standalone
11
+ // bridge; src/test/nowSdkShared.test.ts fails when the two drift.
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.NowSdkProjectError = exports.SUPPORTED_SDK = exports.NOW_CONFIG_FILE = void 0;
47
+ exports.findNowSdkProjectRoot = findNowSdkProjectRoot;
48
+ exports.readNowSdkProject = readNowSdkProject;
49
+ exports.assertSupportedProject = assertSupportedProject;
50
+ exports.readSdkVersion = readSdkVersion;
51
+ exports.assertSupportedSdk = assertSupportedSdk;
52
+ exports.listFlowRecordIds = listFlowRecordIds;
53
+ exports.parsePackOutput = parsePackOutput;
54
+ exports.findNewestZip = findNewestZip;
55
+ exports.readDeployLink = readDeployLink;
56
+ exports.writeDeployLink = writeDeployLink;
57
+ exports.findNowSdkProjects = findNowSdkProjects;
58
+ exports.resolveNowSdkProjectRoot = resolveNowSdkProjectRoot;
59
+ const fs = __importStar(require("fs"));
60
+ const path = __importStar(require("path"));
61
+ exports.NOW_CONFIG_FILE = 'now.config.json';
62
+ const LINK_DIR = '.snu';
63
+ const LINK_FILE = 'deploy.json';
64
+ /** ServiceNow SDK versions whose packages and install protocol match what ScriptSync sends. */
65
+ exports.SUPPORTED_SDK = { min: '4.1.0', belowMajor: 5 };
66
+ class NowSdkProjectError extends Error {
67
+ }
68
+ exports.NowSdkProjectError = NowSdkProjectError;
69
+ // Directory -> "contains now.config.json", briefly cached because the field
70
+ // sync asks for every saved and watched file.
71
+ const CACHE_TTL_MS = 5000;
72
+ const configCache = new Map();
73
+ function dirHasNowConfig(dir) {
74
+ const cached = configCache.get(dir);
75
+ const now = Date.now();
76
+ if (cached && now - cached.at < CACHE_TTL_MS)
77
+ return cached.has;
78
+ let has = false;
79
+ try {
80
+ has = fs.statSync(path.join(dir, exports.NOW_CONFIG_FILE)).isFile();
81
+ }
82
+ catch {
83
+ has = false;
84
+ }
85
+ configCache.set(dir, { has, at: now });
86
+ return has;
87
+ }
88
+ /**
89
+ * The NOW SDK project root that contains `filePath`, or null. When `stopAt` is
90
+ * given, only directories from the file's folder up to and including `stopAt`
91
+ * are checked, so a project outside that folder never matches.
92
+ */
93
+ function findNowSdkProjectRoot(filePath, stopAt) {
94
+ if (!filePath)
95
+ return null;
96
+ const limit = stopAt ? path.resolve(stopAt) : undefined;
97
+ let dir = path.dirname(path.resolve(filePath));
98
+ if (limit && dir !== limit && !dir.startsWith(limit + path.sep))
99
+ return null;
100
+ while (true) {
101
+ if (dirHasNowConfig(dir))
102
+ return dir;
103
+ if (limit && dir === limit)
104
+ return null;
105
+ const parent = path.dirname(dir);
106
+ if (parent === dir)
107
+ return null;
108
+ dir = parent;
109
+ }
110
+ }
111
+ function readJson(file) {
112
+ try {
113
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
114
+ }
115
+ catch (e) {
116
+ throw new NowSdkProjectError(`Could not read ${path.basename(file)}: ${e?.message || e}`);
117
+ }
118
+ }
119
+ /** Resolve a configured output folder, refusing anything outside the project. */
120
+ function projectDir(root, configured, fallback) {
121
+ const rel = typeof configured === 'string' && configured.trim() ? configured.trim() : fallback;
122
+ const resolved = path.resolve(root, rel);
123
+ if (resolved !== root && !resolved.startsWith(root + path.sep)) {
124
+ throw new NowSdkProjectError(`Output folder "${rel}" is outside the project.`);
125
+ }
126
+ return resolved;
127
+ }
128
+ function readNowSdkProject(root) {
129
+ const resolvedRoot = path.resolve(root);
130
+ const config = readJson(path.join(resolvedRoot, exports.NOW_CONFIG_FILE));
131
+ const pkg = readJson(path.join(resolvedRoot, 'package.json'));
132
+ const scope = String(config?.scope || '');
133
+ const scopeId = String(config?.scopeId || '');
134
+ const version = String(pkg?.version || '');
135
+ if (!/^[a-z][a-z0-9_]{1,17}$/.test(scope))
136
+ throw new NowSdkProjectError(`Invalid scope "${scope}" in ${exports.NOW_CONFIG_FILE}.`);
137
+ if (!/^([0-9a-f]{32}|global)$/.test(scopeId))
138
+ throw new NowSdkProjectError(`Invalid scopeId "${scopeId}" in ${exports.NOW_CONFIG_FILE}.`);
139
+ if (!/^[0-9A-Za-z.+-]{1,32}$/.test(version))
140
+ throw new NowSdkProjectError(`Invalid or missing version in package.json.`);
141
+ return {
142
+ root: resolvedRoot,
143
+ name: String(config?.name || scope),
144
+ scope,
145
+ scopeId,
146
+ version,
147
+ appOutputDir: projectDir(resolvedRoot, config?.appOutputDir, path.join('dist', 'app')),
148
+ packOutputDir: projectDir(resolvedRoot, config?.packOutputDir, 'target'),
149
+ type: String(config?.type || 'package'),
150
+ installAs: String(config?.installAs || ''),
151
+ hasHostedPlugins: !!config?.hostedPlugins && Object.keys(config.hostedPlugins).length > 0,
152
+ };
153
+ }
154
+ /**
155
+ * Refuse app types ScriptSync does not deploy or pull the way the SDK does,
156
+ * with a pointer to `now-sdk install` / `now-sdk transform` for them.
157
+ */
158
+ function assertSupportedProject(project) {
159
+ const fallback = 'Use the ServiceNow SDK itself (now-sdk install / now-sdk transform) for this app.';
160
+ if (project.type === 'configuration') {
161
+ throw new NowSdkProjectError(`${project.name} is a configuration project, which the SDK installs into an update set. That is not supported yet. ${fallback}`);
162
+ }
163
+ if (project.installAs === 'store' || project.hasHostedPlugins) {
164
+ throw new NowSdkProjectError(`${project.name} installs as a Store app (installAs "store" or hostedPlugins). That is not supported yet. ${fallback}`);
165
+ }
166
+ if (project.scope === 'global' || project.scopeId === 'global') {
167
+ throw new NowSdkProjectError(`${project.name} is a global-scope app. That is not supported yet. ${fallback}`);
168
+ }
169
+ }
170
+ function versionParts(version) {
171
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(version || '');
172
+ return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
173
+ }
174
+ /** The ServiceNow SDK version installed in the project, or null when it is not installed. */
175
+ function readSdkVersion(root) {
176
+ try {
177
+ const pkg = JSON.parse(fs.readFileSync(path.join(root, 'node_modules', '@servicenow', 'sdk', 'package.json'), 'utf8'));
178
+ return typeof pkg?.version === 'string' ? pkg.version : null;
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ /** Refuse SDK versions outside the range whose packages ScriptSync handles. */
185
+ function assertSupportedSdk(root) {
186
+ const version = readSdkVersion(root);
187
+ if (!version) {
188
+ throw new NowSdkProjectError(`The ServiceNow SDK is not installed in ${path.basename(root)}. Run npm install in the project first.`);
189
+ }
190
+ const have = versionParts(version);
191
+ const min = versionParts(exports.SUPPORTED_SDK.min);
192
+ const tooOld = !have || have[0] < min[0] || (have[0] === min[0] && (have[1] < min[1] || (have[1] === min[1] && have[2] < min[2])));
193
+ if (tooOld || (have && have[0] >= exports.SUPPORTED_SDK.belowMajor)) {
194
+ throw new NowSdkProjectError(`${path.basename(root)} uses ServiceNow SDK ${version}; ScriptSync supports ${exports.SUPPORTED_SDK.min} up to ${exports.SUPPORTED_SDK.belowMajor - 1}.x. Use now-sdk install and now-sdk transform, or update the SDK in the project.`);
195
+ }
196
+ return version;
197
+ }
198
+ /**
199
+ * Flow and action record ids in the built app, for activating them after an
200
+ * install (the SDK's own post-install step). Read from the build output file
201
+ * names, which follow `<table>_<sys_id>.xml`.
202
+ */
203
+ function listFlowRecordIds(appOutputDir) {
204
+ const flows = [];
205
+ const actions = [];
206
+ let files = [];
207
+ try {
208
+ files = fs.readdirSync(path.join(appOutputDir, 'update'));
209
+ }
210
+ catch {
211
+ return { flows, actions };
212
+ }
213
+ for (const f of files) {
214
+ let m = /^sys_hub_flow_([0-9a-f]{32})\.xml$/.exec(f);
215
+ if (m) {
216
+ flows.push(m[1]);
217
+ continue;
218
+ }
219
+ m = /^sys_hub_action_type_definition_([0-9a-f]{32})\.xml$/.exec(f);
220
+ if (m)
221
+ actions.push(m[1]);
222
+ }
223
+ return { flows, actions };
224
+ }
225
+ /** The zip path reported by `now-sdk pack`, or null. */
226
+ function parsePackOutput(output) {
227
+ const m = /artifact emitted as "([^"]+\.zip)"/i.exec(output || '');
228
+ return m ? m[1] : null;
229
+ }
230
+ /** Newest `.zip` in a folder, used when the pack output could not be parsed. */
231
+ function findNewestZip(dir) {
232
+ let newest = null;
233
+ let entries = [];
234
+ try {
235
+ entries = fs.readdirSync(dir);
236
+ }
237
+ catch {
238
+ return null;
239
+ }
240
+ for (const f of entries) {
241
+ if (!f.toLowerCase().endsWith('.zip'))
242
+ continue;
243
+ const full = path.join(dir, f);
244
+ try {
245
+ const mtime = fs.statSync(full).mtimeMs;
246
+ if (!newest || mtime > newest.mtime)
247
+ newest = { file: full, mtime };
248
+ }
249
+ catch { }
250
+ }
251
+ return newest ? newest.file : null;
252
+ }
253
+ /**
254
+ * The instance this project deploys to. Stored in `.snu/deploy.json` inside the
255
+ * project, next to a `.gitignore` that keeps the folder out of git: the link is
256
+ * a personal choice, not project configuration.
257
+ */
258
+ function readDeployLink(root) {
259
+ try {
260
+ const link = JSON.parse(fs.readFileSync(path.join(root, LINK_DIR, LINK_FILE), 'utf8'));
261
+ if (link && typeof link.instance === 'string' && link.instance && typeof link.url === 'string' && /^https?:\/\//.test(link.url)) {
262
+ return { instance: link.instance, url: link.url };
263
+ }
264
+ }
265
+ catch { }
266
+ return null;
267
+ }
268
+ function writeDeployLink(root, link) {
269
+ const dir = path.join(root, LINK_DIR);
270
+ fs.mkdirSync(dir, { recursive: true });
271
+ const ignore = path.join(dir, '.gitignore');
272
+ if (!fs.existsSync(ignore))
273
+ fs.writeFileSync(ignore, '*\n');
274
+ fs.writeFileSync(path.join(dir, LINK_FILE), JSON.stringify({ instance: link.instance, url: link.url }, null, 2) + '\n');
275
+ }
276
+ const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'target', '.snu', '.vscode']);
277
+ /** NOW SDK project roots under `root`, a few levels deep, skipping build and dependency folders. */
278
+ function findNowSdkProjects(root, maxDepth = 3) {
279
+ const found = [];
280
+ const walk = (dir, depth) => {
281
+ if (dirHasNowConfig(dir)) {
282
+ found.push(dir);
283
+ return; // a project does not contain further projects
284
+ }
285
+ if (depth >= maxDepth)
286
+ return;
287
+ let entries = [];
288
+ try {
289
+ entries = fs.readdirSync(dir, { withFileTypes: true });
290
+ }
291
+ catch {
292
+ return;
293
+ }
294
+ for (const e of entries) {
295
+ if (e.isDirectory() && !e.isSymbolicLink() && !SKIP_DIRS.has(e.name) && !e.name.startsWith('.')) {
296
+ walk(path.join(dir, e.name), depth + 1);
297
+ }
298
+ }
299
+ };
300
+ walk(path.resolve(root), 0);
301
+ return found.sort();
302
+ }
303
+ /**
304
+ * The project an agent asked for. `projectPath` (relative to `root`, or
305
+ * absolute) must stay inside `root`, symlinks included. Without it, `root`
306
+ * must contain exactly one project.
307
+ */
308
+ function resolveNowSdkProjectRoot(root, projectPath) {
309
+ const base = path.resolve(root);
310
+ let realBase = base;
311
+ try {
312
+ realBase = fs.realpathSync(base);
313
+ }
314
+ catch { }
315
+ if (projectPath) {
316
+ const target = path.resolve(base, projectPath);
317
+ const inside = (p, r) => p === r || p.startsWith(r + path.sep);
318
+ if (!inside(target, base))
319
+ throw new NowSdkProjectError(`projectPath must be inside ${base}.`);
320
+ let realTarget = target;
321
+ try {
322
+ realTarget = fs.realpathSync(target);
323
+ }
324
+ catch {
325
+ throw new NowSdkProjectError(`projectPath not found: ${projectPath}`);
326
+ }
327
+ if (!inside(realTarget, realBase))
328
+ throw new NowSdkProjectError(`projectPath must be inside ${base}.`);
329
+ const dir = fs.statSync(realTarget).isDirectory() ? realTarget : path.dirname(realTarget);
330
+ if (!dirHasNowConfig(dir))
331
+ throw new NowSdkProjectError(`No ${exports.NOW_CONFIG_FILE} in ${projectPath}.`);
332
+ return dir;
333
+ }
334
+ const projects = findNowSdkProjects(base);
335
+ if (projects.length === 1)
336
+ return projects[0];
337
+ if (projects.length === 0)
338
+ throw new NowSdkProjectError(`No NOW SDK project (${exports.NOW_CONFIG_FILE}) found under ${base}.`);
339
+ throw new NowSdkProjectError(`Several NOW SDK projects found; pass projectPath: ${projects.map((p) => path.relative(base, p) || '.').join(', ')}`);
340
+ }
341
+ //# sourceMappingURL=NowSdkProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkProject.js","sourceRoot":"","sources":["../../src/nowsdk/NowSdkProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ export declare const MAX_DOWNLOAD_BYTES: number;
2
+ export type PullChangeStatus = 'modified' | 'added' | 'removed';
3
+ export interface PullChange {
4
+ /** Path relative to the project root, with forward slashes. */
5
+ path: string;
6
+ status: PullChangeStatus;
7
+ }
8
+ export interface PullStaging {
9
+ /** Temporary folder holding everything for this pull; remove with cleanupPull. */
10
+ tempDir: string;
11
+ /** The project copy the SDK converted the instance package into. */
12
+ stagingRoot: string;
13
+ changes: PullChange[];
14
+ }
15
+ /**
16
+ * Unpack a zip into `dest` with Node's zlib. Supports stored and deflated
17
+ * entries, which is what the instance produces. Entry names that would land
18
+ * outside `dest` are refused.
19
+ */
20
+ export declare function extractZip(zip: Buffer, dest: string): string[];
21
+ /** Project files (forward-slash relative paths), leaving out build output, dependencies and .snu. */
22
+ export declare function listProjectFiles(root: string): string[];
23
+ /** Files that differ between the project and the staged copy. */
24
+ export declare function diffProjects(projectRoot: string, stagingRoot: string): PullChange[];
25
+ /**
26
+ * Convert a downloaded application package into Fluent in a temporary copy of
27
+ * the project and report what differs. The project itself is not touched.
28
+ */
29
+ export declare function stagePull(projectRoot: string, packageZip: Buffer, onOutput?: (text: string) => void): Promise<PullStaging>;
30
+ /** Copy the chosen changes from the staged copy into the project. */
31
+ export declare function applyPullChanges(projectRoot: string, stagingRoot: string, changes: PullChange[]): void;
32
+ /** What a pull changed, to put the project back with undoPull. */
33
+ export interface PullUndo {
34
+ /** Previous content per path; null means the pull added the file. */
35
+ files: Array<{
36
+ path: string;
37
+ previous: Buffer | null;
38
+ }>;
39
+ /** What ScriptSync knew about the instance before the pull, put back by an undo. */
40
+ sync?: SyncState;
41
+ }
42
+ /** The baseline for an instance and the pull marker, as saved before a pull. */
43
+ export interface SyncState {
44
+ instance: string;
45
+ /** Baseline files by name (the format file included); null when there was none. */
46
+ baseline: Map<string, Buffer> | null;
47
+ pullMarker: Buffer | null;
48
+ }
49
+ /** Save the baseline for an instance and the pull marker, to put back later. */
50
+ export declare function captureSyncState(projectRoot: string, instanceName: string): SyncState;
51
+ /** Put back a state saved with captureSyncState. */
52
+ export declare function restoreSyncState(projectRoot: string, state: SyncState): void;
53
+ /**
54
+ * Apply every added and modified file and remember what was there before.
55
+ * Removals are never applied this way: a file missing from the instance
56
+ * package is left for the user to delete.
57
+ */
58
+ export declare function applyPullWithUndo(projectRoot: string, stagingRoot: string, changes: PullChange[], instanceName?: string): PullUndo;
59
+ /** Put back what a pull changed: restore previous contents, remove added files. */
60
+ export declare function undoPull(projectRoot: string, undo: PullUndo): void;
61
+ /**
62
+ * Of `paths` (relative to the project), the ones with uncommitted changes in
63
+ * git. null when the project is not in a git repository or git is missing, in
64
+ * which case a pull is reviewed file by file instead.
65
+ */
66
+ export declare function gitUncommittedPaths(projectRoot: string, paths: string[]): Promise<string[] | null>;
67
+ export interface InstanceChange {
68
+ /** Record label, e.g. "Script Include SpikeNew". */
69
+ label: string;
70
+ status: 'changed' | 'new' | 'removed';
71
+ /**
72
+ * The record comes from the project's source in a way the SDK's pull
73
+ * cannot write back to (see `reason`): a pull cannot bring the change in,
74
+ * and the next deploy overwrites it.
75
+ */
76
+ generated?: boolean;
77
+ /** Why a pull cannot bring the change in, e.g. "compiled from your server source". */
78
+ reason?: string;
79
+ /** At a deploy: the fields changed on the instance that the build would overwrite. */
80
+ fields?: string[];
81
+ /** The record's file in the package (update/<file>). */
82
+ file?: string;
83
+ }
84
+ export declare const TABLE_LABELS: Record<string, string>;
85
+ /** A baseline in the current format exists; an older one counts as none until the next sync. */
86
+ export declare function hasBaseline(projectRoot: string, instanceName: string): boolean;
87
+ /** The app's records in a downloaded package, keyed by file name. */
88
+ export declare function readPackageRecords(packageZip: Buffer): Map<string, string>;
89
+ /**
90
+ * Record the instance's version of the app (a downloaded package) as the
91
+ * baseline. Files in `keep` stay at their previous baseline version (or stay
92
+ * absent), so changes a pull could not bring in keep being reported.
93
+ */
94
+ export declare function saveBaselineFromPackage(projectRoot: string, instanceName: string, packageZip: Buffer, _onOutput?: (text: string) => void, keep?: string[]): Promise<void>;
95
+ /** One record of the baseline (the state after the last sync), if any. */
96
+ export declare function readBaselineRecord(projectRoot: string, instanceName: string, file: string): string | undefined;
97
+ /** A record's fields (history fields left out), values as stored. */
98
+ export declare function readRecordFields(xml: string): Map<string, string>;
99
+ /** Of `fields`, the ones whose value in `builtXml` differs from `instanceXml` (compared as a deploy check does). */
100
+ export declare function fieldsBuiltDifferently(builtXml: string | undefined, instanceXml: string, fields: string[]): string[];
101
+ /** The fields that differ between two versions of a record (compared as a deploy check does). */
102
+ export declare function changedFieldNames(beforeXml: string, afterXml: string): string[];
103
+ /** One record of the last build (dist/app/update), if any. */
104
+ export declare function readBuiltRecord(appOutputDir: string, file: string): string | undefined;
105
+ /** keys.ts: record sys_id -> the Now.ID name it is defined with. */
106
+ export declare function readKeyNames(projectRoot: string): Map<string, string>;
107
+ /** A record as readable text, one field per section, for a diff view. */
108
+ export declare function recordForReading(xml: string | undefined): string;
109
+ /**
110
+ * Accept that the next deploy overwrites a change made on the instance: the
111
+ * baseline takes the instance version of that record, so it is no longer
112
+ * reported. `instanceXml` undefined means the record was deleted there.
113
+ */
114
+ export declare function dismissInstanceChange(projectRoot: string, instanceName: string, file: string, instanceXml: string | undefined): void;
115
+ /** Records that changed on the instance since the baseline, from records already read. */
116
+ export declare function instanceChangesFromRecords(projectRoot: string, instanceName: string, now: Map<string, string>): InstanceChange[];
117
+ /** Records that changed on the instance since the baseline, from a downloaded package. */
118
+ export declare function instanceChangesFromPackage(projectRoot: string, instanceName: string, packageZip: Buffer, _onOutput?: (text: string) => void): Promise<InstanceChange[]>;
119
+ /**
120
+ * At a deploy, with the app just built: which instance changes since the
121
+ * baseline the install would overwrite. A record counts only when a field
122
+ * changed on the instance differs from the build, so changes already in the
123
+ * source (for example pulled) do not. Records that exist only on the instance
124
+ * are left alone by an install and are reported separately.
125
+ */
126
+ export declare function deployConflicts(projectRoot: string, instanceName: string, packageZip: Buffer, appOutputDir: string): {
127
+ overwritten: InstanceChange[];
128
+ instanceOnly: InstanceChange[];
129
+ };
130
+ /** Whether this project was pulled before (the first pull also writes out SDK defaults). */
131
+ export declare function hasPulledBefore(projectRoot: string): boolean;
132
+ export interface SyncMarker {
133
+ instance: string;
134
+ /** ISO timestamp. */
135
+ at: string;
136
+ }
137
+ /** When the app was last deployed and pulled from this project. */
138
+ export declare function readSyncMarkers(projectRoot: string): {
139
+ deploy: SyncMarker | null;
140
+ pull: SyncMarker | null;
141
+ };
142
+ /** Remember the last successful deploy. */
143
+ export declare function markDeployed(projectRoot: string, instanceName: string): void;
144
+ /** Remember the last pull. */
145
+ export declare function markPulled(projectRoot: string, instanceName: string): void;
146
+ export declare function cleanupPull(tempDir: string): void;
147
+ //# sourceMappingURL=NowSdkPull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NowSdkPull.d.ts","sourceRoot":"","sources":["../../src/nowsdk/NowSdkPull.ts"],"names":[],"mappings":"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"}