isomorfeus-asset-manager 0.16.4 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,11 +24,11 @@ __export(node_exports, {
24
24
  analyzeMetafileSync: () => analyzeMetafileSync,
25
25
  build: () => build,
26
26
  buildSync: () => buildSync,
27
+ context: () => context,
27
28
  default: () => node_default,
28
29
  formatMessages: () => formatMessages,
29
30
  formatMessagesSync: () => formatMessagesSync,
30
31
  initialize: () => initialize,
31
- serve: () => serve,
32
32
  transform: () => transform,
33
33
  transformSync: () => transformSync,
34
34
  version: () => version
@@ -215,15 +215,14 @@ function validateTarget(target) {
215
215
  }
216
216
  var canBeAnything = () => null;
217
217
  var mustBeBoolean = (value) => typeof value === "boolean" ? null : "a boolean";
218
- var mustBeBooleanOrObject = (value) => typeof value === "boolean" || typeof value === "object" && !Array.isArray(value) ? null : "a boolean or an object";
219
218
  var mustBeString = (value) => typeof value === "string" ? null : "a string";
220
219
  var mustBeRegExp = (value) => value instanceof RegExp ? null : "a RegExp object";
221
220
  var mustBeInteger = (value) => typeof value === "number" && value === (value | 0) ? null : "an integer";
222
221
  var mustBeFunction = (value) => typeof value === "function" ? null : "a function";
223
222
  var mustBeArray = (value) => Array.isArray(value) ? null : "an array";
224
223
  var mustBeObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? null : "an object";
224
+ var mustBeEntryPoints = (value) => typeof value === "object" && value !== null ? null : "an array or an object";
225
225
  var mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : "a WebAssembly.Module";
226
- var mustBeArrayOrRecord = (value) => typeof value === "object" && value !== null ? null : "an array or an object";
227
226
  var mustBeObjectOrNull = (value) => typeof value === "object" && !Array.isArray(value) ? null : "an object or null";
228
227
  var mustBeStringOrBoolean = (value) => typeof value === "string" || typeof value === "boolean" ? null : "a string or a boolean";
229
228
  var mustBeStringOrObject = (value) => typeof value === "string" || typeof value === "object" && value !== null && !Array.isArray(value) ? null : "a string or an object";
@@ -411,12 +410,10 @@ function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeD
411
410
  let keys = /* @__PURE__ */ Object.create(null);
412
411
  let stdinContents = null;
413
412
  let stdinResolveDir = null;
414
- let watchMode = null;
415
413
  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);
416
414
  pushCommonFlags(flags, options, keys);
417
415
  let sourcemap = getFlag(options, keys, "sourcemap", mustBeStringOrBoolean);
418
416
  let bundle = getFlag(options, keys, "bundle", mustBeBoolean);
419
- let watch = getFlag(options, keys, "watch", mustBeBooleanOrObject);
420
417
  let splitting = getFlag(options, keys, "splitting", mustBeBoolean);
421
418
  let preserveSymlinks = getFlag(options, keys, "preserveSymlinks", mustBeBoolean);
422
419
  let metafile = getFlag(options, keys, "metafile", mustBeBoolean);
@@ -440,12 +437,11 @@ function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeD
440
437
  let inject = getFlag(options, keys, "inject", mustBeArray);
441
438
  let banner = getFlag(options, keys, "banner", mustBeObject);
442
439
  let footer = getFlag(options, keys, "footer", mustBeObject);
443
- let entryPoints = getFlag(options, keys, "entryPoints", mustBeArrayOrRecord);
440
+ let entryPoints = getFlag(options, keys, "entryPoints", mustBeEntryPoints);
444
441
  let absWorkingDir = getFlag(options, keys, "absWorkingDir", mustBeString);
445
442
  let stdin = getFlag(options, keys, "stdin", mustBeObject);
446
443
  let write = (_a2 = getFlag(options, keys, "write", mustBeBoolean)) != null ? _a2 : writeDefault;
447
444
  let allowOverwrite = getFlag(options, keys, "allowOverwrite", mustBeBoolean);
448
- let incremental = getFlag(options, keys, "incremental", mustBeBoolean) === true;
449
445
  let mangleCache = getFlag(options, keys, "mangleCache", mustBeObject);
450
446
  keys.plugins = true;
451
447
  checkForInvalidFlags(options, keys, `in ${callName}() call`);
@@ -455,17 +451,6 @@ function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeD
455
451
  flags.push("--bundle");
456
452
  if (allowOverwrite)
457
453
  flags.push("--allow-overwrite");
458
- if (watch) {
459
- flags.push("--watch");
460
- if (typeof watch === "boolean") {
461
- watchMode = {};
462
- } else {
463
- let watchKeys = /* @__PURE__ */ Object.create(null);
464
- let onRebuild = getFlag(watch, watchKeys, "onRebuild", mustBeFunction);
465
- checkForInvalidFlags(watch, watchKeys, `on "watch" in ${callName}() call`);
466
- watchMode = { onRebuild };
467
- }
468
- }
469
454
  if (splitting)
470
455
  flags.push("--splitting");
471
456
  if (preserveSymlinks)
@@ -563,8 +548,21 @@ function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeD
563
548
  }
564
549
  if (entryPoints) {
565
550
  if (Array.isArray(entryPoints)) {
566
- for (let entryPoint of entryPoints) {
567
- entries.push(["", validateStringValue(entryPoint, "entry point")]);
551
+ for (let i = 0, n = entryPoints.length; i < n; i++) {
552
+ let entryPoint = entryPoints[i];
553
+ if (typeof entryPoint === "object" && entryPoint !== null) {
554
+ let entryPointKeys = /* @__PURE__ */ Object.create(null);
555
+ let input = getFlag(entryPoint, entryPointKeys, "in", mustBeString);
556
+ let output = getFlag(entryPoint, entryPointKeys, "out", mustBeString);
557
+ checkForInvalidFlags(entryPoint, entryPointKeys, "in entry point at index " + i);
558
+ if (input === void 0)
559
+ throw new Error('Missing property "in" for entry point at index ' + i);
560
+ if (output === void 0)
561
+ throw new Error('Missing property "out" for entry point at index ' + i);
562
+ entries.push([output, input]);
563
+ } else {
564
+ entries.push(["", validateStringValue(entryPoint, "entry point at index " + i)]);
565
+ }
568
566
  }
569
567
  } else {
570
568
  for (let key in entryPoints) {
@@ -604,9 +602,7 @@ function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeD
604
602
  stdinContents,
605
603
  stdinResolveDir,
606
604
  absWorkingDir,
607
- incremental,
608
605
  nodePaths,
609
- watch: watchMode,
610
606
  mangleCache: validateMangleCache(mangleCache)
611
607
  };
612
608
  }
@@ -729,8 +725,8 @@ function createChannel(streamIn) {
729
725
  if (isFirstPacket) {
730
726
  isFirstPacket = false;
731
727
  let binaryVersion = String.fromCharCode(...bytes);
732
- if (binaryVersion !== "0.16.17") {
733
- throw new Error(`Cannot start service: Host version "${"0.16.17"}" does not match binary version ${quote(binaryVersion)}`);
728
+ if (binaryVersion !== "0.17.12") {
729
+ throw new Error(`Cannot start service: Host version "${"0.17.12"}" does not match binary version ${quote(binaryVersion)}`);
734
730
  }
735
731
  return;
736
732
  }
@@ -746,7 +742,7 @@ function createChannel(streamIn) {
746
742
  callback(null, packet.value);
747
743
  }
748
744
  };
749
- let buildOrServe = ({ callName, refs, serveOptions, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => {
745
+ let buildOrContext = ({ callName, refs, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => {
750
746
  let refCount = 0;
751
747
  const buildKey = nextBuildKey++;
752
748
  const requestCallbacks = {};
@@ -767,7 +763,7 @@ function createChannel(streamIn) {
767
763
  };
768
764
  requestCallbacksByKey[buildKey] = requestCallbacks;
769
765
  buildRefs.ref();
770
- buildOrServeImpl(
766
+ buildOrContextImpl(
771
767
  callName,
772
768
  buildKey,
773
769
  sendRequest,
@@ -776,10 +772,8 @@ function createChannel(streamIn) {
776
772
  streamIn,
777
773
  requestCallbacks,
778
774
  options,
779
- serveOptions,
780
775
  isTTY2,
781
776
  defaultWD2,
782
- closeData,
783
777
  (err, res) => {
784
778
  try {
785
779
  callback(err, res);
@@ -815,7 +809,13 @@ function createChannel(streamIn) {
815
809
  let outstanding = 1;
816
810
  let next = () => {
817
811
  if (--outstanding === 0) {
818
- let result = { warnings, code: response.code, map: response.map };
812
+ let result = {
813
+ warnings,
814
+ code: response.code,
815
+ map: response.map,
816
+ mangleCache: void 0,
817
+ legalComments: void 0
818
+ };
819
819
  if ("legalComments" in response)
820
820
  result.legalComments = response == null ? void 0 : response.legalComments;
821
821
  if (response.mangleCache)
@@ -921,30 +921,26 @@ function createChannel(streamIn) {
921
921
  readFromStdout,
922
922
  afterClose,
923
923
  service: {
924
- buildOrServe,
924
+ buildOrContext,
925
925
  transform: transform2,
926
926
  formatMessages: formatMessages2,
927
927
  analyzeMetafile: analyzeMetafile2
928
928
  }
929
929
  };
930
930
  }
931
- function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, serveOptions, isTTY2, defaultWD2, closeData, callback) {
931
+ function buildOrContextImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, isTTY2, defaultWD2, callback) {
932
932
  const details = createObjectStash();
933
- const logPluginError = (e, pluginName, note, done) => {
933
+ const isContext = callName === "context";
934
+ const handleError = (e, pluginName) => {
934
935
  const flags = [];
935
936
  try {
936
937
  pushLogFlags(flags, options, {}, isTTY2, buildLogLevelDefault);
937
938
  } catch {
938
939
  }
939
- const message = extractErrorMessageV8(e, streamIn, details, note, pluginName);
940
+ const message = extractErrorMessageV8(e, streamIn, details, void 0, pluginName);
940
941
  sendRequest(refs, { command: "error", flags, error: message }, () => {
941
942
  message.detail = details.load(message.detail);
942
- done(message);
943
- });
944
- };
945
- const handleError = (e, pluginName) => {
946
- logPluginError(e, pluginName, void 0, (error) => {
947
- callback(failureErrorWithLog("Build failed", [error], []), null);
943
+ callback(failureErrorWithLog(isContext ? "Context failed" : "Build failed", [message], []), null);
948
944
  });
949
945
  };
950
946
  let plugins;
@@ -952,15 +948,13 @@ function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, s
952
948
  const value = options.plugins;
953
949
  if (value !== void 0) {
954
950
  if (!Array.isArray(value))
955
- throw new Error(`"plugins" must be an array`);
951
+ return handleError(new Error(`"plugins" must be an array`), "");
956
952
  plugins = value;
957
953
  }
958
954
  }
959
955
  if (plugins && plugins.length > 0) {
960
- if (streamIn.isSync) {
961
- handleError(new Error("Cannot use plugins in synchronous API calls"), "");
962
- return;
963
- }
956
+ if (streamIn.isSync)
957
+ return handleError(new Error("Cannot use plugins in synchronous API calls"), "");
964
958
  handlePlugins(
965
959
  buildKey,
966
960
  sendRequest,
@@ -973,12 +967,10 @@ function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, s
973
967
  details
974
968
  ).then(
975
969
  (result) => {
976
- if (!result.ok) {
977
- handleError(result.error, result.pluginName);
978
- return;
979
- }
970
+ if (!result.ok)
971
+ return handleError(result.error, result.pluginName);
980
972
  try {
981
- buildOrServeContinue(result.requestPlugins, result.runOnEndCallbacks);
973
+ buildOrContextContinue(result.requestPlugins, result.runOnEndCallbacks, result.scheduleOnDisposeCallbacks);
982
974
  } catch (e) {
983
975
  handleError(e, "");
984
976
  }
@@ -988,25 +980,26 @@ function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, s
988
980
  return;
989
981
  }
990
982
  try {
991
- buildOrServeContinue(null, (result, logPluginError2, done) => done());
983
+ buildOrContextContinue(null, (result, done) => done([], []), () => {
984
+ });
992
985
  } catch (e) {
993
986
  handleError(e, "");
994
987
  }
995
- function buildOrServeContinue(requestPlugins, runOnEndCallbacks) {
996
- let writeDefault = !streamIn.isWriteUnavailable;
997
- let {
988
+ function buildOrContextContinue(requestPlugins, runOnEndCallbacks, scheduleOnDisposeCallbacks) {
989
+ const writeDefault = streamIn.hasFS;
990
+ const {
998
991
  entries,
999
992
  flags,
1000
993
  write,
1001
994
  stdinContents,
1002
995
  stdinResolveDir,
1003
996
  absWorkingDir,
1004
- incremental,
1005
997
  nodePaths,
1006
- watch,
1007
998
  mangleCache
1008
999
  } = flagsForBuildOptions(callName, options, isTTY2, buildLogLevelDefault, writeDefault);
1009
- let request = {
1000
+ if (write && !streamIn.hasFS)
1001
+ throw new Error(`The "write" option is unavailable in this environment`);
1002
+ const request = {
1010
1003
  command: "build",
1011
1004
  key: buildKey,
1012
1005
  entries,
@@ -1015,17 +1008,23 @@ function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, s
1015
1008
  stdinContents,
1016
1009
  stdinResolveDir,
1017
1010
  absWorkingDir: absWorkingDir || defaultWD2,
1018
- incremental,
1019
- nodePaths
1011
+ nodePaths,
1012
+ context: isContext
1020
1013
  };
1021
1014
  if (requestPlugins)
1022
1015
  request.plugins = requestPlugins;
1023
1016
  if (mangleCache)
1024
1017
  request.mangleCache = mangleCache;
1025
- let serve2 = serveOptions && buildServeData(buildKey, sendRequest, sendResponse, refs, requestCallbacks, serveOptions, request);
1026
- let rebuild;
1027
- let stop;
1028
- let copyResponseToResult = (response, result) => {
1018
+ const buildResponseToResult = (response, callback2) => {
1019
+ const result = {
1020
+ errors: replaceDetailsInMessages(response.errors, details),
1021
+ warnings: replaceDetailsInMessages(response.warnings, details),
1022
+ outputFiles: void 0,
1023
+ metafile: void 0,
1024
+ mangleCache: void 0
1025
+ };
1026
+ const originalErrors = result.errors.slice();
1027
+ const originalWarnings = result.warnings.slice();
1029
1028
  if (response.outputFiles)
1030
1029
  result.outputFiles = response.outputFiles.map(convertOutputFiles);
1031
1030
  if (response.metafile)
@@ -1034,170 +1033,163 @@ function buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, s
1034
1033
  result.mangleCache = response.mangleCache;
1035
1034
  if (response.writeToStdout !== void 0)
1036
1035
  console.log(decodeUTF8(response.writeToStdout).replace(/\n$/, ""));
1037
- };
1038
- let buildResponseToResult = (response, callback2) => {
1039
- let result = {
1040
- errors: replaceDetailsInMessages(response.errors, details),
1041
- warnings: replaceDetailsInMessages(response.warnings, details)
1042
- };
1043
- copyResponseToResult(response, result);
1044
- runOnEndCallbacks(result, logPluginError, () => {
1045
- if (result.errors.length > 0) {
1046
- return callback2(failureErrorWithLog("Build failed", result.errors, result.warnings), null);
1036
+ runOnEndCallbacks(result, (onEndErrors, onEndWarnings) => {
1037
+ if (originalErrors.length > 0 || onEndErrors.length > 0) {
1038
+ const error = failureErrorWithLog("Build failed", originalErrors.concat(onEndErrors), originalWarnings.concat(onEndWarnings));
1039
+ return callback2(error, null, onEndErrors, onEndWarnings);
1047
1040
  }
1048
- if (response.rebuild) {
1049
- if (!rebuild) {
1050
- let isDisposed = false;
1051
- rebuild = () => new Promise((resolve, reject) => {
1052
- if (isDisposed || closeData.didClose)
1053
- throw new Error("Cannot rebuild");
1054
- sendRequest(
1055
- refs,
1056
- { command: "rebuild", key: buildKey },
1057
- (error2, response2) => {
1041
+ callback2(null, result, onEndErrors, onEndWarnings);
1042
+ });
1043
+ };
1044
+ let latestResultPromise;
1045
+ let provideLatestResult;
1046
+ if (isContext)
1047
+ requestCallbacks["on-end"] = (id, request2) => new Promise((resolve) => {
1048
+ buildResponseToResult(request2, (err, result, onEndErrors, onEndWarnings) => {
1049
+ const response = {
1050
+ errors: onEndErrors,
1051
+ warnings: onEndWarnings
1052
+ };
1053
+ if (provideLatestResult)
1054
+ provideLatestResult(err, result);
1055
+ latestResultPromise = void 0;
1056
+ provideLatestResult = void 0;
1057
+ sendResponse(id, response);
1058
+ resolve();
1059
+ });
1060
+ });
1061
+ sendRequest(refs, request, (error, response) => {
1062
+ if (error)
1063
+ return callback(new Error(error), null);
1064
+ if (!isContext) {
1065
+ return buildResponseToResult(response, (err, res) => {
1066
+ scheduleOnDisposeCallbacks();
1067
+ return callback(err, res);
1068
+ });
1069
+ }
1070
+ if (response.errors.length > 0) {
1071
+ return callback(failureErrorWithLog("Context failed", response.errors, response.warnings), null);
1072
+ }
1073
+ let didDispose = false;
1074
+ const result = {
1075
+ rebuild: () => {
1076
+ if (!latestResultPromise)
1077
+ latestResultPromise = new Promise((resolve, reject) => {
1078
+ let settlePromise;
1079
+ provideLatestResult = (err, result2) => {
1080
+ if (!settlePromise)
1081
+ settlePromise = () => err ? reject(err) : resolve(result2);
1082
+ };
1083
+ const triggerAnotherBuild = () => {
1084
+ const request2 = {
1085
+ command: "rebuild",
1086
+ key: buildKey
1087
+ };
1088
+ sendRequest(refs, request2, (error2, response2) => {
1058
1089
  if (error2) {
1059
- const message = { id: "", pluginName: "", text: error2, location: null, notes: [], detail: void 0 };
1060
- return callback2(failureErrorWithLog("Build failed", [message], []), null);
1090
+ reject(new Error(error2));
1091
+ } else if (settlePromise) {
1092
+ settlePromise();
1093
+ } else {
1094
+ triggerAnotherBuild();
1061
1095
  }
1062
- buildResponseToResult(response2, (error3, result3) => {
1063
- if (error3)
1064
- reject(error3);
1065
- else
1066
- resolve(result3);
1067
- });
1068
- }
1069
- );
1096
+ });
1097
+ };
1098
+ triggerAnotherBuild();
1070
1099
  });
1071
- refs.ref();
1072
- rebuild.dispose = () => {
1073
- if (isDisposed)
1074
- return;
1075
- isDisposed = true;
1076
- sendRequest(refs, { command: "rebuild-dispose", key: buildKey }, () => {
1077
- });
1078
- refs.unref();
1079
- };
1080
- }
1081
- result.rebuild = rebuild;
1082
- }
1083
- if (response.watch) {
1084
- if (!stop) {
1085
- let isStopped = false;
1086
- refs.ref();
1087
- stop = () => {
1088
- if (isStopped)
1089
- return;
1090
- isStopped = true;
1091
- delete requestCallbacks["watch-rebuild"];
1092
- sendRequest(refs, { command: "watch-stop", key: buildKey }, () => {
1093
- });
1094
- refs.unref();
1095
- };
1096
- if (watch) {
1097
- requestCallbacks["watch-rebuild"] = (id, request2) => {
1098
- try {
1099
- let watchResponse = request2.args;
1100
- let result2 = {
1101
- errors: replaceDetailsInMessages(watchResponse.errors, details),
1102
- warnings: replaceDetailsInMessages(watchResponse.warnings, details)
1103
- };
1104
- copyResponseToResult(watchResponse, result2);
1105
- runOnEndCallbacks(result2, logPluginError, () => {
1106
- if (result2.errors.length > 0) {
1107
- if (watch.onRebuild)
1108
- watch.onRebuild(failureErrorWithLog("Build failed", result2.errors, result2.warnings), null);
1109
- return;
1110
- }
1111
- result2.stop = stop;
1112
- if (watch.onRebuild)
1113
- watch.onRebuild(null, result2);
1114
- });
1115
- } catch (err) {
1116
- console.error(err);
1117
- }
1100
+ return latestResultPromise;
1101
+ },
1102
+ watch: (options2 = {}) => new Promise((resolve, reject) => {
1103
+ if (!streamIn.hasFS)
1104
+ throw new Error(`Cannot use the "watch" API in this environment`);
1105
+ const keys = {};
1106
+ checkForInvalidFlags(options2, keys, `in watch() call`);
1107
+ const request2 = {
1108
+ command: "watch",
1109
+ key: buildKey
1110
+ };
1111
+ sendRequest(refs, request2, (error2) => {
1112
+ if (error2)
1113
+ reject(new Error(error2));
1114
+ else
1115
+ resolve(void 0);
1116
+ });
1117
+ }),
1118
+ serve: (options2 = {}) => new Promise((resolve, reject) => {
1119
+ if (!streamIn.hasFS)
1120
+ throw new Error(`Cannot use the "serve" API in this environment`);
1121
+ const keys = {};
1122
+ const port = getFlag(options2, keys, "port", mustBeInteger);
1123
+ const host = getFlag(options2, keys, "host", mustBeString);
1124
+ const servedir = getFlag(options2, keys, "servedir", mustBeString);
1125
+ const keyfile = getFlag(options2, keys, "keyfile", mustBeString);
1126
+ const certfile = getFlag(options2, keys, "certfile", mustBeString);
1127
+ const onRequest = getFlag(options2, keys, "onRequest", mustBeFunction);
1128
+ checkForInvalidFlags(options2, keys, `in serve() call`);
1129
+ const request2 = {
1130
+ command: "serve",
1131
+ key: buildKey,
1132
+ onRequest: !!onRequest
1133
+ };
1134
+ if (port !== void 0)
1135
+ request2.port = port;
1136
+ if (host !== void 0)
1137
+ request2.host = host;
1138
+ if (servedir !== void 0)
1139
+ request2.servedir = servedir;
1140
+ if (keyfile !== void 0)
1141
+ request2.keyfile = keyfile;
1142
+ if (certfile !== void 0)
1143
+ request2.certfile = certfile;
1144
+ sendRequest(refs, request2, (error2, response2) => {
1145
+ if (error2)
1146
+ return reject(new Error(error2));
1147
+ if (onRequest) {
1148
+ requestCallbacks["serve-request"] = (id, request3) => {
1149
+ onRequest(request3.args);
1118
1150
  sendResponse(id, {});
1119
1151
  };
1120
1152
  }
1121
- }
1122
- result.stop = stop;
1123
- }
1124
- callback2(null, result);
1125
- });
1126
- };
1127
- if (write && streamIn.isWriteUnavailable)
1128
- throw new Error(`The "write" option is unavailable in this environment`);
1129
- if (incremental && streamIn.isSync)
1130
- throw new Error(`Cannot use "incremental" with a synchronous build`);
1131
- if (watch && streamIn.isSync)
1132
- throw new Error(`Cannot use "watch" with a synchronous build`);
1133
- sendRequest(refs, request, (error, response) => {
1134
- if (error)
1135
- return callback(new Error(error), null);
1136
- if (serve2) {
1137
- let serveResponse = response;
1138
- let isStopped = false;
1139
- refs.ref();
1140
- let result = {
1141
- port: serveResponse.port,
1142
- host: serveResponse.host,
1143
- wait: serve2.wait,
1144
- stop() {
1145
- if (isStopped)
1146
- return;
1147
- isStopped = true;
1148
- serve2.stop();
1153
+ resolve(response2);
1154
+ });
1155
+ }),
1156
+ cancel: () => new Promise((resolve) => {
1157
+ if (didDispose)
1158
+ return resolve();
1159
+ const request2 = {
1160
+ command: "cancel",
1161
+ key: buildKey
1162
+ };
1163
+ sendRequest(refs, request2, () => {
1164
+ resolve();
1165
+ });
1166
+ }),
1167
+ dispose: () => new Promise((resolve) => {
1168
+ if (didDispose)
1169
+ return resolve();
1170
+ didDispose = true;
1171
+ const request2 = {
1172
+ command: "dispose",
1173
+ key: buildKey
1174
+ };
1175
+ sendRequest(refs, request2, () => {
1176
+ resolve();
1177
+ scheduleOnDisposeCallbacks();
1149
1178
  refs.unref();
1150
- }
1151
- };
1152
- refs.ref();
1153
- serve2.wait.then(refs.unref, refs.unref);
1154
- return callback(null, result);
1155
- }
1156
- return buildResponseToResult(response, callback);
1179
+ });
1180
+ })
1181
+ };
1182
+ refs.ref();
1183
+ callback(null, result);
1157
1184
  });
1158
1185
  }
1159
1186
  }
1160
- var buildServeData = (buildKey, sendRequest, sendResponse, refs, requestCallbacks, options, request) => {
1161
- let keys = {};
1162
- let port = getFlag(options, keys, "port", mustBeInteger);
1163
- let host = getFlag(options, keys, "host", mustBeString);
1164
- let servedir = getFlag(options, keys, "servedir", mustBeString);
1165
- let onRequest = getFlag(options, keys, "onRequest", mustBeFunction);
1166
- let wait = new Promise((resolve, reject) => {
1167
- requestCallbacks["serve-wait"] = (id, request2) => {
1168
- if (request2.error !== null)
1169
- reject(new Error(request2.error));
1170
- else
1171
- resolve();
1172
- sendResponse(id, {});
1173
- };
1174
- });
1175
- request.serve = {};
1176
- checkForInvalidFlags(options, keys, `in serve() call`);
1177
- if (port !== void 0)
1178
- request.serve.port = port;
1179
- if (host !== void 0)
1180
- request.serve.host = host;
1181
- if (servedir !== void 0)
1182
- request.serve.servedir = servedir;
1183
- requestCallbacks["serve-request"] = (id, request2) => {
1184
- if (onRequest)
1185
- onRequest(request2.args);
1186
- sendResponse(id, {});
1187
- };
1188
- return {
1189
- wait,
1190
- stop() {
1191
- sendRequest(refs, { command: "serve-stop", key: buildKey }, () => {
1192
- });
1193
- }
1194
- };
1195
- };
1196
1187
  var handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => {
1197
1188
  let onStartCallbacks = [];
1198
1189
  let onEndCallbacks = [];
1199
1190
  let onResolveCallbacks = {};
1200
1191
  let onLoadCallbacks = {};
1192
+ let onDisposeCallbacks = [];
1201
1193
  let nextCallbackID = 0;
1202
1194
  let i = 0;
1203
1195
  let requestPlugins = [];
@@ -1315,6 +1307,9 @@ var handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn,
1315
1307
  onLoadCallbacks[id] = { name, callback, note: registeredNote };
1316
1308
  plugin.onLoad.push({ id, filter: filter.source, namespace: namespace || "" });
1317
1309
  },
1310
+ onDispose(callback) {
1311
+ onDisposeCallbacks.push(callback);
1312
+ },
1318
1313
  esbuild: streamIn.esbuild
1319
1314
  });
1320
1315
  if (promise)
@@ -1463,25 +1458,62 @@ var handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn,
1463
1458
  }
1464
1459
  sendResponse(id, response);
1465
1460
  };
1466
- let runOnEndCallbacks = (result, logPluginError, done) => done();
1461
+ let runOnEndCallbacks = (result, done) => done([], []);
1467
1462
  if (onEndCallbacks.length > 0) {
1468
- runOnEndCallbacks = (result, logPluginError, done) => {
1463
+ runOnEndCallbacks = (result, done) => {
1469
1464
  (async () => {
1465
+ const onEndErrors = [];
1466
+ const onEndWarnings = [];
1470
1467
  for (const { name, callback, note } of onEndCallbacks) {
1468
+ let newErrors;
1469
+ let newWarnings;
1471
1470
  try {
1472
- await callback(result);
1471
+ const value = await callback(result);
1472
+ if (value != null) {
1473
+ if (typeof value !== "object")
1474
+ throw new Error(`Expected onEnd() callback in plugin ${quote(name)} to return an object`);
1475
+ let keys = {};
1476
+ let errors = getFlag(value, keys, "errors", mustBeArray);
1477
+ let warnings = getFlag(value, keys, "warnings", mustBeArray);
1478
+ checkForInvalidFlags(value, keys, `from onEnd() callback in plugin ${quote(name)}`);
1479
+ if (errors != null)
1480
+ newErrors = sanitizeMessages(errors, "errors", details, name);
1481
+ if (warnings != null)
1482
+ newWarnings = sanitizeMessages(warnings, "warnings", details, name);
1483
+ }
1473
1484
  } catch (e) {
1474
- result.errors.push(await new Promise((resolve) => logPluginError(e, name, note && note(), resolve)));
1485
+ newErrors = [extractErrorMessageV8(e, streamIn, details, note && note(), name)];
1486
+ }
1487
+ if (newErrors) {
1488
+ onEndErrors.push(...newErrors);
1489
+ try {
1490
+ result.errors.push(...newErrors);
1491
+ } catch {
1492
+ }
1493
+ }
1494
+ if (newWarnings) {
1495
+ onEndWarnings.push(...newWarnings);
1496
+ try {
1497
+ result.warnings.push(...newWarnings);
1498
+ } catch {
1499
+ }
1475
1500
  }
1476
1501
  }
1477
- })().then(done);
1502
+ done(onEndErrors, onEndWarnings);
1503
+ })();
1478
1504
  };
1479
1505
  }
1506
+ let scheduleOnDisposeCallbacks = () => {
1507
+ for (const cb of onDisposeCallbacks) {
1508
+ setTimeout(() => cb(), 0);
1509
+ }
1510
+ };
1480
1511
  isSetupDone = true;
1481
1512
  return {
1482
1513
  ok: true,
1483
1514
  requestPlugins,
1484
- runOnEndCallbacks
1515
+ runOnEndCallbacks,
1516
+ scheduleOnDisposeCallbacks
1485
1517
  };
1486
1518
  };
1487
1519
  function createObjectStash() {
@@ -1715,7 +1747,7 @@ if (process.env.ESBUILD_WORKER_THREADS !== "0") {
1715
1747
  }
1716
1748
  }
1717
1749
  var _a;
1718
- var isInternalWorkerThread = ((_a = worker_threads == null ? void 0 : worker_threads.workerData) == null ? void 0 : _a.esbuildVersion) === "0.16.17";
1750
+ var isInternalWorkerThread = ((_a = worker_threads == null ? void 0 : worker_threads.workerData) == null ? void 0 : _a.esbuildVersion) === "0.17.12";
1719
1751
  var esbuildCommandAndArgs = () => {
1720
1752
  if ((!ESBUILD_BINARY_PATH || true) && (path2.basename(__filename) !== "main.js" || path2.basename(__dirname) !== "lib")) {
1721
1753
  throw new Error(
@@ -1782,9 +1814,9 @@ var fsAsync = {
1782
1814
  }
1783
1815
  }
1784
1816
  };
1785
- var version = "0.16.17";
1817
+ var version = "0.17.12";
1786
1818
  var build = (options) => ensureServiceIsRunning().build(options);
1787
- var serve = (serveOptions, buildOptions) => ensureServiceIsRunning().serve(serveOptions, buildOptions);
1819
+ var context = (buildOptions) => ensureServiceIsRunning().context(buildOptions);
1788
1820
  var transform = (input, options) => ensureServiceIsRunning().transform(input, options);
1789
1821
  var formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options);
1790
1822
  var analyzeMetafile = (messages, options) => ensureServiceIsRunning().analyzeMetafile(messages, options);
@@ -1795,10 +1827,9 @@ var buildSync = (options) => {
1795
1827
  return workerThreadService.buildSync(options);
1796
1828
  }
1797
1829
  let result;
1798
- runServiceSync((service) => service.buildOrServe({
1830
+ runServiceSync((service) => service.buildOrContext({
1799
1831
  callName: "buildSync",
1800
1832
  refs: null,
1801
- serveOptions: null,
1802
1833
  options,
1803
1834
  isTTY: isTTY(),
1804
1835
  defaultWD,
@@ -1893,7 +1924,7 @@ var ensureServiceIsRunning = () => {
1893
1924
  if (longLivedService)
1894
1925
  return longLivedService;
1895
1926
  let [command, args] = esbuildCommandAndArgs();
1896
- let child = child_process.spawn(command, args.concat(`--service=${"0.16.17"}`, "--ping"), {
1927
+ let child = child_process.spawn(command, args.concat(`--service=${"0.17.12"}`, "--ping"), {
1897
1928
  windowsHide: true,
1898
1929
  stdio: ["pipe", "pipe", "inherit"],
1899
1930
  cwd: defaultWD
@@ -1907,7 +1938,7 @@ var ensureServiceIsRunning = () => {
1907
1938
  },
1908
1939
  readFileSync: fs2.readFileSync,
1909
1940
  isSync: false,
1910
- isWriteUnavailable: false,
1941
+ hasFS: true,
1911
1942
  esbuild: node_exports
1912
1943
  });
1913
1944
  child.stdin.on("error", afterClose);
@@ -1935,61 +1966,47 @@ var ensureServiceIsRunning = () => {
1935
1966
  }
1936
1967
  };
1937
1968
  longLivedService = {
1938
- build: (options) => {
1939
- return new Promise((resolve, reject) => {
1940
- service.buildOrServe({
1941
- callName: "build",
1942
- refs,
1943
- serveOptions: null,
1944
- options,
1945
- isTTY: isTTY(),
1946
- defaultWD,
1947
- callback: (err, res) => err ? reject(err) : resolve(res)
1948
- });
1949
- });
1950
- },
1951
- serve: (serveOptions, buildOptions) => {
1952
- if (serveOptions === null || typeof serveOptions !== "object")
1953
- throw new Error("The first argument must be an object");
1954
- return new Promise((resolve, reject) => service.buildOrServe({
1955
- callName: "serve",
1969
+ build: (options) => new Promise((resolve, reject) => {
1970
+ service.buildOrContext({
1971
+ callName: "build",
1956
1972
  refs,
1957
- serveOptions,
1958
- options: buildOptions,
1973
+ options,
1959
1974
  isTTY: isTTY(),
1960
1975
  defaultWD,
1961
1976
  callback: (err, res) => err ? reject(err) : resolve(res)
1962
- }));
1963
- },
1964
- transform: (input, options) => {
1965
- return new Promise((resolve, reject) => service.transform({
1966
- callName: "transform",
1967
- refs,
1968
- input,
1969
- options: options || {},
1970
- isTTY: isTTY(),
1971
- fs: fsAsync,
1972
- callback: (err, res) => err ? reject(err) : resolve(res)
1973
- }));
1974
- },
1975
- formatMessages: (messages, options) => {
1976
- return new Promise((resolve, reject) => service.formatMessages({
1977
- callName: "formatMessages",
1978
- refs,
1979
- messages,
1980
- options,
1981
- callback: (err, res) => err ? reject(err) : resolve(res)
1982
- }));
1983
- },
1984
- analyzeMetafile: (metafile, options) => {
1985
- return new Promise((resolve, reject) => service.analyzeMetafile({
1986
- callName: "analyzeMetafile",
1987
- refs,
1988
- metafile: typeof metafile === "string" ? metafile : JSON.stringify(metafile),
1989
- options,
1990
- callback: (err, res) => err ? reject(err) : resolve(res)
1991
- }));
1992
- }
1977
+ });
1978
+ }),
1979
+ context: (options) => new Promise((resolve, reject) => service.buildOrContext({
1980
+ callName: "context",
1981
+ refs,
1982
+ options,
1983
+ isTTY: isTTY(),
1984
+ defaultWD,
1985
+ callback: (err, res) => err ? reject(err) : resolve(res)
1986
+ })),
1987
+ transform: (input, options) => new Promise((resolve, reject) => service.transform({
1988
+ callName: "transform",
1989
+ refs,
1990
+ input,
1991
+ options: options || {},
1992
+ isTTY: isTTY(),
1993
+ fs: fsAsync,
1994
+ callback: (err, res) => err ? reject(err) : resolve(res)
1995
+ })),
1996
+ formatMessages: (messages, options) => new Promise((resolve, reject) => service.formatMessages({
1997
+ callName: "formatMessages",
1998
+ refs,
1999
+ messages,
2000
+ options,
2001
+ callback: (err, res) => err ? reject(err) : resolve(res)
2002
+ })),
2003
+ analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => service.analyzeMetafile({
2004
+ callName: "analyzeMetafile",
2005
+ refs,
2006
+ metafile: typeof metafile === "string" ? metafile : JSON.stringify(metafile),
2007
+ options,
2008
+ callback: (err, res) => err ? reject(err) : resolve(res)
2009
+ }))
1993
2010
  };
1994
2011
  return longLivedService;
1995
2012
  };
@@ -2003,11 +2020,11 @@ var runServiceSync = (callback) => {
2003
2020
  stdin = bytes;
2004
2021
  },
2005
2022
  isSync: true,
2006
- isWriteUnavailable: false,
2023
+ hasFS: true,
2007
2024
  esbuild: node_exports
2008
2025
  });
2009
2026
  callback(service);
2010
- let stdout = child_process.execFileSync(command, args.concat(`--service=${"0.16.17"}`), {
2027
+ let stdout = child_process.execFileSync(command, args.concat(`--service=${"0.17.12"}`), {
2011
2028
  cwd: defaultWD,
2012
2029
  windowsHide: true,
2013
2030
  input: stdin,
@@ -2027,7 +2044,7 @@ var workerThreadService = null;
2027
2044
  var startWorkerThreadService = (worker_threads2) => {
2028
2045
  let { port1: mainPort, port2: workerPort } = new worker_threads2.MessageChannel();
2029
2046
  let worker = new worker_threads2.Worker(__filename, {
2030
- workerData: { workerPort, defaultWD, esbuildVersion: "0.16.17" },
2047
+ workerData: { workerPort, defaultWD, esbuildVersion: "0.17.12" },
2031
2048
  transferList: [workerPort],
2032
2049
  // From node's documentation: https://nodejs.org/api/worker_threads.html
2033
2050
  //
@@ -2053,14 +2070,8 @@ error: ${text}`);
2053
2070
  if (!options)
2054
2071
  return;
2055
2072
  let plugins = options.plugins;
2056
- let incremental = options.incremental;
2057
- let watch = options.watch;
2058
2073
  if (plugins && plugins.length > 0)
2059
2074
  throw fakeBuildError(`Cannot use plugins in synchronous API calls`);
2060
- if (incremental)
2061
- throw fakeBuildError(`Cannot use "incremental" with a synchronous build`);
2062
- if (watch)
2063
- throw fakeBuildError(`Cannot use "watch" with a synchronous build`);
2064
2075
  };
2065
2076
  let applyProperties = (object, properties) => {
2066
2077
  for (let key in properties) {
@@ -2165,10 +2176,10 @@ var node_default = node_exports;
2165
2176
  analyzeMetafileSync,
2166
2177
  build,
2167
2178
  buildSync,
2179
+ context,
2168
2180
  formatMessages,
2169
2181
  formatMessagesSync,
2170
2182
  initialize,
2171
- serve,
2172
2183
  transform,
2173
2184
  transformSync,
2174
2185
  version