@jinn-network/client 0.1.9-canary.02befda9 → 0.1.9-canary.07a8bcd5
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/build-info.json +3 -3
- package/dist/build-meta.json +1 -1
- package/dist/trajectory/scrub/build.js +9 -1
- package/dist/trajectory/scrub/build.js.map +1 -1
- package/dist/trajectory/scrub/openredaction-stage.d.ts +29 -0
- package/dist/trajectory/scrub/openredaction-stage.js +41 -2
- package/dist/trajectory/scrub/openredaction-stage.js.map +1 -1
- package/dist/trajectory/scrub/plain-patterns-stage.d.ts +18 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js +55 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js.map +1 -0
- package/package.json +1 -1
package/dist/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"clientGitSha": "
|
|
2
|
+
"clientGitSha": "07a8bcd57bbb58ac64968bb4b97b4e2f04c64928",
|
|
3
3
|
"codeDigest": "sha256:cfd37647ffcc9f98add6751ce2025f46e5bdd2604757bd6bf886457ae2f6c480",
|
|
4
|
-
"builtAt": "2026-07-
|
|
5
|
-
"implVersion": "0.1.9-canary.
|
|
4
|
+
"builtAt": "2026-07-03T10:42:57.745Z",
|
|
5
|
+
"implVersion": "0.1.9-canary.07a8bcd5"
|
|
6
6
|
}
|
package/dist/build-meta.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ScrubPipeline } from './pipeline.js';
|
|
2
2
|
import { keyPolicyStage } from './key-policy.js';
|
|
3
3
|
import { openredactionStage } from './openredaction-stage.js';
|
|
4
|
+
import { plainPatternsStage } from './plain-patterns-stage.js';
|
|
4
5
|
import { secretlintStage } from './secretlint-stage.js';
|
|
5
6
|
import { mlPiiStage } from './ml-pii-stage.js';
|
|
6
7
|
/**
|
|
@@ -34,7 +35,14 @@ export const DEFAULT_KEY_POLICY = {
|
|
|
34
35
|
*/
|
|
35
36
|
export function buildScrubPipeline(opts = {}) {
|
|
36
37
|
const policy = opts.policy ?? DEFAULT_KEY_POLICY;
|
|
37
|
-
|
|
38
|
+
// plain-patterns runs after openredaction: deterministic email/home-path
|
|
39
|
+
// regexes closing gaps the probabilistic stage demonstrably has (#1330).
|
|
40
|
+
const stages = [
|
|
41
|
+
keyPolicyStage(policy),
|
|
42
|
+
openredactionStage(policy),
|
|
43
|
+
plainPatternsStage(policy),
|
|
44
|
+
secretlintStage(policy),
|
|
45
|
+
];
|
|
38
46
|
if (opts.piiDetector) {
|
|
39
47
|
stages.push(mlPiiStage(policy, opts.piiDetector));
|
|
40
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,IAAI,EAAE;QACJ,mCAAmC;QACnC,oCAAoC;QACpC,4BAA4B;QAC5B,6BAA6B;QAC7B,gCAAgC;QAChC,iCAAiC;QACjC,OAAO;KACR;CACF,CAAC;AAQF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC,EAAE;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC;IACjD,MAAM,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,IAAI,EAAE;QACJ,mCAAmC;QACnC,oCAAoC;QACpC,4BAA4B;QAC5B,6BAA6B;QAC7B,gCAAgC;QAChC,iCAAiC;QACjC,OAAO;KACR;CACF,CAAC;AAQF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC,EAAE;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC;IACjD,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,MAAM,GAAG;QACb,cAAc,CAAC,MAAM,CAAC;QACtB,kBAAkB,CAAC,MAAM,CAAC;QAC1B,kBAAkB,CAAC,MAAM,CAAC;QAC1B,eAAe,CAAC,MAAM,CAAC;KACxB,CAAC;IACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
import { OpenRedaction } from 'openredaction';
|
|
2
2
|
import { type KeyPolicy } from './key-policy.js';
|
|
3
3
|
import type { ScrubStage } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Patterns excluded from the default detector (#1331). All three ship with a
|
|
6
|
+
* bare-word regex (`\b[a-zA-Z0-9._]{3,30}\b` or equivalent) that matches
|
|
7
|
+
* nearly every token of ordinary technical prose — "Update the staging
|
|
8
|
+
* bucket config" came back as `[IG_USER_…] the staging [IG_USER_…]
|
|
9
|
+
* [IG_USER_…]`, destroying the readability and distillation value of every
|
|
10
|
+
* published trajectory. A social handle has no shape of its own outside its
|
|
11
|
+
* platform context, so dropping these loses no genuine coverage: emails,
|
|
12
|
+
* keys, cards, SSNs, phones etc. all keep their dedicated patterns (pinned
|
|
13
|
+
* by test/trajectory/scrub/openredaction-tuning.test.ts and the
|
|
14
|
+
* harness-layer seeded-secrets fixture).
|
|
15
|
+
*
|
|
16
|
+
* `NAME` is denylisted for the same reason with an acknowledged trade-off:
|
|
17
|
+
* its follower branch accepts lowercase words (`[A-Z][a-z…]+ (\s+[a-z…]+){1,3}`),
|
|
18
|
+
* so ANY sentence-initial capitalised word plus 1–3 words matches — "Fix the
|
|
19
|
+
* failing test" is a "name" to it, which mangles the first sentence of
|
|
20
|
+
* essentially every task summary. Person-name detection is the ML PII
|
|
21
|
+
* stage's job (GLiNER, `mlPiiStage`), which the daemon wires when the model
|
|
22
|
+
* is available; a bare unlabelled name in prose is not regex-detectable at
|
|
23
|
+
* acceptable precision.
|
|
24
|
+
*/
|
|
25
|
+
export declare const BARE_WORD_PATTERN_DENYLIST: readonly string[];
|
|
26
|
+
/**
|
|
27
|
+
* Default detector: openredaction's full pattern set minus the audited
|
|
28
|
+
* bare-word matchers. Built via the `patterns` whitelist option (the
|
|
29
|
+
* library has no exclude option), so a version bump that renames patterns
|
|
30
|
+
* fails loudly in the tuning tests rather than silently re-enabling junk.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildDefaultDetector(): OpenRedaction;
|
|
4
33
|
/**
|
|
5
34
|
* Structured-PII stage backed by `openredaction` (570+ curated regex patterns +
|
|
6
35
|
* checksum validation, e.g. Luhn for cards). Runs only on `content`-classified
|
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
import { OpenRedaction } from 'openredaction';
|
|
2
2
|
import { classifyKey } from './key-policy.js';
|
|
3
|
-
const VERSION = '0.
|
|
3
|
+
const VERSION = '0.2.0';
|
|
4
|
+
/**
|
|
5
|
+
* Patterns excluded from the default detector (#1331). All three ship with a
|
|
6
|
+
* bare-word regex (`\b[a-zA-Z0-9._]{3,30}\b` or equivalent) that matches
|
|
7
|
+
* nearly every token of ordinary technical prose — "Update the staging
|
|
8
|
+
* bucket config" came back as `[IG_USER_…] the staging [IG_USER_…]
|
|
9
|
+
* [IG_USER_…]`, destroying the readability and distillation value of every
|
|
10
|
+
* published trajectory. A social handle has no shape of its own outside its
|
|
11
|
+
* platform context, so dropping these loses no genuine coverage: emails,
|
|
12
|
+
* keys, cards, SSNs, phones etc. all keep their dedicated patterns (pinned
|
|
13
|
+
* by test/trajectory/scrub/openredaction-tuning.test.ts and the
|
|
14
|
+
* harness-layer seeded-secrets fixture).
|
|
15
|
+
*
|
|
16
|
+
* `NAME` is denylisted for the same reason with an acknowledged trade-off:
|
|
17
|
+
* its follower branch accepts lowercase words (`[A-Z][a-z…]+ (\s+[a-z…]+){1,3}`),
|
|
18
|
+
* so ANY sentence-initial capitalised word plus 1–3 words matches — "Fix the
|
|
19
|
+
* failing test" is a "name" to it, which mangles the first sentence of
|
|
20
|
+
* essentially every task summary. Person-name detection is the ML PII
|
|
21
|
+
* stage's job (GLiNER, `mlPiiStage`), which the daemon wires when the model
|
|
22
|
+
* is available; a bare unlabelled name in prose is not regex-detectable at
|
|
23
|
+
* acceptable precision.
|
|
24
|
+
*/
|
|
25
|
+
export const BARE_WORD_PATTERN_DENYLIST = [
|
|
26
|
+
'INSTAGRAM_USERNAME',
|
|
27
|
+
'XBOX_GAMERTAG',
|
|
28
|
+
'PSN_ID',
|
|
29
|
+
'NAME',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Default detector: openredaction's full pattern set minus the audited
|
|
33
|
+
* bare-word matchers. Built via the `patterns` whitelist option (the
|
|
34
|
+
* library has no exclude option), so a version bump that renames patterns
|
|
35
|
+
* fails loudly in the tuning tests rather than silently re-enabling junk.
|
|
36
|
+
*/
|
|
37
|
+
export function buildDefaultDetector() {
|
|
38
|
+
const allTypes = [...new Set(new OpenRedaction().getPatterns().map((p) => p.type))];
|
|
39
|
+
return new OpenRedaction({
|
|
40
|
+
patterns: allTypes.filter((t) => !BARE_WORD_PATTERN_DENYLIST.includes(t)),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
4
43
|
/**
|
|
5
44
|
* Structured-PII stage backed by `openredaction` (570+ curated regex patterns +
|
|
6
45
|
* checksum validation, e.g. Luhn for cards). Runs only on `content`-classified
|
|
@@ -11,7 +50,7 @@ const VERSION = '0.1.0';
|
|
|
11
50
|
* The detector is constructed once at factory time and reused across spans
|
|
12
51
|
* (pattern compilation is not free).
|
|
13
52
|
*/
|
|
14
|
-
export function openredactionStage(policy, detector =
|
|
53
|
+
export function openredactionStage(policy, detector = buildDefaultDetector()) {
|
|
15
54
|
return {
|
|
16
55
|
name: 'openredaction',
|
|
17
56
|
version: VERSION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openredaction-stage.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/openredaction-stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAG9D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,WAA0B,
|
|
1
|
+
{"version":3,"file":"openredaction-stage.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/openredaction-stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAG9D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,oBAAoB;IACpB,eAAe;IACf,QAAQ;IACR,MAAM;CACP,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,IAAI,aAAa,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,WAA0B,oBAAoB,EAAE;IAEhD,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;QAChB,KAAK,CAAC,KAAK,CAAC,UAAsB;YAChC,MAAM,GAAG,GAAe,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAsB,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;oBACxE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACjB,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plain-patterns stage — deterministic regex redaction for two shapes the
|
|
3
|
+
* probabilistic stages demonstrably miss (issue #1330, found while building
|
|
4
|
+
* the harness-layer capture path in #1310):
|
|
5
|
+
*
|
|
6
|
+
* - plain email addresses: openredaction's EMAIL pattern is unreliable
|
|
7
|
+
* (misses e.g. `jane.doe@example-corp.com`);
|
|
8
|
+
* - POSIX home-directory paths carrying a username
|
|
9
|
+
* (`/Users/<name>/…`, `/home/<name>/…`) — nothing else touches paths.
|
|
10
|
+
*
|
|
11
|
+
* Graduated here from the harness-layer's capture-local stages so the daemon
|
|
12
|
+
* capture publish path and the harness layer share ONE implementation.
|
|
13
|
+
* Deliberately broad: over-redacting an email or a username is cheap; leaking
|
|
14
|
+
* one is not.
|
|
15
|
+
*/
|
|
16
|
+
import { type KeyPolicy } from './key-policy.js';
|
|
17
|
+
import type { ScrubStage } from './types.js';
|
|
18
|
+
export declare function plainPatternsStage(policy: KeyPolicy): ScrubStage;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plain-patterns stage — deterministic regex redaction for two shapes the
|
|
3
|
+
* probabilistic stages demonstrably miss (issue #1330, found while building
|
|
4
|
+
* the harness-layer capture path in #1310):
|
|
5
|
+
*
|
|
6
|
+
* - plain email addresses: openredaction's EMAIL pattern is unreliable
|
|
7
|
+
* (misses e.g. `jane.doe@example-corp.com`);
|
|
8
|
+
* - POSIX home-directory paths carrying a username
|
|
9
|
+
* (`/Users/<name>/…`, `/home/<name>/…`) — nothing else touches paths.
|
|
10
|
+
*
|
|
11
|
+
* Graduated here from the harness-layer's capture-local stages so the daemon
|
|
12
|
+
* capture publish path and the harness layer share ONE implementation.
|
|
13
|
+
* Deliberately broad: over-redacting an email or a username is cheap; leaking
|
|
14
|
+
* one is not.
|
|
15
|
+
*/
|
|
16
|
+
import { classifyKey } from './key-policy.js';
|
|
17
|
+
const VERSION = '0.1.0';
|
|
18
|
+
/** Plain email shape. */
|
|
19
|
+
const EMAIL_PATTERN = /[A-Za-z0-9._%+-]+@[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])+)+/g;
|
|
20
|
+
/** POSIX home-dir path segment carrying a username. */
|
|
21
|
+
const HOME_PATH_PATTERN = /\/(?:Users|home)\/[^/\s"'`]+/g;
|
|
22
|
+
const PATTERNS = [
|
|
23
|
+
{ pattern: EMAIL_PATTERN, replacement: '[EMAIL]', detail: 'email' },
|
|
24
|
+
{ pattern: HOME_PATH_PATTERN, replacement: '/users/anon', detail: 'home-path' },
|
|
25
|
+
];
|
|
26
|
+
export function plainPatternsStage(policy) {
|
|
27
|
+
return {
|
|
28
|
+
name: 'plain-patterns',
|
|
29
|
+
version: VERSION,
|
|
30
|
+
scrub(attributes) {
|
|
31
|
+
const out = {};
|
|
32
|
+
const redactions = [];
|
|
33
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
34
|
+
if (typeof value !== 'string' || classifyKey(key, policy) !== 'content') {
|
|
35
|
+
out[key] = value;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
let scrubbed = value;
|
|
39
|
+
for (const { pattern, replacement, detail } of PATTERNS) {
|
|
40
|
+
let hits = 0;
|
|
41
|
+
scrubbed = scrubbed.replace(pattern, () => {
|
|
42
|
+
hits += 1;
|
|
43
|
+
return replacement;
|
|
44
|
+
});
|
|
45
|
+
for (let i = 0; i < hits; i += 1) {
|
|
46
|
+
redactions.push({ key, stage: 'plain-patterns', kind: 'pii', detail });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
out[key] = scrubbed;
|
|
50
|
+
}
|
|
51
|
+
return { attributes: out, redactions };
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=plain-patterns-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain-patterns-stage.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/plain-patterns-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAG9D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,yBAAyB;AACzB,MAAM,aAAa,GACjB,4GAA4G,CAAC;AAE/G,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,MAAM,QAAQ,GAAoE;IAChF,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IACnE,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE;CAChF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;QAChB,KAAK,CAAC,UAAsB;YAC1B,MAAM,GAAG,GAAe,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAsB,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;oBACxE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACjB,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;oBACxD,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE;wBACxC,IAAI,IAAI,CAAC,CAAC;wBACV,OAAO,WAAW,CAAC;oBACrB,CAAC,CAAC,CAAC;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;YACtB,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED