@velarscript/cli 0.10.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.
- package/LICENSE +201 -0
- package/README.md +117 -0
- package/dist/application-package-host.d.ts +5 -0
- package/dist/application-package-host.d.ts.map +1 -0
- package/dist/application-package-host.js +67 -0
- package/dist/application-package-host.js.map +1 -0
- package/dist/bounded-text.d.ts +2 -0
- package/dist/bounded-text.d.ts.map +1 -0
- package/dist/bounded-text.js +13 -0
- package/dist/bounded-text.js.map +1 -0
- package/dist/browser-process-owner.d.ts +15 -0
- package/dist/browser-process-owner.d.ts.map +1 -0
- package/dist/browser-process-owner.js +151 -0
- package/dist/browser-process-owner.js.map +1 -0
- package/dist/browser-test-runner.d.ts +11 -0
- package/dist/browser-test-runner.d.ts.map +1 -0
- package/dist/browser-test-runner.js +1022 -0
- package/dist/browser-test-runner.js.map +1 -0
- package/dist/build-engine-tool.d.ts +3 -0
- package/dist/build-engine-tool.d.ts.map +1 -0
- package/dist/build-engine-tool.js +34 -0
- package/dist/build-engine-tool.js.map +1 -0
- package/dist/build-staging.d.ts +3 -0
- package/dist/build-staging.d.ts.map +1 -0
- package/dist/build-staging.js +3 -0
- package/dist/build-staging.js.map +1 -0
- package/dist/bundled-application-package-host-registry.d.ts +10 -0
- package/dist/bundled-application-package-host-registry.d.ts.map +1 -0
- package/dist/bundled-application-package-host-registry.js +16 -0
- package/dist/bundled-application-package-host-registry.js.map +1 -0
- package/dist/bundled-extension-registry.d.ts +22 -0
- package/dist/bundled-extension-registry.d.ts.map +1 -0
- package/dist/bundled-extension-registry.js +10 -0
- package/dist/bundled-extension-registry.js.map +1 -0
- package/dist/canonical-path.d.ts +3 -0
- package/dist/canonical-path.d.ts.map +1 -0
- package/dist/canonical-path.js +30 -0
- package/dist/canonical-path.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1274 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +403 -0
- package/dist/config.js.map +1 -0
- package/dist/deployment-verifier.d.ts +34 -0
- package/dist/deployment-verifier.d.ts.map +1 -0
- package/dist/deployment-verifier.js +260 -0
- package/dist/deployment-verifier.js.map +1 -0
- package/dist/dev-server.d.ts +3 -0
- package/dist/dev-server.d.ts.map +1 -0
- package/dist/dev-server.js +464 -0
- package/dist/dev-server.js.map +1 -0
- package/dist/embedded-modules.d.ts +17 -0
- package/dist/embedded-modules.d.ts.map +1 -0
- package/dist/embedded-modules.js +33 -0
- package/dist/embedded-modules.js.map +1 -0
- package/dist/extension-metadata.d.ts +23 -0
- package/dist/extension-metadata.d.ts.map +1 -0
- package/dist/extension-metadata.js +254 -0
- package/dist/extension-metadata.js.map +1 -0
- package/dist/file-integrity.d.ts +7 -0
- package/dist/file-integrity.d.ts.map +1 -0
- package/dist/file-integrity.js +14 -0
- package/dist/file-integrity.js.map +1 -0
- package/dist/framework-host.d.ts +12 -0
- package/dist/framework-host.d.ts.map +1 -0
- package/dist/framework-host.js +46 -0
- package/dist/framework-host.js.map +1 -0
- package/dist/host-error.d.ts +6 -0
- package/dist/host-error.d.ts.map +1 -0
- package/dist/host-error.js +54 -0
- package/dist/host-error.js.map +1 -0
- package/dist/installed-package.d.ts +9 -0
- package/dist/installed-package.d.ts.map +1 -0
- package/dist/installed-package.js +23 -0
- package/dist/installed-package.js.map +1 -0
- package/dist/language-server-bundle-entry.d.ts +2 -0
- package/dist/language-server-bundle-entry.d.ts.map +1 -0
- package/dist/language-server-bundle-entry.js +7 -0
- package/dist/language-server-bundle-entry.js.map +1 -0
- package/dist/language-server-tool.d.ts +3 -0
- package/dist/language-server-tool.d.ts.map +1 -0
- package/dist/language-server-tool.js +30 -0
- package/dist/language-server-tool.js.map +1 -0
- package/dist/language-server.d.ts +9 -0
- package/dist/language-server.d.ts.map +1 -0
- package/dist/language-server.js +1733 -0
- package/dist/language-server.js.map +1 -0
- package/dist/mechanical-fixer.d.ts +30 -0
- package/dist/mechanical-fixer.d.ts.map +1 -0
- package/dist/mechanical-fixer.js +103 -0
- package/dist/mechanical-fixer.js.map +1 -0
- package/dist/module-assets.d.ts +11 -0
- package/dist/module-assets.d.ts.map +1 -0
- package/dist/module-assets.js +90 -0
- package/dist/module-assets.js.map +1 -0
- package/dist/npm.d.ts +23 -0
- package/dist/npm.d.ts.map +1 -0
- package/dist/npm.js +456 -0
- package/dist/npm.js.map +1 -0
- package/dist/official-language-server-extensions.d.ts +2 -0
- package/dist/official-language-server-extensions.d.ts.map +1 -0
- package/dist/official-language-server-extensions.js +38 -0
- package/dist/official-language-server-extensions.js.map +1 -0
- package/dist/official-script-language-service.d.ts +2 -0
- package/dist/official-script-language-service.d.ts.map +1 -0
- package/dist/official-script-language-service.js +10 -0
- package/dist/official-script-language-service.js.map +1 -0
- package/dist/official-tool-assets.d.ts +3 -0
- package/dist/official-tool-assets.d.ts.map +1 -0
- package/dist/official-tool-assets.js +41 -0
- package/dist/official-tool-assets.js.map +1 -0
- package/dist/ownership-graph.d.ts +46 -0
- package/dist/ownership-graph.d.ts.map +1 -0
- package/dist/ownership-graph.js +255 -0
- package/dist/ownership-graph.js.map +1 -0
- package/dist/package-manager.d.ts +20 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +345 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/packaged-official-tool.d.ts +8 -0
- package/dist/packaged-official-tool.d.ts.map +1 -0
- package/dist/packaged-official-tool.js +32 -0
- package/dist/packaged-official-tool.js.map +1 -0
- package/dist/preview-server.d.ts +11 -0
- package/dist/preview-server.d.ts.map +1 -0
- package/dist/preview-server.js +163 -0
- package/dist/preview-server.js.map +1 -0
- package/dist/production-build.d.ts +57 -0
- package/dist/production-build.d.ts.map +1 -0
- package/dist/production-build.js +332 -0
- package/dist/production-build.js.map +1 -0
- package/dist/production-verifier.d.ts +9 -0
- package/dist/production-verifier.d.ts.map +1 -0
- package/dist/production-verifier.js +268 -0
- package/dist/production-verifier.js.map +1 -0
- package/dist/program-runner.d.ts +7 -0
- package/dist/program-runner.d.ts.map +1 -0
- package/dist/program-runner.js +98 -0
- package/dist/program-runner.js.map +1 -0
- package/dist/project-check.d.ts +31 -0
- package/dist/project-check.d.ts.map +1 -0
- package/dist/project-check.js +95 -0
- package/dist/project-check.js.map +1 -0
- package/dist/project-format.d.ts +6 -0
- package/dist/project-format.d.ts.map +1 -0
- package/dist/project-format.js +21 -0
- package/dist/project-format.js.map +1 -0
- package/dist/project-semantic.d.ts +62 -0
- package/dist/project-semantic.d.ts.map +1 -0
- package/dist/project-semantic.js +1079 -0
- package/dist/project-semantic.js.map +1 -0
- package/dist/project-session.d.ts +36 -0
- package/dist/project-session.d.ts.map +1 -0
- package/dist/project-session.js +339 -0
- package/dist/project-session.js.map +1 -0
- package/dist/project-task-bundle-entry.d.ts +2 -0
- package/dist/project-task-bundle-entry.d.ts.map +1 -0
- package/dist/project-task-bundle-entry.js +18 -0
- package/dist/project-task-bundle-entry.js.map +1 -0
- package/dist/project-task-invocation.d.ts +16 -0
- package/dist/project-task-invocation.d.ts.map +1 -0
- package/dist/project-task-invocation.js +72 -0
- package/dist/project-task-invocation.js.map +1 -0
- package/dist/project-task-tool.d.ts +3 -0
- package/dist/project-task-tool.d.ts.map +1 -0
- package/dist/project-task-tool.js +61 -0
- package/dist/project-task-tool.js.map +1 -0
- package/dist/project.d.ts +71 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +1750 -0
- package/dist/project.js.map +1 -0
- package/dist/reproduction.d.ts +50 -0
- package/dist/reproduction.d.ts.map +1 -0
- package/dist/reproduction.js +321 -0
- package/dist/reproduction.js.map +1 -0
- package/dist/script-language-service.d.ts +82 -0
- package/dist/script-language-service.d.ts.map +1 -0
- package/dist/script-language-service.js +18 -0
- package/dist/script-language-service.js.map +1 -0
- package/dist/source-limits.d.ts +5 -0
- package/dist/source-limits.d.ts.map +1 -0
- package/dist/source-limits.js +19 -0
- package/dist/source-limits.js.map +1 -0
- package/dist/standalone-build.d.ts +15 -0
- package/dist/standalone-build.d.ts.map +1 -0
- package/dist/standalone-build.js +76 -0
- package/dist/standalone-build.js.map +1 -0
- package/dist/standard-modules.d.ts +22 -0
- package/dist/standard-modules.d.ts.map +1 -0
- package/dist/standard-modules.js +3066 -0
- package/dist/standard-modules.js.map +1 -0
- package/dist/static-deployment.d.ts +48 -0
- package/dist/static-deployment.d.ts.map +1 -0
- package/dist/static-deployment.js +142 -0
- package/dist/static-deployment.js.map +1 -0
- package/dist/test-output.d.ts +20 -0
- package/dist/test-output.d.ts.map +1 -0
- package/dist/test-output.js +119 -0
- package/dist/test-output.js.map +1 -0
- package/dist/test-runner.d.ts +13 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +226 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/typescript-declarations.d.ts +20 -0
- package/dist/typescript-declarations.d.ts.map +1 -0
- package/dist/typescript-declarations.js +1609 -0
- package/dist/typescript-declarations.js.map +1 -0
- package/dist/uncaught-program-error.d.ts +24 -0
- package/dist/uncaught-program-error.d.ts.map +1 -0
- package/dist/uncaught-program-error.js +105 -0
- package/dist/uncaught-program-error.js.map +1 -0
- package/dist/unowned-errors.d.ts +56 -0
- package/dist/unowned-errors.d.ts.map +1 -0
- package/dist/unowned-errors.js +82 -0
- package/dist/unowned-errors.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace-index.d.ts +78 -0
- package/dist/workspace-index.d.ts.map +1 -0
- package/dist/workspace-index.js +493 -0
- package/dist/workspace-index.js.map +1 -0
- package/package.json +45 -0
- package/skill/ai-skill.md +749 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { lstat, readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { VELAR_EXTENSION_PROTOCOL_VERSION, } from "@velarscript/compiler";
|
|
5
|
+
import { hostErrorMessage, isHostErrorCode } from "./host-error.js";
|
|
6
|
+
import { isReservedExtensionManifestKey } from "./project-format.js";
|
|
7
|
+
import { bundledExtension } from "./bundled-extension-registry.js";
|
|
8
|
+
const MAX_JSON_BYTES = 1024 * 1024;
|
|
9
|
+
const MAX_EXTENSION_GRAPH_SIZE = 64;
|
|
10
|
+
const PACKAGE_NAME = /^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/u;
|
|
11
|
+
const MANIFEST_KEY = /^[a-z][a-z0-9-]*$/u;
|
|
12
|
+
const API_VERSION = /^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)$/u;
|
|
13
|
+
const PACKAGE_VERSION = /^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/u;
|
|
14
|
+
const MAX_VERSION_LENGTH = 256;
|
|
15
|
+
const kinds = new Set(["application", "capability", "language"]);
|
|
16
|
+
const toolchainExtensionPackages = new Set([
|
|
17
|
+
"@velarscript/web",
|
|
18
|
+
"@velarscript/desktop",
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* BLD-U1: the official web application extension's package identity, exported
|
|
22
|
+
* so configuration diagnostics can teach a complete manifest while the CLI
|
|
23
|
+
* composition layer itself never names the package.
|
|
24
|
+
*/
|
|
25
|
+
export const OFFICIAL_WEB_EXTENSION_PACKAGE = "@velarscript/web";
|
|
26
|
+
const toolchainRequire = createRequire(import.meta.url);
|
|
27
|
+
export async function resolveInstalledExtensionPackage(root, name) {
|
|
28
|
+
const require = createRequire(join(root, "package.json"));
|
|
29
|
+
const loaded = await readExtensionPackage(require, name, true, true);
|
|
30
|
+
return loaded?.package ?? null;
|
|
31
|
+
}
|
|
32
|
+
export async function resolveExtensionPackages(root, names) {
|
|
33
|
+
const require = createRequire(join(root, "package.json"));
|
|
34
|
+
const packages = new Map();
|
|
35
|
+
const dependencies = new Map();
|
|
36
|
+
const direct = new Set(names);
|
|
37
|
+
const discover = async (name) => {
|
|
38
|
+
if (packages.has(name))
|
|
39
|
+
return;
|
|
40
|
+
if (packages.size >= MAX_EXTENSION_GRAPH_SIZE) {
|
|
41
|
+
throw new Error(`Velar extension graph cannot contain more than ${MAX_EXTENSION_GRAPH_SIZE} packages`);
|
|
42
|
+
}
|
|
43
|
+
const loaded = await readExtensionPackage(require, name, direct.has(name), false, true);
|
|
44
|
+
if (!loaded)
|
|
45
|
+
throw new Error(`installed package '${name}' is not a VelarScript extension`);
|
|
46
|
+
packages.set(name, loaded.package);
|
|
47
|
+
const parents = Object.keys(loaded.package.extends).sort();
|
|
48
|
+
dependencies.set(name, Object.freeze(parents));
|
|
49
|
+
for (const parent of parents) {
|
|
50
|
+
if (typeof loaded.peerDependencies[parent] !== "string" || !loaded.peerDependencies[parent].trim()) {
|
|
51
|
+
throw new Error(`${loaded.package.manifestPath}: extension '${name}' must declare parent '${parent}' in peerDependencies`);
|
|
52
|
+
}
|
|
53
|
+
await discover(parent);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
for (const name of [...names].sort())
|
|
57
|
+
await discover(name);
|
|
58
|
+
const visiting = new Set();
|
|
59
|
+
const visited = new Set();
|
|
60
|
+
const ordered = [];
|
|
61
|
+
const visit = (name, trail) => {
|
|
62
|
+
if (visiting.has(name))
|
|
63
|
+
throw new Error(`Velar extension dependency cycle: ${[...trail, name].join(" -> ")}`);
|
|
64
|
+
if (visited.has(name))
|
|
65
|
+
return;
|
|
66
|
+
visiting.add(name);
|
|
67
|
+
for (const parent of dependencies.get(name) ?? [])
|
|
68
|
+
visit(parent, [...trail, name]);
|
|
69
|
+
visiting.delete(name);
|
|
70
|
+
visited.add(name);
|
|
71
|
+
ordered.push(name);
|
|
72
|
+
};
|
|
73
|
+
for (const name of [...packages.keys()].sort())
|
|
74
|
+
visit(name, []);
|
|
75
|
+
for (const name of ordered) {
|
|
76
|
+
const package_ = packages.get(name);
|
|
77
|
+
for (const [parentName, requiredApi] of Object.entries(package_.extends)) {
|
|
78
|
+
const parent = packages.get(parentName);
|
|
79
|
+
if (parent.apiVersion !== requiredApi) {
|
|
80
|
+
throw new Error(`${package_.manifestPath}: extension '${name}' requires ${parentName} API ${requiredApi}, but ${parent.apiVersion} is installed`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const applications = ordered.map((name) => packages.get(name)).filter((item) => item.kind === "application");
|
|
85
|
+
if (applications.length > 1) {
|
|
86
|
+
throw new Error(`A VelarScript project can activate only one application extension; found ${applications.map((item) => item.name).join(", ")}`);
|
|
87
|
+
}
|
|
88
|
+
return Object.freeze(ordered.map((name) => packages.get(name)));
|
|
89
|
+
}
|
|
90
|
+
export function validateLoadedExtension(package_, extension) {
|
|
91
|
+
if (!extension || extension.id !== package_.name || (extension.createEmitter !== undefined && typeof extension.createEmitter !== "function")) {
|
|
92
|
+
throw new Error(`'${package_.name}/compiler' does not export a matching velarCompilerExtension`);
|
|
93
|
+
}
|
|
94
|
+
const contract = extension.contract;
|
|
95
|
+
if (!contract || contract.protocolVersion !== VELAR_EXTENSION_PROTOCOL_VERSION
|
|
96
|
+
|| contract.apiVersion !== package_.apiVersion || contract.kind !== package_.kind
|
|
97
|
+
|| !sameStringRecord(contract.extends, package_.extends)
|
|
98
|
+
|| !sameStringRecord(contract.composes ?? {}, package_.composes)) {
|
|
99
|
+
throw new Error(`'${package_.name}/compiler' contract does not match its package metadata`);
|
|
100
|
+
}
|
|
101
|
+
return extension;
|
|
102
|
+
}
|
|
103
|
+
async function readExtensionPackage(require, name, direct, optional, allowToolchain = false) {
|
|
104
|
+
let manifestPath = await installedPackageManifest(require, name);
|
|
105
|
+
let resolution = "project";
|
|
106
|
+
if (!manifestPath && allowToolchain && toolchainExtensionPackages.has(name)) {
|
|
107
|
+
manifestPath = await installedPackageManifest(toolchainRequire, name);
|
|
108
|
+
resolution = "toolchain";
|
|
109
|
+
}
|
|
110
|
+
const bundled = !manifestPath && allowToolchain ? bundledExtension(name) : null;
|
|
111
|
+
if (bundled) {
|
|
112
|
+
return {
|
|
113
|
+
package: Object.freeze({
|
|
114
|
+
name,
|
|
115
|
+
version: bundled.version,
|
|
116
|
+
manifestPath: import.meta.url,
|
|
117
|
+
kind: bundled.kind,
|
|
118
|
+
apiVersion: bundled.apiVersion,
|
|
119
|
+
manifestKey: bundled.manifestKey,
|
|
120
|
+
extends: bundled.extends,
|
|
121
|
+
composes: bundled.composes,
|
|
122
|
+
direct,
|
|
123
|
+
resolution: "bundled",
|
|
124
|
+
}),
|
|
125
|
+
peerDependencies: bundled.extends,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (!manifestPath)
|
|
129
|
+
throw new Error(`cannot resolve installed package '${name}'`);
|
|
130
|
+
const information = await stat(manifestPath);
|
|
131
|
+
if (information.size > MAX_JSON_BYTES)
|
|
132
|
+
throw new RangeError(`${manifestPath}: package manifest exceeds 1 MiB`);
|
|
133
|
+
let value;
|
|
134
|
+
try {
|
|
135
|
+
value = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
throw new Error(`${manifestPath}: cannot read package manifest: ${hostErrorMessage(error)}`);
|
|
139
|
+
}
|
|
140
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
141
|
+
throw new Error(`${manifestPath}: package manifest must be an object`);
|
|
142
|
+
const manifest = value;
|
|
143
|
+
if (manifest.name !== name)
|
|
144
|
+
throw new Error(`${manifestPath}: installed package identity does not match '${name}'`);
|
|
145
|
+
if (optional && manifest.velar === undefined)
|
|
146
|
+
return null;
|
|
147
|
+
const velar = objectField(manifest.velar, "velar", manifestPath);
|
|
148
|
+
if (optional && velar.extension === undefined)
|
|
149
|
+
return null;
|
|
150
|
+
if (typeof manifest.version !== "string" || manifest.version.length > MAX_VERSION_LENGTH || !PACKAGE_VERSION.test(manifest.version)) {
|
|
151
|
+
throw new Error(`${manifestPath}: extension package must declare a valid SemVer 2.0 version`);
|
|
152
|
+
}
|
|
153
|
+
const extension = objectField(velar.extension, "velar.extension", manifestPath);
|
|
154
|
+
knownFields(extension, new Set(["kind", "apiVersion", "manifestKey", "extends", "composes"]), "velar.extension", manifestPath);
|
|
155
|
+
if (typeof extension.kind !== "string" || !kinds.has(extension.kind)) {
|
|
156
|
+
throw new Error(`${manifestPath}: 'velar.extension.kind' must be application, capability, or language`);
|
|
157
|
+
}
|
|
158
|
+
if (typeof extension.apiVersion !== "string" || extension.apiVersion.length > MAX_VERSION_LENGTH || !API_VERSION.test(extension.apiVersion)) {
|
|
159
|
+
throw new Error(`${manifestPath}: 'velar.extension.apiVersion' must be a major.minor API version`);
|
|
160
|
+
}
|
|
161
|
+
const manifestKey = extension.manifestKey === undefined ? null : extension.manifestKey;
|
|
162
|
+
if (typeof manifestKey === "string" && isReservedExtensionManifestKey(manifestKey)) {
|
|
163
|
+
throw new Error(`${manifestPath}: 'velar.extension.manifestKey' cannot claim reserved project field '${manifestKey}'`);
|
|
164
|
+
}
|
|
165
|
+
if (manifestKey !== null && (typeof manifestKey !== "string" || !MANIFEST_KEY.test(manifestKey))) {
|
|
166
|
+
throw new Error(`${manifestPath}: 'velar.extension.manifestKey' must be a lowercase project field name`);
|
|
167
|
+
}
|
|
168
|
+
if (extension.kind === "application" && manifestKey === null) {
|
|
169
|
+
throw new Error(`${manifestPath}: an application extension must own a project manifest field`);
|
|
170
|
+
}
|
|
171
|
+
const parents = extension.extends === undefined ? {} : objectField(extension.extends, "velar.extension.extends", manifestPath);
|
|
172
|
+
if (Object.keys(parents).length > 16)
|
|
173
|
+
throw new Error(`${manifestPath}: an extension cannot declare more than 16 parents`);
|
|
174
|
+
const extends_ = {};
|
|
175
|
+
for (const [parent, apiVersion] of Object.entries(parents)) {
|
|
176
|
+
if (!PACKAGE_NAME.test(parent) || parent === name)
|
|
177
|
+
throw new Error(`${manifestPath}: invalid extension parent '${parent}'`);
|
|
178
|
+
if (typeof apiVersion !== "string" || apiVersion.length > MAX_VERSION_LENGTH || !API_VERSION.test(apiVersion)) {
|
|
179
|
+
throw new Error(`${manifestPath}: parent '${parent}' must require a major.minor API version`);
|
|
180
|
+
}
|
|
181
|
+
extends_[parent] = apiVersion;
|
|
182
|
+
}
|
|
183
|
+
if (extension.kind === "application" && Object.keys(extends_).length > 0) {
|
|
184
|
+
throw new Error(`${manifestPath}: an application extension cannot extend another extension`);
|
|
185
|
+
}
|
|
186
|
+
const composed = extension.composes === undefined ? {} : objectField(extension.composes, "velar.extension.composes", manifestPath);
|
|
187
|
+
if (Object.keys(composed).length > 16)
|
|
188
|
+
throw new Error(`${manifestPath}: an extension cannot compose more than 16 official targets`);
|
|
189
|
+
const composes = {};
|
|
190
|
+
for (const [target, apiVersion] of Object.entries(composed)) {
|
|
191
|
+
if (!PACKAGE_NAME.test(target) || target === name)
|
|
192
|
+
throw new Error(`${manifestPath}: invalid composed target '${target}'`);
|
|
193
|
+
if (typeof apiVersion !== "string" || apiVersion.length > MAX_VERSION_LENGTH || !API_VERSION.test(apiVersion)) {
|
|
194
|
+
throw new Error(`${manifestPath}: composed target '${target}' must require a major.minor API version`);
|
|
195
|
+
}
|
|
196
|
+
composes[target] = apiVersion;
|
|
197
|
+
}
|
|
198
|
+
if (extension.kind !== "application" && Object.keys(composes).length > 0) {
|
|
199
|
+
throw new Error(`${manifestPath}: only an application extension can compose other official targets`);
|
|
200
|
+
}
|
|
201
|
+
const peerDependencies = manifest.peerDependencies === undefined
|
|
202
|
+
? {}
|
|
203
|
+
: objectField(manifest.peerDependencies, "peerDependencies", manifestPath);
|
|
204
|
+
return {
|
|
205
|
+
package: Object.freeze({
|
|
206
|
+
name,
|
|
207
|
+
version: manifest.version,
|
|
208
|
+
manifestPath,
|
|
209
|
+
kind: extension.kind,
|
|
210
|
+
apiVersion: extension.apiVersion,
|
|
211
|
+
manifestKey: manifestKey,
|
|
212
|
+
extends: Object.freeze(extends_),
|
|
213
|
+
composes: Object.freeze(composes),
|
|
214
|
+
direct,
|
|
215
|
+
resolution,
|
|
216
|
+
}),
|
|
217
|
+
peerDependencies,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
async function installedPackageManifest(require, name) {
|
|
221
|
+
for (const directory of require.resolve.paths(name) ?? []) {
|
|
222
|
+
const path = join(directory, ...name.split("/"), "package.json");
|
|
223
|
+
let information;
|
|
224
|
+
try {
|
|
225
|
+
information = await lstat(path);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (isHostErrorCode(error, "ENOENT") || isHostErrorCode(error, "ENOTDIR"))
|
|
229
|
+
continue;
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
if (!information.isFile() || information.isSymbolicLink()) {
|
|
233
|
+
throw new Error(`${path}: installed package manifest must be an ordinary file`);
|
|
234
|
+
}
|
|
235
|
+
return path;
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
function objectField(value, field, manifestPath) {
|
|
240
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
241
|
+
throw new Error(`${manifestPath}: '${field}' must be an object`);
|
|
242
|
+
return value;
|
|
243
|
+
}
|
|
244
|
+
function knownFields(value, allowed, field, manifestPath) {
|
|
245
|
+
for (const key of Object.keys(value))
|
|
246
|
+
if (!allowed.has(key))
|
|
247
|
+
throw new Error(`${manifestPath}: '${field}' contains unknown field '${key}'`);
|
|
248
|
+
}
|
|
249
|
+
function sameStringRecord(left, right) {
|
|
250
|
+
const leftEntries = Object.entries(left).sort(([a], [b]) => a.localeCompare(b));
|
|
251
|
+
const rightEntries = Object.entries(right).sort(([a], [b]) => a.localeCompare(b));
|
|
252
|
+
return JSON.stringify(leftEntries) === JSON.stringify(rightEntries);
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=extension-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-metadata.js","sourceRoot":"","sources":["../src/extension-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface FileIdentity {
|
|
2
|
+
readonly sizeBytes: number;
|
|
3
|
+
readonly sha256: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const MAX_PRODUCTION_ASSETS = 100000;
|
|
6
|
+
export declare function fileIdentity(path: string): Promise<FileIdentity>;
|
|
7
|
+
//# sourceMappingURL=file-integrity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-integrity.d.ts","sourceRoot":"","sources":["../src/file-integrity.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAE5C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAStE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReadStream } from "node:fs";
|
|
3
|
+
export const MAX_PRODUCTION_ASSETS = 100000;
|
|
4
|
+
export async function fileIdentity(path) {
|
|
5
|
+
const hash = createHash("sha256");
|
|
6
|
+
let sizeBytes = 0;
|
|
7
|
+
for await (const chunk of createReadStream(path)) {
|
|
8
|
+
const bytes = chunk;
|
|
9
|
+
sizeBytes += bytes.byteLength;
|
|
10
|
+
hash.update(bytes);
|
|
11
|
+
}
|
|
12
|
+
return { sizeBytes, sha256: hash.digest("hex") };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=file-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-integrity.js","sourceRoot":"","sources":["../src/file-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAO3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAe,CAAC;QAC9B,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FrameworkHostArtifacts } from "@velarscript/compiler/framework-host";
|
|
2
|
+
import type { ResolvedFrameworkHost } from "./config.ts";
|
|
3
|
+
import type { ProjectResult } from "./project.ts";
|
|
4
|
+
export interface FrameworkArtifactOverrides {
|
|
5
|
+
readonly entryPath?: string;
|
|
6
|
+
readonly stylesheetPath?: string | null;
|
|
7
|
+
readonly includeStandardImports?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function createFrameworkArtifacts(project: ProjectResult, development?: boolean, packageImports?: Readonly<Record<string, string>>, overrides?: FrameworkArtifactOverrides): FrameworkHostArtifacts | null;
|
|
10
|
+
export declare function projectStyles(project: ProjectResult): string;
|
|
11
|
+
export declare function frameworkBase(framework: ResolvedFrameworkHost | null): string;
|
|
12
|
+
//# sourceMappingURL=framework-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-host.d.ts","sourceRoot":"","sources":["../src/framework-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,EACtB,WAAW,UAAQ,EACnB,cAAc,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACrD,SAAS,GAAE,0BAA+B,GACzC,sBAAsB,GAAG,IAAI,CAe/B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiB5D;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
import { standardModuleRoute, standardModuleSources } from "./standard-modules.js";
|
|
3
|
+
export function createFrameworkArtifacts(project, development = false, packageImports = {}, overrides = {}) {
|
|
4
|
+
const framework = project.framework;
|
|
5
|
+
if (!framework)
|
|
6
|
+
return null;
|
|
7
|
+
const base = frameworkBase(framework);
|
|
8
|
+
const standardImports = overrides.includeStandardImports === false ? {} : Object.fromEntries([...standardModuleSources(project.compilerExtensions).keys()].map((source) => [source, withBase(base, standardModuleRoute(source))]));
|
|
9
|
+
return framework.host.createArtifacts({
|
|
10
|
+
config: framework.config,
|
|
11
|
+
development,
|
|
12
|
+
entryPath: overrides.entryPath ?? relative(project.sourceRoot, project.entryPath).replace(/\.vel$/u, ".js").replaceAll("\\", "/"),
|
|
13
|
+
stylesheetPath: overrides.stylesheetPath === undefined ? "styles.css" : overrides.stylesheetPath,
|
|
14
|
+
styles: projectStyles(project),
|
|
15
|
+
imports: { ...standardImports, ...packageImports },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function projectStyles(project) {
|
|
19
|
+
const before = [];
|
|
20
|
+
const controlled = [];
|
|
21
|
+
const after = [];
|
|
22
|
+
for (const module of project.modules) {
|
|
23
|
+
const segments = module.result.styleSegments;
|
|
24
|
+
if (segments) {
|
|
25
|
+
if (segments.before)
|
|
26
|
+
before.push(segments.before);
|
|
27
|
+
if (segments.controlled)
|
|
28
|
+
controlled.push(segments.controlled);
|
|
29
|
+
if (segments.after)
|
|
30
|
+
after.push(segments.after);
|
|
31
|
+
}
|
|
32
|
+
else if (module.result.css) {
|
|
33
|
+
controlled.push(module.result.css);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const raw = [...before, ...controlled, ...after].filter(Boolean).join("\n\n");
|
|
37
|
+
const styles = raw ? `${raw}\n` : "";
|
|
38
|
+
return project.framework?.host.prepareStyles?.(project.framework.config, styles) ?? styles;
|
|
39
|
+
}
|
|
40
|
+
export function frameworkBase(framework) {
|
|
41
|
+
return framework ? framework.host.base(framework.config) : "/";
|
|
42
|
+
}
|
|
43
|
+
function withBase(base, path) {
|
|
44
|
+
return `${base}${path.replace(/^\/+/, "")}`;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=framework-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-host.js","sourceRoot":"","sources":["../src/framework-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQnF,MAAM,UAAU,wBAAwB,CACtC,OAAsB,EACtB,WAAW,GAAG,KAAK,EACnB,cAAc,GAAqC,EAAE,EACrD,SAAS,GAA+B,EAAE;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,eAAe,GAAG,SAAS,CAAC,sBAAsB,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAC1F,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACrI,CAAC;IACF,OAAO,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;QACpC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW;QACX,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;QACjI,cAAc,EAAE,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc;QAChG,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,cAAc,EAAE;KACnD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,UAAU;gBAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAuC;IACnE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;IAC1C,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function hostErrorMessage(value: unknown): string;
|
|
2
|
+
export declare function hostErrorStack(value: unknown): string;
|
|
3
|
+
export declare function hostErrorCode(value: unknown): string | null;
|
|
4
|
+
export declare function isHostErrorCode(value: unknown, code: string): boolean;
|
|
5
|
+
export declare function asHostError(value: unknown): Error;
|
|
6
|
+
//# sourceMappingURL=host-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-error.d.ts","sourceRoot":"","sources":["../src/host-error.ts"],"names":[],"mappings":"AA4BA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGrD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAIjD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { types as utilityTypes } from "node:util";
|
|
2
|
+
const NativeError = Error;
|
|
3
|
+
const nativeErrorCheck = utilityTypes.isNativeError;
|
|
4
|
+
const getOwnPropertyDescriptor = Reflect.getOwnPropertyDescriptor;
|
|
5
|
+
const primitiveToString = String;
|
|
6
|
+
const MAX_HOST_ERROR_TEXT_LENGTH = 64 * 1024;
|
|
7
|
+
const NON_ERROR_MESSAGE = "A non-Error value was thrown by JavaScript";
|
|
8
|
+
const EMPTY_ERROR_MESSAGE = "An Error was thrown without a message";
|
|
9
|
+
function isNativeError(value) {
|
|
10
|
+
return nativeErrorCheck(value);
|
|
11
|
+
}
|
|
12
|
+
function boundedText(value) {
|
|
13
|
+
return value.length <= MAX_HOST_ERROR_TEXT_LENGTH
|
|
14
|
+
? value
|
|
15
|
+
: `${value.slice(0, MAX_HOST_ERROR_TEXT_LENGTH)}…`;
|
|
16
|
+
}
|
|
17
|
+
function ownString(value, property) {
|
|
18
|
+
const descriptor = getOwnPropertyDescriptor(value, property);
|
|
19
|
+
return descriptor && "value" in descriptor && typeof descriptor.value === "string"
|
|
20
|
+
? boundedText(descriptor.value)
|
|
21
|
+
: null;
|
|
22
|
+
}
|
|
23
|
+
export function hostErrorMessage(value) {
|
|
24
|
+
if (isNativeError(value))
|
|
25
|
+
return ownString(value, "message") || EMPTY_ERROR_MESSAGE;
|
|
26
|
+
const kind = typeof value;
|
|
27
|
+
if (kind === "string")
|
|
28
|
+
return boundedText(value);
|
|
29
|
+
if (value === null)
|
|
30
|
+
return "null";
|
|
31
|
+
if (kind === "undefined")
|
|
32
|
+
return "undefined";
|
|
33
|
+
if (kind === "number" || kind === "boolean" || kind === "bigint" || kind === "symbol") {
|
|
34
|
+
return boundedText(primitiveToString(value));
|
|
35
|
+
}
|
|
36
|
+
return NON_ERROR_MESSAGE;
|
|
37
|
+
}
|
|
38
|
+
export function hostErrorStack(value) {
|
|
39
|
+
if (isNativeError(value))
|
|
40
|
+
return ownString(value, "stack") || ownString(value, "message") || EMPTY_ERROR_MESSAGE;
|
|
41
|
+
return hostErrorMessage(value);
|
|
42
|
+
}
|
|
43
|
+
export function hostErrorCode(value) {
|
|
44
|
+
return isNativeError(value) ? ownString(value, "code") : null;
|
|
45
|
+
}
|
|
46
|
+
export function isHostErrorCode(value, code) {
|
|
47
|
+
return hostErrorCode(value) === code;
|
|
48
|
+
}
|
|
49
|
+
export function asHostError(value) {
|
|
50
|
+
return isNativeError(value)
|
|
51
|
+
? value
|
|
52
|
+
: new NativeError(hostErrorMessage(value), { cause: value });
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=host-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-error.js","sourceRoot":"","sources":["../src/host-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC;AACpD,MAAM,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;AAClE,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AACvE,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;AAEpE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,MAAM,IAAI,0BAA0B;QAC/C,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,CAAC,GAAG,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,KAAY,EAAE,QAAsC;IACrE,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7D,OAAO,UAAU,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;QAChF,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,mBAAmB,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;IAC1B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,KAAe,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtF,OAAO,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,mBAAmB,CAAC;IACjH,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,IAAY;IAC1D,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,aAAa,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds an installed package without resolving one of its runtime exports.
|
|
3
|
+
*
|
|
4
|
+
* `require.resolve(specifier)` is intentionally not used here: it selects the
|
|
5
|
+
* CommonJS `require` condition and therefore cannot discover a valid ESM-only
|
|
6
|
+
* package whose exports expose only `types` and `import` targets.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveInstalledPackageRoot(name: string, specifier: string, require: NodeJS.Require): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=installed-package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-package.d.ts","sourceRoot":"","sources":["../src/installed-package.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { access, realpath } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Finds an installed package without resolving one of its runtime exports.
|
|
5
|
+
*
|
|
6
|
+
* `require.resolve(specifier)` is intentionally not used here: it selects the
|
|
7
|
+
* CommonJS `require` condition and therefore cannot discover a valid ESM-only
|
|
8
|
+
* package whose exports expose only `types` and `import` targets.
|
|
9
|
+
*/
|
|
10
|
+
export async function resolveInstalledPackageRoot(name, specifier, require) {
|
|
11
|
+
for (const directory of require.resolve.paths(specifier) ?? []) {
|
|
12
|
+
const root = join(directory, name);
|
|
13
|
+
try {
|
|
14
|
+
await access(join(root, "package.json"));
|
|
15
|
+
return await realpath(root);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Keep walking the node_modules chain.
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
throw new Error(`package '${name}' is not installed in node_modules`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=installed-package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-package.js","sourceRoot":"","sources":["../src/installed-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAY,EACZ,SAAiB,EACjB,OAAuB;IAEvB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;YACzC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,oCAAoC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server-bundle-entry.d.ts","sourceRoot":"","sources":["../src/language-server-bundle-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { installOfficialLanguageServerExtensions } from "./official-language-server-extensions.js";
|
|
2
|
+
import { installOfficialScriptLanguageService } from "./official-script-language-service.js";
|
|
3
|
+
import { runLanguageServer } from "./language-server.js";
|
|
4
|
+
installOfficialLanguageServerExtensions();
|
|
5
|
+
installOfficialScriptLanguageService();
|
|
6
|
+
await runLanguageServer();
|
|
7
|
+
//# sourceMappingURL=language-server-bundle-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server-bundle-entry.js","sourceRoot":"","sources":["../src/language-server-bundle-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uCAAuC,EAAE,MAAM,0CAA0C,CAAC;AACnG,OAAO,EAAE,oCAAoC,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,uCAAuC,EAAE,CAAC;AAC1C,oCAAoC,EAAE,CAAC;AACvC,MAAM,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server-tool.d.ts","sourceRoot":"","sources":["../src/language-server-tool.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,6BAA6B,0BAA0B,CAAC;AAErE,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { chmod, mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { build } from "esbuild";
|
|
5
|
+
import { officialToolModulesPlugin } from "./official-tool-assets.js";
|
|
6
|
+
import { copyPackagedOfficialTool } from "./packaged-official-tool.js";
|
|
7
|
+
export const VELAR_LANGUAGE_SERVER_TOOL_ID = "velar-language-server";
|
|
8
|
+
export async function buildLanguageServerTool(outputFile) {
|
|
9
|
+
outputFile = resolve(outputFile);
|
|
10
|
+
if (await copyPackagedOfficialTool(outputFile, "host/language-server.js", 0o644))
|
|
11
|
+
return;
|
|
12
|
+
const sourceExtension = import.meta.url.endsWith(".ts") ? "ts" : "js";
|
|
13
|
+
await mkdir(dirname(outputFile), { recursive: true });
|
|
14
|
+
await build({
|
|
15
|
+
entryPoints: [fileURLToPath(new URL(`./language-server-bundle-entry.${sourceExtension}`, import.meta.url))],
|
|
16
|
+
outfile: outputFile,
|
|
17
|
+
bundle: true,
|
|
18
|
+
format: "esm",
|
|
19
|
+
platform: "node",
|
|
20
|
+
target: "node24",
|
|
21
|
+
minify: true,
|
|
22
|
+
treeShaking: true,
|
|
23
|
+
sourcemap: false,
|
|
24
|
+
legalComments: "none",
|
|
25
|
+
logLevel: "silent",
|
|
26
|
+
plugins: [await officialToolModulesPlugin()],
|
|
27
|
+
});
|
|
28
|
+
await chmod(outputFile, 0o644);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=language-server-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server-tool.js","sourceRoot":"","sources":["../src/language-server-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAkB;IAC9D,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,MAAM,wBAAwB,CAAC,UAAU,EAAE,yBAAyB,EAAE,KAAK,CAAC;QAAE,OAAO;IACzF,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC;QACV,WAAW,EAAE,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,kCAAkC,eAAe,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3G,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,CAAC,MAAM,yBAAyB,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectResult } from "./project.ts";
|
|
2
|
+
export declare const VELAR_LANGUAGE_SERVER_PROTOCOL_VERSION = 4;
|
|
3
|
+
export declare function completionItemsFor(project: ProjectResult | null): readonly {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly kind: number;
|
|
6
|
+
readonly detail?: string;
|
|
7
|
+
}[];
|
|
8
|
+
export declare function runLanguageServer(): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=language-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server.d.ts","sourceRoot":"","sources":["../src/language-server.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,cAAc,CAAC;AAyEjE,eAAO,MAAM,sCAAsC,IAAI,CAAC;AA4GxD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CASxJ;AAcD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAs4BvD"}
|