rolldown 1.2.2 → 1.2.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 (30) hide show
  1. package/dist/cli.mjs +14 -10
  2. package/dist/config.d.mts +1 -1
  3. package/dist/config.mjs +2 -2
  4. package/dist/experimental-index.d.mts +2 -2
  5. package/dist/experimental-index.mjs +8 -8
  6. package/dist/filter-index.d.mts +1 -1
  7. package/dist/index.d.mts +1 -1
  8. package/dist/index.mjs +4 -4
  9. package/dist/parallel-plugin-worker.mjs +2 -2
  10. package/dist/parallel-plugin.d.mts +1 -1
  11. package/dist/parse-ast-index.mjs +1 -1
  12. package/dist/plugins-index.d.mts +2 -2
  13. package/dist/plugins-index.mjs +2 -2
  14. package/dist/shared/binding-CKyeQZen.mjs +673 -0
  15. package/dist/shared/{bindingify-input-options-BHixd47T.mjs → bindingify-input-options-CMab5gbt.mjs} +6 -10
  16. package/dist/shared/{constructors-COwFYQna.mjs → constructors-6Zc-JFd7.mjs} +1 -1
  17. package/dist/shared/{constructors-ALilxAii.d.mts → constructors-XaIbWpwJ.d.mts} +1 -1
  18. package/dist/shared/{create-bundler-option-LuUKlAT7.mjs → create-bundler-option-BZD-ER-Z.mjs} +3 -3
  19. package/dist/shared/{define-config-DSMNXceb.d.mts → define-config-DVsXPNaU.d.mts} +0 -4
  20. package/dist/shared/{error-nLggAzpQ.mjs → error-BzLGqhSQ.mjs} +1 -1
  21. package/dist/shared/{load-config-cRWJAHTc.mjs → load-config-ChaLPL3M.mjs} +1 -1
  22. package/dist/shared/{normalize-string-or-regex-Cj-DgIV1.mjs → normalize-string-or-regex-DYjJ67tj.mjs} +1 -1
  23. package/dist/shared/{parse-C17W7W5g.mjs → parse-CWXBoSKb.mjs} +2 -2
  24. package/dist/shared/{resolve-tsconfig-CE3HNSOK.mjs → resolve-tsconfig-Bcd82vVT.mjs} +2 -2
  25. package/dist/shared/{rolldown-D23fYgSS.mjs → rolldown-I5b6h5Km.mjs} +4 -4
  26. package/dist/shared/{watch-DcgK_L55.mjs → watch-BW4p8Vif.mjs} +5 -5
  27. package/dist/utils-index.d.mts +1 -1
  28. package/dist/utils-index.mjs +15 -13
  29. package/package.json +18 -18
  30. package/dist/shared/binding-DwUQWZOo.mjs +0 -662
@@ -1,8 +1,8 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
2
  import { i as logFailedValidation, l as logPluginError, n as error, o as logInvalidLogPosition, r as logCycleLoading, t as augmentCodeLocation } from "./logs-DmYCAKcW.mjs";
