@rsbuild/plugin-babel 1.1.2 → 1.2.1

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.
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  var __webpack_modules__ = {
3
- 718: (module) => {
3
+ 945: (module) => {
4
4
  const STRIP_FILENAME_RE = /^[^:]+: /;
5
5
  const format = (err) => {
6
6
  if (err instanceof SyntaxError) {
@@ -26,8 +26,7 @@
26
26
  }
27
27
  module.exports = LoaderError;
28
28
  },
29
- 818: (module, __unused_webpack_exports, __nccwpck_require__) => {
30
- const nodeModule = __nccwpck_require__(995);
29
+ 925: (module, __unused_webpack_exports, __nccwpck_require__) => {
31
30
  const os = __nccwpck_require__(857);
32
31
  const path = __nccwpck_require__(928);
33
32
  const zlib = __nccwpck_require__(106);
@@ -35,18 +34,11 @@
35
34
  const { readFile, writeFile, mkdir } = __nccwpck_require__(943);
36
35
  const { sync: findUpSync } = __nccwpck_require__(48);
37
36
  const { env } = process;
38
- const transform = __nccwpck_require__(180);
39
- const serialize = __nccwpck_require__(790);
37
+ const transform = __nccwpck_require__(19);
38
+ const serialize = __nccwpck_require__(473);
40
39
  let defaultCacheDirectory = null;
41
40
  const gunzip = promisify(zlib.gunzip);
42
41
  const gzip = promisify(zlib.gzip);
43
- const findRootPackageJSON = () => {
44
- if (nodeModule.findPackageJSON) {
45
- return nodeModule.findPackageJSON("..", __filename);
46
- } else {
47
- return findUpSync("package.json");
48
- }
49
- };
50
42
  const read = async function (filename, compress) {
51
43
  const data = await readFile(filename + (compress ? ".gz" : ""));
52
44
  const content = compress ? await gunzip(data) : data;
@@ -170,7 +162,7 @@
170
162
  ) {
171
163
  return path.join(env.CACHE_DIR, name);
172
164
  }
173
- const rootPkgJSONPath = findRootPackageJSON();
165
+ const rootPkgJSONPath = findUpSync("package.json");
174
166
  if (rootPkgJSONPath) {
175
167
  return path.join(
176
168
  path.dirname(rootPkgJSONPath),
@@ -182,7 +174,7 @@
182
174
  return os.tmpdir();
183
175
  }
184
176
  },
185
- 556: (module, __unused_webpack_exports, __nccwpck_require__) => {
177
+ 475: (module, __unused_webpack_exports, __nccwpck_require__) => {
186
178
  let babel;
187
179
  try {
188
180
  babel = __nccwpck_require__(571);
@@ -201,10 +193,10 @@
201
193
  );
202
194
  }
203
195
  const { version } = __nccwpck_require__(344);
204
- const cache = __nccwpck_require__(818);
205
- const transform = __nccwpck_require__(180);
206
- const injectCaller = __nccwpck_require__(516);
207
- const schema = __nccwpck_require__(625);
196
+ const cache = __nccwpck_require__(925);
197
+ const transform = __nccwpck_require__(19);
198
+ const injectCaller = __nccwpck_require__(9);
199
+ const schema = __nccwpck_require__(414);
208
200
  const { isAbsolute } = __nccwpck_require__(928);
209
201
  const { promisify } = __nccwpck_require__(23);
210
202
  function subscribe(subscriber, metadata, context) {
@@ -391,7 +383,7 @@
391
383
  return [source, inputSourceMap];
392
384
  }
393
385
  },
394
- 516: (module) => {
386
+ 9: (module) => {
395
387
  module.exports = function injectCaller(opts, target) {
396
388
  return {
397
389
  ...opts,
@@ -408,7 +400,7 @@
408
400
  };
409
401
  };
410
402
  },
411
- 790: (module) => {
403
+ 473: (module) => {
412
404
  var objToString = Object.prototype.toString;
413
405
  var objKeys = Object.getOwnPropertyNames;
414
406
  function serialize(val, isArrayProp) {
@@ -474,10 +466,10 @@
474
466
  }
475
467
  };
476
468
  },
477
- 180: (module, __unused_webpack_exports, __nccwpck_require__) => {
469
+ 19: (module, __unused_webpack_exports, __nccwpck_require__) => {
478
470
  const babel = __nccwpck_require__(571);
479
471
  const { promisify } = __nccwpck_require__(23);
480
- const LoaderError = __nccwpck_require__(718);
472
+ const LoaderError = __nccwpck_require__(945);
481
473
  const babelTransform = babel.transformAsync ?? promisify(babel.transform);
482
474
  module.exports = async function transform(source, options) {
483
475
  let result;
@@ -812,10 +804,6 @@
812
804
  "use strict";
813
805
  module.exports = require("fs/promises");
814
806
  },
815
- 995: (module) => {
816
- "use strict";
817
- module.exports = require("node:module");
818
- },
819
807
  857: (module) => {
820
808
  "use strict";
821
809
  module.exports = require("os");
@@ -832,7 +820,7 @@
832
820
  "use strict";
833
821
  module.exports = require("zlib");
834
822
  },
835
- 625: (module) => {
823
+ 414: (module) => {
836
824
  "use strict";
837
825
  module.exports = JSON.parse(
838
826
  '{"title":"Babel Loader options","type":"object","properties":{"cacheDirectory":{"anyOf":[{"type":"boolean"},{"type":"string"}],"default":false},"cacheIdentifier":{"type":"string"},"cacheCompression":{"type":"boolean","default":true},"customize":{"anyOf":[{"type":"null"},{"type":"string"}],"default":null},"metadataSubscribers":{"type":"array"}},"additionalProperties":true}',
@@ -861,6 +849,6 @@
861
849
  }
862
850
  if (typeof __nccwpck_require__ !== "undefined")
863
851
  __nccwpck_require__.ab = __dirname + "/";
864
- var __webpack_exports__ = __nccwpck_require__(556);
852
+ var __webpack_exports__ = __nccwpck_require__(475);
865
853
  module.exports = __webpack_exports__;
866
854
  })();
@@ -1 +1 @@
1
- {"name":"babel-loader","author":"Luis Couto <hello@luiscouto.pt>","version":"10.1.0","license":"MIT","types":"index.d.ts","type":"commonjs"}
1
+ {"name":"babel-loader","author":"Luis Couto <hello@luiscouto.pt>","version":"10.1.1","license":"MIT","types":"index.d.ts","type":"commonjs"}
package/dist/helper.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import type { ChainIdentifier, RspackChain } from '@rsbuild/core';
2
2
  import type { BabelConfigUtils, BabelLoaderOptions, BabelTransformOptions, PluginBabelOptions } from './types.js';
3
- export declare const BABEL_JS_RULE = "babel-js";
3
+ export declare const BABEL_JS_RULE = 'babel-js';
4
+ export declare const getBabelRuleId: (chain: RspackChain) => string;
4
5
  export declare const castArray: <T>(arr?: T | T[]) => T[];
5
6
  export declare const getBabelUtils: (config: BabelTransformOptions) => BabelConfigUtils;
6
- export declare const applyUserBabelConfig: (defaultOptions: BabelLoaderOptions, userBabelConfig?: PluginBabelOptions["babelLoaderOptions"], extraBabelUtils?: Partial<BabelConfigUtils>) => BabelLoaderOptions;
7
- export declare const modifyBabelLoaderOptions: ({ chain, CHAIN_ID, modifier, }: {
7
+ export declare const applyUserBabelConfig: (defaultOptions: BabelLoaderOptions, userBabelConfig?: PluginBabelOptions['babelLoaderOptions'], extraBabelUtils?: Partial<BabelConfigUtils>) => BabelLoaderOptions;
8
+ export declare const modifyBabelLoaderOptions: ({ chain, CHAIN_ID, modifier }: {
8
9
  chain: RspackChain;
9
10
  CHAIN_ID: ChainIdentifier;
10
11
  modifier: (config: BabelTransformOptions) => BabelTransformOptions;
package/dist/index.cjs CHANGED
@@ -6,11 +6,14 @@ __webpack_require__.n = (module)=>{
6
6
  return __webpack_require__.d(getter, {
7
7
  a: getter
8
8
  }), getter;
9
- }, __webpack_require__.d = (exports1, definition)=>{
10
- for(var key in definition)__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key) && Object.defineProperty(exports1, key, {
11
- enumerable: !0,
12
- get: definition[key]
13
- });
9
+ }, __webpack_require__.d = (exports1, getters, values)=>{
10
+ var define = (defs, kind)=>{
11
+ for(var key in defs)__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key) && Object.defineProperty(exports1, key, {
12
+ enumerable: !0,
13
+ [kind]: defs[key]
14
+ });
15
+ };
16
+ define(getters, "get"), define(values, "value");
14
17
  }, __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop), __webpack_require__.r = (exports1)=>{
15
18
  "u" > typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports1, Symbol.toStringTag, {
16
19
  value: 'Module'
@@ -20,15 +23,19 @@ __webpack_require__.n = (module)=>{
20
23
  };
21
24
  var __webpack_exports__ = {};
22
25
  __webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_exports__, {
23
- getDefaultBabelOptions: ()=>getDefaultBabelOptions,
26
+ PLUGIN_BABEL_NAME: ()=>PLUGIN_BABEL_NAME,
24
27
  getBabelUtils: ()=>getBabelUtils,
28
+ getDefaultBabelOptions: ()=>getDefaultBabelOptions,
25
29
  modifyBabelLoaderOptions: ()=>modifyBabelLoaderOptions,
26
- PLUGIN_BABEL_NAME: ()=>PLUGIN_BABEL_NAME,
27
30
  pluginBabel: ()=>pluginBabel
28
31
  });
29
32
  const external_node_path_namespaceObject = require("node:path");
30
33
  var external_node_path_default = __webpack_require__.n(external_node_path_namespaceObject);
31
- const external_reduce_configs_namespaceObject = require("reduce-configs"), BABEL_JS_RULE = 'babel-js', castArray = (arr)=>void 0 === arr ? [] : Array.isArray(arr) ? arr : [
34
+ const external_reduce_configs_namespaceObject = require("reduce-configs"), BABEL_JS_RULE = 'babel-js', BABEL_JS_RULE_REGEXP = /^babel-js(?:-\d+)?$/, getBabelRuleId = (chain)=>{
35
+ let id = BABEL_JS_RULE, index = 0;
36
+ for(; chain.module.rules.has(id);)id = `${BABEL_JS_RULE}-${++index}`;
37
+ return id;
38
+ }, isBabelRuleId = (id)=>BABEL_JS_RULE_REGEXP.test(id), getBabelRules = (chain)=>Object.keys(chain.module.rules.entries()).filter(isBabelRuleId).map((id)=>chain.module.rules.get(id)), castArray = (arr)=>void 0 === arr ? [] : Array.isArray(arr) ? arr : [
32
39
  arr
33
40
  ], normalizeToPosixPath = (p)=>(0, external_node_path_namespaceObject.normalize)(p || '').replace(/\\/g, '/').replace(/^([a-zA-Z]+):/, (_, m)=>`/${m.toLowerCase()}`), formatPath = (originPath)=>(0, external_node_path_namespaceObject.isAbsolute)(originPath) ? originPath.split(external_node_path_namespaceObject.sep).join('/') : originPath, getPluginItemName = (item)=>'string' == typeof item ? formatPath(item) : Array.isArray(item) && 'string' == typeof item[0] ? formatPath(item[0]) : null, addPlugins = (plugins, config)=>{
34
41
  config.plugins ? config.plugins.push(...plugins) : config.plugins = plugins;
@@ -99,7 +106,7 @@ const external_reduce_configs_namespaceObject = require("reduce-configs"), BABEL
99
106
  for (let rule of [
100
107
  chain.module.rules.get(CHAIN_ID.RULE.JS).oneOfs.get(CHAIN_ID.ONE_OF.JS_MAIN),
101
108
  chain.module.rules.get(CHAIN_ID.RULE.JS_DATA_URI),
102
- chain.module.rules.get(BABEL_JS_RULE)
109
+ ...getBabelRules(chain)
103
110
  ].filter(Boolean))rule.uses.has(CHAIN_ID.USE.BABEL) && rule.use(CHAIN_ID.USE.BABEL).tap(modifier);
104
111
  }, external_node_fs_namespaceObject = require("node:fs");
105
112
  var external_node_fs_default = __webpack_require__.n(external_node_fs_namespaceObject);
@@ -160,7 +167,7 @@ const pluginBabel = (options = {})=>({
160
167
  handler: async (chain, { CHAIN_ID, environment })=>{
161
168
  let babelOptions = await getBabelOptions(environment), babelLoader = external_node_path_default().resolve(plugin_dirname, '../compiled/babel-loader/index.js'), { include, exclude } = options;
162
169
  if (include || exclude) {
163
- let rule = chain.module.rule(BABEL_JS_RULE).after(CHAIN_ID.RULE.JS);
170
+ let rule = chain.module.rule(getBabelRuleId(chain)).after(CHAIN_ID.RULE.JS);
164
171
  if (include) for (let condition of castArray(include))rule.include.add(condition);
165
172
  if (exclude) for (let condition of castArray(exclude))rule.exclude.add(condition);
166
173
  rule.test(SCRIPT_REGEX).use(CHAIN_ID.USE.BABEL).loader(babelLoader).options(babelOptions);
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { getBabelUtils, modifyBabelLoaderOptions } from './helper.js';
2
- export { getDefaultBabelOptions, PLUGIN_BABEL_NAME, pluginBabel, } from './plugin.js';
3
- export type { BabelConfigUtils, BabelTransformOptions, PluginBabelOptions, PresetEnvBuiltIns, PresetEnvOptions, PresetEnvTargets, } from './types.js';
2
+ export { getDefaultBabelOptions, PLUGIN_BABEL_NAME, pluginBabel } from './plugin.js';
3
+ export type { BabelConfigUtils, BabelTransformOptions, PluginBabelOptions, PresetEnvBuiltIns, PresetEnvOptions, PresetEnvTargets } from './types.js';
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { reduceConfigsWithContext } from "reduce-configs";
3
3
  import node_fs from "node:fs";
4
4
  import { createRequire } from "node:module";
5
5
  import { fileURLToPath } from "node:url";
6
- let BABEL_JS_RULE = 'babel-js', castArray = (arr)=>void 0 === arr ? [] : Array.isArray(arr) ? arr : [
6
+ let BABEL_JS_RULE = 'babel-js', BABEL_JS_RULE_REGEXP = /^babel-js(?:-\d+)?$/, isBabelRuleId = (id)=>BABEL_JS_RULE_REGEXP.test(id), castArray = (arr)=>void 0 === arr ? [] : Array.isArray(arr) ? arr : [
7
7
  arr
8
8
  ], normalizeToPosixPath = (p)=>normalize(p || '').replace(/\\/g, '/').replace(/^([a-zA-Z]+):/, (_, m)=>`/${m.toLowerCase()}`), formatPath = (originPath)=>isAbsolute(originPath) ? originPath.split(sep).join('/') : originPath, getPluginItemName = (item)=>'string' == typeof item ? formatPath(item) : Array.isArray(item) && 'string' == typeof item[0] ? formatPath(item[0]) : null, modifyPresetOptions = (presetName, options, presets = [])=>{
9
9
  presets.forEach((preset, index)=>{
@@ -57,7 +57,7 @@ let BABEL_JS_RULE = 'babel-js', castArray = (arr)=>void 0 === arr ? [] : Array.i
57
57
  for (let rule of [
58
58
  chain.module.rules.get(CHAIN_ID.RULE.JS).oneOfs.get(CHAIN_ID.ONE_OF.JS_MAIN),
59
59
  chain.module.rules.get(CHAIN_ID.RULE.JS_DATA_URI),
60
- chain.module.rules.get(BABEL_JS_RULE)
60
+ ...Object.keys(chain.module.rules.entries()).filter(isBabelRuleId).map((id)=>chain.module.rules.get(id))
61
61
  ].filter(Boolean))rule.uses.has(CHAIN_ID.USE.BABEL) && rule.use(CHAIN_ID.USE.BABEL).tap(modifier);
62
62
  }, plugin_dirname = node_path.dirname(fileURLToPath(import.meta.url)), plugin_require = createRequire(import.meta.url), PLUGIN_BABEL_NAME = 'rsbuild:babel', SCRIPT_REGEX = /\.(?:js|jsx|mjs|cjs|ts|tsx|mts|cts)$/, DEFAULT_BABEL_PRESET_TYPESCRIPT_OPTIONS = {
63
63
  allowNamespaces: !0,
@@ -129,7 +129,11 @@ let pluginBabel = (options = {})=>({
129
129
  handler: async (chain, { CHAIN_ID, environment })=>{
130
130
  let babelOptions = await getBabelOptions(environment), babelLoader = node_path.resolve(plugin_dirname, '../compiled/babel-loader/index.js'), { include, exclude } = options;
131
131
  if (include || exclude) {
132
- let rule = chain.module.rule(BABEL_JS_RULE).after(CHAIN_ID.RULE.JS);
132
+ let rule = chain.module.rule(((chain)=>{
133
+ let id = BABEL_JS_RULE, index = 0;
134
+ for(; chain.module.rules.has(id);)id = `${BABEL_JS_RULE}-${++index}`;
135
+ return id;
136
+ })(chain)).after(CHAIN_ID.RULE.JS);
133
137
  if (include) for (let condition of castArray(include))rule.include.add(condition);
134
138
  if (exclude) for (let condition of castArray(exclude))rule.exclude.add(condition);
135
139
  rule.test(SCRIPT_REGEX).use(CHAIN_ID.USE.BABEL).loader(babelLoader).options(babelOptions);
package/dist/plugin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { NormalizedEnvironmentConfig, RsbuildContext, RsbuildPlugin } from '@rsbuild/core';
2
2
  import type { BabelLoaderOptions, PluginBabelOptions } from './types.js';
3
- export declare const PLUGIN_BABEL_NAME = "rsbuild:babel";
3
+ export declare const PLUGIN_BABEL_NAME = 'rsbuild:babel';
4
4
  export declare function getDefaultBabelOptions(config: NormalizedEnvironmentConfig, context: RsbuildContext): BabelLoaderOptions;
5
5
  export declare const pluginBabel: (options?: PluginBabelOptions) => RsbuildPlugin;
package/dist/types.d.ts CHANGED
@@ -48,50 +48,40 @@ export type BabelConfigUtils = {
48
48
  modifyPresetEnvOptions: (options: PresetEnvOptions) => void;
49
49
  modifyPresetReactOptions: (options: PresetReactOptions) => void;
50
50
  /**
51
- * use `source.include` instead
52
- * @deprecated
53
- */
54
- addIncludes: (includes: RuleCondition) => void;
51
+ * use `source.include` instead
52
+ * @deprecated
53
+ */ addIncludes: (includes: RuleCondition) => void;
55
54
  /**
56
- * use `source.exclude` instead
57
- * @deprecated
58
- */
59
- addExcludes: (excludes: RuleCondition) => void;
55
+ * use `source.exclude` instead
56
+ * @deprecated
57
+ */ addExcludes: (excludes: RuleCondition) => void;
60
58
  };
61
59
  export type BabelLoaderOptions = BabelTransformOptions & {
62
60
  /**
63
- * When set, the given directory will be used to cache the results of the loader.
64
- */
65
- cacheDirectory?: string | boolean;
61
+ * When set, the given directory will be used to cache the results of the loader.
62
+ */ cacheDirectory?: string | boolean;
66
63
  /**
67
- * Can be set to a custom value to force cache busting if the identifier changes.
68
- */
69
- cacheIdentifier?: string;
64
+ * Can be set to a custom value to force cache busting if the identifier changes.
65
+ */ cacheIdentifier?: string;
70
66
  /**
71
- * When set, each Babel transform output will be compressed with Gzip.
72
- */
73
- cacheCompression?: boolean;
67
+ * When set, each Babel transform output will be compressed with Gzip.
68
+ */ cacheCompression?: boolean;
74
69
  /**
75
- * The path of a module that exports a custom callback.
76
- */
77
- customize?: string | null;
70
+ * The path of a module that exports a custom callback.
71
+ */ customize?: string | null;
78
72
  /**
79
- * Takes an array of context function names. E.g.
80
- */
81
- metadataSubscribers?: string[];
73
+ * Takes an array of context function names. E.g.
74
+ */ metadataSubscribers?: string[];
82
75
  };
83
76
  export type PluginBabelOptions = {
84
77
  /**
85
- * Used to specify the files that need to be compiled by Babel.
86
- */
87
- include?: RuleCondition;
78
+ * Used to specify the files that need to be compiled by Babel.
79
+ */ include?: RuleCondition;
88
80
  /**
89
- * Used to specify the files that do not need to be compiled by Babel.
90
- */
91
- exclude?: RuleCondition;
81
+ * Used to specify the files that do not need to be compiled by Babel.
82
+ */ exclude?: RuleCondition;
92
83
  /**
93
- * Options passed to `babel-loader`.
94
- * @see https://github.com/babel/babel-loader
95
- */
96
- babelLoaderOptions?: ConfigChainWithContext<BabelLoaderOptions, BabelConfigUtils>;
84
+ * Options passed to `babel-loader`.
85
+ * @see https://github.com/babel/babel-loader
86
+ */ babelLoaderOptions?: ConfigChainWithContext<BabelLoaderOptions, BabelConfigUtils>;
97
87
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsbuild/plugin-babel",
3
- "version": "1.1.2",
3
+ "version": "1.2.1",
4
4
  "description": "Babel plugin for Rsbuild",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,6 @@
16
16
  "require": "./dist/index.cjs"
17
17
  }
18
18
  },
19
- "main": "./dist/index.cjs",
20
19
  "types": "./dist/index.d.ts",
21
20
  "files": [
22
21
  "dist",
@@ -25,20 +24,20 @@
25
24
  "dependencies": {
26
25
  "@babel/core": "^7.29.0",
27
26
  "@babel/plugin-proposal-decorators": "^7.29.0",
28
- "@babel/plugin-transform-class-properties": "^7.28.6",
29
- "@babel/preset-typescript": "^7.28.5",
27
+ "@babel/plugin-transform-class-properties": "^7.29.7",
28
+ "@babel/preset-typescript": "^7.29.7",
30
29
  "@types/babel__core": "^7.20.5",
31
- "reduce-configs": "^1.1.1"
30
+ "reduce-configs": "^1.1.2"
32
31
  },
33
32
  "devDependencies": {
34
- "@rsbuild/core-v1": "npm:@rsbuild/core@^1.7.3",
35
- "@rslib/core": "0.20.0",
36
- "@types/node": "^24.12.0",
37
- "babel-loader": "10.1.0",
38
- "prebundle": "1.6.2",
39
- "typescript": "^5.9.3",
40
- "@scripts/test-helper": "1.0.0",
41
- "@rsbuild/core": "2.0.0-beta.8"
33
+ "@rsbuild/core-v1": "npm:@rsbuild/core@^1.7.5",
34
+ "@rslib/core": "0.22.0",
35
+ "@types/node": "^24.12.4",
36
+ "babel-loader": "10.1.1",
37
+ "prebundle": "1.6.4",
38
+ "typescript": "^6.0.3",
39
+ "@rsbuild/core": "2.0.9",
40
+ "@scripts/test-helper": "1.0.0"
42
41
  },
43
42
  "peerDependencies": {
44
43
  "@rsbuild/core": "^1.0.0 || ^2.0.0-0"
@@ -53,9 +52,8 @@
53
52
  "registry": "https://registry.npmjs.org/"
54
53
  },
55
54
  "scripts": {
56
- "build": "rslib build",
57
- "dev": "rslib build -w",
58
- "prebundle": "prebundle",
59
- "bump": "pnpx bumpp --no-tag"
55
+ "build": "rslib",
56
+ "dev": "rslib -w",
57
+ "prebundle": "prebundle"
60
58
  }
61
59
  }