babel-plugin-ember-template-compilation
Version:
Babel implementation of Ember's low-level template-compilation API
30 lines • 2.64 kB
JavaScript
const mutationMethods = [
'copyWithin',
'fill',
'pop',
'push',
'reverse',
'shift',
'sort',
'splice',
'unshift',
];
export function readOnlyArray(array, message = 'Forbidden array mutation') {
return new Proxy(array, {
get(target, prop) {
if (typeof prop === 'string' && mutationMethods.includes(prop)) {
return () => {
throw new Error(message);
};
}
return Reflect.get(target, prop);
},
set(_target, _prop) {
throw new Error(message);
},
deleteProperty() {
throw new Error(message);
},
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1vbmx5LWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWQtb25seS1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGVBQWUsR0FBRztJQUN0QixZQUFZO0lBQ1osTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sU0FBUztJQUNULE9BQU87SUFDUCxNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSxVQUFVLGFBQWEsQ0FBSSxLQUFVLEVBQUUsT0FBTyxHQUFHLDBCQUEwQjtJQUMvRSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtRQUN0QixHQUFHLENBQUMsTUFBTSxFQUFFLElBQUk7WUFDZCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9ELE9BQU8sR0FBRyxFQUFFO29CQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsY0FBYztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBtdXRhdGlvbk1ldGhvZHMgPSBbXG4gICdjb3B5V2l0aGluJyxcbiAgJ2ZpbGwnLFxuICAncG9wJyxcbiAgJ3B1c2gnLFxuICAncmV2ZXJzZScsXG4gICdzaGlmdCcsXG4gICdzb3J0JyxcbiAgJ3NwbGljZScsXG4gICd1bnNoaWZ0Jyxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT25seUFycmF5PFQ+KGFycmF5OiBUW10sIG1lc3NhZ2UgPSAnRm9yYmlkZGVuIGFycmF5IG11dGF0aW9uJykge1xuICByZXR1cm4gbmV3IFByb3h5KGFycmF5LCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJyAmJiBtdXRhdGlvbk1ldGhvZHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIHNldChfdGFyZ2V0LCBfcHJvcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHkoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=