@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.
Files changed (228) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +117 -0
  3. package/dist/application-package-host.d.ts +5 -0
  4. package/dist/application-package-host.d.ts.map +1 -0
  5. package/dist/application-package-host.js +67 -0
  6. package/dist/application-package-host.js.map +1 -0
  7. package/dist/bounded-text.d.ts +2 -0
  8. package/dist/bounded-text.d.ts.map +1 -0
  9. package/dist/bounded-text.js +13 -0
  10. package/dist/bounded-text.js.map +1 -0
  11. package/dist/browser-process-owner.d.ts +15 -0
  12. package/dist/browser-process-owner.d.ts.map +1 -0
  13. package/dist/browser-process-owner.js +151 -0
  14. package/dist/browser-process-owner.js.map +1 -0
  15. package/dist/browser-test-runner.d.ts +11 -0
  16. package/dist/browser-test-runner.d.ts.map +1 -0
  17. package/dist/browser-test-runner.js +1022 -0
  18. package/dist/browser-test-runner.js.map +1 -0
  19. package/dist/build-engine-tool.d.ts +3 -0
  20. package/dist/build-engine-tool.d.ts.map +1 -0
  21. package/dist/build-engine-tool.js +34 -0
  22. package/dist/build-engine-tool.js.map +1 -0
  23. package/dist/build-staging.d.ts +3 -0
  24. package/dist/build-staging.d.ts.map +1 -0
  25. package/dist/build-staging.js +3 -0
  26. package/dist/build-staging.js.map +1 -0
  27. package/dist/bundled-application-package-host-registry.d.ts +10 -0
  28. package/dist/bundled-application-package-host-registry.d.ts.map +1 -0
  29. package/dist/bundled-application-package-host-registry.js +16 -0
  30. package/dist/bundled-application-package-host-registry.js.map +1 -0
  31. package/dist/bundled-extension-registry.d.ts +22 -0
  32. package/dist/bundled-extension-registry.d.ts.map +1 -0
  33. package/dist/bundled-extension-registry.js +10 -0
  34. package/dist/bundled-extension-registry.js.map +1 -0
  35. package/dist/canonical-path.d.ts +3 -0
  36. package/dist/canonical-path.d.ts.map +1 -0
  37. package/dist/canonical-path.js +30 -0
  38. package/dist/canonical-path.js.map +1 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +1274 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/config.d.ts +26 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +403 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/deployment-verifier.d.ts +34 -0
  48. package/dist/deployment-verifier.d.ts.map +1 -0
  49. package/dist/deployment-verifier.js +260 -0
  50. package/dist/deployment-verifier.js.map +1 -0
  51. package/dist/dev-server.d.ts +3 -0
  52. package/dist/dev-server.d.ts.map +1 -0
  53. package/dist/dev-server.js +464 -0
  54. package/dist/dev-server.js.map +1 -0
  55. package/dist/embedded-modules.d.ts +17 -0
  56. package/dist/embedded-modules.d.ts.map +1 -0
  57. package/dist/embedded-modules.js +33 -0
  58. package/dist/embedded-modules.js.map +1 -0
  59. package/dist/extension-metadata.d.ts +23 -0
  60. package/dist/extension-metadata.d.ts.map +1 -0
  61. package/dist/extension-metadata.js +254 -0
  62. package/dist/extension-metadata.js.map +1 -0
  63. package/dist/file-integrity.d.ts +7 -0
  64. package/dist/file-integrity.d.ts.map +1 -0
  65. package/dist/file-integrity.js +14 -0
  66. package/dist/file-integrity.js.map +1 -0
  67. package/dist/framework-host.d.ts +12 -0
  68. package/dist/framework-host.d.ts.map +1 -0
  69. package/dist/framework-host.js +46 -0
  70. package/dist/framework-host.js.map +1 -0
  71. package/dist/host-error.d.ts +6 -0
  72. package/dist/host-error.d.ts.map +1 -0
  73. package/dist/host-error.js +54 -0
  74. package/dist/host-error.js.map +1 -0
  75. package/dist/installed-package.d.ts +9 -0
  76. package/dist/installed-package.d.ts.map +1 -0
  77. package/dist/installed-package.js +23 -0
  78. package/dist/installed-package.js.map +1 -0
  79. package/dist/language-server-bundle-entry.d.ts +2 -0
  80. package/dist/language-server-bundle-entry.d.ts.map +1 -0
  81. package/dist/language-server-bundle-entry.js +7 -0
  82. package/dist/language-server-bundle-entry.js.map +1 -0
  83. package/dist/language-server-tool.d.ts +3 -0
  84. package/dist/language-server-tool.d.ts.map +1 -0
  85. package/dist/language-server-tool.js +30 -0
  86. package/dist/language-server-tool.js.map +1 -0
  87. package/dist/language-server.d.ts +9 -0
  88. package/dist/language-server.d.ts.map +1 -0
  89. package/dist/language-server.js +1733 -0
  90. package/dist/language-server.js.map +1 -0
  91. package/dist/mechanical-fixer.d.ts +30 -0
  92. package/dist/mechanical-fixer.d.ts.map +1 -0
  93. package/dist/mechanical-fixer.js +103 -0
  94. package/dist/mechanical-fixer.js.map +1 -0
  95. package/dist/module-assets.d.ts +11 -0
  96. package/dist/module-assets.d.ts.map +1 -0
  97. package/dist/module-assets.js +90 -0
  98. package/dist/module-assets.js.map +1 -0
  99. package/dist/npm.d.ts +23 -0
  100. package/dist/npm.d.ts.map +1 -0
  101. package/dist/npm.js +456 -0
  102. package/dist/npm.js.map +1 -0
  103. package/dist/official-language-server-extensions.d.ts +2 -0
  104. package/dist/official-language-server-extensions.d.ts.map +1 -0
  105. package/dist/official-language-server-extensions.js +38 -0
  106. package/dist/official-language-server-extensions.js.map +1 -0
  107. package/dist/official-script-language-service.d.ts +2 -0
  108. package/dist/official-script-language-service.d.ts.map +1 -0
  109. package/dist/official-script-language-service.js +10 -0
  110. package/dist/official-script-language-service.js.map +1 -0
  111. package/dist/official-tool-assets.d.ts +3 -0
  112. package/dist/official-tool-assets.d.ts.map +1 -0
  113. package/dist/official-tool-assets.js +41 -0
  114. package/dist/official-tool-assets.js.map +1 -0
  115. package/dist/ownership-graph.d.ts +46 -0
  116. package/dist/ownership-graph.d.ts.map +1 -0
  117. package/dist/ownership-graph.js +255 -0
  118. package/dist/ownership-graph.js.map +1 -0
  119. package/dist/package-manager.d.ts +20 -0
  120. package/dist/package-manager.d.ts.map +1 -0
  121. package/dist/package-manager.js +345 -0
  122. package/dist/package-manager.js.map +1 -0
  123. package/dist/packaged-official-tool.d.ts +8 -0
  124. package/dist/packaged-official-tool.d.ts.map +1 -0
  125. package/dist/packaged-official-tool.js +32 -0
  126. package/dist/packaged-official-tool.js.map +1 -0
  127. package/dist/preview-server.d.ts +11 -0
  128. package/dist/preview-server.d.ts.map +1 -0
  129. package/dist/preview-server.js +163 -0
  130. package/dist/preview-server.js.map +1 -0
  131. package/dist/production-build.d.ts +57 -0
  132. package/dist/production-build.d.ts.map +1 -0
  133. package/dist/production-build.js +332 -0
  134. package/dist/production-build.js.map +1 -0
  135. package/dist/production-verifier.d.ts +9 -0
  136. package/dist/production-verifier.d.ts.map +1 -0
  137. package/dist/production-verifier.js +268 -0
  138. package/dist/production-verifier.js.map +1 -0
  139. package/dist/program-runner.d.ts +7 -0
  140. package/dist/program-runner.d.ts.map +1 -0
  141. package/dist/program-runner.js +98 -0
  142. package/dist/program-runner.js.map +1 -0
  143. package/dist/project-check.d.ts +31 -0
  144. package/dist/project-check.d.ts.map +1 -0
  145. package/dist/project-check.js +95 -0
  146. package/dist/project-check.js.map +1 -0
  147. package/dist/project-format.d.ts +6 -0
  148. package/dist/project-format.d.ts.map +1 -0
  149. package/dist/project-format.js +21 -0
  150. package/dist/project-format.js.map +1 -0
  151. package/dist/project-semantic.d.ts +62 -0
  152. package/dist/project-semantic.d.ts.map +1 -0
  153. package/dist/project-semantic.js +1079 -0
  154. package/dist/project-semantic.js.map +1 -0
  155. package/dist/project-session.d.ts +36 -0
  156. package/dist/project-session.d.ts.map +1 -0
  157. package/dist/project-session.js +339 -0
  158. package/dist/project-session.js.map +1 -0
  159. package/dist/project-task-bundle-entry.d.ts +2 -0
  160. package/dist/project-task-bundle-entry.d.ts.map +1 -0
  161. package/dist/project-task-bundle-entry.js +18 -0
  162. package/dist/project-task-bundle-entry.js.map +1 -0
  163. package/dist/project-task-invocation.d.ts +16 -0
  164. package/dist/project-task-invocation.d.ts.map +1 -0
  165. package/dist/project-task-invocation.js +72 -0
  166. package/dist/project-task-invocation.js.map +1 -0
  167. package/dist/project-task-tool.d.ts +3 -0
  168. package/dist/project-task-tool.d.ts.map +1 -0
  169. package/dist/project-task-tool.js +61 -0
  170. package/dist/project-task-tool.js.map +1 -0
  171. package/dist/project.d.ts +71 -0
  172. package/dist/project.d.ts.map +1 -0
  173. package/dist/project.js +1750 -0
  174. package/dist/project.js.map +1 -0
  175. package/dist/reproduction.d.ts +50 -0
  176. package/dist/reproduction.d.ts.map +1 -0
  177. package/dist/reproduction.js +321 -0
  178. package/dist/reproduction.js.map +1 -0
  179. package/dist/script-language-service.d.ts +82 -0
  180. package/dist/script-language-service.d.ts.map +1 -0
  181. package/dist/script-language-service.js +18 -0
  182. package/dist/script-language-service.js.map +1 -0
  183. package/dist/source-limits.d.ts +5 -0
  184. package/dist/source-limits.d.ts.map +1 -0
  185. package/dist/source-limits.js +19 -0
  186. package/dist/source-limits.js.map +1 -0
  187. package/dist/standalone-build.d.ts +15 -0
  188. package/dist/standalone-build.d.ts.map +1 -0
  189. package/dist/standalone-build.js +76 -0
  190. package/dist/standalone-build.js.map +1 -0
  191. package/dist/standard-modules.d.ts +22 -0
  192. package/dist/standard-modules.d.ts.map +1 -0
  193. package/dist/standard-modules.js +3066 -0
  194. package/dist/standard-modules.js.map +1 -0
  195. package/dist/static-deployment.d.ts +48 -0
  196. package/dist/static-deployment.d.ts.map +1 -0
  197. package/dist/static-deployment.js +142 -0
  198. package/dist/static-deployment.js.map +1 -0
  199. package/dist/test-output.d.ts +20 -0
  200. package/dist/test-output.d.ts.map +1 -0
  201. package/dist/test-output.js +119 -0
  202. package/dist/test-output.js.map +1 -0
  203. package/dist/test-runner.d.ts +13 -0
  204. package/dist/test-runner.d.ts.map +1 -0
  205. package/dist/test-runner.js +226 -0
  206. package/dist/test-runner.js.map +1 -0
  207. package/dist/typescript-declarations.d.ts +20 -0
  208. package/dist/typescript-declarations.d.ts.map +1 -0
  209. package/dist/typescript-declarations.js +1609 -0
  210. package/dist/typescript-declarations.js.map +1 -0
  211. package/dist/uncaught-program-error.d.ts +24 -0
  212. package/dist/uncaught-program-error.d.ts.map +1 -0
  213. package/dist/uncaught-program-error.js +105 -0
  214. package/dist/uncaught-program-error.js.map +1 -0
  215. package/dist/unowned-errors.d.ts +56 -0
  216. package/dist/unowned-errors.d.ts.map +1 -0
  217. package/dist/unowned-errors.js +82 -0
  218. package/dist/unowned-errors.js.map +1 -0
  219. package/dist/version.d.ts +3 -0
  220. package/dist/version.d.ts.map +1 -0
  221. package/dist/version.js +3 -0
  222. package/dist/version.js.map +1 -0
  223. package/dist/workspace-index.d.ts +78 -0
  224. package/dist/workspace-index.d.ts.map +1 -0
  225. package/dist/workspace-index.js +493 -0
  226. package/dist/workspace-index.js.map +1 -0
  227. package/package.json +45 -0
  228. package/skill/ai-skill.md +749 -0
