@jsenv/core 40.3.1 → 40.3.3

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.
Files changed (116) hide show
  1. package/README.md +42 -33
  2. package/dist/browserslist_index/browserslist_index.js +4951 -0
  3. package/dist/build/build.js +189 -62
  4. package/dist/jsenv_core_node_modules.js +25 -1
  5. package/dist/jsenv_core_packages.js +6384 -11580
  6. package/dist/start_build_server/start_build_server.js +0 -5
  7. package/dist/start_dev_server/start_dev_server.js +108 -60
  8. package/package.json +20 -21
  9. package/src/build/build.js +80 -1
  10. package/src/kitchen/errors.js +6 -1
  11. package/src/kitchen/kitchen.js +95 -7
  12. package/src/plugins/package_side_effects/jsenv_plugin_package_side_effects.js +5 -51
  13. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +0 -112
  14. package/dist/babel_helpers/AwaitValue/AwaitValue.js +0 -3
  15. package/dist/babel_helpers/OverloadYield/OverloadYield.js +0 -11
  16. package/dist/babel_helpers/applyDecoratedDescriptor/applyDecoratedDescriptor.js +0 -32
  17. package/dist/babel_helpers/applyDecs/applyDecs.js +0 -813
  18. package/dist/babel_helpers/applyDecs2203/applyDecs2203.js +0 -635
  19. package/dist/babel_helpers/applyDecs2203R/applyDecs2203R.js +0 -654
  20. package/dist/babel_helpers/applyDecs2301/applyDecs2301.js +0 -721
  21. package/dist/babel_helpers/applyDecs2305/applyDecs2305.js +0 -531
  22. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +0 -7
  23. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +0 -4
  24. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  25. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +0 -9
  26. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -55
  27. package/dist/babel_helpers/asyncIterator/asyncIterator.js +0 -68
  28. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +0 -34
  29. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  30. package/dist/babel_helpers/callSuper/callSuper.js +0 -25
  31. package/dist/babel_helpers/checkInRHS/checkInRHS.js +0 -11
  32. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -23
  33. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  34. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  35. package/dist/babel_helpers/classCallCheck/classCallCheck.js +0 -5
  36. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -8
  37. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -11
  38. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -13
  39. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +0 -6
  40. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  41. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  42. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  43. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  44. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  45. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  46. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  47. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -13
  48. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  49. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -10
  50. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  51. package/dist/babel_helpers/construct/construct.js +0 -20
  52. package/dist/babel_helpers/createClass/createClass.js +0 -17
  53. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -61
  54. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -24
  55. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +0 -50
  56. package/dist/babel_helpers/createSuper/createSuper.js +0 -22
  57. package/dist/babel_helpers/decorate/decorate.js +0 -488
  58. package/dist/babel_helpers/defaults/defaults.js +0 -11
  59. package/dist/babel_helpers/defineAccessor/defineAccessor.js +0 -6
  60. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  61. package/dist/babel_helpers/defineProperty/defineProperty.js +0 -21
  62. package/dist/babel_helpers/dispose/dispose.js +0 -45
  63. package/dist/babel_helpers/extends/extends.js +0 -14
  64. package/dist/babel_helpers/get/get.js +0 -19
  65. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +0 -4
  66. package/dist/babel_helpers/identity/identity.js +0 -3
  67. package/dist/babel_helpers/importDeferProxy/importDeferProxy.js +0 -31
  68. package/dist/babel_helpers/inherits/inherits.js +0 -19
  69. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +0 -7
  70. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +0 -12
  71. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +0 -6
  72. package/dist/babel_helpers/instanceof/instanceof.js +0 -10
  73. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +0 -3
  74. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +0 -47
  75. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +0 -9
  76. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -19
  77. package/dist/babel_helpers/iterableToArray/iterableToArray.js +0 -7
  78. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +0 -54
  79. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -16
  80. package/dist/babel_helpers/jsx/jsx.js +0 -50
  81. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +0 -10
  82. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +0 -5
  83. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +0 -5
  84. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +0 -5
  85. package/dist/babel_helpers/nullishReceiverError/nullishReceiverError.js +0 -3
  86. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  87. package/dist/babel_helpers/objectSpread/objectSpread.js +0 -23
  88. package/dist/babel_helpers/objectSpread2/objectSpread2.js +0 -43
  89. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +0 -19
  90. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  91. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +0 -12
  92. package/dist/babel_helpers/readOnlyError/readOnlyError.js +0 -4
  93. package/dist/babel_helpers/regeneratorRuntime/regeneratorRuntime.js +0 -698
  94. package/dist/babel_helpers/set/set.js +0 -47
  95. package/dist/babel_helpers/setFunctionName/setFunctionName.js +0 -19
  96. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +0 -7
  97. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  98. package/dist/babel_helpers/slicedToArray/slicedToArray.js +0 -10
  99. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  100. package/dist/babel_helpers/superPropBase/superPropBase.js +0 -10
  101. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  102. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  103. package/dist/babel_helpers/tdz/tdz.js +0 -4
  104. package/dist/babel_helpers/temporalRef/temporalRef.js +0 -6
  105. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +0 -3
  106. package/dist/babel_helpers/toArray/toArray.js +0 -10
  107. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +0 -10
  108. package/dist/babel_helpers/toPrimitive/toPrimitive.js +0 -14
  109. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +0 -10
  110. package/dist/babel_helpers/typeof/typeof.js +0 -15
  111. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  112. package/dist/babel_helpers/using/using.js +0 -23
  113. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  114. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +0 -30
  115. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +0 -79
  116. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +0 -3
