@shadowcoderr/context-graph 0.3.0
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/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/analyzers/a11y-extractor.d.ts +15 -0
- package/dist/analyzers/a11y-extractor.d.ts.map +1 -0
- package/dist/analyzers/a11y-extractor.js +148 -0
- package/dist/analyzers/a11y-extractor.js.map +1 -0
- package/dist/analyzers/dom-analyzer.d.ts +20 -0
- package/dist/analyzers/dom-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dom-analyzer.js +126 -0
- package/dist/analyzers/dom-analyzer.js.map +1 -0
- package/dist/analyzers/locator-generator.d.ts +13 -0
- package/dist/analyzers/locator-generator.d.ts.map +1 -0
- package/dist/analyzers/locator-generator.js +381 -0
- package/dist/analyzers/locator-generator.js.map +1 -0
- package/dist/analyzers/network-logger.d.ts +15 -0
- package/dist/analyzers/network-logger.d.ts.map +1 -0
- package/dist/analyzers/network-logger.js +71 -0
- package/dist/analyzers/network-logger.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +155 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +54 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +75 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +168 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +104 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/browser-adapter.d.ts +24 -0
- package/dist/core/browser-adapter.d.ts.map +1 -0
- package/dist/core/browser-adapter.js +208 -0
- package/dist/core/browser-adapter.js.map +1 -0
- package/dist/core/capture-engine.d.ts +52 -0
- package/dist/core/capture-engine.d.ts.map +1 -0
- package/dist/core/capture-engine.js +593 -0
- package/dist/core/capture-engine.js.map +1 -0
- package/dist/core/runtime.d.ts +38 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +648 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/prompts/init-prompt.d.ts +12 -0
- package/dist/prompts/init-prompt.d.ts.map +1 -0
- package/dist/prompts/init-prompt.js +128 -0
- package/dist/prompts/init-prompt.js.map +1 -0
- package/dist/registry/components-registry.d.ts +97 -0
- package/dist/registry/components-registry.d.ts.map +1 -0
- package/dist/registry/components-registry.js +469 -0
- package/dist/registry/components-registry.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +7 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/security/patterns.d.ts +4 -0
- package/dist/security/patterns.d.ts.map +1 -0
- package/dist/security/patterns.js +65 -0
- package/dist/security/patterns.js.map +1 -0
- package/dist/security/redactor.d.ts +26 -0
- package/dist/security/redactor.d.ts.map +1 -0
- package/dist/security/redactor.js +128 -0
- package/dist/security/redactor.js.map +1 -0
- package/dist/security/validator.d.ts +11 -0
- package/dist/security/validator.d.ts.map +1 -0
- package/dist/security/validator.js +62 -0
- package/dist/security/validator.js.map +1 -0
- package/dist/storage/engine.d.ts +45 -0
- package/dist/storage/engine.d.ts.map +1 -0
- package/dist/storage/engine.js +479 -0
- package/dist/storage/engine.js.map +1 -0
- package/dist/storage/manifest.d.ts +10 -0
- package/dist/storage/manifest.d.ts.map +1 -0
- package/dist/storage/manifest.js +98 -0
- package/dist/storage/manifest.js.map +1 -0
- package/dist/storage/serializer.d.ts +9 -0
- package/dist/storage/serializer.d.ts.map +1 -0
- package/dist/storage/serializer.js +22 -0
- package/dist/storage/serializer.js.map +1 -0
- package/dist/types/capture.d.ts +206 -0
- package/dist/types/capture.d.ts.map +1 -0
- package/dist/types/capture.js +3 -0
- package/dist/types/capture.js.map +1 -0
- package/dist/types/config.d.ts +63 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/registry.d.ts +94 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +3 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/storage.d.ts +57 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +3 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +26 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +86 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pom-generator.d.ts +12 -0
- package/dist/utils/pom-generator.d.ts.map +1 -0
- package/dist/utils/pom-generator.js +83 -0
- package/dist/utils/pom-generator.js.map +1 -0
- package/dist/utils/validators.d.ts +7 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +51 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecurityRedactor = void 0;
|
|
4
|
+
const patterns_1 = require("./patterns");
|
|
5
|
+
class SecurityRedactor {
|
|
6
|
+
rules;
|
|
7
|
+
redactedHeaders;
|
|
8
|
+
sensitiveKeys = ['password', 'secret', 'token', 'apiKey', 'api_key', 'authorization', 'cookie', 'set-cookie'];
|
|
9
|
+
auditLog = [];
|
|
10
|
+
constructor(customRules = []) {
|
|
11
|
+
this.rules = [...patterns_1.BUILTIN_REDACTION_RULES, ...customRules];
|
|
12
|
+
this.redactedHeaders = patterns_1.REDACTED_HEADERS;
|
|
13
|
+
}
|
|
14
|
+
async redact(data, context, url) {
|
|
15
|
+
const originalSize = JSON.stringify(data).length;
|
|
16
|
+
let redactedData = data; // Note: we mutate in place if it's an object
|
|
17
|
+
const redactions = [];
|
|
18
|
+
// Redact headers if present
|
|
19
|
+
if (redactedData.headers) {
|
|
20
|
+
redactedData.headers = this.redactHeaders(redactedData.headers);
|
|
21
|
+
}
|
|
22
|
+
// Apply key-based redaction
|
|
23
|
+
this.redactSensitiveKeys(redactedData, redactions);
|
|
24
|
+
// Apply all pattern-based redaction rules
|
|
25
|
+
for (const rule of this.rules) {
|
|
26
|
+
const result = this.applyRule(redactedData, rule);
|
|
27
|
+
if (result.count > 0) {
|
|
28
|
+
redactions.push({
|
|
29
|
+
rule: rule.name,
|
|
30
|
+
count: result.count,
|
|
31
|
+
locations: result.locations,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const redactedSize = JSON.stringify(redactedData).length;
|
|
36
|
+
// Log to audit
|
|
37
|
+
if (redactions.length > 0) {
|
|
38
|
+
this.auditLog.push({
|
|
39
|
+
timestamp: new Date().toISOString(),
|
|
40
|
+
context,
|
|
41
|
+
url: url || '',
|
|
42
|
+
redactions: redactions.map(r => ({
|
|
43
|
+
rule: r.rule,
|
|
44
|
+
count: r.count,
|
|
45
|
+
field: r.locations.join(', '),
|
|
46
|
+
})),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
originalSize,
|
|
51
|
+
redactedSize,
|
|
52
|
+
redactions,
|
|
53
|
+
success: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
redactSensitiveKeys(data, redactions) {
|
|
57
|
+
const traverse = (obj, path = '') => {
|
|
58
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
59
|
+
for (const key in obj) {
|
|
60
|
+
const lowerKey = key.toLowerCase();
|
|
61
|
+
const currentPath = path ? `${path}.${key}` : key;
|
|
62
|
+
if (this.sensitiveKeys.some(sk => lowerKey.includes(sk))) {
|
|
63
|
+
const ruleName = `sensitive_key:${key}`;
|
|
64
|
+
obj[key] = '[REDACTED:SENSITIVE_KEY]';
|
|
65
|
+
// Track this redaction
|
|
66
|
+
let existingRedaction = redactions.find(r => r.rule === ruleName);
|
|
67
|
+
if (existingRedaction) {
|
|
68
|
+
existingRedaction.count++;
|
|
69
|
+
existingRedaction.locations.push(currentPath);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
redactions.push({ rule: ruleName, count: 1, locations: [currentPath] });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
traverse(obj[key], currentPath);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
traverse(data);
|
|
82
|
+
}
|
|
83
|
+
redactHeaders(headers) {
|
|
84
|
+
const redacted = { ...headers };
|
|
85
|
+
for (const header of this.redactedHeaders) {
|
|
86
|
+
const lowerHeader = header.toLowerCase();
|
|
87
|
+
// Find the key in headers regardless of case
|
|
88
|
+
const actualKey = Object.keys(redacted).find(k => k.toLowerCase() === lowerHeader);
|
|
89
|
+
if (actualKey) {
|
|
90
|
+
redacted[actualKey] = '[REDACTED]';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return redacted;
|
|
94
|
+
}
|
|
95
|
+
applyRule(data, rule) {
|
|
96
|
+
let count = 0;
|
|
97
|
+
const locations = [];
|
|
98
|
+
const traverse = (obj, path = '') => {
|
|
99
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
100
|
+
for (const key in obj) {
|
|
101
|
+
const val = obj[key];
|
|
102
|
+
if (typeof val === 'string') {
|
|
103
|
+
const matches = val.match(rule.pattern);
|
|
104
|
+
if (matches) {
|
|
105
|
+
count += matches.length;
|
|
106
|
+
locations.push(path ? `${path}.${key}` : key);
|
|
107
|
+
// Replace in place - this now correctly mutates the object property
|
|
108
|
+
obj[key] = val.replace(rule.pattern, rule.replacement);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
traverse(val, path ? `${path}.${key}` : key);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
traverse(data);
|
|
118
|
+
return { count, locations };
|
|
119
|
+
}
|
|
120
|
+
getAuditLog() {
|
|
121
|
+
return [...this.auditLog];
|
|
122
|
+
}
|
|
123
|
+
clearAuditLog() {
|
|
124
|
+
this.auditLog = [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.SecurityRedactor = SecurityRedactor;
|
|
128
|
+
//# sourceMappingURL=redactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/security/redactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PageSnapshot } from '../types/capture';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class DataValidator {
|
|
8
|
+
validatePageSnapshot(snapshot: PageSnapshot): ValidationResult;
|
|
9
|
+
validateNetworkEvent(event: any): ValidationResult;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/security/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB;IA2C9D,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB;CAoBnD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataValidator = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
class DataValidator {
|
|
6
|
+
validatePageSnapshot(snapshot) {
|
|
7
|
+
const errors = [];
|
|
8
|
+
const warnings = [];
|
|
9
|
+
// Validate metadata
|
|
10
|
+
if (!snapshot.metadata.captureId) {
|
|
11
|
+
errors.push('Missing captureId in metadata');
|
|
12
|
+
}
|
|
13
|
+
if (!snapshot.metadata.url) {
|
|
14
|
+
errors.push('Missing URL in metadata');
|
|
15
|
+
}
|
|
16
|
+
if (!snapshot.metadata.timestamp) {
|
|
17
|
+
errors.push('Missing timestamp in metadata');
|
|
18
|
+
}
|
|
19
|
+
// Validate DOM snapshot
|
|
20
|
+
if (!snapshot.domSnapshot || snapshot.domSnapshot.length === 0) {
|
|
21
|
+
warnings.push('Empty DOM snapshot');
|
|
22
|
+
}
|
|
23
|
+
// Validate accessibility tree
|
|
24
|
+
if (!snapshot.a11yTree) {
|
|
25
|
+
warnings.push('Missing accessibility tree');
|
|
26
|
+
}
|
|
27
|
+
// Validate locators
|
|
28
|
+
if (!snapshot.locators || !snapshot.locators.elements) {
|
|
29
|
+
warnings.push('Missing locator data');
|
|
30
|
+
}
|
|
31
|
+
// Check for redaction markers
|
|
32
|
+
const snapshotStr = JSON.stringify(snapshot);
|
|
33
|
+
if (snapshotStr.includes('[REDACTED]')) {
|
|
34
|
+
logger_1.logger.info('Redaction markers found in snapshot - this is expected');
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
valid: errors.length === 0,
|
|
38
|
+
errors,
|
|
39
|
+
warnings,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
validateNetworkEvent(event) {
|
|
43
|
+
const errors = [];
|
|
44
|
+
const warnings = [];
|
|
45
|
+
if (!event.timestamp) {
|
|
46
|
+
errors.push('Missing timestamp in network event');
|
|
47
|
+
}
|
|
48
|
+
if (!event.url) {
|
|
49
|
+
errors.push('Missing URL in network event');
|
|
50
|
+
}
|
|
51
|
+
if (!['request', 'response'].includes(event.type)) {
|
|
52
|
+
errors.push('Invalid event type in network event');
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
valid: errors.length === 0,
|
|
56
|
+
errors,
|
|
57
|
+
warnings,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.DataValidator = DataValidator;
|
|
62
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/security/validator.ts"],"names":[],"mappings":";;;AAEA,4CAAyC;AAQzC,MAAa,aAAa;IACxB,oBAAoB,CAAC,QAAsB;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACxC,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,KAAU;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AAhED,sCAgEC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PageSnapshot } from '../types/capture';
|
|
2
|
+
import { ManifestEntry } from '../types/storage';
|
|
3
|
+
export declare class StorageEngine {
|
|
4
|
+
private outputDir;
|
|
5
|
+
private prettyJson;
|
|
6
|
+
private scriptsDir;
|
|
7
|
+
private contentHashHistory;
|
|
8
|
+
private forceCapture;
|
|
9
|
+
constructor(outputDir: string, prettyJson?: boolean, forceCapture?: boolean);
|
|
10
|
+
/**
|
|
11
|
+
* Set force capture mode - always write artifacts even if content hash unchanged
|
|
12
|
+
*/
|
|
13
|
+
setForceCapture(force: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Check if content has changed since last capture
|
|
16
|
+
*/
|
|
17
|
+
hasContentChanged(pageName: string, contentHash: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Record content hash for a page
|
|
20
|
+
*/
|
|
21
|
+
recordContentHash(pageName: string, contentHash: string): void;
|
|
22
|
+
initialize(): Promise<void>;
|
|
23
|
+
getUniqueScriptPath(url: string): Promise<string>;
|
|
24
|
+
mergeRecordedScript(url: string, recordedScriptPath: string): Promise<string>;
|
|
25
|
+
private mergePlaywrightSpec;
|
|
26
|
+
savePageSnapshot(snapshot: PageSnapshot): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Save the components registry and update manifest reference
|
|
29
|
+
*/
|
|
30
|
+
saveComponentsRegistry(registry: any, domainName: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Update manifest with components registry reference
|
|
33
|
+
*/
|
|
34
|
+
updateManifestWithComponents(domainName: string, totalComponents: number): Promise<void>;
|
|
35
|
+
updateGlobalManifest(entry: ManifestEntry): Promise<void>;
|
|
36
|
+
private writeJson;
|
|
37
|
+
/**
|
|
38
|
+
* Beautify HTML by adding proper indentation and line breaks
|
|
39
|
+
* This makes the DOM more readable for RAG/context analysis
|
|
40
|
+
* Properly handles self-closing tags and preserves HTML structure
|
|
41
|
+
*/
|
|
42
|
+
saveUserInteractions(url: string, interactions: any[]): Promise<void>;
|
|
43
|
+
private beautifyHTML;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/storage/engine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAkB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,YAAY,GAAE,OAAe;IAOxF;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIrC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAMjE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBjD,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BnF,OAAO,CAAC,mBAAmB;IA+ErB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4G7D;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E;;OAEG;IACG,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxF,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAgDjD,SAAS;IAOvB;;;;OAIG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3E,OAAO,CAAC,YAAY;CA0ErB"}
|