@uipath/case-tool 1.203.0-preview.205 → 1.204.0-preview.206
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 +6 -1
- package/dist/THIRD-PARTY-NOTICES.md +48 -9
- package/dist/authoring-0hr88kff.js +623 -0
- package/dist/{case-api-v6cjyrfw.js → case-api-gdaj9469.js} +5 -5
- package/dist/case-bindings-service-c2mze9vj.js +476 -0
- package/dist/{case-debug-studio-web-service-shg84pn8.js → case-debug-studio-web-service-cc0vj7md.js} +11 -10
- package/dist/case-described-io-service-cpe5h2ks.js +132 -0
- package/dist/{case-format-service-q345a2fd.js → case-format-service-qwyjyt0y.js} +2 -2
- package/dist/{case-pack-service-29rza2q2.js → case-pack-service-47yrvmg0.js} +11 -11
- package/dist/case-shape-reader-mw58avr0.js +13 -0
- package/dist/case-splice-service-9zvw19ca.js +312 -0
- package/dist/{case-validate-service-2n2bqc1g.js → case-validate-service-vrvx19c1.js} +415 -1449
- package/dist/{connector-enrichment-service-h662r92z.js → connector-enrichment-service-rg87npf0.js} +20 -18
- package/dist/{connector-lookup-service-y7x6xsc6.js → connector-lookup-service-c49pvfwb.js} +7 -7
- package/dist/{connector-task-spec-qm6q8qma.js → connector-task-spec-t3tjeeqt.js} +86 -26
- package/dist/{debug-service-8x087xxt.js → debug-service-vf5mw0nr.js} +3 -3
- package/dist/{embedded-file-reader-0sjt4nkj.js → embedded-file-reader-v8c2yj2a.js} +2 -2
- package/dist/{enrichment-service-7vbxcwge.js → enrichment-service-78b0gqck.js} +8 -7
- package/dist/index-hhsf00x8.js +15 -0
- package/dist/{index-fz4ttsde.js → index-j2r3jb6c.js} +5 -3
- package/dist/{index-jxj2jz45.js → index-rgw7caht.js} +416 -87
- package/dist/{index-k4xz16db.js → index-wmffgzmr.js} +12522 -7316
- package/dist/{index-va9sm89y.js → index-ynnr55wk.js} +59 -27
- package/dist/index.js +15 -11
- package/dist/{input-reader-pnh948bq.js → input-reader-bb0ptk2v.js} +2 -2
- package/dist/migration-diagnosis-ag2sgd1e.js +71 -0
- package/dist/{node-strategy-gc4sg6a2.js → node-strategy-5pz40tee.js} +1 -1
- package/dist/{node-sync-service-mehbp4qq.js → node-sync-service-xw3tpfj5.js} +6 -6
- package/dist/out-target-1f4n9vqb.js +70 -0
- package/dist/{packager-tool-wefb1zw3.js → packager-tool-0p3td5zv.js} +8 -7
- package/dist/packager-tool-21qfsbxn.js +17 -0
- package/dist/{strict-sdd-audit-8e2fh9jg.js → packager-tool-4e56rmwe.js} +2771 -1746
- package/dist/{packager-tool-sfkyb4kz.js → packager-tool-4rqd21wc.js} +194 -2
- package/dist/packager-tool-57pzrd0g.js +32 -0
- package/dist/{packager-tool-kpcjnxd1.js → packager-tool-58kx79ta.js} +586 -113
- package/dist/{packager-tool-hrdan5ms.js → packager-tool-5qghkdd0.js} +2 -2
- package/dist/packager-tool-5qp9xza1.js +10 -0
- package/dist/packager-tool-8a9yqfq7.js +76 -0
- package/dist/{packager-tool-40vq60aa.js → packager-tool-8mpxsyje.js} +4 -4
- package/dist/{packager-tool-e3k5gzd3.js → packager-tool-a6wztj6y.js} +669 -100
- package/dist/{packager-tool-p0zh9hw6.js → packager-tool-ayevyw80.js} +5 -5
- package/dist/packager-tool-b250k6w4.js +75 -0
- package/dist/packager-tool-bfgdz1zh.js +73 -0
- package/dist/{packager-tool-p7jgrm5r.js → packager-tool-cmwets3m.js} +1 -1
- package/dist/{packager-tool-d4sjk46c.js → packager-tool-cv05dwac.js} +18 -21
- package/dist/packager-tool-d7jjng8a.js +21 -0
- package/dist/packager-tool-dthjwajc.js +13 -0
- package/dist/{packager-tool-zcsm7dsj.js → packager-tool-e760vtgg.js} +4 -4
- package/dist/packager-tool-f78ntj5g.js +228 -0
- package/dist/{packager-tool-2xfyykm0.js → packager-tool-ggbvxvey.js} +320 -200
- package/dist/{packager-tool-6karkrc8.js → packager-tool-jx0yq0b5.js} +6 -6
- package/dist/{packager-tool-cg2j4rma.js → packager-tool-kacqd7h7.js} +4 -4
- package/dist/packager-tool-mknccck5.js +24 -0
- package/dist/{packager-tool-sv0d6wb6.js → packager-tool-nj4seavy.js} +7 -3
- package/dist/{packager-tool-adcaxdhs.js → packager-tool-paepfv5d.js} +1 -1
- package/dist/{packager-tool-052kvydg.js → packager-tool-pm646ag4.js} +1 -1
- package/dist/{packager-tool-dd8bq6az.js → packager-tool-rgpdaxbx.js} +548 -108
- package/dist/{packager-tool-8q7vzh65.js → packager-tool-s3e2kepj.js} +455 -13
- package/dist/{packager-tool-r84ng21s.js → packager-tool-sag9gz55.js} +3 -1
- package/dist/{packager-tool-0mj06yen.js → packager-tool-sq931c23.js} +5 -22
- package/dist/{packager-tool-yrsrzz1a.js → packager-tool-v99ygh9f.js} +23 -8
- package/dist/packager-tool-wj9d9mqe.js +267 -0
- package/dist/{packager-tool-hz1mz8fs.js → packager-tool-wjaya2k2.js} +2 -2
- package/dist/packager-tool-xcd87qyx.js +44 -0
- package/dist/{packager-tool-0v3s8r01.js → packager-tool-xdxr3ync.js} +4 -2
- package/dist/{packager-tool-61hxhgeg.js → packager-tool-xkgq5fkf.js} +3 -3
- package/dist/packager-tool.js +6 -6
- package/dist/{project-artifacts-8snev67g.js → project-artifacts-wzrhketn.js} +1 -1
- package/dist/resolved-check-p99hysaw.js +50 -0
- package/dist/{resourcesSyncService-pmfwz9cd.js → resourcesSyncService-1ezvhcbc.js} +25 -18
- package/dist/rule-group-members-zje7n3kf.js +76 -0
- package/dist/sdd-convert-service-gp9733qv.js +1962 -0
- package/dist/{sdd-lookup-x08j9g9m.js → sdd-lookup-vpjej1kt.js} +2 -2
- package/dist/sdd-resolve-service-4hx64x3z.js +288 -0
- package/dist/strict-case-rules-ksy8q7pg.js +731 -0
- package/dist/strict-entry-points-v14d7y50.js +124 -0
- package/dist/strict-sdd-audit-k6hh0mbr.js +23 -0
- package/dist/task-selector-8bjn35dv.js +57 -0
- package/dist/tool.js +15 -11
- package/dist/{trigger-enrichment-service-xexg7qbk.js → trigger-enrichment-service-pjw5ysny.js} +41 -23
- package/package.json +2 -2
- package/dist/authoring-kngaggwm.js +0 -360
- package/dist/case-bindings-service-1wxfghzd.js +0 -240
- package/dist/packager-tool-83qnybab.js +0 -1564
- package/dist/strict-case-rules-x6t0vb40.js +0 -409
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
catchError
|
|
3
|
-
} from "./packager-tool-
|
|
3
|
+
} from "./packager-tool-58kx79ta.js";
|
|
4
4
|
import {
|
|
5
5
|
getFileSystem
|
|
6
|
-
} from "./packager-tool-
|
|
6
|
+
} from "./packager-tool-xdxr3ync.js";
|
|
7
7
|
import"./packager-tool-1yh8g550.js";
|
|
8
8
|
|
|
9
9
|
// src/services/sdd-lookup.ts
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import {
|
|
2
|
+
comparableFolder
|
|
3
|
+
} from "./packager-tool-21qfsbxn.js";
|
|
4
|
+
import {
|
|
5
|
+
namedValue
|
|
6
|
+
} from "./packager-tool-f78ntj5g.js";
|
|
7
|
+
import {
|
|
8
|
+
MISSING_RESOURCE_INDEX,
|
|
9
|
+
loadIndexMetadata,
|
|
10
|
+
loadResourceIndex
|
|
11
|
+
} from "./packager-tool-0p3td5zv.js";
|
|
12
|
+
import {
|
|
13
|
+
byCodeUnit
|
|
14
|
+
} from "./packager-tool-5qp9xza1.js";
|
|
15
|
+
import {
|
|
16
|
+
catchError
|
|
17
|
+
} from "./packager-tool-58kx79ta.js";
|
|
18
|
+
import"./packager-tool-xdxr3ync.js";
|
|
19
|
+
import"./packager-tool-1yh8g550.js";
|
|
20
|
+
|
|
21
|
+
// src/services/sdd-resolve-service.ts
|
|
22
|
+
var CACHE_MAX_AGE_SECONDS = 3600;
|
|
23
|
+
var TYPE_INDEX = {
|
|
24
|
+
agent: {
|
|
25
|
+
cacheFile: "agent",
|
|
26
|
+
identifierField: "entityKey",
|
|
27
|
+
creatable: true
|
|
28
|
+
},
|
|
29
|
+
process: {
|
|
30
|
+
cacheFile: "processOrchestration",
|
|
31
|
+
identifierField: "entityKey",
|
|
32
|
+
creatable: false
|
|
33
|
+
},
|
|
34
|
+
rpa: {
|
|
35
|
+
cacheFile: "process",
|
|
36
|
+
identifierField: "entityKey",
|
|
37
|
+
creatable: false
|
|
38
|
+
},
|
|
39
|
+
"api-workflow": {
|
|
40
|
+
cacheFile: "api",
|
|
41
|
+
identifierField: "entityKey",
|
|
42
|
+
creatable: true
|
|
43
|
+
},
|
|
44
|
+
"case-management": {
|
|
45
|
+
cacheFile: "caseManagement",
|
|
46
|
+
identifierField: "entityKey",
|
|
47
|
+
creatable: false
|
|
48
|
+
},
|
|
49
|
+
function: {
|
|
50
|
+
cacheFile: "function",
|
|
51
|
+
identifierField: "entityKey",
|
|
52
|
+
creatable: false
|
|
53
|
+
},
|
|
54
|
+
action: {
|
|
55
|
+
cacheFile: "action-apps",
|
|
56
|
+
identifierField: "id",
|
|
57
|
+
creatable: false
|
|
58
|
+
},
|
|
59
|
+
"wait-for-timer": null,
|
|
60
|
+
"wait-for-connector": {
|
|
61
|
+
cacheFile: "typecache-triggers",
|
|
62
|
+
identifierField: "uiPathActivityTypeId",
|
|
63
|
+
creatable: false
|
|
64
|
+
},
|
|
65
|
+
"execute-connector-activity": {
|
|
66
|
+
cacheFile: "typecache-activities",
|
|
67
|
+
identifierField: "uiPathActivityTypeId",
|
|
68
|
+
creatable: false
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var namesOf = (entry) => ["name", "deploymentTitle", "title", "displayName"].map((field) => entry[field]).filter((value) => typeof value === "string" && value !== "");
|
|
72
|
+
var foldersOf = (entry) => {
|
|
73
|
+
const deployment = entry.deploymentFolder;
|
|
74
|
+
if (typeof deployment?.fullyQualifiedName === "string") {
|
|
75
|
+
return [deployment.fullyQualifiedName];
|
|
76
|
+
}
|
|
77
|
+
const folders = entry.folders;
|
|
78
|
+
return (Array.isArray(folders) ? folders : []).map((one) => one?.fullyQualifiedName).filter((name) => typeof name === "string");
|
|
79
|
+
};
|
|
80
|
+
var sameFolder = (candidate, wanted) => candidate !== undefined && comparableFolder(candidate) === comparableFolder(wanted);
|
|
81
|
+
var matchesFor = (entry, identifierField, wanted) => {
|
|
82
|
+
const identifier = entry[identifierField];
|
|
83
|
+
if (typeof identifier !== "string" || identifier === "")
|
|
84
|
+
return [];
|
|
85
|
+
const base = { name: namesOf(entry)[0] ?? "", identifierField, identifier };
|
|
86
|
+
const all = foldersOf(entry);
|
|
87
|
+
if (all.length === 0)
|
|
88
|
+
return [base];
|
|
89
|
+
const answering = all.find((one) => sameFolder(one, wanted));
|
|
90
|
+
if (answering !== undefined)
|
|
91
|
+
return [{ ...base, folder: answering }];
|
|
92
|
+
return all.map((folder) => ({ ...base, folder }));
|
|
93
|
+
};
|
|
94
|
+
var rationaleFor = (params) => {
|
|
95
|
+
const { selected, matches, candidates, folder, narrowed } = params;
|
|
96
|
+
if (selected !== null) {
|
|
97
|
+
return folder !== "" && narrowed === 1 && matches.length > 1 ? `${matches.length} entries carry this name; the folder "${folder}" leaves one` : "exactly one entry carries this name";
|
|
98
|
+
}
|
|
99
|
+
if (candidates.length === 0)
|
|
100
|
+
return "no entry carries this name";
|
|
101
|
+
const entries = new Set(candidates.map((match) => match.identifier)).size;
|
|
102
|
+
const folders = [
|
|
103
|
+
...new Set(candidates.map((match) => match.folder).filter((one) => one !== undefined))
|
|
104
|
+
];
|
|
105
|
+
const subject = entries === 1 ? "one entry carries this name" : `${entries} entries carry this name`;
|
|
106
|
+
const inFolders = entries === 1 && folders.length > 1 ? `, in ${folders.map((one) => `"${one}"`).join(" and ")}` : "";
|
|
107
|
+
if (folder === "") {
|
|
108
|
+
return `${subject}${inFolders} and the task block names no folder to narrow by, so the choice is not the document's to make`;
|
|
109
|
+
}
|
|
110
|
+
if (narrowed === 0) {
|
|
111
|
+
const where = entries === 1 ? "it is not" : "none of them";
|
|
112
|
+
return `${subject}${inFolders}, and ${where} in the folder "${folder}" the task block names, so the choice is not the document's to make`;
|
|
113
|
+
}
|
|
114
|
+
return `${subject} in the folder "${folder}", so the choice is not the document's to make`;
|
|
115
|
+
};
|
|
116
|
+
var resolveSddResources = async (model, options = {}) => {
|
|
117
|
+
const resolved = [];
|
|
118
|
+
const indexes = new Map;
|
|
119
|
+
const pulledAt = new Map;
|
|
120
|
+
const missingIndexes = new Set;
|
|
121
|
+
const indexFor = async (cacheFile) => {
|
|
122
|
+
const cached = indexes.get(cacheFile);
|
|
123
|
+
if (cached !== undefined)
|
|
124
|
+
return cached;
|
|
125
|
+
if (missingIndexes.has(cacheFile))
|
|
126
|
+
return;
|
|
127
|
+
const [error, entries] = await catchError(loadResourceIndex(cacheFile));
|
|
128
|
+
if (error !== undefined && error.message !== MISSING_RESOURCE_INDEX) {
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
if (error !== undefined || entries === null) {
|
|
132
|
+
missingIndexes.add(cacheFile);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const rows = entries;
|
|
136
|
+
indexes.set(cacheFile, rows);
|
|
137
|
+
const [, meta] = await catchError(loadIndexMetadata(cacheFile));
|
|
138
|
+
const lastSync = meta?.lastSync;
|
|
139
|
+
pulledAt.set(cacheFile, typeof lastSync === "number" && !Number.isNaN(new Date(lastSync).getTime()) ? lastSync : null);
|
|
140
|
+
return rows;
|
|
141
|
+
};
|
|
142
|
+
for (const stage of model.stages) {
|
|
143
|
+
for (const task of stage.tasks) {
|
|
144
|
+
const taskType = String(task.type ?? "");
|
|
145
|
+
const mapping = TYPE_INDEX[taskType];
|
|
146
|
+
const name = namedValue(task.resourceName);
|
|
147
|
+
const folder = namedValue(task.folder);
|
|
148
|
+
const base = {
|
|
149
|
+
stage: stage.name,
|
|
150
|
+
task: task.name,
|
|
151
|
+
taskType,
|
|
152
|
+
searchQuery: { name, ...folder !== "" && { folder } }
|
|
153
|
+
};
|
|
154
|
+
const empty = {
|
|
155
|
+
matches: [],
|
|
156
|
+
selected: null
|
|
157
|
+
};
|
|
158
|
+
if (mapping === null) {
|
|
159
|
+
resolved.push({
|
|
160
|
+
...base,
|
|
161
|
+
...empty,
|
|
162
|
+
cacheFile: null,
|
|
163
|
+
rationale: `a "${taskType}" task runs no tenant resource, so there is nothing to resolve`
|
|
164
|
+
});
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (mapping === undefined) {
|
|
168
|
+
resolved.push({
|
|
169
|
+
...base,
|
|
170
|
+
...empty,
|
|
171
|
+
cacheFile: null,
|
|
172
|
+
rationale: `no cache index is defined for the task type "${taskType}"`
|
|
173
|
+
});
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (name === "") {
|
|
177
|
+
resolved.push({
|
|
178
|
+
...base,
|
|
179
|
+
...empty,
|
|
180
|
+
cacheFile: mapping.cacheFile,
|
|
181
|
+
rationale: "the task block names no resource, so there is nothing to search for"
|
|
182
|
+
});
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const entries = await indexFor(mapping.cacheFile);
|
|
186
|
+
if (entries === undefined) {
|
|
187
|
+
resolved.push({
|
|
188
|
+
...base,
|
|
189
|
+
...empty,
|
|
190
|
+
cacheFile: mapping.cacheFile,
|
|
191
|
+
rationale: `the \`${mapping.cacheFile}\` index is not pulled, so this task was not searched — run \`uip maestro case registry pull\``
|
|
192
|
+
});
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const matches = entries.filter((entry) => namesOf(entry).some((candidate) => candidate === name)).flatMap((entry) => matchesFor(entry, mapping.identifierField, folder));
|
|
196
|
+
const narrowed = folder === "" ? matches : matches.filter((match) => sameFolder(match.folder, folder));
|
|
197
|
+
const candidates = narrowed.length > 0 ? narrowed : matches;
|
|
198
|
+
const selected = candidates.length === 1 && candidates === narrowed ? candidates[0] : null;
|
|
199
|
+
resolved.push({
|
|
200
|
+
...base,
|
|
201
|
+
cacheFile: mapping.cacheFile,
|
|
202
|
+
matches,
|
|
203
|
+
selected,
|
|
204
|
+
rationale: rationaleFor({
|
|
205
|
+
selected,
|
|
206
|
+
matches,
|
|
207
|
+
candidates,
|
|
208
|
+
folder,
|
|
209
|
+
narrowed: narrowed.length
|
|
210
|
+
})
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const groups = new Map;
|
|
215
|
+
for (const entry of resolved) {
|
|
216
|
+
if (entry.selected !== null || entry.cacheFile === null)
|
|
217
|
+
continue;
|
|
218
|
+
if (entry.searchQuery.name === "")
|
|
219
|
+
continue;
|
|
220
|
+
if (missingIndexes.has(entry.cacheFile))
|
|
221
|
+
continue;
|
|
222
|
+
const key = JSON.stringify([entry.searchQuery.name, entry.taskType]);
|
|
223
|
+
const group = groups.get(key) ?? {
|
|
224
|
+
name: entry.searchQuery.name,
|
|
225
|
+
taskType: entry.taskType,
|
|
226
|
+
reason: entry.matches.length > 0 ? "ambiguous" : "absent",
|
|
227
|
+
usages: [],
|
|
228
|
+
candidates: entry.matches,
|
|
229
|
+
creatable: TYPE_INDEX[entry.taskType]?.creatable === true
|
|
230
|
+
};
|
|
231
|
+
group.usages.push({ stage: entry.stage, task: entry.task });
|
|
232
|
+
groups.set(key, group);
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
resolved,
|
|
236
|
+
unresolved: [...groups.values()],
|
|
237
|
+
scope: {
|
|
238
|
+
indexes: [...indexes.keys()].sort(byCodeUnit),
|
|
239
|
+
missingIndexes: [...missingIndexes].sort(byCodeUnit),
|
|
240
|
+
siblingsChecked: false,
|
|
241
|
+
cache: cacheAge(pulledAt, options.now ?? Date.now())
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
var cacheAge = (recorded, now) => {
|
|
246
|
+
const pulledAt = new Map([...recorded].map(([name, at]) => [
|
|
247
|
+
name,
|
|
248
|
+
at !== null && at > now ? null : at
|
|
249
|
+
]));
|
|
250
|
+
const names = [...pulledAt.keys()].sort(byCodeUnit);
|
|
251
|
+
const known = names.map((name) => pulledAt.get(name)).filter((at) => typeof at === "number");
|
|
252
|
+
const oldest = known.length === 0 ? undefined : Math.min(...known);
|
|
253
|
+
const ageSeconds = oldest === undefined ? null : Math.max(0, Math.floor((now - oldest) / 1000));
|
|
254
|
+
const unknown = names.some((name) => pulledAt.get(name) === null);
|
|
255
|
+
return {
|
|
256
|
+
pulledAt: Object.fromEntries(names.map((name) => {
|
|
257
|
+
const at = pulledAt.get(name);
|
|
258
|
+
return [
|
|
259
|
+
name,
|
|
260
|
+
typeof at === "number" ? new Date(at).toISOString() : null
|
|
261
|
+
];
|
|
262
|
+
})),
|
|
263
|
+
oldestPulledAt: oldest === undefined ? null : new Date(oldest).toISOString(),
|
|
264
|
+
ageSeconds,
|
|
265
|
+
stale: unknown || ageSeconds !== null && ageSeconds > CACHE_MAX_AGE_SECONDS,
|
|
266
|
+
maxAgeSeconds: CACHE_MAX_AGE_SECONDS
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
var staleCacheWarning = (cache) => {
|
|
270
|
+
if (cache?.stale !== true)
|
|
271
|
+
return;
|
|
272
|
+
const unrecorded = Object.entries(cache.pulledAt).filter(([, at]) => at === null).map(([name]) => `\`${name}\``);
|
|
273
|
+
const reasons = [];
|
|
274
|
+
if (unrecorded.length > 0) {
|
|
275
|
+
reasons.push(`there is no usable \`registry pull\` time for the ${unrecorded.join(", ")} index${unrecorded.length === 1 ? "" : "es"}, so ${unrecorded.length === 1 ? "its" : "their"} age is unknown`);
|
|
276
|
+
}
|
|
277
|
+
if (cache.ageSeconds !== null && cache.ageSeconds > cache.maxAgeSeconds) {
|
|
278
|
+
reasons.push(`the registry cache is ${Math.round(cache.ageSeconds / 3600)} hour(s) old (pulled ${cache.oldestPulledAt})`);
|
|
279
|
+
}
|
|
280
|
+
return `Resolved against a cache that may not match the tenant: ${reasons.join("; and ")}. Run \`uip maestro case registry pull --force\`, then resolve again.`;
|
|
281
|
+
};
|
|
282
|
+
export {
|
|
283
|
+
CACHE_MAX_AGE_SECONDS,
|
|
284
|
+
resolveSddResources,
|
|
285
|
+
staleCacheWarning
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
//# debugId=7D51E2AE2E0A790564756E2164756E21
|