@@ -0,0 +1,345 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { lstat, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
4
+ import { dirname, join, parse, resolve } from "node:path";
5
+ import { CURRENT_PROJECT_FORMAT_VERSION, resolveVelarProject } from "./config.js";
6
+ import { hostErrorMessage, isHostErrorCode } from "./host-error.js";
7
+ import { resolveExtensionPackages, resolveInstalledExtensionPackage, } from "./extension-metadata.js";
8
+ const MAX_PACKAGE_ARGUMENTS = 32;
9
+ const MAX_JSON_BYTES = 1024 * 1024;
10
+ const PACKAGE_NAME = /^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/u;
11
+ export function parseDependencyArguments(action, arguments_) {
12
+ if (action === "install") {
13
+ return arguments_.length === 0
14
+ ? { packages: [], packageNames: [], dev: false }
15
+ : "install does not accept package names or options";
16
+ }
17
+ let dev = false;
18
+ const packages = [];
19
+ const packageNames = [];
20
+ for (const argument of arguments_) {
21
+ if (argument === "--dev") {
22
+ if (action !== "add")
23
+ return "--dev is available only for 'velar add'";
24
+ if (dev)
25
+ return "--dev may be provided only once";
26
+ dev = true;
27
+ continue;
28
+ }
29
+ if (argument.startsWith("-"))
30
+ return `unknown option '${argument}'`;
31
+ const parsed = action === "add" ? registryPackageSpecifier(argument) : barePackageName(argument);
32
+ if (typeof parsed === "string")
33
+ return parsed;
34
+ packages.push(argument);
35
+ packageNames.push(parsed.name);
36
+ }
37
+ if (packages.length > MAX_PACKAGE_ARGUMENTS)
38
+ return `a single command cannot change more than ${MAX_PACKAGE_ARGUMENTS} packages`;
39
+ if ((action === "add" || action === "remove") && packages.length === 0)
40
+ return `${action} requires at least one package name`;
41
+ if (new Set(packageNames).size !== packageNames.length)
42
+ return "package names cannot be repeated in one command";
43
+ return { packages: Object.freeze(packages), packageNames: Object.freeze(packageNames), dev };
44
+ }
45
+ export async function runDependencyCommand(action, parsed, options = {}) {
46
+ const project = await locatePackageProject(options.cwd ?? process.cwd());
47
+ await validatePackageManager(project.packagePath);
48
+ const executeNpm = options.executeNpm ?? executeNpmCommand;
49
+ const declaredBefore = extensionNames(project.manifest);
50
+ let extensionGraphBefore = [];
51
+ let removedExtensions = [];
52
+ let stagedRemovalSource = null;
53
+ if (action === "remove") {
54
+ const graph = await resolveExtensionPackages(project.root, declaredBefore);
55
+ extensionGraphBefore = graph;
56
+ const removing = new Set(parsed.packageNames);
57
+ for (const extension of graph) {
58
+ if (removing.has(extension.name))
59
+ continue;
60
+ const removedParent = Object.keys(extension.extends).find((parent) => removing.has(parent));
61
+ if (removedParent) {
62
+ throw new Error(`Cannot remove '${removedParent}'; installed extension '${extension.name}' requires its API ${extension.extends[removedParent]}`);
63
+ }
64
+ }
65
+ await resolveVelarProject(project.root);
66
+ removedExtensions = Object.freeze(declaredBefore.filter((name) => removing.has(name)));
67
+ const removedMetadata = orphanedExtensionMetadata(extensionGraphBefore, declaredBefore, new Set(removedExtensions));
68
+ const next = dependencyManifest(project.manifest, "remove", removedMetadata);
69
+ if (JSON.stringify(next) !== JSON.stringify(project.manifest)) {
70
+ let nextSource;
71
+ try {
72
+ nextSource = jsonSource(next);
73
+ await replaceSourceIfCurrent(project.manifestPath, project.manifestSource, nextSource);
74
+ }
75
+ catch (error) {
76
+ throw new Error(`Dependency was not removed because its project declaration changed before staging: ${hostErrorMessage(error)}`);
77
+ }
78
+ try {
79
+ await resolveVelarProject(project.root);
80
+ }
81
+ catch (error) {
82
+ try {
83
+ await replaceSourceIfCurrent(project.manifestPath, nextSource, project.manifestSource);
84
+ }
85
+ catch (restoreError) {
86
+ throw new Error(`Dependency was not removed because its staged project declaration is invalid: ${hostErrorMessage(error)}; the declaration changed again and was not overwritten: ${hostErrorMessage(restoreError)}`);
87
+ }
88
+ throw new Error(`Dependency was not removed because its staged project declaration is invalid: ${hostErrorMessage(error)}`);
89
+ }
90
+ stagedRemovalSource = nextSource;
91
+ }
92
+ }
93
+ const npmArguments = npmArgumentsFor(action, parsed);
94
+ try {
95
+ await executeNpm(npmArguments, project.root);
96
+ }
97
+ catch (error) {
98
+ if (stagedRemovalSource) {
99
+ try {
100
+ await replaceSourceIfCurrent(project.manifestPath, stagedRemovalSource, project.manifestSource);
101
+ }
102
+ catch (restoreError) {
103
+ throw new Error(`Dependency removal failed: ${hostErrorMessage(error)}; the staged project declaration changed concurrently and was not overwritten: ${hostErrorMessage(restoreError)}`);
104
+ }
105
+ }
106
+ throw error;
107
+ }
108
+ let addedMetadata = [];
109
+ if (action === "add") {
110
+ try {
111
+ const installed = await Promise.all(parsed.packageNames.map((name) => resolveInstalledExtensionPackage(project.root, name)));
112
+ addedMetadata = Object.freeze(installed
113
+ .filter((item) => item !== null)
114
+ .map((item) => ({ name: item.name, manifestKey: item.manifestKey })));
115
+ }
116
+ catch (error) {
117
+ throw new Error(`Dependency was installed but its VelarScript metadata is invalid: ${hostErrorMessage(error)}`);
118
+ }
119
+ }
120
+ const activatedExtensions = addedMetadata.map((item) => item.name).filter((name) => !declaredBefore.includes(name));
121
+ if (action === "add") {
122
+ const next = dependencyManifest(project.manifest, "add", addedMetadata);
123
+ if (JSON.stringify(next) !== JSON.stringify(project.manifest)) {
124
+ let nextSource;
125
+ try {
126
+ nextSource = jsonSource(next);
127
+ await replaceSourceIfCurrent(project.manifestPath, project.manifestSource, nextSource);
128
+ }
129
+ catch (error) {
130
+ throw new Error(`Dependency was installed but its project declaration changed while npm was running and was not overwritten: ${hostErrorMessage(error)}`);
131
+ }
132
+ try {
133
+ await resolveVelarProject(project.root);
134
+ }
135
+ catch (error) {
136
+ try {
137
+ await replaceSourceIfCurrent(project.manifestPath, nextSource, project.manifestSource);
138
+ }
139
+ catch (restoreError) {
140
+ throw new Error(`Dependency was installed but could not be activated: ${hostErrorMessage(error)}; the project declaration changed again and was not overwritten: ${hostErrorMessage(restoreError)}`);
141
+ }
142
+ throw new Error(`Dependency was installed but could not be activated: ${hostErrorMessage(error)}`);
143
+ }
144
+ }
145
+ else {
146
+ await resolveVelarProject(project.root);
147
+ }
148
+ }
149
+ else if (action === "remove") {
150
+ try {
151
+ await resolveVelarProject(project.root);
152
+ }
153
+ catch (error) {
154
+ throw new Error(`Dependency was removed and its project declaration was updated, but the remaining installed extension graph is invalid: ${hostErrorMessage(error)}`);
155
+ }
156
+ }
157
+ else {
158
+ await resolveVelarProject(project.root);
159
+ }
160
+ return {
161
+ action,
162
+ root: project.root,
163
+ packages: parsed.packageNames,
164
+ activatedExtensions: Object.freeze(activatedExtensions),
165
+ removedExtensions: Object.freeze(removedExtensions),
166
+ };
167
+ }
168
+ function orphanedExtensionMetadata(graph, directBefore, removedDirect) {
169
+ const byName = new Map(graph.map((item) => [item.name, item]));
170
+ const retained = new Set();
171
+ const retain = (name) => {
172
+ if (retained.has(name))
173
+ return;
174
+ const package_ = byName.get(name);
175
+ if (!package_)
176
+ return;
177
+ retained.add(name);
178
+ for (const parent of Object.keys(package_.extends))
179
+ retain(parent);
180
+ };
181
+ for (const name of directBefore)
182
+ if (!removedDirect.has(name))
183
+ retain(name);
184
+ return Object.freeze(graph
185
+ .filter((item) => !retained.has(item.name))
186
+ .map((item) => ({ name: item.name, manifestKey: item.manifestKey })));
187
+ }
188
+ function npmArgumentsFor(action, parsed) {
189
+ if (action === "install")
190
+ return ["install"];
191
+ if (action === "add")
192
+ return ["install", parsed.dev ? "--save-dev" : "--save", "--", ...parsed.packages];
193
+ if (action === "remove")
194
+ return ["uninstall", "--", ...parsed.packageNames];
195
+ return ["update", ...(parsed.packageNames.length > 0 ? ["--", ...parsed.packageNames] : [])];
196
+ }
197
+ async function executeNpmCommand(arguments_, cwd) {
198
+ const npmEntry = process.env.npm_execpath;
199
+ const executable = npmEntry ? process.execPath : process.platform === "win32" ? "npm.cmd" : "npm";
200
+ const childArguments = npmEntry ? [npmEntry, ...arguments_] : arguments_;
201
+ await new Promise((resolvePromise, reject) => {
202
+ const child = spawn(executable, childArguments, { cwd, shell: false, stdio: "inherit" });
203
+ child.once("error", (error) => reject(new Error(`Cannot start npm: ${error.message}`)));
204
+ child.once("exit", (code, signal) => {
205
+ if (code === 0)
206
+ resolvePromise();
207
+ else
208
+ reject(new Error(signal ? `npm stopped by signal ${signal}` : `npm exited with status ${String(code)}`));
209
+ });
210
+ });
211
+ }
212
+ async function locatePackageProject(cwd) {
213
+ let current = resolve(cwd);
214
+ while (true) {
215
+ const manifestPath = join(current, "velar.json");
216
+ if (await ordinaryFile(manifestPath)) {
217
+ const packagePath = join(current, "package.json");
218
+ if (!await ordinaryFile(packagePath))
219
+ throw new Error(`${current} contains velar.json but no ordinary package.json`);
220
+ const { source: manifestSource, value: manifest } = await readJsonObject(manifestPath, "VelarScript project manifest");
221
+ if (manifest.formatVersion !== CURRENT_PROJECT_FORMAT_VERSION) {
222
+ throw new Error(`${manifestPath}: package commands require formatVersion ${CURRENT_PROJECT_FORMAT_VERSION}`);
223
+ }
224
+ extensionNames(manifest);
225
+ return { root: current, manifestPath, packagePath, manifestSource, manifest };
226
+ }
227
+ const parent = dirname(current);
228
+ if (parent === current || current === parse(current).root)
229
+ break;
230
+ current = parent;
231
+ }
232
+ throw new Error("velar.json was not found; run package commands inside a VelarScript project");
233
+ }
234
+ async function validatePackageManager(packagePath) {
235
+ const { value } = await readJsonObject(packagePath, "package manifest");
236
+ const packageManager = value.packageManager;
237
+ if (packageManager !== undefined && (typeof packageManager !== "string" || !/^npm@[0-9]+(?:\.[0-9]+){0,2}(?:[-+][0-9A-Za-z.-]+)?$/u.test(packageManager))) {
238
+ throw new Error(`${packagePath}: VelarScript package commands use npm, but packageManager is '${String(packageManager)}'`);
239
+ }
240
+ }
241
+ function dependencyManifest(manifest, action, metadata) {
242
+ const next = structuredClone(manifest);
243
+ const extensions = [...extensionNames(next)];
244
+ if (action === "add") {
245
+ for (const item of metadata)
246
+ if (!extensions.includes(item.name))
247
+ extensions.push(item.name);
248
+ }
249
+ else {
250
+ const removed = new Set(metadata.map((item) => item.name));
251
+ extensions.splice(0, extensions.length, ...extensions.filter((name) => !removed.has(name)));
252
+ for (const item of metadata)
253
+ if (item.manifestKey)
254
+ delete next[item.manifestKey];
255
+ }
256
+ next.extensions = extensions;
257
+ return next;
258
+ }
259
+ function extensionNames(manifest) {
260
+ if (!Array.isArray(manifest.extensions) || manifest.extensions.some((item) => typeof item !== "string" || !PACKAGE_NAME.test(item))) {
261
+ throw new Error("velar.json: 'extensions' must be a list of npm package names");
262
+ }
263
+ if (new Set(manifest.extensions).size !== manifest.extensions.length)
264
+ throw new Error("velar.json: compiler extensions cannot be repeated");
265
+ return manifest.extensions;
266
+ }
267
+ function registryPackageSpecifier(value) {
268
+ if (!value || value.length > 512 || /[\s\0]/u.test(value))
269
+ return `'${value}' is not a supported npm registry package specifier`;
270
+ const scoped = /^(@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*)(?:@(.+))?$/u.exec(value);
271
+ const unscoped = /^([a-z0-9][a-z0-9._-]*)(?:@(.+))?$/u.exec(value);
272
+ const match = scoped ?? unscoped;
273
+ if (!match || !PACKAGE_NAME.test(match[1]))
274
+ return `'${value}' is not a supported npm registry package specifier`;
275
+ return { name: match[1] };
276
+ }
277
+ function barePackageName(value) {
278
+ return PACKAGE_NAME.test(value) ? { name: value } : `'${value}' must be a bare npm package name`;
279
+ }
280
+ async function readJsonObject(path, label) {
281
+ const information = await stat(path);
282
+ if (information.size > MAX_JSON_BYTES)
283
+ throw new RangeError(`${path}: ${label} exceeds 1 MiB`);
284
+ const source = await readFile(path, "utf8");
285
+ if (Buffer.byteLength(source, "utf8") > MAX_JSON_BYTES)
286
+ throw new RangeError(`${path}: ${label} exceeds 1 MiB`);
287
+ let value;
288
+ try {
289
+ value = JSON.parse(source);
290
+ }
291
+ catch (error) {
292
+ throw new Error(`${path}: cannot parse ${label}: ${hostErrorMessage(error)}`);
293
+ }
294
+ if (!value || typeof value !== "object" || Array.isArray(value))
295
+ throw new Error(`${path}: ${label} must be a JSON object`);
296
+ return { source, value: value };
297
+ }
298
+ async function ordinaryFile(path) {
299
+ try {
300
+ const information = await lstat(path);
301
+ if (!information.isFile() || information.isSymbolicLink()) {
302
+ throw new Error(`${path} must be an ordinary file`);
303
+ }
304
+ return true;
305
+ }
306
+ catch (error) {
307
+ if (isHostErrorCode(error, "ENOENT") || isHostErrorCode(error, "ENOTDIR"))
308
+ return false;
309
+ throw error;
310
+ }
311
+ }
312
+ function jsonSource(value) {
313
+ const source = `${JSON.stringify(value, null, 2)}\n`;
314
+ if (Buffer.byteLength(source, "utf8") > MAX_JSON_BYTES) {
315
+ throw new RangeError("serialized project declaration exceeds 1 MiB");
316
+ }
317
+ return source;
318
+ }
319
+ async function replaceSourceIfCurrent(path, expected, source) {
320
+ const information = await stat(path);
321
+ if (!information.isFile() || information.size > MAX_JSON_BYTES) {
322
+ throw new Error(`${path} is no longer the bounded project manifest that this command read`);
323
+ }
324
+ const current = await readFile(path, "utf8");
325
+ if (Buffer.byteLength(current, "utf8") > MAX_JSON_BYTES || current !== expected) {
326
+ throw new Error(`${path} changed while the dependency command was running`);
327
+ }
328
+ await writeSourceAtomically(path, source);
329
+ }
330
+ async function writeSourceAtomically(path, source) {
331
+ if (Buffer.byteLength(source, "utf8") > MAX_JSON_BYTES) {
332
+ throw new RangeError(`${path}: project declaration exceeds 1 MiB`);
333
+ }
334
+ const information = await stat(path);
335
+ const temporary = join(dirname(path), `.velar-${randomUUID()}.json`);
336
+ try {
337
+ await writeFile(temporary, source, { encoding: "utf8", flag: "wx", mode: information.mode });
338
+ await rename(temporary, path);
339
+ }
340
+ catch (error) {
341
+ await rm(temporary, { force: true });
342
+ throw error;
343
+ }
344
+ }
345
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A self-contained Desktop installation rebuilds only the target renderer.
3
+ * Its official tools are immutable versioned inputs, so nested packaging
4
+ * copies them from the Worker-validated application template instead of
5
+ * looking for compiler sources or node_modules outside the package.
6
+ */
7
+ export declare function copyPackagedOfficialTool(outputFile: string, bundledRelativePath: string, mode: number): Promise<boolean>;
8
+ //# sourceMappingURL=packaged-official-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packaged-official-tool.d.ts","sourceRoot":"","sources":["../src/packaged-official-tool.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
@@ -0,0 +1,32 @@
1
+ import { chmod, copyFile, mkdir, realpath, stat } from "node:fs/promises";
2
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
3
+ const desktopPackageTemplateEnvironment = "VELAR_DESKTOP_PACKAGE_TEMPLATE_ROOT";
4
+ /**
5
+ * A self-contained Desktop installation rebuilds only the target renderer.
6
+ * Its official tools are immutable versioned inputs, so nested packaging
7
+ * copies them from the Worker-validated application template instead of
8
+ * looking for compiler sources or node_modules outside the package.
9
+ */
10
+ export async function copyPackagedOfficialTool(outputFile, bundledRelativePath, mode) {
11
+ const value = process.env[desktopPackageTemplateEnvironment];
12
+ if (value === undefined)
13
+ return false;
14
+ if (!isAbsolute(value) || value.length > 4096 || value.includes("\0")) {
15
+ throw new Error(`${desktopPackageTemplateEnvironment} must be a bounded absolute Desktop Resources path`);
16
+ }
17
+ const root = await realpath(value);
18
+ const source = await realpath(join(root, bundledRelativePath));
19
+ const fromRoot = relative(root, source);
20
+ if (fromRoot === "" || fromRoot === ".." || fromRoot.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) || isAbsolute(fromRoot)) {
21
+ throw new Error("Packaged official tool must stay inside the Desktop Resources template");
22
+ }
23
+ const information = await stat(source);
24
+ if (!information.isFile())
25
+ throw new Error("Packaged official tool must be an ordinary file");
26
+ outputFile = resolve(outputFile);
27
+ await mkdir(dirname(outputFile), { recursive: true });
28
+ await copyFile(source, outputFile);
29
+ await chmod(outputFile, mode);
30
+ return true;
31
+ }
32
+ //# sourceMappingURL=packaged-official-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packaged-official-tool.js","sourceRoot":"","sources":["../src/packaged-official-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,iCAAiC,GAAG,qCAAqC,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,UAAkB,EAClB,mBAA2B,EAC3B,IAAY;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,GAAG,iCAAiC,oDAAoD,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1I,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC9F,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type Server } from "node:http";
2
+ import type { VerifiedProductionBuild } from "./production-verifier.ts";
3
+ export interface ProductionPreviewHandle {
4
+ readonly server: Server;
5
+ readonly origin: string;
6
+ readonly url: string;
7
+ close(): Promise<void>;
8
+ }
9
+ export declare function startProductionPreview(build: VerifiedProductionBuild, port: number): Promise<ProductionPreviewHandle>;
10
+ export declare function runProductionPreview(build: VerifiedProductionBuild, port: number): Promise<void>;
11
+ //# sourceMappingURL=preview-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-server.d.ts","sourceRoot":"","sources":["../src/preview-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAKtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGxE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,uBAAuB,CAAC,CAmFlC;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtG"}
@@ -0,0 +1,163 @@
1
+ import { createServer } from "node:http";
2
+ import { createReadStream } from "node:fs";
3
+ import { stat } from "node:fs/promises";
4
+ import { extname, isAbsolute, join, relative, resolve } from "node:path";
5
+ import { pipeline } from "node:stream/promises";
6
+ import { asHostError, hostErrorMessage } from "./host-error.js";
7
+ export async function startProductionPreview(build, port) {
8
+ const server = createServer(async (request, response) => {
9
+ try {
10
+ if (request.method !== "GET" && request.method !== "HEAD") {
11
+ response.setHeader("Allow", "GET, HEAD");
12
+ response.writeHead(405).end("Method not allowed");
13
+ return;
14
+ }
15
+ const encodedPathname = new URL(request.url ?? "/", `http://${request.headers.host ?? "127.0.0.1"}`).pathname;
16
+ let pathname;
17
+ try {
18
+ pathname = decodeURIComponent(encodedPathname);
19
+ }
20
+ catch {
21
+ if (!build.deployment.spaFallback || !encodedPathname.startsWith(build.deployment.base)
22
+ || !isNavigationRequest(request.headers.accept, encodedPathname)) {
23
+ response.writeHead(400).end("Bad path");
24
+ return;
25
+ }
26
+ pathname = encodedPathname;
27
+ }
28
+ const base = build.deployment.base;
29
+ if (!pathname.startsWith(base)) {
30
+ response.writeHead(404).end("Not found");
31
+ return;
32
+ }
33
+ const requestedPath = pathname.slice(base.length) || "index.html";
34
+ let safePath;
35
+ try {
36
+ safePath = confinedPath(build.directory, requestedPath);
37
+ }
38
+ catch {
39
+ response.writeHead(400).end("Bad path");
40
+ return;
41
+ }
42
+ let servedPath = requestedPath;
43
+ let servedFile = safePath;
44
+ let servedSize;
45
+ try {
46
+ const metadata = await stat(safePath);
47
+ if (!metadata.isFile())
48
+ throw new Error("Not a file");
49
+ servedSize = metadata.size;
50
+ }
51
+ catch {
52
+ if (!build.deployment.spaFallback || !isNavigationRequest(request.headers.accept, requestedPath)) {
53
+ response.writeHead(404).end("Not found");
54
+ return;
55
+ }
56
+ servedPath = build.deployment.spaFallback.source;
57
+ servedFile = confinedPath(build.directory, servedPath);
58
+ const metadata = await stat(servedFile);
59
+ if (!metadata.isFile())
60
+ throw new Error("SPA fallback is not a file");
61
+ servedSize = metadata.size;
62
+ }
63
+ for (const rule of build.deployment.headers) {
64
+ if (!matchesPath(rule.path, pathname))
65
+ continue;
66
+ for (const [name, value] of Object.entries(rule.values))
67
+ response.setHeader(name, value);
68
+ }
69
+ const contentType = mimeType(servedPath);
70
+ response.setHeader("Content-Type", contentType);
71
+ response.setHeader("Content-Length", String(servedSize));
72
+ if (!response.hasHeader("Cache-Control") && contentType.startsWith("text/html")) {
73
+ response.setHeader("Cache-Control", build.deployment.caching.documents);
74
+ }
75
+ response.writeHead(200);
76
+ if (request.method === "HEAD")
77
+ response.end();
78
+ else
79
+ await pipeline(createReadStream(servedFile), response);
80
+ }
81
+ catch (error) {
82
+ if (response.headersSent)
83
+ response.destroy(asHostError(error));
84
+ else
85
+ response.writeHead(500).end(hostErrorMessage(error));
86
+ }
87
+ });
88
+ await new Promise((resolvePromise, reject) => {
89
+ server.once("error", reject);
90
+ server.listen(port, "127.0.0.1", resolvePromise);
91
+ });
92
+ const address = server.address();
93
+ if (!address || typeof address === "string")
94
+ throw new Error("Production preview did not bind a TCP port");
95
+ const origin = `http://127.0.0.1:${address.port}`;
96
+ const close = async () => {
97
+ server.closeAllConnections();
98
+ if (!server.listening)
99
+ return;
100
+ await new Promise((resolvePromise, reject) => server.close((error) => error ? reject(error) : resolvePromise()));
101
+ };
102
+ return { server, origin, url: new URL(build.deployment.base, origin).href, close };
103
+ }
104
+ export async function runProductionPreview(build, port) {
105
+ const preview = await startProductionPreview(build, port);
106
+ process.stdout.write(`VelarScript production preview: ${preview.url}\n`);
107
+ process.stdout.write(`Verified build: ${build.manifest.buildId}\n`);
108
+ await new Promise((resolvePromise) => {
109
+ let settled = false;
110
+ const stop = () => {
111
+ if (settled)
112
+ return;
113
+ settled = true;
114
+ process.off("SIGINT", stop);
115
+ process.off("SIGTERM", stop);
116
+ resolvePromise();
117
+ };
118
+ process.on("SIGINT", stop);
119
+ process.on("SIGTERM", stop);
120
+ });
121
+ await preview.close();
122
+ }
123
+ function confinedPath(root, value) {
124
+ if (!value || isAbsolute(value) || value.includes("\\"))
125
+ throw new Error("Bad path");
126
+ const target = resolve(root, value);
127
+ const pathFromRoot = relative(root, target);
128
+ if (pathFromRoot === ".." || pathFromRoot.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) || isAbsolute(pathFromRoot)) {
129
+ throw new Error("Bad path");
130
+ }
131
+ return target;
132
+ }
133
+ function isNavigationRequest(accept, path) {
134
+ if (!accept?.toLowerCase().includes("text/html"))
135
+ return false;
136
+ const extension = extname(path);
137
+ return extension === "" || path.endsWith("/") || extension === ".html";
138
+ }
139
+ function matchesPath(pattern, pathname) {
140
+ return pattern.endsWith("*") ? pathname.startsWith(pattern.slice(0, -1)) : pathname === pattern;
141
+ }
142
+ function mimeType(path) {
143
+ switch (extname(path).toLowerCase()) {
144
+ case ".css": return "text/css; charset=utf-8";
145
+ case ".html": return "text/html; charset=utf-8";
146
+ case ".js":
147
+ case ".mjs": return "text/javascript; charset=utf-8";
148
+ case ".json":
149
+ case ".map": return "application/json; charset=utf-8";
150
+ case ".svg": return "image/svg+xml";
151
+ case ".txt": return "text/plain; charset=utf-8";
152
+ case ".png": return "image/png";
153
+ case ".jpg":
154
+ case ".jpeg": return "image/jpeg";
155
+ case ".webp": return "image/webp";
156
+ case ".gif": return "image/gif";
157
+ case ".ico": return "image/x-icon";
158
+ case ".woff": return "font/woff";
159
+ case ".woff2": return "font/woff2";
160
+ default: return "application/octet-stream";
161
+ }
162
+ }
163
+ //# sourceMappingURL=preview-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-server.js","sourceRoot":"","sources":["../src/preview-server.ts"],"names":[],"mappings":"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"}