Skip to content

Commit ef100d6

Browse files
Alpha ident generation
1 parent 9c64f92 commit ef100d6

File tree

4 files changed

+77
-53
lines changed

4 files changed

+77
-53
lines changed

src/features/runtime-checks/script-overload.js

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,30 @@ function removeIndent (string) {
2323
return indentedLines.filter(a => a.trim()).join('\n')
2424
}
2525

26+
const lookup = {}
27+
function getOrGenerateIdentifier (path) {
28+
if (!(path in lookup)) {
29+
lookup[path] = generateAlphaIdentifier(Object.keys(lookup).length + 1)
30+
}
31+
return lookup[path]
32+
}
33+
34+
function generateAlphaIdentifier (num) {
35+
if (num < 1) {
36+
throw new Error('Input must be a positive integer')
37+
}
38+
const charCodeOffset = 97
39+
let identifier = ''
40+
while (num > 0) {
41+
num--
42+
const remainder = num % 26
43+
const charCode = remainder + charCodeOffset
44+
identifier = String.fromCharCode(charCode) + identifier
45+
num = Math.floor(num / 26)
46+
}
47+
return '_ddg_' + identifier
48+
}
49+
2650
/**
2751
* @param {*} scope
2852
* @param {Record<string, any>} outputs
@@ -64,9 +88,9 @@ function valToString (val) {
6488
function stringifyScope (scope, scopePath) {
6589
let output = ''
6690
for (const [key, value] of scope) {
67-
const varOutName = [...scopePath, key].join('_')
91+
const varOutName = getOrGenerateIdentifier([...scopePath, key])
6892
if (value instanceof Map) {
69-
const proxyName = `_proxyFor_${varOutName}`
93+
const proxyName = getOrGenerateIdentifier(['_proxyFor_', varOutName])
7094
output += `
7195
let ${proxyName}
7296
if (${scopePath.join('?.')}?.${key} === undefined) {
@@ -77,7 +101,7 @@ function stringifyScope (scope, scopePath) {
77101
`
78102
const keys = Array.from(value.keys())
79103
output += stringifyScope(value, [...scopePath, key])
80-
const proxyOut = keys.map((keyName) => `${keyName}: ${[...scopePath, key, keyName].join('_')}`)
104+
const proxyOut = keys.map((keyName) => `${keyName}: ${getOrGenerateIdentifier([...scopePath, key, keyName])}`)
81105
output += `
82106
let ${varOutName} = constructProxy(${proxyName}, {
83107
${proxyOut.join(',\n')}
@@ -91,7 +115,7 @@ function stringifyScope (scope, scopePath) {
91115
}
92116
} else {
93117
output += `
94-
let ${varOutName} = ${JSON.stringify(value)};
118+
let ${varOutName} = ${valToString(value)};
95119
`
96120
}
97121
}
@@ -133,7 +157,7 @@ export function wrapScriptCodeOverload (code, config) {
133157

134158
prepend += stringifyScope(aggregatedLookup, ['parentScope'])
135159
// Stringify top level keys
136-
const keysOut = [...aggregatedLookup.keys()].map((keyName) => `${keyName}: parentScope_${keyName}`).join(',\n')
160+
const keysOut = [...aggregatedLookup.keys()].map((keyName) => `${keyName}: ${getOrGenerateIdentifier(['parentScope', keyName])}`).join(',\n')
137161
prepend += `
138162
const window = constructProxy(parentScope, {
139163
${keysOut}

unit-test/script-overload-snapshots/out/1.js

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,75 +21,75 @@
2121
}
2222
})
2323
}
24-
let _proxyFor_parentScope_navigator
24+
let _ddg_b
2525
if (parentScope?.navigator === undefined) {
26-
_proxyFor_parentScope_navigator = Object.bind(null);
26+
_ddg_b = Object.bind(null);
2727
} else {
28-
_proxyFor_parentScope_navigator = parentScope.navigator;
28+
_ddg_b = parentScope.navigator;
2929
}
30-
let parentScope_navigator_userAgent = "testingThisOut";
31-
let _proxyFor_parentScope_navigator_mediaSession
30+
let _ddg_c = "testingThisOut";
31+
let _ddg_e
3232
if (parentScope?.navigator?.mediaSession === undefined) {
33-
_proxyFor_parentScope_navigator_mediaSession = Object.bind(null);
33+
_ddg_e = Object.bind(null);
3434
} else {
35-
_proxyFor_parentScope_navigator_mediaSession = parentScope.navigator.mediaSession;
35+
_ddg_e = parentScope.navigator.mediaSession;
3636
}
37-
let parentScope_navigator_mediaSession_playbackState = "playing";
38-
let _proxyFor_parentScope_navigator_mediaSession_doesNotExist
37+
let _ddg_f = "playing";
38+
let _ddg_h
3939
if (parentScope?.navigator?.mediaSession?.doesNotExist === undefined) {
40-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist = Object.bind(null);
40+
_ddg_h = Object.bind(null);
4141
} else {
42-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist = parentScope.navigator.mediaSession.doesNotExist;
42+
_ddg_h = parentScope.navigator.mediaSession.doesNotExist;
4343
}
44-
let _proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth
44+
let _ddg_j
4545
if (parentScope?.navigator?.mediaSession?.doesNotExist?.depth === undefined) {
46-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth = Object.bind(null);
46+
_ddg_j = Object.bind(null);
4747
} else {
48-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth = parentScope.navigator.mediaSession.doesNotExist.depth;
48+
_ddg_j = parentScope.navigator.mediaSession.doesNotExist.depth;
4949
}
50-
let _proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth_a
50+
let _ddg_l
5151
if (parentScope?.navigator?.mediaSession?.doesNotExist?.depth?.a === undefined) {
52-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth_a = Object.bind(null);
52+
_ddg_l = Object.bind(null);
5353
} else {
54-
_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth_a = parentScope.navigator.mediaSession.doesNotExist.depth.a;
54+
_ddg_l = parentScope.navigator.mediaSession.doesNotExist.depth.a;
5555
}
56-
let parentScope_navigator_mediaSession_doesNotExist_depth_a_lot = "boop";
57-
let parentScope_navigator_mediaSession_doesNotExist_depth_a = constructProxy(_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth_a, {
58-
lot: parentScope_navigator_mediaSession_doesNotExist_depth_a_lot
56+
let _ddg_m = "boop";
57+
let _ddg_k = constructProxy(_ddg_l, {
58+
lot: _ddg_m
5959
});
60-
let parentScope_navigator_mediaSession_doesNotExist_depth = constructProxy(_proxyFor_parentScope_navigator_mediaSession_doesNotExist_depth, {
61-
a: parentScope_navigator_mediaSession_doesNotExist_depth_a
60+
let _ddg_i = constructProxy(_ddg_j, {
61+
a: _ddg_k
6262
});
63-
let parentScope_navigator_mediaSession_doesNotExist = constructProxy(_proxyFor_parentScope_navigator_mediaSession_doesNotExist, {
64-
depth: parentScope_navigator_mediaSession_doesNotExist_depth
63+
let _ddg_g = constructProxy(_ddg_h, {
64+
depth: _ddg_i
6565
});
66-
let parentScope_navigator_mediaSession = constructProxy(_proxyFor_parentScope_navigator_mediaSession, {
67-
playbackState: parentScope_navigator_mediaSession_playbackState,
68-
doesNotExist: parentScope_navigator_mediaSession_doesNotExist
66+
let _ddg_d = constructProxy(_ddg_e, {
67+
playbackState: _ddg_f,
68+
doesNotExist: _ddg_g
6969
});
70-
let parentScope_navigator = constructProxy(_proxyFor_parentScope_navigator, {
71-
userAgent: parentScope_navigator_userAgent,
72-
mediaSession: parentScope_navigator_mediaSession
70+
let _ddg_a = constructProxy(_ddg_b, {
71+
userAgent: _ddg_c,
72+
mediaSession: _ddg_d
7373
});
74-
let navigator = parentScope_navigator;
75-
let _proxyFor_parentScope_document
74+
let navigator = _ddg_a;
75+
let _ddg_o
7676
if (parentScope?.document === undefined) {
77-
_proxyFor_parentScope_document = Object.bind(null);
77+
_ddg_o = Object.bind(null);
7878
} else {
79-
_proxyFor_parentScope_document = parentScope.document;
79+
_ddg_o = parentScope.document;
8080
}
81-
let parentScope_document_cookie = "testingThisOut";
82-
let parentScope_document = constructProxy(_proxyFor_parentScope_document, {
83-
cookie: parentScope_document_cookie
81+
let _ddg_p = "testingThisOut";
82+
let _ddg_n = constructProxy(_ddg_o, {
83+
cookie: _ddg_p
8484
});
85-
let document = parentScope_document;
85+
let document = _ddg_n;
8686
const window = constructProxy(parentScope, {
87-
navigator: parentScope_navigator,
88-
document: parentScope_document
87+
navigator: _ddg_a,
88+
document: _ddg_n
8989
});
9090
const globalThis = constructProxy(parentScope, {
91-
navigator: parentScope_navigator,
92-
document: parentScope_document
91+
navigator: _ddg_a,
92+
document: _ddg_n
9393
});
9494
console.log(1)
9595
})(globalThis)

unit-test/script-overload-snapshots/out/2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
}
2222
})
2323
}
24-
let parentScope_single = "meep";
24+
let _ddg_q = "meep";
2525
const window = constructProxy(parentScope, {
26-
single: parentScope_single
26+
single: _ddg_q
2727
});
2828
const globalThis = constructProxy(parentScope, {
29-
single: parentScope_single
29+
single: _ddg_q
3030
});
3131
console.log(1)
3232
})(globalThis)

unit-test/script-overload-snapshots/out/3.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121
}
2222
})
2323
}
24-
let parentScope_fn = (...args) => {
24+
let _ddg_r = (...args) => {
2525
console.log('debugger', ...args)
2626
// eslint-disable-next-line no-debugger
2727
debugger
2828
};
2929
const window = constructProxy(parentScope, {
30-
fn: parentScope_fn
30+
fn: _ddg_r
3131
});
3232
const globalThis = constructProxy(parentScope, {
33-
fn: parentScope_fn
33+
fn: _ddg_r
3434
});
3535
console.log(1)
3636
})(globalThis)

0 commit comments

Comments
 (0)