1234567891011121314151617181920212223242526272829 |
- import reserved from './reserved.js'
- // from https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
- function hashCode(str) {
- let hash = 0
- for (let i = 0; i < str.length; ++i) {
- const char = str.charCodeAt(i)
- hash = (hash << 5) - hash + char
- hash |= 0 // Convert to 32bit integer
- }
- return hash
- }
- export function identifier(key, unique) {
- if (unique) key += ' ' + hashCode(key).toString(36)
- const id = key.trim().replace(/\W+/g, '_')
- return reserved.ES3[id] || reserved.ESnext[id] || /^\d/.test(id)
- ? '_' + id
- : id
- }
- export function property(obj, key) {
- if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key) && !reserved.ES3[key]) {
- return obj ? obj + '.' + key : key
- } else {
- const jkey = JSON.stringify(key)
- return obj ? obj + '[' + jkey + ']' : jkey
- }
- }
|