@suss/contract-wrangler 0.34.0 → 0.35.0

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.
package/README.md CHANGED
@@ -55,7 +55,7 @@ Wrangler replaces a whole block instead of merging it, so an environment that de
55
55
 
56
56
  ## Code scope
57
57
 
58
- The Worker's code is the directory the document is in, and `main` gives the entry file. `main` often points at a bundle that a build step writes, outside the source. If the entry matches no file, the directory alone decides the code scope, so the code is placed correctly either way.
58
+ The Worker's code is the directory the document is in, and `main` gives the entry file. `main` often points at a bundle that a build step writes, outside the source. If the entry matches no file, the directory alone decides the code scope, so the code is placed correctly either way. The bundle can also contain code from outside the source, such as a framework adapter that reads its own variables, so the checker does not call a variable unused for a Worker whose entry it never read. It lists those variables in one info finding instead.
59
59
 
60
60
  ## Out of scope for now
61
61
 
package/dist/index.cjs CHANGED
@@ -41,6 +41,8 @@ __export(index_exports, {
41
41
  });
42
42
  module.exports = __toCommonJS(index_exports);
43
43
  var import_node_path2 = __toESM(require("path"), 1);
44
+ var import_behavioral_ir3 = require("@suss/behavioral-ir");
45
+ var import_files = require("@suss/behavioral-ir/files");
44
46
  var import_ir_core2 = require("@suss/ir-core");
45
47
 
46
48
  // src/bindings.ts
@@ -388,17 +390,14 @@ function wranglerFileToSummaries(target, options = {}) {
388
390
  throw new Error(`Wrangler configuration not found: ${target}`);
389
391
  }
390
392
  const document = loadConfigurationDocument(located.file);
391
- return wranglerToSummaries(document, {
392
- source: options.source ?? `${RECOGNITION}:${relativeToRun(located.file)}`,
393
- codeScope: options.codeScope ?? (0, import_ir_core2.codeScopePath)(import_node_path2.default.dirname(relativeToRun(located.file)))
393
+ const root = options.projectRoot ?? (0, import_files.defaultProjectRoot)(located.file);
394
+ const summaries = wranglerToSummaries(document, {
395
+ source: options.source ?? (0, import_files.documentSourceLabel)(RECOGNITION, located.file, root),
396
+ codeScope: options.codeScope ?? (0, import_ir_core2.codeScopePath)(import_node_path2.default.posix.dirname((0, import_files.pathInProject)(located.file, root)))
394
397
  });
395
- }
396
- function relativeToRun(file) {
397
- const relative = import_node_path2.default.relative(process.cwd(), import_node_path2.default.resolve(file));
398
- if (relative === "" || relative.startsWith("..")) {
399
- return import_node_path2.default.resolve(file).split(import_node_path2.default.sep).join("/");
400
- }
401
- return relative.split(import_node_path2.default.sep).join("/");
398
+ return options.codeScope === void 0 ? summaries.map(
399
+ (summary) => (0, import_behavioral_ir3.withCodeScopeWorkspace)(summary, (0, import_files.projectNameOf)(root))
400
+ ) : summaries;
402
401
  }
403
402
  function codeScopeFor(document, scope) {
404
403
  const main = typeof document.main === "string" ? document.main : null;
package/dist/index.d.cts CHANGED
@@ -116,9 +116,11 @@ interface WranglerToSummariesOptions {
116
116
  /**
117
117
  * The directory the Worker's code is in, relative to wherever the
118
118
  * extraction run was pointed. Defaults to where the document is,
119
- * relative to the working directory.
119
+ * relative to the project root.
120
120
  */
121
121
  codeScope?: string;
122
+ /** Absolute. The directory the document's paths are measured from. */
123
+ projectRoot?: string;
122
124
  }
123
125
  declare function wranglerToSummaries(document: WranglerDocument, options: {
124
126
  source: string;
package/dist/index.d.ts CHANGED
@@ -116,9 +116,11 @@ interface WranglerToSummariesOptions {
116
116
  /**
117
117
  * The directory the Worker's code is in, relative to wherever the
118
118
  * extraction run was pointed. Defaults to where the document is,
119
- * relative to the working directory.
119
+ * relative to the project root.
120
120
  */
121
121
  codeScope?: string;
122
+ /** Absolute. The directory the document's paths are measured from. */
123
+ projectRoot?: string;
122
124
  }
123
125
  declare function wranglerToSummaries(document: WranglerDocument, options: {
124
126
  source: string;
package/dist/index.js CHANGED
@@ -1,5 +1,12 @@
1
1
  // src/index.ts
2
2
  import path2 from "path";
3
+ import { withCodeScopeWorkspace } from "@suss/behavioral-ir";
4
+ import {
5
+ defaultProjectRoot,
6
+ documentSourceLabel,
7
+ pathInProject,
8
+ projectNameOf
9
+ } from "@suss/behavioral-ir/files";
3
10
  import { codeScopePath } from "@suss/ir-core";
4
11
 
5
12
  // src/bindings.ts
@@ -347,17 +354,14 @@ function wranglerFileToSummaries(target, options = {}) {
347
354
  throw new Error(`Wrangler configuration not found: ${target}`);
348
355
  }
349
356
  const document = loadConfigurationDocument(located.file);
350
- return wranglerToSummaries(document, {
351
- source: options.source ?? `${RECOGNITION}:${relativeToRun(located.file)}`,
352
- codeScope: options.codeScope ?? codeScopePath(path2.dirname(relativeToRun(located.file)))
357
+ const root = options.projectRoot ?? defaultProjectRoot(located.file);
358
+ const summaries = wranglerToSummaries(document, {
359
+ source: options.source ?? documentSourceLabel(RECOGNITION, located.file, root),
360
+ codeScope: options.codeScope ?? codeScopePath(path2.posix.dirname(pathInProject(located.file, root)))
353
361
  });
354
- }
355
- function relativeToRun(file) {
356
- const relative = path2.relative(process.cwd(), path2.resolve(file));
357
- if (relative === "" || relative.startsWith("..")) {
358
- return path2.resolve(file).split(path2.sep).join("/");
359
- }
360
- return relative.split(path2.sep).join("/");
362
+ return options.codeScope === void 0 ? summaries.map(
363
+ (summary) => withCodeScopeWorkspace(summary, projectNameOf(root))
364
+ ) : summaries;
361
365
  }
362
366
  function codeScopeFor(document, scope) {
363
367
  const main = typeof document.main === "string" ? document.main : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suss/contract-wrangler",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "type": "module",
5
5
  "description": "Read a Cloudflare wrangler.toml or wrangler.jsonc and check the bindings it declares against the Worker code that uses them.",
6
6
  "keywords": [
@@ -47,8 +47,8 @@
47
47
  "typecheck": "tsc --noEmit"
48
48
  },
49
49
  "dependencies": {
50
- "@suss/behavioral-ir": "0.34.0",
51
- "@suss/ir-core": "0.34.0",
50
+ "@suss/behavioral-ir": "0.35.0",
51
+ "@suss/ir-core": "0.35.0",
52
52
  "jsonc-parser": "^3.3.1",
53
53
  "smol-toml": "^1.4.2"
54
54
  },