8000 flowstreamcomponents/tester.js at main · totaljs/flowstreamcomponents · GitHub
[go: up one dir, main page]

Skip to content
{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"archived","path":"archived","contentType":"directory"},{"name":"components","path":"components","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"db.js","path":"db.js","contentType":"file"},{"name":"db.json","path":"db.json","contentType":"file"},{"name":"package.json","path":"package.json","contentType":"file"},{"name":"tester.js","path":"tester.js","contentType":"file"}],"totalCount":11}},"fileTreeProcessingTime":17.538525,"foldersToFetch":[],"incompleteFileTree":false,"repo":{"id":371124799,"defaultBranch":"main","name":"flowstreamcomponents","ownerLogin":"totaljs","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-05-26T17:56:09.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6499216?v=4","public":true,"private":false,"isOrgOwned":true},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"main","listCacheKey":"v0:1622051769.85269","canEdit":false,"refType":"branch","currentOid":"4856c38d88f6a5f3a7c9740ed635b25a88c63a7f"},"path":"tester.js","currentUser":null,"blob":{"rawLines":["require('total4');","","const Path = require('path');","const Fs = require('fs');","const TestAll = process.mainModule.exports === exports;","","// Loggers","const logSuccess = function(test) {","\tconst tester = test.tester || test.__tester__;","\ttester.stats.total++;","\ttester.stats.ok++;","","\tconst name = test.__description__;","\tconst duration = '(' + (new Date() - test.beg) + ' ms)';","\tconsole.log('[OK]', test.__name__, (name ? '- ' + name : ''), duration);","","\tdelete test.__tester__;","\tdelete test.__name__;","};","","const logFailed = function(test) {","\tconst tester = test.tester || test.__tester__;","\ttester.stats.total++;","\ttester.stats.failed++;","","\tconst name = test.__description__;","\tconst duration = '(' + (new Date() - test.beg) + ' ms)';","\tconsole.log('[FAILED]', test.__name__, (name ? '- ' + name : ''), duration);","","\tdelete test.__tester__;","\tdelete test.__name__;","};","","// Tester","const tester = {};","tester.path = './components';","tester.timeout = 5 * 1000;","tester.inputTests = {};","tester.tests = {};","tester.stats = { total: 0, ok: 0, failed: 0 };","","tester.output = function(msg) {","\tconst test = this.tests[msg.fromid];","\tconst inputTest = tester.inputTests[msg.fromid + '_' + msg.__input__];","","\t// Global message catch","\ttest.output \u0026\u0026 test.output(msg);","\ttest.message \u0026\u0026 test.message(msg);","","\t// Input with callback","\tif (inputTest) {","\t\tinputTest.output \u0026\u0026 inputTest.output(msg);","\t\tinputTest.message \u0026\u0026 inputTest.message(msg);","","\t\tinputTest.resolve(msg);","\t\tinputTest.handler \u0026\u0026 inputTest.handler(msg);","\t}","};","","tester.finish = tester.done = function(message) {","\tsetTimeout(() =\u003e {","\t\tconst duration = new Date() - tester.beg;","","\t\tvar div = '|--------------------------------------|';","","\t\tif (message) {","\t\t\tconsole.log(div);","\t\t\tconsole.log(message);","\t\t}","","\t\tconsole.log(div);","\t\tconsole.log('| Total |', tester.stats.total.padLeft(15, ' '), '|');","\t\tconsole.log('| Success |', tester.stats.ok.padLeft(15, ' '), '|');","\t\tconsole.log('| Failed |', tester.stats.failed.padLeft(15, ' '), '|');","\t\tconsole.log('| Duration |', (duration + ' ms').padLeft(15, ' '), '|');","\t\tconsole.log(div);","","\t\ttester.stop();","\t}, 5);","};","","tester.end = tester.throw = tester.fail = function(message) {","\tconsole.log('[NO]' + (message ? ' - ' + message : ''));","\tthis.stop();","};","","tester.stop = function() {","\tthis.timeoutid \u0026\u0026 clearTimeout(this.timeoutid);","\tthis.flowstream \u0026\u0026 this.flowstream.destroy();","\tthis.flowstream = null;","\tthis.timeoutid = null;","\tprocess.exit(this.stats.failed \u003e 0);","};","","// this is the 'describe' function in require('../tester')(async function(describe, done) {","tester.test = function(name, callback) {","","\tlet testName = name;","","\t// Optional name parameter","\tif (typeof (name) === 'function') {","\t\ttestName = U.getName(process.mainModule.filename).replace(/\\.js$/, '');","\t\tcallback = name;","\t}","","\tconst componentPath = Path.join(__dirname, tester.path, testName + '.html');","","\tlet testPromiseResolver;","\tconst testPromise = new Promise(resolve =\u003e testPromiseResolver = resolve);","","\tFs.readFile(componentPath, 'utf8', (err, data) =\u003e {","\t\tif (err) {","\t\t\tconsole.error(err);","\t\t\treturn;","\t\t}","","\t\tconst flow = tester.flowstream;","","\t\t// Connection Ids","\t\tconst componentConnectionId = 'com_' + testName + '_' + UID();","\t\tconst dummyConnectionId = 'com_DUMMY_' + UID();","\t\ttester.dummyConnection = [{ id: dummyConnectionId, index: 'input' }];","","\t\t// Register DUMMY component","\t\tflow.register('DUMMY', instance =\u003e {","\t\t\tinstance.inputs = [{ id: 'input', name: 'Input' }];","","\t\t\tinstance.message = function(msg) {","\t\t\t\tmsg.__tester__ = tester;","\t\t\t\tmsg.__input__ = instance.__input__;","\t\t\t\ttester.output(msg);","\t\t\t};","\t\t});","","\t\t// Add DUMMY component to flowstream","\t\tflow.use(`{","\t\t\t\"${dummyConnectionId}\": {","\t\t\t\t\"component\": \"DUMMY\",","\t\t\t\t\"connections\": {}","\t\t\t}","\t\t}`, function() {","\t\t\t// Add component to flowstream","\t\t\tvar comp = flow.add(testName, data);","","\t\t\tlet conns = {};","\t\t\tlet is;","","\t\t\t// add connection from every output to DUMMY compponent","\t\t\t(comp.outputs || []).forEach(function(c){","\t\t\t\tis = true;","\t\t\t\treturn conns[c.id] = tester.dummyConnection;","\t\t\t});","","\t\t\tif (!is)","\t\t\t\tconns = { output: tester.dummyConnection };","","\t\t\tconst componentConnection = { [componentConnectionId]: { component: testName, connections: conns } };","","\t\t\t// Connect component to DUMMY component","\t\t\tflow.insert(componentConnection, function() {","","\t\t\t\tif (callback) {","\t\t\t\t\tconst id = componentConnectionId;","\t\t\t\t\tconst instance = flow.meta.flow[id];","\t\t\t\t\tconst testInstance = flow.meta.flow[dummyConnectionId];","","\t\t\t\t\tconst test = {};","","\t\t\t\t\ttest.input = function(inputIndex, data, handler) {","","\t\t\t\t\t\t// Optional input index","\t\t\t\t\t\tif (typeof (inputIndex) !== 'string') {","\t\t\t\t\t\t\tinputIndex = data;","\t\t\t\t\t\t\tdata = handler;","\t\t\t\t\t\t}","","\t\t\t\t\t\t// Tell DUMMY component, that next incoming message is from \"inputIndex\"","\t\t\t\t\t\ttestInstance.__input__ = inputIndex;","","\t\t\t\t\t\tconst inputTest = {};","\t\t\t\t\t\tinputTest.handler = handler;","","\t\t\t\t\t\tconst promise = new Promise(resolve =\u003e {","\t\t\t\t\t\t\tinputTest.resolve = resolve;","\t\t\t\t\t\t});","","\t\t\t\t\t\ttester.inputTests[id + '_' + inputIndex] = inputTest;","","\t\t\t\t\t\t// Send data to component","\t\t\t\t\t\tflow.trigger(id + '__' + inputIndex, data);","","\t\t\t\t\t\treturn promise;","\t\t\t\t\t};","","\t\t\t\t\t// Handlers","\t\t\t\t\ttest.ok = function(value, description) {","","\t\t\t\t\t\tif (typeof value === 'string')","\t\t\t\t\t\t\tdescription = value;","","\t\t\t\t\t\tthis.__name__ = instance.module.name;","\t\t\t\t\t\tthis.__description__ = description;","","\t\t\t\t\t\tif (typeof (value) === 'undefined') {","\t\t\t\t\t\t\tlogSuccess(this);","\t\t\t\t\t\t\treturn;","\t\t\t\t\t\t}","","\t\t\t\t\t\tif (value)","\t\t\t\t\t\t\tlogSuccess(this);","\t\t\t\t\t\telse","\t\t\t\t\t\t\tlogFailed(this);","","\t\t\t\t\t\tdelete this.__description__;","\t\t\t\t\t};","","\t\t\t\t\ttest.fail = function(value, description) {","","\t\t\t\t\t\tif (typeof value === 'string')","\t\t\t\t\t\t\tdescription = value;","","\t\t\t\t\t\tthis.__name__ = instance.module.name;","\t\t\t\t\t\tthis.__description__ = description;","","\t\t\t\t\t\tif (typeof (value) === 'undefined') {","\t\t\t\t\t\t\tlogFailed(this);","\t\t\t\t\t\t\treturn;","\t\t\t\t\t\t}","","\t\t\t\t\t\tif (value)","\t\t\t\t\t\t\tlogFailed(this);","\t\t\t\t\t\telse","\t\t\t\t\t\t\tlogSuccess(this);","","\t\t\t\t\t\tdelete this.__description__;","\t\t\t\t\t};","","\t\t\t\t\ttest.tester = tester; // Reference to main tester instance","\t\t\t\t\ttest.default_config = instance.config;","\t\t\t\t\ttest.config = instance.config;","\t\t\t\t\ttest.instance = instance;","\t\t\t\t\ttest.beg = new Date();","","\t\t\t\t\t// Change config of component","\t\t\t\t\ttest.configure = test.reconfigure = function(properties, withoutConfigure) {","\t\t\t\t\t\tinstance.config = test.default_config;","","\t\t\t\t\t\tfor (let key in properties)","\t\t\t\t\t\t\tinstance.config[key] = properties[key];","","\t\t\t\t\t\t!withoutConfigure \u0026\u0026 instance.configure \u0026\u0026 instance.configure();","\t\t\t\t\t};","","\t\t\t\t\t// Trigger","\t\t\t\t\ttest.trigger = function(data) {","\t\t\t\t\t\tinstance.trigger(data);","\t\t\t\t\t};","","\t\t\t\t\ttester.tests[id] = test;","","\t\t\t\t\tcallback(test, testPromiseResolver);","","\t\t\t\t\tinstance.onerror = test.onerror;","\t\t\t\t\tinstance.onError = test.onError;","\t\t\t\t}","\t\t\t});","\t\t});","\t});","","\treturn testPromise;","};","","module.exports = function(callback) {","","\tconst flow = tester.flowstream = FLOWSTREAM('Test');","","\tflow.onstatus = function(status) {","\t\tconst test = tester.tests[this.id];","\t\tif (!test)","\t\t\treturn;","\t\ttest.status \u0026\u0026 test.status(status);","\t\ttest.current_status = status;","\t};","","\tflow.ondashboard = function(status) {","\t\tconst test = tester.tests[this.id];","\t\ttest.dashboard \u0026\u0026 test.dashboard(status);","\t\ttest.current_dashboard = status;","\t};","","\tflow.onerror = function(a, b, c, d) {","\t\tconst test = tester.tests[this.id];","\t\ttest.onError \u0026\u0026 test.onError(a, b, c, d);","\t\ttest.onerror \u0026\u0026 test.onerror(a, b, c, d);","\t};","","\tflow.onconnect = function(instance) {","\t\tinstance.httproute = NOOP;","\t\tinstance.save = function() {","\t\t\tif (instance.outputs \u0026\u0026 instance.outputs.length) {","\t\t\t\tinstance.connections = {};","\t\t\t\tinstance.outputs.forEach(function(out){","\t\t\t\t\tinstance.connections[out.id] = tester.dummyConnection;","\t\t\t\t});","\t\t\t}","\t\t};","\t\tinstance.io = NOOP;","\t\tinstance.toinput = NOOP;","\t\tinstance.output = NOOP;","\t\tinstance.newvariables = function(vars) {","\t\t\tinstance.variables \u0026\u0026 instance.variables(vars);","\t\t};","\t\tinstance.reconfigure = function(conf){","\t\t\tfor (let key in conf)","\t\t\t\tinstance.config[key] = conf[key];","\t\t\tinstance.configure \u0026\u0026 instance.configure();","\t\t};","\t};","","\ttester.beg = new Date();","\tcallback.call(tester, tester.test, tester.done);","","\t// Start \"Timeout\" timer","\ttester.timeoutid = setTimeout(() =\u003e {","\t\ttester.done();","\t}, tester.timeout);","};","","if (TestAll) {","\t// Run all test scripts","\tF.Fs.readdir('tests', function(err, files) {","\t\ttester.beg = Date.now();","\t\tfiles.wait(function(file, next) {","","\t\t\tif (U.getExtension(file) === 'js') {","","\t\t\t\ttester.stats.total++;","","\t\t\t\tvar now = Date.now();","\t\t\t\tvar child = F.Child.fork('tests/' + file, { detached: true, silent: true });","","\t\t\t\tchild.on('exit', function(code) {","","\t\t\t\t\tif (code)","\t\t\t\t\t\ttester.stats.failed++;","\t\t\t\t\telse","\t\t\t\t\t\ttester.stats.ok++;","","\t\t\t\t\tvar ms = Date.now() - now;","\t\t\t\t\tconsole.log('[{0}] '.format(code ? 'FAILED' : 'OK') + file + ' ({0} s)'.format((ms / 1000).toFixed(2)));","\t\t\t\t\tnext();","","\t\t\t\t});","","\t\t\t} else","\t\t\t\tnext();","","\t\t}, tester.done);","\t});","}"],"stylingDirectives":null,"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/totaljs/flowstreamcomponents/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"tester.js","displayUrl":"https://github.com/totaljs/flowstreamcomponents/blob/main/tester.js?raw=true","headerInfo":{"blobSize":"8.66 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"38dcfa7","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftotaljs%2Fflowstreamcomponents%2Fblob%2Fmain%2Ftester.js","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"360","truncatedSloc":"276"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"JavaScript","languageID":183,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/totaljs/flowstreamcomponents/blob/main/tester.js","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/totaljs/flowstreamcomponents/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/totaljs/flowstreamcomponents/raw/refs/heads/main/tester.js","renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"logSuccess","kind":"function","ident_start":150,"ident_end":160,"extent_start":150,"extent_end":490,"fully_qualified_name":"logSuccess","ident_utf16":{"start":{"line_number":7,"utf16_col":6},"end":{"line_number":7,"utf16_col":16}},"extent_utf16":{"start":{"line_number":7,"utf16_col":6},"end":{"line_number":18,"utf16_col":1}}},{"name":"logFailed","kind":"function","ident_start":499,"ident_end":508,"extent_start":499,"extent_end":846,"fully_qualified_name":"logFailed","ident_utf16":{"start":{"line_number":20,"utf16_col":6},"end":{"line_number":20,"utf16_col":15}},"extent_utf16":{"start":{"line_number":20,"utf16_col":6},"end":{"line_number":31,"utf16_col":1}}},{"name":"output","kind":"function","ident_start":1033,"ident_end":1039,"extent_start":1026,"extent_end":1477,"fully_qualified_name":"output","ident_utf16":{"start":{"line_number":41,"utf16_col":7},"end":{"line_number":41,"utf16_col":13}},"extent_utf16":{"start":{"line_number":41,"utf16_col":0},"end":{"line_number":57,"utf16_col":1}}},{"name":"done","kind":"function","ident_start":1503,"ident_end":1507,"extent_start":1496,"extent_end":2117,"fully_qualified_name":"done","ident_utf16":{"start":{"line_number":59,"utf16_col":23},"end":{"line_number":59,"utf16_col":27}},"extent_utf16":{"start":{"line_number":59,"utf16_col":16},"end":{"line_number":79,"utf16_col":1}}},{"name":"fail","kind":"function","ident_start":2155,"ident_end":2159,"extent_start":2148,"extent_end":2254,"fully_qualified_name":"fail","ident_utf16":{"start":{"line_number":81,"utf16_col":35},"end":{"line_number":81,"utf16_col":39}},"extent_utf16":{"start":{"line_number":81,"utf16_col":28},"end":{"line_number":84,"utf16_col":1}}},{"name":"stop","kind":"function","ident_start":2264,"ident_end":2268,"extent_start":2257,"extent_end":2468,"fully_qualified_name":"stop","ident_utf16":{"start":{"line_number":86,"utf16_col":7},"end":{"line_number":86,"utf16_col":11}},"extent_utf16":{"start":{"line_number":86,"utf16_col":0},"end":{"line_number":92,"utf16_col":1}}},{"name":"test","kind":"function","ident_start":2570,"ident_end":2574,"extent_start":2563,"extent_end":6784,"fully_qualified_name":"test","ident_utf16":{"start":{"line_number":95,"utf16_col":7},"end":{"line_number":95,"utf16_col":11}},"extent_utf16":{"start":{"line_number":95,"utf16_col":0},"end":{"line_number":270,"utf16_col":1}}},{"name":"message","kind":"function","ident_start":3457,"ident_end":3464,"extent_start":3448,"extent_end":3580,"fully_qualified_name":"message","ident_utf16":{"start":{"line_number":127,"utf16_col":12},"end":{"line_number":127,"utf16_col":19}},"extent_utf16":{"start":{"line_number":127,"utf16_col":3},"end":{"line_number":131,"utf16_col":4}}},{"name":"input","kind":"function","ident_start":4481,"ident_end":4486,"extent_start":4476,"extent_end":5115,"fully_qualified_name":"input","ident_utf16":{"start":{"line_number":168,"utf16_col":10},"end":{"line_number":168,"utf16_col":15}},"extent_utf16":{"start":{"line_number":168,"utf16_col":5},"end":{"line_number":192,"utf16_col":6}}},{"name":"ok","kind":"function","ident_start":5145,"ident_end":5147,"extent_start":5140,"extent_end":5547,"fully_qualified_name":"ok","ident_utf16":{"start":{"line_number":195,"utf16_col":10},"end":{"line_number":195,"utf16_col":12}},"extent_utf16":{"start":{"line_number":195,"utf16_col":5},"end":{"line_number":214,"utf16_col":6}}},{"name":"fail","kind":"function","ident_start":5560,"ident_end":5564,"extent_start":5555,"extent_end":5963,"fully_qualified_name":"fail","ident_utf16":{"start":{"line_number":216,"utf16_col":10},"end":{"line_number":216,"utf16_col":14}},"extent_utf16":{"start":{"line_number":216,"utf16_col":5},"end":{"line_number":235,"utf16_col":6}}},{"name":"reconfigure","kind":"function","ident_start":6232,"ident_end":6243,"extent_start":6227,"extent_end":6492,"fully_qualified_name":"reconfigure","ident_utf16":{"start":{"line_number":244,"utf16_col":27},"end":{"line_number":244,"utf16_col":38}},"extent_utf16":{"start":{"line_number":244,"utf16_col":22},"end":{"line_number":251,"utf16_col":6}}},{"name":"trigger","kind":"function","ident_start":6521,"ident_end":6528,"extent_start":6516,"extent_end":6584,"fully_qualified_name":"trigger","ident_utf16":{"start":{"line_number":254,"utf16_col":10},"end":{"line_number":254,"utf16_col":17}},"extent_utf16":{"start":{"line_number":254,"utf16_col":5},"end":{"line_number":256,"utf16_col":6}}},{"name":"onstatus","kind":"function","ident_start":6887,"ident_end":6895,"extent_start":6882,"extent_end":7051,"fully_qualified_name":"onstatus","ident_utf16":{"start":{"line_number":276,"utf16_col":6},"end":{"line_number":276,"utf16_col":14}},"extent_utf16":{"start":{"line_number":276,"utf16_col":1},"end":{"line_number":282,"utf16_col":2}}},{"name":"ondashboard","kind":"function","ident_start":7060,"ident_end":7071,"extent_start":7055,"extent_end":7212,"fully_qualified_name":"ondashboard","ident_utf16":{"start":{"line_number":284,"utf16_col":6},"end":{"line_number":284,"utf16_col":17}},"extent_utf16":{"start":{"line_number":284,"utf16_col":1},"end":{"line_number":288,"utf16_col":2}}},{"name":"onerror","kind":"function","ident_start":7221,"ident_end":7228,"extent_start":7216,"extent_end":7382,"fully_qualified_name":"onerror","ident_utf16":{"start":{"line_number":290,"utf16_col":6},"end":{"line_number":290,"utf16_col":13}},"extent_utf16":{"start":{"line_number":290,"utf16_col":1},"end":{"line_number":294,"utf16_col":2}}},{"name":"onconnect","kind":"function","ident_start":7391,"ident_end":7400,"extent_start":7386,"extent_end":8023,"fully_qualified_name":"onconnect","ident_utf16":{"start":{"line_number":296,"utf16_col":6},"end":{"line_number":296,"utf16_col":15}},"extent_utf16":{"start":{"line_number":296,"utf16_col":1},"end":{"line_number":317,"utf16_col":2}}},{"name":"save","kind":"function","ident_start":7464,"ident_end":7468,"extent_start":7455,"extent_end":7689,"fully_qualified_name":"save","ident_utf16":{"start":{"line_number":298,"utf16_col":11},"end":{"line_number":298,"utf16_col":15}},"extent_utf16":{"start":{"line_number":298,"utf16_col":2},"end":{"line_number":305,"utf16_col":3}}},{"name":"newvariables","kind":"function","ident_start":7777,"ident_end":7789,"extent_start":7768,"extent_end":7863,"fully_qualified_name":"newvariables","ident_utf16":{"start":{"line_number":309,"utf16_col":11},"end":{"line_number":309,"utf16_col":23}},"extent_utf16":{"start":{"line_number":309,"utf16_col":2},"end":{"line_number":311,"utf16_col":3}}},{"name":"reconfigure","kind":"function","ident_start":7876,"ident_end":7887,"extent_start":7867,"extent_end":8019,"fully_qualified_name":"reconfigure","ident_utf16":{"start":{"line_number":312,"utf16_col":11},"end":{"line_number":312,"utf16_col":22}},"extent_utf16":{"start":{"line_number":312,"utf16_col":2},"end":{"line_number":316,"utf16_col":3}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"csrf_tokens":{"/totaljs/flowstreamcomponents/branches":{"post":"ZeWWLjL_sZEx97qswgf3OD8rPqFk3ZeJv4ETYZPrQ-cKeaxosV2lZgKJ-y-ulpysRQmVze9Lj9l1IYgo_uPAYA"},"/repos/preferences":{"post":"c6oDRDgYOS3hG4rmfKIVmlTboBnXpuYqV6tf9zPp7ZBRizKmohBUH7Bz90UetfVEgq19Oqd582ku0MKPivQbdw"}}},"title":"flowstreamcomponents/tester.js at main · totaljs/flowstreamcomponents","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-1ae9fa256942.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}
0