marko 5.36.2 → 5.36.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -147,29 +147,50 @@ var proto = AsyncStream.prototype = {
147
147
  };
148
148
  } else {
149
149
  let done = false;
150
- let pending = deferred();
150
+ let error = noop; // Used as a identity object reference.
151
+ let pending;
151
152
  const stream = {
152
153
  write(data) {
153
154
  buffer += data;
154
155
  },
155
156
  end() {
156
157
  done = true;
157
- pending.resolve({
158
- value: "",
159
- done
160
- });
158
+
159
+ if (pending) {
160
+ pending.resolve(
161
+ buffer ?
162
+ {
163
+ value: buffer,
164
+ done: false
165
+ } :
166
+ {
167
+ value: undefined,
168
+ done: true
169
+ }
170
+ );
171
+ pending = undefined;
172
+ }
161
173
  },
162
174
  flush() {
163
- pending.resolve({
164
- value: buffer,
165
- done: false
166
- });
167
- buffer = "";
168
- pending = deferred();
175
+ if (pending) {
176
+ pending.resolve({
177
+ value: buffer,
178
+ done: false
179
+ });
180
+ buffer = "";
181
+ pending = undefined;
182
+ }
169
183
  }
170
184
  };
171
185
 
172
- this.on("error", pending.reject);
186
+ this.once("error", (err) => {
187
+ error = err;
188
+
189
+ if (pending) {
190
+ pending.reject(error);
191
+ pending = undefined;
192
+ }
193
+ });
173
194
 
174
195
  const writer = new BufferedWriter(stream);
175
196
  writer.stream = originalWriter.stream;
@@ -182,11 +203,20 @@ var proto = AsyncStream.prototype = {
182
203
  this._state.writer = writer;
183
204
 
184
205
  iteratorNextFn = async () => {
185
- if (buffer || done) {
206
+ if (error !== noop) {
207
+ throw error;
208
+ } else if (buffer) {
186
209
  const value = buffer;
187
210
  buffer = "";
188
- return { value, done };
211
+ return { value, done: false };
212
+ } else if (done) {
213
+ return { value: undefined, done: true };
214
+ }
215
+
216
+ if (!pending) {
217
+ pending = deferred();
189
218
  }
219
+
190
220
  return pending.promise;
191
221
  };
192
222
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "5.36.2",
3
+ "version": "5.36.4",
4
4
  "description": "UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.",
5
5
  "keywords": [
6
6
  "front-end",
@@ -66,8 +66,8 @@
66
66
  "build": "babel ./src --out-dir ./dist --extensions .js --copy-files --config-file ../../babel.config.js --env-name=production"
67
67
  },
68
68
  "dependencies": {
69
- "@marko/compiler": "^5.38.2",
70
- "@marko/translator-default": "^6.1.1",
69
+ "@marko/compiler": "^5.38.3",
70
+ "@marko/translator-default": "^6.1.2",
71
71
  "app-module-path": "^2.2.0",
72
72
  "argly": "^1.2.0",
73
73
  "browser-refresh-client": "1.1.4",
@@ -147,29 +147,50 @@ var proto = (AsyncStream.prototype = {
147
147
  };
148
148
  } else {
149
149
  let done = false;
150
- let pending = deferred();
150
+ let error = noop; // Used as a identity object reference.
151
+ let pending;
151
152
  const stream = {
152
153
  write(data) {
153
154
  buffer += data;
154
155
  },
155
156
  end() {
156
157
  done = true;
157
- pending.resolve({
158
- value: "",
159
- done,
160
- });
158
+
159
+ if (pending) {
160
+ pending.resolve(
161
+ buffer
162
+ ? {
163
+ value: buffer,
164
+ done: false,
165
+ }
166
+ : {
167
+ value: undefined,
168
+ done: true,
169
+ },
170
+ );
171
+ pending = undefined;
172
+ }
161
173
  },
162
174
  flush() {
163
- pending.resolve({
164
- value: buffer,
165
- done: false,
166
- });
167
- buffer = "";
168
- pending = deferred();
175
+ if (pending) {
176
+ pending.resolve({
177
+ value: buffer,
178
+ done: false,
179
+ });
180
+ buffer = "";
181
+ pending = undefined;
182
+ }
169
183
  },
170
184
  };
171
185
 
172
- this.on("error", pending.reject);
186
+ this.once("error", (err) => {
187
+ error = err;
188
+
189
+ if (pending) {
190
+ pending.reject(error);
191
+ pending = undefined;
192
+ }
193
+ });
173
194
 
174
195
  const writer = new BufferedWriter(stream);
175
196
  writer.stream = originalWriter.stream;
@@ -182,11 +203,20 @@ var proto = (AsyncStream.prototype = {
182
203
  this._state.writer = writer;
183
204
 
184
205
  iteratorNextFn = async () => {
185
- if (buffer || done) {
206
+ if (error !== noop) {
207
+ throw error;
208
+ } else if (buffer) {
186
209
  const value = buffer;
187
210
  buffer = "";
188
- return { value, done };
211
+ return { value, done: false };
212
+ } else if (done) {
213
+ return { value: undefined, done: true };
214
+ }
215
+
216
+ if (!pending) {
217
+ pending = deferred();
189
218
  }
219
+
190
220
  return pending.promise;
191
221
  };
192
222
  }