3
- import { i as bindingifyManifestPlugin, n as BuiltinPlugin, r as bindingifyBuiltInPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-Cj-DgIV1.mjs";
3
+ import { i as bindingifyManifestPlugin, n as BuiltinPlugin, r as bindingifyBuiltInPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-DYjJ67tj.mjs";
4
4
  import { i as noop, n as isPathFragment, o as unreachable, s as unsupported, t as arraify } from "./misc-DOSKtd97.mjs";
5
- import { a as bindingifySourcemap, i as unwrapBindingResult, t as aggregateBindingErrorsIntoJsError } from "./error-nLggAzpQ.mjs";
5
+ import { a as bindingifySourcemap, i as unwrapBindingResult, t as aggregateBindingErrorsIntoJsError } from "./error-BzLGqhSQ.mjs";
6
6
  import { parseAst } from "../parse-ast-index.mjs";
7
7
  import fs from "node:fs";
8
8
  import path from "node:path";
@@ -10,7 +10,7 @@ import * as filter from "@rolldown/pluginutils";
10
10
  import fsp from "node:fs/promises";
11
11
  import { fileURLToPath } from "node:url";
12
12
  //#region package.json
13
- var version = "1.2.2";
13
+ var version = "1.2.3";
14
14
  var description = "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.";
15
15
  //#endregion
16
16
  //#region src/constants/version.ts
@@ -236,7 +236,7 @@ function bindingAssetSource(source) {
236
236
  return { inner: source };
237
237
  }
238
238
  //#endregion
239
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/decorate.js
239
+ //#region \0@oxc-project+runtime@0.143.0/helpers/esm/decorate.js
240
240
  function __decorate(decorators, target, key, desc) {
241
241
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
242
242
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -2342,11 +2342,7 @@ function bindingifyInput(input) {
2342
2342
  }
2343
2343
  function bindingifyWatch(watch) {
2344
2344
  if (watch) {
2345
- if (watch.notify) console.warn("The \"watch.notify\" option is deprecated. Please use \"watch.watcher\" instead.");
2346
- const watcher = {
2347
- ...watch.notify,
2348
- ...watch.watcher
2349
- };
2345
+ const watcher = watch.watcher ?? {};
2350
2346
  return {
2351
2347
  buildDelay: watch.buildDelay,
2352
2348
  skipWrite: watch.skipWrite,
@@ -1,4 +1,4 @@
1
- import { a as makeBuiltinPluginCallable, n as BuiltinPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-Cj-DgIV1.mjs";
1
+ import { a as makeBuiltinPluginCallable, n as BuiltinPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-DYjJ67tj.mjs";
2
2
  //#region src/builtin-plugin/constructors.ts
3
3
  function viteModulePreloadPolyfillPlugin(config) {
4
4
  return new BuiltinPlugin("builtin:vite-module-preload-polyfill", config);
@@ -1,5 +1,5 @@
1
1
  import { C as BindingViteJsonPluginConfig, D as BindingViteReporterPluginConfig, E as BindingViteReactRefreshWrapperPluginConfig, O as BindingViteResolvePluginConfig, S as BindingViteImportGlobPluginConfig, T as BindingViteModulePreloadPolyfillPluginConfig, b as BindingViteBuildImportAnalysisPluginConfig, l as BindingIsolatedDeclarationPluginConfig, s as BindingEsmExternalRequirePluginConfig, x as BindingViteDynamicImportVarsPluginConfig } from "./binding-CVtkJvyl.mjs";
2
- import { Gt as StringOrRegExp, I as BuiltinPlugin } from "./define-config-DSMNXceb.mjs";
2
+ import { Gt as StringOrRegExp, I as BuiltinPlugin } from "./define-config-DVsXPNaU.mjs";
3
3
  //#region src/builtin-plugin/constructors.d.ts
4
4
  declare function viteModulePreloadPolyfillPlugin(config?: BindingViteModulePreloadPolyfillPluginConfig): BuiltinPlugin;
5
5
  type DynamicImportVarsPluginConfig = Omit<BindingViteDynamicImportVarsPluginConfig, "include" | "exclude"> & {
@@ -1,7 +1,7 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
2
  import { a as logInputHookInOutputPlugin, n as error } from "./logs-DmYCAKcW.mjs";
3
- import { n as BuiltinPlugin } from "./normalize-string-or-regex-Cj-DgIV1.mjs";
4
- import { C as LOG_LEVEL_WARN, T as VERSION, _ as getParallelPluginInfo, a as measureIfFunction, b as LOG_LEVEL_DEBUG, c as PluginContextData, d as transformRenderedChunk, g as MinimalPluginContextImpl, i as measureHookCost, l as transformModuleInfo, o as pluginTimingsRecorderFor, p as transformAssetSource, r as OUTPUT_OPTIONS_OWNER, t as bindingifyInputOptions, v as normalizeHook, w as logLevelPriority, y as normalizeLog } from "./bindingify-input-options-BHixd47T.mjs";
3
+ import { n as BuiltinPlugin } from "./normalize-string-or-regex-DYjJ67tj.mjs";
4
+ import { C as LOG_LEVEL_WARN, T as VERSION, _ as getParallelPluginInfo, a as measureIfFunction, b as LOG_LEVEL_DEBUG, c as PluginContextData, d as transformRenderedChunk, g as MinimalPluginContextImpl, i as measureHookCost, l as transformModuleInfo, o as pluginTimingsRecorderFor, p as transformAssetSource, r as OUTPUT_OPTIONS_OWNER, t as bindingifyInputOptions, v as normalizeHook, w as logLevelPriority, y as normalizeLog } from "./bindingify-input-options-CMab5gbt.mjs";
5
5
  import { a as unimplemented } from "./misc-DOSKtd97.mjs";
6
6
  import { Worker } from "node:worker_threads";
7
7
  import path, { sep } from "node:path";
@@ -3376,10 +3376,6 @@ interface WatcherOptions {
3376
3376
  * File watcher options for configuring how file changes are detected.
3377
3377
  */
3378
3378
  watcher?: WatcherFileWatcherOptions;
3379
- /**
3380
- * @deprecated Use {@linkcode watcher} instead.
3381
- */
3382
- notify?: WatcherFileWatcherOptions;
3383
3379
  /**
3384
3380
  * Filter to limit the file-watching to certain files.
3385
3381
  *
@@ -1,4 +1,4 @@
1
- import { t as require_binding } from "./binding-DwUQWZOo.mjs";
1
+ import { t as require_binding } from "./binding-CKyeQZen.mjs";
2
2
  //#region src/types/sourcemap.ts
3
3
  function bindingifySourcemap(map) {
4
4
  if (map == null) return;
@@ -1,4 +1,4 @@
1
- import { t as rolldown } from "./rolldown-D23fYgSS.mjs";
1
+ import { t as rolldown } from "./rolldown-I5b6h5Km.mjs";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { readdir } from "node:fs/promises";
@@ -1,4 +1,4 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
2
  import { l as logPluginError, n as error } from "./logs-DmYCAKcW.mjs";
3
3
  //#region src/builtin-plugin/utils.ts
4
4
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
@@ -1,5 +1,5 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
2
- //#region ../../node_modules/.pnpm/oxc-parser@0.142.0/node_modules/oxc-parser/src-js/wrap.js
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
+ //#region ../../node_modules/.pnpm/oxc-parser@0.143.0/node_modules/oxc-parser/src-js/wrap.js
3
3
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
4
4
  function wrap(result) {
5
5
  let program, module, comments, errors;
@@ -1,5 +1,5 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
2
- import { a as bindingifySourcemap, n as normalizeBindingError } from "./error-nLggAzpQ.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
+ import { a as bindingifySourcemap, n as normalizeBindingError } from "./error-BzLGqhSQ.mjs";
3
3
  //#region src/utils/minify.ts
4
4
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
5
5
  /**
@@ -1,7 +1,7 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
2
- import { f as __decorate, h as PlainObjectLike, m as lazyProp, u as transformToRollupOutput } from "./bindingify-input-options-BHixd47T.mjs";
3
- import { l as PluginDriver, s as validateOption, t as createBundlerOptions } from "./create-bundler-option-LuUKlAT7.mjs";
4
- import { i as unwrapBindingResult } from "./error-nLggAzpQ.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
+ import { f as __decorate, h as PlainObjectLike, m as lazyProp, u as transformToRollupOutput } from "./bindingify-input-options-CMab5gbt.mjs";
3
+ import { l as PluginDriver, s as validateOption, t as createBundlerOptions } from "./create-bundler-option-BZD-ER-Z.mjs";
4
+ import { i as unwrapBindingResult } from "./error-BzLGqhSQ.mjs";
5
5
  //#region src/types/rolldown-output-impl.ts
6
6
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
7
7
  var RolldownOutputImpl = class extends PlainObjectLike {
@@ -1,9 +1,9 @@
1
- import { n as __toESM, t as require_binding } from "./binding-DwUQWZOo.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-CKyeQZen.mjs";
2
2
  import { s as logMultipleWatcherOption } from "./logs-DmYCAKcW.mjs";
3
- import { C as LOG_LEVEL_WARN } from "./bindingify-input-options-BHixd47T.mjs";
3
+ import { C as LOG_LEVEL_WARN } from "./bindingify-input-options-CMab5gbt.mjs";
4
4
  import { t as arraify } from "./misc-DOSKtd97.mjs";
5
- import { l as PluginDriver, t as createBundlerOptions } from "./create-bundler-option-LuUKlAT7.mjs";
6
- import { t as aggregateBindingErrorsIntoJsError } from "./error-nLggAzpQ.mjs";
5
+ import { l as PluginDriver, t as createBundlerOptions } from "./create-bundler-option-BZD-ER-Z.mjs";
6
+ import { t as aggregateBindingErrorsIntoJsError } from "./error-BzLGqhSQ.mjs";
7
7
  //#region ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js
8
8
  /**
9
9
  * This is not the set of all possible signals.
@@ -327,7 +327,7 @@ function warnMultiplePollingOptions(bundlerOptions) {
327
327
  let found = false;
328
328
  for (const option of bundlerOptions) {
329
329
  const watch = option.inputOptions.watch;
330
- const watcher = watch && typeof watch === "object" ? watch.watcher ?? watch.notify : void 0;
330
+ const watcher = watch && typeof watch === "object" ? watch.watcher : void 0;
331
331
  if (watcher && (watcher.usePolling != null || watcher.pollInterval != null)) {
332
332
  if (found) {
333
333
  option.onLog(LOG_LEVEL_WARN, logMultipleWatcherOption());
@@ -2,7 +2,7 @@ import { _ as BindingTsconfigCompilerOptions, v as BindingTsconfigRawOptions } f
2
2
  import { a as MinifyOptions, c as minifySync, d as parse, f as parseSync, i as transformSync, l as ParseResult, n as TransformResult, o as MinifyResult, p as TsconfigCache, r as transform, s as minify, t as TransformOptions, u as ParserOptions } from "./shared/transform-WmU_cI8e.mjs";
3
3
  import * as ESTree from "@oxc-project/types";
4
4
  import { Program } from "@oxc-project/types";
5
- //#region ../../node_modules/.pnpm/oxc-parser@0.142.0/node_modules/oxc-parser/src-js/generated/visit/visitor.d.ts
5
+ //#region ../../node_modules/.pnpm/oxc-parser@0.143.0/node_modules/oxc-parser/src-js/generated/visit/visitor.d.ts
6
6
  interface VisitorObject$1 {
7
7
  DebuggerStatement?: (node: ESTree.DebuggerStatement) => void;
8
8
  "DebuggerStatement:exit"?: (node: ESTree.DebuggerStatement) => void;
@@ -1,6 +1,6 @@
1
- import { n as parseSync, t as parse } from "./shared/parse-C17W7W5g.mjs";
2
- import { a as minify, i as transformSync, o as minifySync, r as transform, t as TsconfigCache } from "./shared/resolve-tsconfig-CE3HNSOK.mjs";
3
- //#region ../../node_modules/.pnpm/oxc-parser@0.142.0/node_modules/oxc-parser/src-js/generated/visit/walk.js
1
+ import { n as parseSync, t as parse } from "./shared/parse-CWXBoSKb.mjs";
2
+ import { a as minify, i as transformSync, o as minifySync, r as transform, t as TsconfigCache } from "./shared/resolve-tsconfig-Bcd82vVT.mjs";
3
+ //#region ../../node_modules/.pnpm/oxc-parser@0.143.0/node_modules/oxc-parser/src-js/generated/visit/walk.js
4
4
  function walkNode(node, visitors) {
5
5
  if (node == null) return;
6
6
  if (Array.isArray(node)) {
@@ -2008,7 +2008,7 @@ function walkTSUnionType(node, visitors) {
2008
2008
  exit !== null && exit(node);
2009
2009
  }
2010
2010
  //#endregion
2011
- //#region ../../node_modules/.pnpm/oxc-parser@0.142.0/node_modules/oxc-parser/src-js/generated/visit/type_ids.js
2011
+ //#region ../../node_modules/.pnpm/oxc-parser@0.143.0/node_modules/oxc-parser/src-js/generated/visit/type_ids.js
2012
2012
  /** Mapping from node type name to node type ID */
2013
2013
  const NODE_TYPE_IDS_MAP = /* @__PURE__ */ new Map([
2014
2014
  ["DebuggerStatement", 0],
@@ -2178,7 +2178,7 @@ const NODE_TYPE_IDS_MAP = /* @__PURE__ */ new Map([
2178
2178
  ["TSUnionType", 164]
2179
2179
  ]);
2180
2180
  //#endregion
2181
- //#region ../../node_modules/.pnpm/oxc-parser@0.142.0/node_modules/oxc-parser/src-js/visit/visitor.js
2181
+ //#region ../../node_modules/.pnpm/oxc-parser@0.143.0/node_modules/oxc-parser/src-js/visit/visitor.js
2182
2182
  let compiledVisitor;
2183
2183
  function createCompiledVisitor() {
2184
2184
  compiledVisitor = [];
@@ -2241,14 +2241,16 @@ function addVisitorToCompiled(visitor) {
2241
2241
  const typeId = NODE_TYPE_IDS_MAP.get(name);
2242
2242
  if (typeId === void 0) throw new Error(`Unknown node type '${name}' in visitor object`);
2243
2243
  const existing = compiledVisitor[typeId];
2244
- if (typeId < 27) if (existing === null) compiledVisitor[typeId] = visitFn;
2245
- else if (Array.isArray(existing)) if (isExit) existing.push(visitFn);
2246
- else existing.splice(existing.length - 1, 0, visitFn);
2247
- else {
2248
- compiledVisitor[typeId] = isExit ? createVisitFnArray(existing, visitFn) : createVisitFnArray(visitFn, existing);
2249
- mergedLeafVisitorTypeIds.push(typeId);
2250
- }
2251
- else if (existing === null) {
2244
+ if (typeId < 27) {
2245
+ if (existing === null) compiledVisitor[typeId] = visitFn;
2246
+ else if (Array.isArray(existing)) {
2247
+ if (isExit) existing.push(visitFn);
2248
+ else existing.splice(existing.length - 1, 0, visitFn);
2249
+ } else {
2250
+ compiledVisitor[typeId] = isExit ? createVisitFnArray(existing, visitFn) : createVisitFnArray(visitFn, existing);
2251
+ mergedLeafVisitorTypeIds.push(typeId);
2252
+ }
2253
+ } else if (existing === null) {
2252
2254
  const enterExit = compiledVisitor[typeId] = getEnterExitObject();
2253
2255
  if (isExit) enterExit.exit = visitFn;
2254
2256
  else enterExit.enter = visitFn;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rolldown",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.",
5
5
  "keywords": [
6
6
  "bundler",
@@ -61,7 +61,7 @@
61
61
  "registry": "https://registry.npmjs.org/"
62
62
  },
63
63
  "dependencies": {
64
- "@oxc-project/types": "=0.142.0",
64
+ "@oxc-project/types": "=0.143.0",
65
65
  "@rolldown/pluginutils": "^1.0.0"
66
66
  },
67
67
  "devDependencies": {
@@ -75,7 +75,7 @@
75
75
  "execa": "^9.2.0",
76
76
  "fresh-import": "^0.2.1",
77
77
  "glob": "^13.0.0",
78
- "oxc-parser": "=0.142.0",
78
+ "oxc-parser": "=0.143.0",
79
79
  "pathe": "^2.0.3",
80
80
  "remeda": "^2.34.1",
81
81
  "rolldown-plugin-dts": "^0.28.0",
@@ -84,7 +84,7 @@
84
84
  "source-map": "0.8.0",
85
85
  "typescript": "^6.0.0",
86
86
  "valibot": "1.4.2",
87
- "rolldown": "1.2.2"
87
+ "rolldown": "1.2.3"
88
88
  },
89
89
  "napi": {
90
90
  "binaryName": "rolldown-binding",
@@ -120,20 +120,20 @@
120
120
  "node": "^20.19.0 || >=22.12.0"
121
121
  },
122
122
  "optionalDependencies": {
123
- "@rolldown/binding-darwin-x64": "1.2.2",
124
- "@rolldown/binding-win32-x64-msvc": "1.2.2",
125
- "@rolldown/binding-linux-x64-gnu": "1.2.2",
126
- "@rolldown/binding-linux-x64-musl": "1.2.2",
127
- "@rolldown/binding-freebsd-x64": "1.2.2",
128
- "@rolldown/binding-linux-arm-gnueabihf": "1.2.2",
129
- "@rolldown/binding-linux-arm64-gnu": "1.2.2",
130
- "@rolldown/binding-darwin-arm64": "1.2.2",
131
- "@rolldown/binding-linux-arm64-musl": "1.2.2",
132
- "@rolldown/binding-openharmony-arm64": "1.2.2",
133
- "@rolldown/binding-win32-arm64-msvc": "1.2.2",
134
- "@rolldown/binding-android-arm64": "1.2.2",
135
- "@rolldown/binding-linux-s390x-gnu": "1.2.2",
136
- "@rolldown/binding-linux-ppc64-gnu": "1.2.2"
123
+ "@rolldown/binding-darwin-x64": "1.2.3",
124
+ "@rolldown/binding-win32-x64-msvc": "1.2.3",
125
+ "@rolldown/binding-linux-x64-gnu": "1.2.3",
126
+ "@rolldown/binding-linux-x64-musl": "1.2.3",
127
+ "@rolldown/binding-freebsd-x64": "1.2.3",
128
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.3",
129
+ "@rolldown/binding-linux-arm64-gnu": "1.2.3",
130
+ "@rolldown/binding-darwin-arm64": "1.2.3",
131
+ "@rolldown/binding-linux-arm64-musl": "1.2.3",
132
+ "@rolldown/binding-openharmony-arm64": "1.2.3",
133
+ "@rolldown/binding-win32-arm64-msvc": "1.2.3",
134
+ "@rolldown/binding-android-arm64": "1.2.3",
135
+ "@rolldown/binding-linux-s390x-gnu": "1.2.3",
136
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.3"
137
137
  },
138
138
  "scripts": {
139
139
  "# Scrips for binding #": "_",