skir 1.1.27 → 1.1.28

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,5 +1,7 @@
1
+ import type { Record } from "skir-internal";
1
2
  import { AsyncFileReader } from "./io.js";
2
- import type { DependenciesResult, PackageDownloader, PackageIdToVersion } from "./package_types.js";
3
+ import { ModuleSet } from "./module_set.js";
4
+ import type { DependenciesResult, DependencyError, PackageDownloader, PackageIdToVersion } from "./package_types.js";
3
5
  export declare class DependencyManager {
4
6
  private readonly rootDir;
5
7
  private readonly githubToken;
@@ -11,4 +13,20 @@ export declare class DependencyManager {
11
13
  private get externalDir();
12
14
  private readDependenciesFile;
13
15
  }
16
+ /**
17
+ * Resolves a GitHub blob URL to the first record declared at the referenced line.
18
+ *
19
+ * Expected URL shape:
20
+ * https://github.com/<owner>/<repo>/blob/<version>/skir-src/<path>.skir#L<line>
21
+ *
22
+ * Returns:
23
+ * - `{ kind: "success", record, moduleSet }` when a record is found.
24
+ * - `{ kind: "error", message }` for invalid URLs, dependency download issues,
25
+ * compilation failures, missing modules, or when no record starts at the line.
26
+ */
27
+ export declare function getModuleFromGithubUrl(githubUrl: string, githubToken: string | undefined, packageDownloader?: PackageDownloader): Promise<{
28
+ kind: "success";
29
+ record: Record;
30
+ moduleSet: ModuleSet;
31
+ } | DependencyError>;
14
32
  //# sourceMappingURL=dependency_manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency_manager.d.ts","sourceRoot":"","sources":["../src/dependency_manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EACV,kBAAkB,EAGlB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAHjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,GAAE,eAAkC,EAC9C,iBAAiB,GAAE,iBAAmC;IAGnE,eAAe,CACnB,YAAY,EAAE,kBAAkB,EAChC,WAAW,GAAE,OAAO,GAAG,UAAoB,GAC1C,OAAO,CAAC,kBAAkB,CAAC;YAiBhB,WAAW;IA4EzB,OAAO,KAAK,WAAW,GAEtB;YAEa,oBAAoB;CAanC"}
1
+ {"version":3,"file":"dependency_manager.d.ts","sourceRoot":"","sources":["../src/dependency_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EAEf,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAHjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,GAAE,eAAkC,EAC9C,iBAAiB,GAAE,iBAAmC;IAGnE,eAAe,CACnB,YAAY,EAAE,kBAAkB,EAChC,WAAW,GAAE,OAAO,GAAG,UAAoB,GAC1C,OAAO,CAAC,kBAAkB,CAAC;YAiBhB,WAAW;IA4EzB,OAAO,KAAK,WAAW,GAEtB;YAEa,oBAAoB;CAanC;AAqHD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,iBAAiB,GAAE,iBAAmC,GACrD,OAAO,CACN;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;CACtB,GACD,eAAe,CAClB,CAsDA"}
@@ -1,6 +1,7 @@
1
1
  import * as fs from "fs/promises";
2
2
  import path from "node:path";
3
3
  import { REAL_FILE_SYSTEM } from "./io.js";
4
+ import { ModuleSet } from "./module_set.js";
4
5
  import { downloadPackage } from "./package_downloader.js";
5
6
  export class DependencyManager {
6
7
  constructor(rootDir, githubToken, fileReader = REAL_FILE_SYSTEM, packageDownloader = downloadPackage) {
@@ -187,4 +188,96 @@ function formatDependencyChain(chain) {
187
188
  .join(" which depends on "));
188
189
  }
189
190
  const DEPENDENCIES_FILENAME = "dependencies.json";
191
+ /**
192
+ * Resolves a GitHub blob URL to the first record declared at the referenced line.
193
+ *
194
+ * Expected URL shape:
195
+ * https://github.com/<owner>/<repo>/blob/<version>/skir-src/<path>.skir#L<line>
196
+ *
197
+ * Returns:
198
+ * - `{ kind: "success", record, moduleSet }` when a record is found.
199
+ * - `{ kind: "error", message }` for invalid URLs, dependency download issues,
200
+ * compilation failures, missing modules, or when no record starts at the line.
201
+ */
202
+ export async function getModuleFromGithubUrl(githubUrl, githubToken, packageDownloader = downloadPackage) {
203
+ const parsedUrl = parseGithubModuleUrl(githubUrl);
204
+ if (parsedUrl.kind === "error") {
205
+ return parsedUrl;
206
+ }
207
+ const { packageId, version, modulePath, lineNumber } = parsedUrl;
208
+ const flow = new GetDependenciesFlow({}, githubToken, packageDownloader);
209
+ const dependenciesResult = await flow.run({
210
+ [packageId]: version,
211
+ });
212
+ if (dependenciesResult.kind === "error") {
213
+ return dependenciesResult;
214
+ }
215
+ const modulePathToContent = new Map();
216
+ for (const pkg of Object.values(dependenciesResult.packages)) {
217
+ for (const [path, content] of Object.entries(pkg.modules)) {
218
+ modulePathToContent.set(path, content);
219
+ }
220
+ }
221
+ const moduleSet = ModuleSet.compile(modulePathToContent);
222
+ if (moduleSet.errors.length > 0) {
223
+ return {
224
+ kind: "error",
225
+ message: moduleSet.errors[0].message || "Compilation failed",
226
+ };
227
+ }
228
+ const moduleResult = moduleSet.modules.get(modulePath);
229
+ if (!moduleResult) {
230
+ return {
231
+ kind: "error",
232
+ message: `Module not found: ${modulePath}`,
233
+ };
234
+ }
235
+ const recordAtLine = moduleResult.result.records.find((record) => record.record.name.line.lineNumber === lineNumber);
236
+ if (!recordAtLine) {
237
+ return {
238
+ kind: "error",
239
+ message: `No record found at line ${lineNumber + 1} in ${modulePath}`,
240
+ };
241
+ }
242
+ return {
243
+ kind: "success",
244
+ record: recordAtLine.record,
245
+ moduleSet,
246
+ };
247
+ }
248
+ function parseGithubModuleUrl(githubUrl) {
249
+ const match = githubUrl.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/([^/]+)\/(.+)#L(\d+)$/);
250
+ if (!match) {
251
+ return {
252
+ kind: "error",
253
+ message: `Invalid GitHub URL: ${githubUrl}`,
254
+ };
255
+ }
256
+ const owner = match[1];
257
+ const repo = match[2];
258
+ const version = match[3];
259
+ const repoPath = match[4];
260
+ const lineNumberOneBased = Number(match[5]);
261
+ if (!repoPath.startsWith("skir-src/") || !repoPath.endsWith(".skir")) {
262
+ return {
263
+ kind: "error",
264
+ message: `URL must target a .skir file in skir-src: ${githubUrl}`,
265
+ };
266
+ }
267
+ if (!Number.isInteger(lineNumberOneBased) || lineNumberOneBased <= 0) {
268
+ return {
269
+ kind: "error",
270
+ message: `Invalid line number in URL: ${githubUrl}`,
271
+ };
272
+ }
273
+ const packageId = `@${owner}/${repo}`;
274
+ const modulePath = packageId + repoPath.substring("skir-src".length);
275
+ return {
276
+ kind: "success",
277
+ packageId,
278
+ version,
279
+ modulePath,
280
+ lineNumber: lineNumberOneBased - 1,
281
+ };
282
+ }
190
283
  //# sourceMappingURL=dependency_manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency_manager.js","sourceRoot":"","sources":["../src/dependency_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependency_manager.js","sourceRoot":"","sources":["../src/dependency_manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skir",
3
- "version": "1.1.27",
3
+ "version": "1.1.28",
4
4
  "description": "",
5
5
  "homepage": "https://skir.build/",
6
6
  "bugs": {
@@ -1,6 +1,8 @@
1
1
  import * as fs from "fs/promises";
2
2
  import path from "node:path";
3
+ import type { Record } from "skir-internal";
3
4
  import { AsyncFileReader, REAL_FILE_SYSTEM } from "./io.js";
5
+ import { ModuleSet } from "./module_set.js";
4
6
  import { downloadPackage } from "./package_downloader.js";
5
7
  import type {
6
8
  DependenciesResult,
@@ -248,3 +250,131 @@ interface PackageBundle {
248
250
  pkg: Package;
249
251
  dependencyChain: DependencyItem[];
250
252
  }
253
+
254
+ /**
255
+ * Resolves a GitHub blob URL to the first record declared at the referenced line.
256
+ *
257
+ * Expected URL shape:
258
+ * https://github.com/<owner>/<repo>/blob/<version>/skir-src/<path>.skir#L<line>
259
+ *
260
+ * Returns:
261
+ * - `{ kind: "success", record, moduleSet }` when a record is found.
262
+ * - `{ kind: "error", message }` for invalid URLs, dependency download issues,
263
+ * compilation failures, missing modules, or when no record starts at the line.
264
+ */
265
+ export async function getModuleFromGithubUrl(
266
+ githubUrl: string,
267
+ githubToken: string | undefined,
268
+ packageDownloader: PackageDownloader = downloadPackage,
269
+ ): Promise<
270
+ | {
271
+ kind: "success";
272
+ record: Record;
273
+ moduleSet: ModuleSet;
274
+ }
275
+ | DependencyError
276
+ > {
277
+ const parsedUrl = parseGithubModuleUrl(githubUrl);
278
+ if (parsedUrl.kind === "error") {
279
+ return parsedUrl;
280
+ }
281
+
282
+ const { packageId, version, modulePath, lineNumber } = parsedUrl;
283
+
284
+ const flow = new GetDependenciesFlow({}, githubToken, packageDownloader);
285
+ const dependenciesResult = await flow.run({
286
+ [packageId]: version,
287
+ });
288
+ if (dependenciesResult.kind === "error") {
289
+ return dependenciesResult;
290
+ }
291
+
292
+ const modulePathToContent = new Map<string, string>();
293
+ for (const pkg of Object.values(dependenciesResult.packages)) {
294
+ for (const [path, content] of Object.entries(pkg.modules)) {
295
+ modulePathToContent.set(path, content);
296
+ }
297
+ }
298
+
299
+ const moduleSet = ModuleSet.compile(modulePathToContent);
300
+ if (moduleSet.errors.length > 0) {
301
+ return {
302
+ kind: "error",
303
+ message: moduleSet.errors[0]!.message || "Compilation failed",
304
+ };
305
+ }
306
+
307
+ const moduleResult = moduleSet.modules.get(modulePath);
308
+ if (!moduleResult) {
309
+ return {
310
+ kind: "error",
311
+ message: `Module not found: ${modulePath}`,
312
+ };
313
+ }
314
+
315
+ const recordAtLine = moduleResult.result.records.find(
316
+ (record) => record.record.name.line.lineNumber === lineNumber,
317
+ );
318
+ if (!recordAtLine) {
319
+ return {
320
+ kind: "error",
321
+ message: `No record found at line ${lineNumber + 1} in ${modulePath}`,
322
+ };
323
+ }
324
+
325
+ return {
326
+ kind: "success",
327
+ record: recordAtLine.record,
328
+ moduleSet,
329
+ };
330
+ }
331
+
332
+ function parseGithubModuleUrl(githubUrl: string):
333
+ | {
334
+ kind: "success";
335
+ packageId: string;
336
+ version: string;
337
+ modulePath: string;
338
+ lineNumber: number;
339
+ }
340
+ | DependencyError {
341
+ const match = githubUrl.match(
342
+ /^https:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/([^/]+)\/(.+)#L(\d+)$/,
343
+ );
344
+ if (!match) {
345
+ return {
346
+ kind: "error",
347
+ message: `Invalid GitHub URL: ${githubUrl}`,
348
+ };
349
+ }
350
+
351
+ const owner = match[1]!;
352
+ const repo = match[2]!;
353
+ const version = match[3]!;
354
+ const repoPath = match[4]!;
355
+ const lineNumberOneBased = Number(match[5]!);
356
+
357
+ if (!repoPath.startsWith("skir-src/") || !repoPath.endsWith(".skir")) {
358
+ return {
359
+ kind: "error",
360
+ message: `URL must target a .skir file in skir-src: ${githubUrl}`,
361
+ };
362
+ }
363
+ if (!Number.isInteger(lineNumberOneBased) || lineNumberOneBased <= 0) {
364
+ return {
365
+ kind: "error",
366
+ message: `Invalid line number in URL: ${githubUrl}`,
367
+ };
368
+ }
369
+
370
+ const packageId = `@${owner}/${repo}`;
371
+ const modulePath = packageId + repoPath.substring("skir-src".length);
372
+
373
+ return {
374
+ kind: "success",
375
+ packageId,
376
+ version,
377
+ modulePath,
378
+ lineNumber: lineNumberOneBased - 1,
379
+ };
380
+ }