Skip to main content
Glama
GeneratorStart.js•1.62 kB
'use strict'; var $TypeError = require('es-errors/type'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var IsCallable = require('./IsCallable'); var SLOT = require('internal-slot'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/16.0/#sec-generatorstart module.exports = function GeneratorStart(generator, closure) { SLOT.assert(generator, '[[GeneratorState]]'); SLOT.assert(generator, '[[GeneratorContext]]'); SLOT.assert(generator, '[[GeneratorBrand]]'); SLOT.assert(generator, '[[Sentinel]]'); // our userland slot SLOT.assert(generator, '[[CloseIfAbrupt]]'); // our second userland slot if (!IsCallable(closure) || closure.length !== 0) { throw new $TypeError('`closure` must be a function that takes no arguments'); } var sentinel = SLOT.get(closure, '[[Sentinel]]'); if (!isObject(sentinel)) { throw new $TypeError('`closure.[[Sentinel]]` must be an object'); } SLOT.set(generator, '[[GeneratorContext]]', function () { // steps 2-5 try { var result = closure(); if (result === sentinel) { SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); SLOT.set(generator, '[[GeneratorContext]]', null); return CreateIteratorResultObject(void undefined, true); } SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-YIELD'); return CreateIteratorResultObject(result, false); } catch (e) { SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); SLOT.set(generator, '[[GeneratorContext]]', null); throw e; } }); SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-START'); // step 6 };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/guangxiangdebizi/PPT-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server