@vorplex/compiler 0.0.58 → 0.0.61

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.
@@ -3,6 +3,27 @@ import { stringify } from 'yaml';
3
3
  import { Bundler } from './module-loader/bundler';
4
4
  import { JsDelivr } from './npm/jsdelivr/jsdelivr.util';
5
5
  import { NPM } from './npm/npm.util';
6
+ const NODE_BUILTIN_POLYFILLS = {
7
+ util: { name: 'util', version: '0.12.5' },
8
+ events: { name: 'events', version: '3.3.0' },
9
+ stream: { name: 'stream-browserify', version: '3.0.0' },
10
+ buffer: { name: 'buffer', version: '6.0.3' },
11
+ path: { name: 'path-browserify', version: '1.0.1' },
12
+ assert: { name: 'assert', version: '2.1.0' },
13
+ querystring: { name: 'querystring-es3', version: '0.2.1' },
14
+ url: { name: 'url', version: '0.11.4' },
15
+ string_decoder: { name: 'string_decoder', version: '1.3.0' },
16
+ zlib: { name: 'browserify-zlib', version: '0.2.0' },
17
+ http: { name: 'stream-http', version: '3.2.0' },
18
+ https: { name: 'https-browserify', version: '1.0.0' },
19
+ os: { name: 'os-browserify', version: '0.3.0' },
20
+ crypto: { name: 'crypto-browserify', version: '3.12.1' },
21
+ vm: { name: 'vm-browserify', version: '1.1.2' },
22
+ process: { name: 'process', version: '0.11.10' },
23
+ punycode: { name: 'punycode', version: '2.3.1' },
24
+ tty: { name: 'tty-browserify', version: '0.0.1' },
25
+ timers: { name: 'timers-browserify', version: '2.0.12' },
26
+ };
6
27
  export class Compiler {
7
28
  static async compile(options) {
8
29
  const task = options.task ?? new Task('Compile');
@@ -55,14 +76,24 @@ export class Compiler {
55
76
  else {
56
77
  const importer = JsDelivr.parseUrl(importerPath);
57
78
  string.version = importer.name !== string.packageName ? NPM.resolveDependencyVersion(dependencyTree, importer.name, importer.version, string.packageName) : importer.version;
58
- if (!string.version) {
59
- task.log(`Returning mock module for package (${string.packageName}) as import (${importer.name}) doesn't have it as a dependency.`, { level: 'warning' });
79
+ }
80
+ if (!string.version) {
81
+ const polyfill = NODE_BUILTIN_POLYFILLS[string.packageName];
82
+ if (polyfill) {
83
+ const version = dependencyTree[polyfill.name]?.version ?? dependencyTree[string.packageName]?.version ?? polyfill.version;
84
+ task.log(`Resolving Node.js built-in (${string.packageName}) via browser polyfill (${polyfill.name}@${version})`);
85
+ string.packageName = polyfill.name;
86
+ string.version = version;
87
+ }
88
+ else if (importerPath in options.files) {
89
+ throw new Error(`Unable to determine package (${string.packageName}) version.`);
90
+ }
91
+ else {
92
+ task.log(`Returning mock module for package (${string.packageName}) as import doesn't have it as a dependency.`, { level: 'warning' });
60
93
  return;
61
94
  }
62
95
  }
63
96
  }
64
- if (!string.version)
65
- throw new Error(`Unable to determine package (${string.packageName}) version.`);
66
97
  const filePath = await JsDelivr.resolveImportFilePath(string.packageName, string.version, string.subpath);
67
98
  task.log(`Import resolved to file path (${filePath})`);
68
99
  const file = await JsDelivr.getFile(string.packageName, string.version, filePath);
@@ -11,7 +11,7 @@ export declare class NPM {
11
11
  static gePackageJson(name: string, version: string): Promise<PackageJson>;
12
12
  static resolveDependencyTree(packages: Record<string, string>, resolver: {
13
13
  getPackageJson: (name: string, version: string) => Promise<PackageJson>;
14
- getPackageVersions: (name: string) => Promise<string[]>;
14
+ resolveVersion: (name: string, semanticVersion: string) => Promise<string>;
15
15
  }, task?: Task): Promise<DependencyTree>;
16
16
  static flattenDependencyTree(tree: DependencyTree): Record<string, string[]>;
17
17
  static resolveDependencyVersion(tree: DependencyTree, parent: string, version: string, name: string): string;
@@ -1,5 +1,5 @@
1
1
  import { $Path, Task } from '@vorplex/core';
2
- import { maxSatisfying, satisfies } from 'semver';
2
+ import { satisfies } from 'semver';
3
3
  import { stringify } from 'yaml';
4
4
  export class NPM {
5
5
  static url = 'https://registry.npmjs.org';
@@ -20,8 +20,6 @@ export class NPM {
20
20
  const seen = {};
21
21
  async function resolvePackage(name, range, ancestors = [], task) {
22
22
  task.log(`Resolving package (${name}@${range})`);
23
- if (range === 'latest')
24
- range = '*';
25
23
  task.log(`Searching for package in ancestors`);
26
24
  for (const ancestor of ancestors) {
27
25
  const existing = ancestor.dependencies?.[name];
@@ -31,12 +29,8 @@ export class NPM {
31
29
  }
32
30
  }
33
31
  task.log(`No existing package found in ancestors`);
34
- task.log('Resolving package versions');
35
- const available = await resolver.getPackageVersions(name);
36
- const version = maxSatisfying(available, range, { includePrerelease: true });
37
- if (!version) {
38
- throw new Error(`No version found for ${name}@${range}`);
39
- }
32
+ task.log('Resolving package version');
33
+ const version = await resolver.resolveVersion(name, range);
40
34
  task.log(`Version (${version}) was resolved for range (${range})`);
41
35
  const key = `${name}@${version}`;
42
36
  if (seen[key]) {
@@ -116,6 +110,7 @@ export class NPM {
116
110
  return Array.from(script.matchAll(/import\s+[\s\S]*?\s+from\s+['"]([^'"]+)['"]|require\(['"]([^'"]+)['"]\)/g)).map((match) => match[1] ?? match[2]);
117
111
  }
118
112
  static parseImportString(string) {
113
+ string = string.replace(/\/$/, '');
119
114
  const match = string.match(/^(?<packageName>(?:@[\w.-]+\/[\w.-]+|[\w.-]+))(?:\/(?<subpath>.+?))?(?:\/?@(?<version>\d+(?:\.\d+)*(?:-[\w.]+)?(?:\+[\w.]+)?))?$/);
120
115
  if (!match)
121
116
  throw new Error(`Invalid import string (${string})`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vorplex/compiler",
3
- "version": "0.0.58",
3
+ "version": "0.0.61",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -15,16 +15,16 @@
15
15
  "types": "./dist/index.d.ts",
16
16
  "main": "./dist/index.js",
17
17
  "dependencies": {
18
- "@vorplex/core": "0.0.58",
19
- "semver": "7.7.3",
20
- "tslib": "2.8.1",
18
+ "@vorplex/core": "0.0.61",
21
19
  "esbuild-wasm": "0.25.12",
20
+ "semver": "7.7.3",
21
+ "yaml": "2.8.2",
22
22
  "typescript": "5.9.3",
23
- "yaml": "2.8.2"
23
+ "tslib": "2.8.1"
24
24
  },
25
25
  "devDependencies": {
26
- "vitest": "3.2.4",
27
- "@types/semver": "7.7.1"
26
+ "@types/semver": "7.7.1",
27
+ "vitest": "3.2.4"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsc -b --force tsconfig.build.json",