@@ -20,10 +20,9 @@ import { createUrlGraph } from "./url_graph/url_graph.js";
20
20
  import { createUrlInfoTransformer } from "./url_graph/url_info_transformations.js";
21
21
  import { urlSpecifierEncoding } from "./url_graph/url_specifier_encoding.js";
22
22
 
23
- const inlineContentClientFileUrl = new URL(
23
+ const inlineContentClientFileUrl = import.meta.resolve(
24
24
  "./client/inline_content.js",
25
- import.meta.url,
26
- ).href;
25
+ );
27
26
 
28
27
  export const createKitchen = ({
29
28
  name,
@@ -32,12 +31,14 @@ export const createKitchen = ({
32
31
 
33
32
  rootDirectoryUrl,
34
33
  mainFilePath,
35
- ignore,
36
- ignoreProtocol = "remove",
37
- supportedProtocols = ["file:", "data:", "virtual:", "http:", "https:"],
38
34
  dev = false,
39
35
  build = false,
40
36
  runtimeCompat,
37
+
38
+ ignore,
39
+ ignoreProtocol = "remove",
40
+ supportedProtocols = ["file:", "data:", "virtual:", "http:", "https:"],
41
+
41
42
  // during dev/test clientRuntimeCompat is a single runtime
42
43
  // during build clientRuntimeCompat is runtimeCompat
43
44
  clientRuntimeCompat = runtimeCompat,
@@ -50,12 +51,17 @@ export const createKitchen = ({
50
51
  outDirectoryUrl,
51
52
  initialContext = {},
52
53
  packageDirectory,
54
+ packageDependencies,
53
55
  }) => {
54
56
  const logger = createLogger({ logLevel });
55
57
 
56
58
  const nodeRuntimeEnabled = Object.keys(runtimeCompat).includes("node");
57
59
  const packageConditions = [nodeRuntimeEnabled ? "node" : "browser", "import"];
58
60
 
61
+ if (packageDependencies === "auto") {
62
+ packageDependencies = build && nodeRuntimeEnabled ? "ignore" : "include";
63
+ }
64
+
59
65
  const kitchen = {
60
66
  context: {
61
67
  ...initialContext,
@@ -125,6 +131,82 @@ export const createKitchen = ({
125
131
  const protocolIsSupported = supportedProtocols.includes(protocol);
126
132
  return !protocolIsSupported;
127
133
  };
134
+ const isIgnoredBecauseInPackageDependencies = (() => {
135
+ if (packageDependencies === undefined) {
136
+ return FUNCTION_RETURNING_FALSE;
137
+ }
138
+ if (packageDependencies === "include") {
139
+ return FUNCTION_RETURNING_FALSE;
140
+ }
141
+ if (!packageDirectory.url) {
142
+ return FUNCTION_RETURNING_FALSE;
143
+ }
144
+ const rootPackageJSON = packageDirectory.read(packageDirectory.url);
145
+ if (!rootPackageJSON) {
146
+ return FUNCTION_RETURNING_FALSE;
147
+ }
148
+ const { dependencies = {}, optionalDependencies = {} } = rootPackageJSON;
149
+ const dependencyKeys = Object.keys(dependencies);
150
+ const optionalDependencyKeys = Object.keys(optionalDependencies);
151
+ const dependencySet = new Set([
152
+ ...dependencyKeys,
153
+ ...optionalDependencyKeys,
154
+ ]);
155
+ if (dependencySet.size === 0) {
156
+ return FUNCTION_RETURNING_FALSE;
157
+ }
158
+
159
+ let getEffect;
160
+ if (packageDependencies === "ignore") {
161
+ getEffect = (dependencyName) => {
162
+ if (!dependencySet.has(dependencyName)) {
163
+ return "include";
164
+ }
165
+ return "ignore";
166
+ };
167
+ } else if (typeof packageDependencies === "object") {
168
+ let defaultEffect = "ignore";
169
+ const dependencyEffectMap = new Map();
170
+ for (const dependencyKey of Object.keys(packageDependencies)) {
171
+ const dependencyEffect = packageDependencies[dependencyKey];
172
+ if (dependencyKey === "*") {
173
+ defaultEffect = dependencyEffect;
174
+ } else {
175
+ dependencyEffectMap.set(dependencyKey, dependencyEffect);
176
+ }
177
+ }
178
+ getEffect = (dependencyName) => {
179
+ if (!dependencySet.has(dependencyName)) {
180
+ return "include";
181
+ }
182
+ const dependencyEffect = packageDependencies[dependencyName];
183
+ if (dependencyEffect) {
184
+ return dependencyEffect;
185
+ }
186
+ return defaultEffect;
187
+ };
188
+ }
189
+ return (url) => {
190
+ if (!url.startsWith("file:")) {
191
+ return false;
192
+ }
193
+ const packageDirectoryUrl = packageDirectory.find(url);
194
+ if (!packageDirectoryUrl) {
195
+ return false;
196
+ }
197
+ const packageJSON = packageDirectory.read(packageDirectoryUrl);
198
+ const name = packageJSON?.name;
199
+ if (!name) {
200
+ return false;
201
+ }
202
+ const effect = getEffect(name);
203
+ if (effect !== "ignore") {
204
+ return false;
205
+ }
206
+ return true;
207
+ };
208
+ })();
209
+
128
210
  let isIgnoredByParam = () => false;
129
211
  if (ignore) {
130
212
  const associations = URL_META.resolveAssociations(
@@ -144,7 +226,11 @@ export const createKitchen = ({
144
226
  };
145
227
  }
146
228
  const isIgnored = (url) => {
147
- return isIgnoredByProtocol(url) || isIgnoredByParam(url);
229
+ return (
230
+ isIgnoredByProtocol(url) ||
231
+ isIgnoredByParam(url) ||
232
+ isIgnoredBecauseInPackageDependencies(url)
233
+ );
148
234
  };
149
235
  const resolveReference = (reference) => {
150
236
  const setReferenceUrl = (referenceUrl) => {
@@ -635,6 +721,8 @@ ${urlInfo.firstReference.trace.message}`;
635
721
  return kitchen;
636
722
  };
637
723
 
724
+ const FUNCTION_RETURNING_FALSE = () => false;
725
+
638
726
  const debounceCook = (cook) => {
639
727
  const pendingDishes = new Map();
640
728
  return async (urlInfo, context) => {
@@ -11,10 +11,8 @@
11
11
  *
12
12
  */
13
13
 
14
- import { updateJsonFileSync } from "@jsenv/filesystem";
15
14
  import { isSpecifierForNodeBuiltin } from "@jsenv/node-esm-resolution/src/node_builtin_specifiers.js";
16
15
  import { URL_META } from "@jsenv/url-meta";
17
- import { urlToRelativeUrl } from "@jsenv/urls";
18
16
 
19
17
  export const jsenvPluginPackageSideEffects = ({ packageDirectory }) => {
20
18
  if (!packageDirectory.url) {
@@ -29,19 +27,6 @@ export const jsenvPluginPackageSideEffects = ({ packageDirectory }) => {
29
27
  return [];
30
28
  }
31
29
 
32
- const sideEffectFileUrlSet = new Set();
33
- const packageJsonFileUrl = new URL("./package.json", packageDirectory.url)
34
- .href;
35
-
36
- const normalizeSideEffectFileUrl = (url) => {
37
- const urlRelativeToPackage = urlToRelativeUrl(url, packageDirectory.url);
38
- return urlRelativeToPackage[0] === "."
39
- ? urlRelativeToPackage
40
- : `./${urlRelativeToPackage}`;
41
- };
42
-
43
- const sideEffectBuildFileUrls = [];
44
-
45
30
  const packageSideEffectsCacheMap = new Map();
46
31
  const readSideEffectInfoFromClosestPackage = (urlInfo) => {
47
32
  const closestPackageDirectoryUrl = urlInfo.packageDirectoryUrl;
@@ -167,47 +152,16 @@ export const jsenvPluginPackageSideEffects = ({ packageDirectory }) => {
167
152
  return;
168
153
  }
169
154
  },
170
- refineBuildUrlContent: (buildUrlInfo, { buildUrl }) => {
155
+ refineBuildUrlContent: (
156
+ buildUrlInfo,
157
+ { buildUrl, registerBuildSideEffectFile },
158
+ ) => {
171
159
  for (const sideEffect of buildUrlInfo.contentSideEffects) {
172
160
  if (sideEffect.has) {
173
- sideEffectBuildFileUrls.push(buildUrl);
161
+ registerBuildSideEffectFile(buildUrl);
174
162
  return;
175
163
  }
176
164
  }
177
165
  },
178
- refineBuild: () => {
179
- if (sideEffectBuildFileUrls.length === 0) {
180
- return;
181
- }
182
- let sideEffectsToAdd = [];
183
- if (sideEffects === false) {
184
- sideEffectsToAdd = sideEffectBuildFileUrls;
185
- } else if (Array.isArray(sideEffects)) {
186
- for (const sideEffectFileRelativeUrl of sideEffects) {
187
- const sideEffectFileUrl = new URL(
188
- sideEffectFileRelativeUrl,
189
- packageDirectory.url,
190
- ).href;
191
- sideEffectFileUrlSet.add(sideEffectFileUrl);
192
- }
193
- for (const url of sideEffectBuildFileUrls) {
194
- if (sideEffectFileUrlSet.has(url)) {
195
- continue;
196
- }
197
- sideEffectsToAdd.push(url);
198
- }
199
- }
200
- if (sideEffectsToAdd.length === 0) {
201
- return;
202
- }
203
-
204
- const finalSideEffects = Array.isArray(sideEffects) ? sideEffects : [];
205
- for (const sideEffectBuildUrl of sideEffectBuildFileUrls) {
206
- finalSideEffects.push(normalizeSideEffectFileUrl(sideEffectBuildUrl));
207
- }
208
- updateJsonFileSync(packageJsonFileUrl, {
209
- sideEffects: finalSideEffects,
210
- });
211
- },
212
166
  };
213
167
  };
@@ -1,112 +0,0 @@
1
- /* @minVersion 7.0.0-beta.0 */
2
-
3
- import OverloadYield from "../OverloadYield/OverloadYield.js";
4
-
5
- export default function AsyncGenerator(gen) {
6
- var front, back;
7
-
8
- function send(key, arg) {
9
- return new Promise(function (resolve, reject) {
10
- var request = {
11
- key: key,
12
- arg: arg,
13
- resolve: resolve,
14
- reject: reject,
15
- next: null,
16
- };
17
-
18
- if (back) {
19
- back = back.next = request;
20
- } else {
21
- front = back = request;
22
- resume(key, arg);
23
- }
24
- });
25
- }
26
-
27
- function resume(key, arg) {
28
- try {
29
- var result = gen[key](arg);
30
- var value = result.value;
31
- var overloaded = value instanceof OverloadYield;
32
-
33
- Promise.resolve(overloaded ? value.v : value).then(
34
- function (arg) {
35
- if (overloaded) {
36
- // Overloaded yield requires calling into the generator twice:
37
- // - first we get the iterator result wrapped in a promise
38
- // (the gen[key](arg) call above)
39
- // - then we await it (the Promise.resolve call above)
40
- // - then we give the result back to the iterator, so that it can:
41
- // * if it was an await, use its result
42
- // * if it was a yield*, possibly return the `done: true` signal
43
- // so that yield* knows that the iterator is finished.
44
- // This needs to happen in the second call, because in the
45
- // first one `done: true` was hidden in the promise and thus
46
- // not visible to the (sync) yield*.
47
- // The other part of this implementation is in asyncGeneratorDelegate.
48
- var nextKey = key === "return" ? "return" : "next";
49
- if (!value.k || arg.done) {
50
- // await or end of yield*
51
- return resume(nextKey, arg);
52
- } else {
53
- // yield*, not done
54
- arg = gen[nextKey](arg).value;
55
- }
56
- }
57
-
58
- settle(result.done ? "return" : "normal", arg);
59
- },
60
- function (err) {
61
- resume("throw", err);
62
- },
63
- );
64
- } catch (err) {
65
- settle("throw", err);
66
- }
67
- }
68
-
69
- function settle(type, value) {
70
- switch (type) {
71
- case "return":
72
- front.resolve({ value: value, done: true });
73
- break;
74
- case "throw":
75
- front.reject(value);
76
- break;
77
- default:
78
- front.resolve({ value: value, done: false });
79
- break;
80
- }
81
-
82
- front = front.next;
83
- if (front) {
84
- resume(front.key, front.arg);
85
- } else {
86
- back = null;
87
- }
88
- }
89
-
90
- this._invoke = send;
91
-
92
- // Hide "return" method if generator return is not supported
93
- if (typeof gen.return !== "function") {
94
- this.return = undefined;
95
- }
96
- }
97
-
98
- AsyncGenerator.prototype[
99
- (typeof Symbol === "function" && Symbol.asyncIterator) || "@@asyncIterator"
100
- ] = function () {
101
- return this;
102
- };
103
-
104
- AsyncGenerator.prototype.next = function (arg) {
105
- return this._invoke("next", arg);
106
- };
107
- AsyncGenerator.prototype.throw = function (arg) {
108
- return this._invoke("throw", arg);
109
- };
110
- AsyncGenerator.prototype.return = function (arg) {
111
- return this._invoke("return", arg);
112
- };
@@ -1,3 +0,0 @@
1
- export default function _AwaitValue(value) {
2
- this.wrapped = value;
3
- }
@@ -1,11 +0,0 @@
1
- /* @minVersion 7.18.14 */
2
-
3
- /*
4
- * 'kind' is an enum:
5
- * 0 => This yield was an await expression
6
- * 1 => This yield comes from yield*
7
- */
8
- export default function _OverloadYield(value, kind) {
9
- this.v = value;
10
- this.k = kind;
11
- }
@@ -1,32 +0,0 @@
1
- export default function _applyDecoratedDescriptor(
2
- target,
3
- property,
4
- decorators,
5
- descriptor,
6
- context,
7
- ) {
8
- var desc = {};
9
- Object.keys(descriptor).forEach(function (key) {
10
- desc[key] = descriptor[key];
11
- });
12
- desc.enumerable = !!desc.enumerable;
13
- desc.configurable = !!desc.configurable;
14
- if ("value" in desc || desc.initializer) {
15
- desc.writable = true;
16
- }
17
- desc = decorators
18
- .slice()
19
- .reverse()
20
- .reduce(function (desc, decorator) {
21
- return decorator(target, property, desc) || desc;
22
- }, desc);
23
- if (context && desc.initializer !== void 0) {
24
- desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
25
- desc.initializer = undefined;
26
- }
27
- if (desc.initializer === void 0) {
28
- Object.defineProperty(target, property, desc);
29
- desc = null;
30
- }
31
- return desc;
32
- }