This particular code has been now running without issues for months, this morning, without any relevant change I can pinpoint in our setup or our code I started receiving
ERROR Error: Uncaught (in promise): Error: Network error: Cannot convert undefined or null to object Error: Network error: Cannot convert undefined or null to object
at new ApolloError (ApolloError.js:43)
at eval (QueryManager.js:324)
at eval (QueryManager.js:755)
at Array.forEach (<anonymous>)
at eval (QueryManager.js:754)
at Map.forEach (<anonymous>)
at QueryManager.broadcastQueries (QueryManager.js:749)
at eval (QueryManager.js:251)
at ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:4733)
at new ApolloError (ApolloError.js:43)
at eval (QueryManager.js:324)
at eval (QueryManager.js:755)
at Array.forEach (<anonymous>)
...
inline.bundle.js:26 (anonymous) # main.bundle.js:1
This happens because of an error at Object.keys(src).forEach:
var hasOwn = Object.prototype.hasOwnProperty;
export function merge(dest, src) {
Object.keys(src).forEach(function (key) {
var srcVal = src[key];
if (!hasOwn.call(dest, key)) {
dest[key] = srcVal;
}
else if (srcVal && typeof srcVal === 'object') {
merge(dest[key], srcVal);
}
});
}
The error is:
"Cannot convert undefined or null to object"
merge is called from here:
function executeSelectionSet(selectionSet, rootValue, execContext) {
var fragmentMap = execContext.fragmentMap, contextValue = execContext.contextValue, variables = execContext.variableValues;
var result = {};
selectionSet.selections.forEach(function (selection) {
if (!shouldInclude(selection, variables)) {
// Skip this entirely
return;
}
if (isField(selection)) {
var fieldResult = executeField(selection, rootValue, execContext);
var resultFieldKey = resultKeyNameFromField(selection);
if (fieldResult !== undefined) {
if (result[resultFieldKey] === undefined) {
result[resultFieldKey] = fieldResult;
}
else {
merge(result[resultFieldKey], fieldResult);
}
}
}
else {
var fragment = void 0;
if (isInlineFragment(selection)) {
fragment = selection;
}
else {
// This is a named fragment
fragment = fragmentMap[selection.name.value];
if (!fragment) {
throw new Error("No fragment named " + selection.name.value);
}
}
var typeCondition = fragment.typeCondition.name.value;
if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) {
var fragmentResult = executeSelectionSet(fragment.selectionSet, rootValue, execContext);
merge(result, fragmentResult);
}
}
});
if (execContext.resultMapper) {
return execContext.resultMapper(result, rootValue);
}
return result;
}
After I identified the field that was being parsed and the fact the it was null valued in the backend I tried to change the value and then the error moved to the next null valued field for the same node. I tried also with other queries and we have the same result.
We are using django and graphene at the backend and apollo-client at the frontend.
I would be grateful for any insight here, I am still trying to understand what has changed between 23:00 yesterday (latest time I tested the code that is now bombing and it all worked) and 1am tonight (time of the automated deployment on our dev server).
I got a similar error last night and for me, I was able to track it down to a change in the graphql-anywhere package from version 4.1.8 to 4.1.9 (updated 2 days ago).
Here is the changelog: https://github.com/apollographql/apollo-client/blob/master/packages/graphql-anywhere/CHANGELOG.md
Adding "graphql-anywhere": "4.1.8", to my package.json file has solved the issue for my app.
Related
I am using In Design CC 2019, on my Mac OS. When I am trying to get XMP data for my .indd (InDesign document) using ExtendScript.
I am currently getting the error like this:
XMPFile Does not have a constructor.
Below is my script.
// load XMP Library
function loadXMPLibrary(){
if ( ExternalObject.AdobeXMPScript){
try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
}
return true;
}
var myFile= app.activeDocument.fullName;
// check library and file
if(loadXMPLibrary() && myFile != null){
xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
var myXmp = xmpFile.getXMP();
}
if(myXmp){
$.writeln ('sucess')
}
There's an issue with your codes logic, you need to make the following change:
Add the Logical NOT operator (i.e. !) to the condition specified for your if statement in the body of your loadXMPLibrary function.
function loadXMPLibrary(){
if (!ExternalObject.AdobeXMPScript) { // <--- Change to this
// ^
try {ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
}
return true;
}
You need to add this because currently your if statement checks whether the condition is truthy, i.e. it checks whether ExternalObject.AdobeXMPScript is true. This will always remain false, until the AdobeXMPScript library has been loaded, therefore you're code that actually loads the library never gets executed.
Revised script:
For clarity here is the complete revised script:
// load XMP Library
function loadXMPLibrary() {
if (!ExternalObject.AdobeXMPScript) {
try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
}
return true;
}
var myFile= app.activeDocument.fullName;
// check library and file
if (loadXMPLibrary() && myFile !== null) {
xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
var myXmp = xmpFile.getXMP();
}
if (myXmp){
$.writeln ('success')
}
this error Uncaught TypeError: undefined is not a function keeps getting thrown it is part if the prototype.js I didn't write the website but it seems to be causing lots of errors on other items. What is the cause of this? Thanks
var Enumerable = (function() {
function each(iterator, context) {
var index = 0;
try {
this._each(function(value) {
iterator.call(context, value, index++);
});
} catch (e) {
if (e != $break) throw e;
}
return this;
}
The object being enumerated is probably not enumerable. Look into the code anywhere you have .each() and make sure a valid object/array is being passed onto it.
I am calling a function from my index.html file. The function is defined in a javascript file which i have referred to in the html. However the return value is always undefined. When i debug i could see the value in the return string.
Follwing is the code in index.html
<script type="text/javascript">
function readQueryStringparam(name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if (results == null)
return "";
else
return results[1];
}
function getDiDataUrlPrefix()
{
diDataUrlPrefix = diGlobal.instanceInfo.getDiDataUrlPrefix();
//alert(diDataUrlPrefix);
sbu = readQueryStringparam('sbu');
appid = readQueryStringparam('appid');
if (sbu.length > 0)
{
sbu = sbu.trim();
CreateChart(diDataUrlPrefix,sbu,0,appid);
}
else if (appid.length > 0)
{
sbu = GetSBUForApplication(appid);
CreateChart(diDataUrlPrefix,0,0,appid);
}
}
</script>
I get the value for the parameters supplied in the url as well as diDataUrlPrefix.
Following is the code in the javascript file:
function GetSBUForApplication(appid)
{
setTimeout(function() { }, 10000);
var string;
var file = diDataUrlPrefix + "/oss/csvs/Consolidated_RAG.csv";
d3.text(file, function(datasetText)
{
parsedCSVapp = d3.csv.parseRows(datasetText);
if (appid >0)
{
parsedCSVapp = parsedCSVapp.filter(function(row)
{
//alert(parsedCSVapp);
return row[0] == appid
})//parsed fileter ends here
returnstring = parsedCSVapp[0][4];
}
})
return returnstring;
}
However the value of sbu is always undefined.However i can see the values in parsedCSVapp. The csv file looks like this:
Application_Id,Application Name,Status,Name,Business Unit
200039,DEALING,RED,Marc Begun,Financial&Risk
200070,NGTX,RED,Marc Begun,Financial&Risk
200097,WORLD-CHECK,RED,Graham Fisher,Financial&Risk
200009,BOARDLINK,RED,Jennifer Simon,Financial&Risk
200088,THOMSON ONE,RED,Jonathan Weinberg,Financial&Risk
200037,DATASTREAM,RED,Ian Brocklehurst,Financial&Risk
200044,EIKON,RED,Olivier Martin,Financial&Risk
200011,COLLABORATION,RED,Frank Tarsillo,Financial&Risk
d3.text (and d3.csv, d3.json and similar) make asynchronous calls. That is, when you run the code, the call is made and execution resumes without waiting for the call to return.
The second argument to those functions is a function that gets executed when the call returns -- the callback.
This function will not be executed at the same time as you run d3.text, but later. You cannot determine at what time exactly it will be run. Any code that you want to call as a result of one of those calls needs to be run as part of the callback function, or called from there.
I'm having a problem with node modules that I cannot resolve. I have the following three files. I've included the basic methods of interest but have excluded the rest of the methods and the actual guts of the methods.
The problem that I'm struggling with is that when the publish_event method is called on the event_queue object from events.js node crashes with the following error:
FATAL TypeError: Object # has no method 'publish_event', stack:
TypeError: Object # has no method 'publish_event'
at Events.publish_event (/Users/mburbidg/stormcloud/ccapi/cloud_pipes/node_modules/f5/server/services/event/events.js:137:15)
I cannot figure this out, you can see that I can use methods of the EventQueue object from index.js, another module, in our system just fine. I've checked names other obvious things several times.
Any suggestions as to how to proceed?
File 1 - f5/server/notifications/sqs_event_queue.js
function EventQueue() {
this.queue_name = 'notification_queue';
this.queue_url = null;
this.sqs = null;
}
EventQueue.prototype.publish_event = function(event_data, registration_id, log, callback) {
...
}
EventQueue.prototype.start = function(callback) {
...
}
module.exports = new EventQueue();
File 2 - f5/server/index.js
var event_queue = require('f5/server/notifications/sqs_event_queue');
var start_notifications = function()
{
event_queue.start(on_start);
function on_start(error)
{
}
}
File 3 - f5/server/services/event/events.js
var event_queue = require('f5/server/notifications/sqs_event_queue');
function Events () {
}
Events.prototype.publish_event = function(event_data, registration_id, log, callback) {
event_queue.publish_event(event_data, registration_id, log, callback);
};
module.exports = new Events();
I'm using LESS CSS (more exactly less.js) which seems to exploit LocalStorage under the hood. I had never seen such an error like this before while running my app locally, but now I get "Persistent storage maximum size reached" at every page display, just above the link the unique .less file of my app.
This only happens with Firefox 12.0 so far.
Is there any way to solve this?
P.S.: mainly inspired by Calculating usage of localStorage space, this is what I ended up doing (this is based on Prototype and depends on a custom trivial Logger class, but this should be easily adapted in your context):
"use strict";
var LocalStorageChecker = Class.create({
testDummyKey: "__DUMMY_DATA_KEY__",
maxIterations: 100,
logger: new Logger("LocalStorageChecker"),
analyzeStorage: function() {
var result = false;
if (Modernizr.localstorage && this._isLimitReached()) {
this._clear();
}
return result;
},
_isLimitReached: function() {
var localStorage = window.localStorage;
var count = 0;
var limitIsReached = false;
do {
try {
var previousEntry = localStorage.getItem(this.testDummyKey);
var entry = (previousEntry == null ? "" : previousEntry) + "m";
localStorage.setItem(this.testDummyKey, entry);
}
catch(e) {
this.logger.debug("Limit exceeded after " + count + " iteration(s)");
limitIsReached = true;
}
}
while(!limitIsReached && count++ < this.maxIterations);
localStorage.removeItem(this.testDummyKey);
return limitIsReached;
},
_clear: function() {
try {
var localStorage = window.localStorage;
localStorage.clear();
this.logger.debug("Storage clear successfully performed");
}
catch(e) {
this.logger.error("An error occurred during storage clear: ");
this.logger.error(e);
}
}
});
document.observe("dom:loaded",function() {
var checker = new LocalStorageChecker();
checker.analyzeStorage();
});
P.P.S.: I didn't measure the performance impact on the UI yet, but a decorator could be created and perform the storage test only every X minutes (with the last timestamp of execution in the local storage for instance).
Here is a good resource for the error you are running into.
http://www.sitepoint.com/building-web-pages-with-local-storage/#fbid=5fFWRXrnKjZ
Gives some insight that localstorage only has so much room and you can max it out in each browser. Look into removing some data from localstorage to resolve your problem.
Less.js persistently caches content that is #imported. You can use this script to clear content that is cached. Using the script below you can call the function destroyLessCache('/path/to/css/') and it will clear your localStorage of css files that have been cached.
function destroyLessCache(pathToCss) { // e.g. '/css/' or '/stylesheets/'
if (!window.localStorage || !less || less.env !== 'development') {
return;
}
var host = window.location.host;
var protocol = window.location.protocol;
var keyPrefix = protocol + '//' + host + pathToCss;
for (var key in window.localStorage) {
if (key.indexOf(keyPrefix) === 0) {
delete window.localStorage[key];
}
}
}