@athrio/loom 0.0.12 → 0.0.14
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/dist/{LanguageLoader-BzlRnQhO.js → LanguageLoader-BAPSmTv0.js} +19 -11
- package/dist/{LanguageLoader-BzlRnQhO.js.map → LanguageLoader-BAPSmTv0.js.map} +1 -1
- package/dist/LanguageLoader-BF5irHbe.js +3 -0
- package/dist/{LanguageService-BTCvgdWm.js → LanguageService-C3_9lh8E.js} +2 -2
- package/dist/{LanguageService-BTCvgdWm.js.map → LanguageService-C3_9lh8E.js.map} +1 -1
- package/dist/{LoomFormatter-Bu8L8cdR.js → LoomFormatter-CcAXsbSL.js} +13 -5
- package/dist/{LoomFormatter-Bu8L8cdR.js.map → LoomFormatter-CcAXsbSL.js.map} +1 -1
- package/dist/{LoomServer-DXIree_1.js → LoomServer-DpleSkxj.js} +28 -12
- package/dist/{LoomServer-DXIree_1.js.map → LoomServer-DpleSkxj.js.map} +1 -1
- package/dist/{LoomStore-pA-ohGNX.js → LoomStore-Bcx6V9HH.js} +106 -22
- package/dist/LoomStore-Bcx6V9HH.js.map +1 -0
- package/dist/{Runtime-XT-nb-2w.js → Runtime-B-1DeuX_.js} +1 -1
- package/dist/{Runtime-Byw6clui.js → Runtime-CE2kCsKX.js} +3 -3
- package/dist/{Runtime-Byw6clui.js.map → Runtime-CE2kCsKX.js.map} +1 -1
- package/dist/_virtual_tree-sitter-loom-CFLf84Ng.js +15 -0
- package/dist/{dist-D3YSXNOO.js → dist-NXZtp5_0.js} +2 -2
- package/dist/{dist-D3YSXNOO.js.map → dist-NXZtp5_0.js.map} +1 -1
- package/dist/main.js +375 -52
- package/dist/main.js.map +1 -1
- package/package.json +3 -1
- package/dist/LanguageLoader-DJZBFaqF.js +0 -3
- package/dist/LoomStore-pA-ohGNX.js.map +0 -1
- package/dist/tree-sitter-loom/editors/helix/queries/loom/highlights.scm +0 -120
- package/dist/tree-sitter-loom/editors/helix/queries/loom/injections.scm +0 -413
- package/dist/tree-sitter-loom/queries/highlights.scm +0 -120
- package/dist/tree-sitter-loom/queries/injections.scm +0 -85
- package/dist/tree-sitter-loom/src/parser.c +0 -4689
- package/dist/tree-sitter-loom/src/scanner.c +0 -293
- package/dist/tree-sitter-loom/src/tree_sitter/alloc.h +0 -54
- package/dist/tree-sitter-loom/src/tree_sitter/array.h +0 -330
- package/dist/tree-sitter-loom/src/tree_sitter/parser.h +0 -286
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { An as forEach, Bi as getOrElse, Bt as Struct, Gt as Unknown, Hn as mapError, Ii as flatMap$1, Ji as match, Ki as liftThrowable, Kr as findFirst, Kt as decodeUnknownEffect, Ni as contains, Nr as TaggedError, On as flatMap$2, Pn as gen, Pr as taggedEnum, Pt as Literals, Qi as toArray, Qt as optional, Ri as fromNullishOr, Rt as Record, Tn as fail, Xr as flatMap, Yi as none, Zi as some, _ as orElse, ar as sync, b as when, cr as tryPromise, g as exhaustive, lr as try_, qi as map$1, qt as decodeUnknownOption, rr as succeed, ui as map, y as value, ya as pipe, zt as String$1 } from "./dist-NXZtp5_0.js";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
|
-
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
|
+
import { gunzipSync } from "node:zlib";
|
|
6
7
|
import { promisify } from "node:util";
|
|
7
8
|
Literals([
|
|
8
9
|
"headingTitle",
|
|
@@ -109,15 +110,26 @@ var symbolAt = (doc, offset) => findFirst(symbolsOf(doc), (symbol) => symbol.pos
|
|
|
109
110
|
//#region ../loom-lang-services/src/LoomStore.ts
|
|
110
111
|
var run = promisify(execFile);
|
|
111
112
|
var servicePackage = (id) => `@athrio/loom-service-${id}`;
|
|
113
|
+
var isWorkspace = (dir) => existsSync(join(dir, ".loom", "config.yaml"));
|
|
112
114
|
var workspaceOf = (dir) => {
|
|
113
|
-
if (
|
|
115
|
+
if (isWorkspace(dir)) return some(dir);
|
|
114
116
|
const parent = dirname(dir);
|
|
115
117
|
return parent === dir ? none() : workspaceOf(parent);
|
|
116
118
|
};
|
|
117
119
|
var workspaceRoot = (dir) => getOrElse(workspaceOf(dir), () => dir);
|
|
118
120
|
var storeDir = (dir) => process.env.LOOM_HOME === void 0 ? join(workspaceRoot(dir), ".loom", "services") : join(process.env.LOOM_HOME, "services");
|
|
119
|
-
var
|
|
120
|
-
|
|
121
|
+
var ServiceManifestSchema = Struct({
|
|
122
|
+
version: optional(String$1),
|
|
123
|
+
main: optional(String$1),
|
|
124
|
+
exports: optional(Unknown)
|
|
125
|
+
});
|
|
126
|
+
var serviceDir = (id, dir) => join(storeDir(dir), "node_modules", servicePackage(id));
|
|
127
|
+
var serviceManifest = (id, dir) => pipe(liftThrowable(() => readFileSync(join(serviceDir(id, dir), "package.json"), "utf8"))(), flatMap$1(liftThrowable((text) => JSON.parse(text))), flatMap$1(decodeUnknownOption(ServiceManifestSchema)));
|
|
128
|
+
var serviceVersion = "0.0.14";
|
|
129
|
+
var installedVersion = (id, dir) => flatMap$1(serviceManifest(id, dir), (manifest) => fromNullishOr(manifest.version));
|
|
130
|
+
var embeddedFiles = globalThis.Bun?.embeddedFiles ?? [];
|
|
131
|
+
var embeddedFile = (name) => findFirst(embeddedFiles, (file) => file.name === name);
|
|
132
|
+
var standalone = embeddedFiles.length > 0 || /(\$|%24)bunfs|(~|%7E)BUN/i.test(String(import.meta.url));
|
|
121
133
|
var StoreError = class extends TaggedError("StoreError") {};
|
|
122
134
|
var prepareStore = (store) => {
|
|
123
135
|
mkdirSync(store, { recursive: true });
|
|
@@ -127,37 +139,109 @@ var prepareStore = (store) => {
|
|
|
127
139
|
private: true
|
|
128
140
|
}, null, 2)}\n`);
|
|
129
141
|
};
|
|
130
|
-
var
|
|
131
|
-
|
|
142
|
+
var packageManager = (store, spec) => standalone ? {
|
|
143
|
+
command: process.execPath,
|
|
144
|
+
args: [
|
|
145
|
+
"add",
|
|
146
|
+
spec,
|
|
147
|
+
"--cwd",
|
|
148
|
+
store,
|
|
149
|
+
"--omit",
|
|
150
|
+
"peer"
|
|
151
|
+
],
|
|
152
|
+
env: {
|
|
153
|
+
...process.env,
|
|
154
|
+
BUN_BE_BUN: "1"
|
|
155
|
+
}
|
|
156
|
+
} : {
|
|
157
|
+
command: "npm",
|
|
158
|
+
args: [
|
|
159
|
+
"install",
|
|
160
|
+
spec,
|
|
161
|
+
"--prefix",
|
|
162
|
+
store,
|
|
163
|
+
"--omit=peer",
|
|
164
|
+
"--no-audit",
|
|
165
|
+
"--no-fund"
|
|
166
|
+
],
|
|
167
|
+
env: process.env
|
|
168
|
+
};
|
|
169
|
+
var installPackage = (dir, packageName, range) => gen(function* () {
|
|
132
170
|
const store = storeDir(dir);
|
|
133
|
-
const installed = installedVersion(id, dir);
|
|
134
|
-
if (contains(installed, "0.0.12")) return ServiceInstall.Current();
|
|
135
171
|
yield* sync(() => prepareStore(store));
|
|
172
|
+
const manager = packageManager(store, `${packageName}@${range}`);
|
|
136
173
|
yield* tryPromise({
|
|
137
|
-
try: () => run(
|
|
138
|
-
"install",
|
|
139
|
-
`${servicePackage(id)}@${serviceVersion}`,
|
|
140
|
-
"--prefix",
|
|
141
|
-
store,
|
|
142
|
-
"--omit=peer",
|
|
143
|
-
"--no-audit",
|
|
144
|
-
"--no-fund"
|
|
145
|
-
]),
|
|
174
|
+
try: () => run(manager.command, [...manager.args], { env: manager.env }),
|
|
146
175
|
catch: (cause) => new StoreError({
|
|
147
|
-
|
|
176
|
+
packageName,
|
|
148
177
|
cause
|
|
149
178
|
})
|
|
150
179
|
});
|
|
180
|
+
});
|
|
181
|
+
var ServiceInstall = taggedEnum();
|
|
182
|
+
var installService = (id, dir) => gen(function* () {
|
|
183
|
+
const installed = installedVersion(id, dir);
|
|
184
|
+
if (contains(installed, "0.0.14")) return ServiceInstall.Current();
|
|
185
|
+
yield* installPackage(dir, servicePackage(id), serviceVersion);
|
|
151
186
|
return match(installed, {
|
|
152
187
|
onNone: () => ServiceInstall.Installed(),
|
|
153
188
|
onSome: (from) => ServiceInstall.Updated({ from })
|
|
154
189
|
});
|
|
155
190
|
});
|
|
156
|
-
var
|
|
191
|
+
var storeTypeScript = (dir) => {
|
|
192
|
+
const file = join(storeDir(dir), "node_modules", "typescript", "lib", "typescript.js");
|
|
193
|
+
return existsSync(file) ? some(file) : none();
|
|
194
|
+
};
|
|
195
|
+
var typeScriptAsset = "typescript.json.gz";
|
|
196
|
+
var PackedTypeScriptSchema = Struct({ files: Record(String$1, String$1) });
|
|
197
|
+
var typeScriptError = (cause) => new StoreError({
|
|
198
|
+
packageName: "typescript",
|
|
199
|
+
cause
|
|
200
|
+
});
|
|
201
|
+
var unpackTypeScript = (dir, packed) => gen(function* () {
|
|
202
|
+
const archive = yield* tryPromise({
|
|
203
|
+
try: async () => new Uint8Array(await packed.arrayBuffer()),
|
|
204
|
+
catch: typeScriptError
|
|
205
|
+
});
|
|
206
|
+
const json = yield* try_({
|
|
207
|
+
try: () => JSON.parse(gunzipSync(archive).toString("utf8")),
|
|
208
|
+
catch: typeScriptError
|
|
209
|
+
});
|
|
210
|
+
const { files } = yield* decodeUnknownEffect(PackedTypeScriptSchema)(json).pipe(mapError(typeScriptError));
|
|
211
|
+
const store = storeDir(dir);
|
|
212
|
+
const modules = join(store, "node_modules");
|
|
213
|
+
const partial = join(modules, `.typescript-${process.pid}`);
|
|
214
|
+
yield* sync(() => prepareStore(store));
|
|
215
|
+
yield* forEach(Object.entries(files), ([path, text]) => try_({
|
|
216
|
+
try: () => {
|
|
217
|
+
mkdirSync(dirname(join(partial, path)), { recursive: true });
|
|
218
|
+
writeFileSync(join(partial, path), text);
|
|
219
|
+
},
|
|
220
|
+
catch: typeScriptError
|
|
221
|
+
}), { discard: true });
|
|
222
|
+
yield* try_({
|
|
223
|
+
try: () => {
|
|
224
|
+
rmSync(join(modules, "typescript"), {
|
|
225
|
+
recursive: true,
|
|
226
|
+
force: true
|
|
227
|
+
});
|
|
228
|
+
renameSync(partial, join(modules, "typescript"));
|
|
229
|
+
},
|
|
230
|
+
catch: typeScriptError
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
var installTypeScript = (dir) => match(embeddedFile(typeScriptAsset), {
|
|
234
|
+
onSome: (packed) => unpackTypeScript(dir, packed),
|
|
235
|
+
onNone: () => installPackage(dir, "typescript", "^6")
|
|
236
|
+
}).pipe(flatMap$2(() => match(storeTypeScript(dir), {
|
|
237
|
+
onNone: () => fail(typeScriptError("the store holds no lib/typescript.js")),
|
|
238
|
+
onSome: succeed
|
|
239
|
+
})));
|
|
240
|
+
var removeService = (id, dir) => sync(() => rmSync(serviceDir(id, dir), {
|
|
157
241
|
recursive: true,
|
|
158
242
|
force: true
|
|
159
243
|
}));
|
|
160
244
|
//#endregion
|
|
161
|
-
export {
|
|
245
|
+
export { SemanticTokenSchema as _, installedVersion as a, symbolsOf as b, serviceDir as c, serviceVersion as d, standalone as f, workspaceRoot as g, workspaceOf as h, installTypeScript as i, serviceManifest as l, storeTypeScript as m, embeddedFile as n, isWorkspace as o, storeDir as p, installService as r, removeService as s, ServiceInstall as t, servicePackage as u, profileOf as v, symbolAt as y };
|
|
162
246
|
|
|
163
|
-
//# sourceMappingURL=LoomStore-
|
|
247
|
+
//# sourceMappingURL=LoomStore-Bcx6V9HH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoomStore-Bcx6V9HH.js","names":[],"sources":["../../loom-ast/src/ast/LoomSymbol.ts","../../loom-lang-services/src/LoomStore.ts"],"sourcesContent":["import { Array, Match, Option, Schema } from 'effect'\nimport { type Position } from '#ast/LoomNode'\nimport {\n type LoomDocument,\n type LoomFrontmatter,\n type LoomHeading,\n type LoomSection,\n} from '#ast/LoomAst'\nimport { type SectionBodyWeft, type TocWeft } from '#ast/Weft'\nimport { type WarpAnchorToken, type WarpToken } from '#ast/LoomTokens'\n\nexport const SymbolKindSchema = Schema.Literals([\n 'headingTitle',\n 'sectionAnchor',\n 'warpAnchor',\n 'warpDef',\n 'specifier',\n 'sink',\n 'arrow',\n 'tilde',\n 'prose',\n 'frontmatterMembership',\n 'frontmatterValue',\n 'frontmatterTitle',\n 'frontmatterPart',\n 'frontmatterPartName',\n 'tocPart',\n 'tocEntry',\n])\nexport type SymbolKind = typeof SymbolKindSchema.Type\n\nexport interface SpanFeatures {\n readonly navigation?: boolean\n readonly semantic?: boolean\n readonly structure?: boolean\n readonly verification?: boolean\n readonly completion?: boolean\n}\n\nexport const SemanticTokenSchema = Schema.Literals([\n 'namespace',\n 'variable',\n 'keyword',\n 'string',\n 'operator',\n])\nexport type SemanticToken = typeof SemanticTokenSchema.Type\n\nexport interface SymbolProfile {\n readonly semantic: Option.Option<SemanticToken>\n readonly features: SpanFeatures\n}\n\nconst profile = (\n semantic: Option.Option<SemanticToken>,\n features: SpanFeatures,\n): SymbolProfile => ({ semantic, features })\n\nexport const profileOf = (kind: SymbolKind): SymbolProfile =>\n Match.value(kind).pipe(\n Match.when('headingTitle', () =>\n profile(Option.some('namespace'), { navigation: true, structure: true }),\n ),\n Match.when('sectionAnchor', () =>\n profile(Option.some('namespace'), {\n navigation: true,\n structure: true,\n verification: true,\n }),\n ),\n Match.when('warpAnchor', () =>\n profile(Option.some('variable'), { navigation: true, verification: true }),\n ),\n Match.when('warpDef', () => profile(Option.some('variable'), { navigation: true })),\n Match.when('specifier', () => profile(Option.some('keyword'), { verification: true })),\n Match.when('sink', () => profile(Option.some('string'), { verification: true })),\n Match.when('arrow', () => profile(Option.some('operator'), {})),\n Match.when('tilde', () => profile(Option.some('operator'), {})),\n Match.when('prose', () => profile(Option.none(), { structure: true })),\n Match.when('frontmatterMembership', () =>\n profile(Option.some('namespace'), { structure: true }),\n ),\n Match.when('frontmatterValue', () => profile(Option.some('string'), { structure: true })),\n Match.when('frontmatterTitle', () =>\n profile(Option.some('namespace'), { navigation: true, structure: true }),\n ),\n Match.when('frontmatterPart', () =>\n profile(Option.some('namespace'), { navigation: true, structure: true }),\n ),\n Match.when('frontmatterPartName', () =>\n profile(Option.some('namespace'), { navigation: true, structure: true }),\n ),\n Match.when('tocPart', () =>\n profile(Option.some('namespace'), { navigation: true, structure: true }),\n ),\n Match.when('tocEntry', () =>\n profile(Option.some('namespace'), {\n navigation: true,\n structure: true,\n verification: true,\n }),\n ),\n Match.exhaustive,\n )\n\nexport interface Symbol {\n readonly kind: SymbolKind\n readonly position: Position\n}\n\nconst anchorKind = (warpsInScope: ReadonlySet<string>, anchor: WarpAnchorToken): SymbolKind =>\n warpsInScope.has(anchor.name.value) ? 'warpAnchor' : 'sectionAnchor'\n\nconst namesOf = (warps: ReadonlyArray<WarpToken>): ReadonlyArray<string> =>\n Array.map(warps, (warp) => warp.name.value)\n\nconst at = (kind: SymbolKind, position: Position): Symbol => ({ kind, position })\n\nconst optSymbol = (\n kind: SymbolKind,\n token: { readonly position: Position } | undefined,\n): ReadonlyArray<Symbol> =>\n Option.toArray(Option.map(Option.fromNullishOr(token), (t) => at(kind, t.position)))\n\nconst frontmatterSymbols = (fm: LoomFrontmatter): ReadonlyArray<Symbol> => [\n ...optSymbol('frontmatterPart', fm.part),\n ...optSymbol('frontmatterPartName', fm.partName),\n ...optSymbol('frontmatterMembership', fm.chapter),\n ...optSymbol('frontmatterTitle', fm.title),\n ...optSymbol('frontmatterValue', fm.package),\n ...optSymbol('frontmatterValue', fm.language),\n]\n\nconst tocSymbols = (weft: TocWeft): ReadonlyArray<Symbol> => [\n ...optSymbol('tocPart', weft.part),\n ...optSymbol('tocEntry', weft.title),\n]\n\nconst headingSymbols = (heading: LoomHeading): ReadonlyArray<Symbol> => [\n ...Option.toArray(\n Option.map(Option.fromNullishOr(heading.title), (t) => at('headingTitle', t.position)),\n ),\n ...Option.toArray(\n Option.map(Option.fromNullishOr(heading.specifier), (s) => at('specifier', s.label.position)),\n ),\n ...Option.toArray(Option.map(Option.fromNullishOr(heading.sink), (s) => at('sink', s.position))),\n]\n\nconst delimiterOf = (weft: SectionBodyWeft): ReadonlyArray<Symbol> =>\n Match.value(weft).pipe(\n Match.when({ type: 'ArrowWeft' }, (w) => [at('arrow', w.arrow.position)]),\n Match.when({ type: 'TildeWeft' }, (w) => [at('tilde', w.tilde.position)]),\n Match.orElse(() => []),\n )\n\nconst sectionSymbols = (\n section: LoomSection,\n documentWarps: ReadonlyArray<string>,\n): ReadonlyArray<Symbol> => {\n const warps = Array.flatMap(section.preamble, (weft) => weft.warps)\n const scope = new Set([...documentWarps, ...namesOf(warps)])\n const anchors = [\n ...Array.flatMap(section.preamble, (weft) => weft.anchors),\n ...Array.flatMap(section.code, (weft) => weft.anchors),\n ]\n return [\n ...headingSymbols(section.heading),\n ...Array.map(warps, (warp) => at('warpDef', warp.name.position)),\n ...Array.map(anchors, (anchor) => at(anchorKind(scope, anchor), anchor.name.position)),\n ...Array.flatMap(section.code, delimiterOf),\n ...Array.flatMap(section.entries ?? [], tocSymbols),\n ]\n}\n\nexport const symbolsOf = (doc: LoomDocument): ReadonlyArray<Symbol> => {\n const warps = Array.flatMap(doc.preamble, (weft) => weft.warps)\n const scope = new Set(namesOf(warps))\n return [\n ...Array.flatMap(Option.toArray(Option.fromNullishOr(doc.frontmatter)), frontmatterSymbols),\n ...Array.map(warps, (warp) => at('warpDef', warp.name.position)),\n ...Array.map(\n Array.flatMap(doc.preamble, (weft) => weft.anchors),\n (anchor) => at(anchorKind(scope, anchor), anchor.name.position),\n ),\n ...Array.flatMap(doc.sections, (section) => sectionSymbols(section, namesOf(warps))),\n ]\n}\n\nexport const symbolAt = (doc: LoomDocument, offset: number): Option.Option<Symbol> =>\n Array.findFirst(\n symbolsOf(doc),\n (symbol) => symbol.position.start.offset <= offset && offset <= symbol.position.end.offset,\n )\n","import { Array, Data, Effect, Option, Schema, pipe } from 'effect'\nimport { execFile } from 'node:child_process'\nimport {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { promisify } from 'node:util'\nimport { gunzipSync } from 'node:zlib'\n\nconst run = promisify(execFile)\n\nexport const servicePackage = (id: string): string => `@athrio/loom-service-${id}`\n\nexport const isWorkspace = (dir: string): boolean => existsSync(join(dir, '.loom', 'config.yaml'))\n\nexport const workspaceOf = (dir: string): Option.Option<string> => {\n if (isWorkspace(dir)) return Option.some(dir)\n const parent = dirname(dir)\n return parent === dir ? Option.none() : workspaceOf(parent)\n}\n\nexport const workspaceRoot = (dir: string): string => Option.getOrElse(workspaceOf(dir), () => dir)\n\nexport const storeDir = (dir: string): string =>\n process.env.LOOM_HOME === undefined\n ? join(workspaceRoot(dir), '.loom', 'services')\n : join(process.env.LOOM_HOME, 'services')\n\nconst servicePrefix = 'loom-service-'\n\nexport const installedServices = (dir: string): Effect.Effect<ReadonlyArray<string>> =>\n Effect.sync(() => {\n const scope = join(storeDir(dir), 'node_modules', '@athrio')\n if (!existsSync(scope)) return []\n return readdirSync(scope)\n .filter((name) => name.startsWith(servicePrefix))\n .map((name) => name.slice(servicePrefix.length))\n })\n\nexport const ServiceManifestSchema = Schema.Struct({\n version: Schema.optional(Schema.String),\n main: Schema.optional(Schema.String),\n exports: Schema.optional(Schema.Unknown),\n})\n\nexport type ServiceManifest = typeof ServiceManifestSchema.Type\n\nexport const serviceDir = (id: string, dir: string): string =>\n join(storeDir(dir), 'node_modules', servicePackage(id))\n\nexport const serviceManifest = (id: string, dir: string): Option.Option<ServiceManifest> =>\n pipe(\n Option.liftThrowable(() => readFileSync(join(serviceDir(id, dir), 'package.json'), 'utf8'))(),\n Option.flatMap(Option.liftThrowable((text: string): unknown => JSON.parse(text))),\n Option.flatMap(Schema.decodeUnknownOption(ServiceManifestSchema)),\n )\n\nexport const serviceVersion = '0.0.14'\n\nexport const installedVersion = (id: string, dir: string): Option.Option<string> =>\n Option.flatMap(serviceManifest(id, dir), (manifest) => Option.fromNullishOr(manifest.version))\n\ninterface EmbeddedFile extends Blob {\n readonly name?: string\n}\n\nconst embeddedFiles: ReadonlyArray<EmbeddedFile> =\n (globalThis as { readonly Bun?: { readonly embeddedFiles?: ReadonlyArray<EmbeddedFile> } }).Bun\n ?.embeddedFiles ?? []\n\nexport const embeddedFile = (name: string): Option.Option<EmbeddedFile> =>\n Array.findFirst(embeddedFiles, (file) => file.name === name)\n\nexport const standalone: boolean =\n embeddedFiles.length > 0 || /(\\$|%24)bunfs|(~|%7E)BUN/i.test(String(import.meta.url))\n\nexport class StoreError extends Data.TaggedError('StoreError')<{\n readonly packageName: string\n readonly cause: unknown\n}> {}\n\nconst prepareStore = (store: string): void => {\n mkdirSync(store, { recursive: true })\n const manifest = join(store, 'package.json')\n if (!existsSync(manifest))\n writeFileSync(\n manifest,\n `${JSON.stringify({ name: 'loom-services', private: true }, null, 2)}\\n`,\n )\n}\n\ninterface PackageManager {\n readonly command: string\n readonly args: ReadonlyArray<string>\n readonly env: NodeJS.ProcessEnv\n}\n\nconst packageManager = (store: string, spec: string): PackageManager =>\n standalone\n ? {\n command: process.execPath,\n args: ['add', spec, '--cwd', store, '--omit', 'peer'],\n env: { ...process.env, BUN_BE_BUN: '1' },\n }\n : {\n command: 'npm',\n args: ['install', spec, '--prefix', store, '--omit=peer', '--no-audit', '--no-fund'],\n env: process.env,\n }\n\nconst installPackage = (\n dir: string,\n packageName: string,\n range: string,\n): Effect.Effect<void, StoreError> =>\n Effect.gen(function* () {\n const store = storeDir(dir)\n yield* Effect.sync(() => prepareStore(store))\n const manager = packageManager(store, `${packageName}@${range}`)\n yield* Effect.tryPromise({\n try: () => run(manager.command, [...manager.args], { env: manager.env }),\n catch: (cause) => new StoreError({ packageName, cause }),\n })\n })\n\nexport type ServiceInstall = Data.TaggedEnum<{\n Current: {}\n Installed: {}\n Updated: { readonly from: string }\n}>\nexport const ServiceInstall = Data.taggedEnum<ServiceInstall>()\n\nexport const installService = (id: string, dir: string): Effect.Effect<ServiceInstall, StoreError> =>\n Effect.gen(function* () {\n const installed = installedVersion(id, dir)\n if (Option.contains(installed, serviceVersion)) return ServiceInstall.Current()\n yield* installPackage(dir, servicePackage(id), serviceVersion)\n return Option.match(installed, {\n onNone: () => ServiceInstall.Installed(),\n onSome: (from) => ServiceInstall.Updated({ from }),\n })\n })\n\nexport const typeScriptRange = '^6'\n\nexport const storeTypeScript = (dir: string): Option.Option<string> => {\n const file = join(storeDir(dir), 'node_modules', 'typescript', 'lib', 'typescript.js')\n return existsSync(file) ? Option.some(file) : Option.none()\n}\n\nconst typeScriptAsset = 'typescript.json.gz'\n\nconst PackedTypeScriptSchema = Schema.Struct({\n files: Schema.Record(Schema.String, Schema.String),\n})\n\nconst typeScriptError = (cause: unknown): StoreError =>\n new StoreError({ packageName: 'typescript', cause })\n\nconst unpackTypeScript = (dir: string, packed: Blob): Effect.Effect<void, StoreError> =>\n Effect.gen(function* () {\n const archive = yield* Effect.tryPromise({\n try: async () => new Uint8Array(await packed.arrayBuffer()),\n catch: typeScriptError,\n })\n const json = yield* Effect.try({\n try: (): unknown => JSON.parse(gunzipSync(archive).toString('utf8')),\n catch: typeScriptError,\n })\n const { files } = yield* Schema.decodeUnknownEffect(PackedTypeScriptSchema)(json).pipe(\n Effect.mapError(typeScriptError),\n )\n const store = storeDir(dir)\n const modules = join(store, 'node_modules')\n const partial = join(modules, `.typescript-${process.pid}`)\n yield* Effect.sync(() => prepareStore(store))\n yield* Effect.forEach(\n Object.entries(files),\n ([path, text]) =>\n Effect.try({\n try: () => {\n mkdirSync(dirname(join(partial, path)), { recursive: true })\n writeFileSync(join(partial, path), text)\n },\n catch: typeScriptError,\n }),\n { discard: true },\n )\n yield* Effect.try({\n try: () => {\n rmSync(join(modules, 'typescript'), { recursive: true, force: true })\n renameSync(partial, join(modules, 'typescript'))\n },\n catch: typeScriptError,\n })\n })\n\nexport const installTypeScript = (dir: string): Effect.Effect<string, StoreError> =>\n Option.match(embeddedFile(typeScriptAsset), {\n onSome: (packed) => unpackTypeScript(dir, packed),\n onNone: () => installPackage(dir, 'typescript', typeScriptRange),\n }).pipe(\n Effect.flatMap(() =>\n Option.match(storeTypeScript(dir), {\n onNone: () => Effect.fail(typeScriptError('the store holds no lib/typescript.js')),\n onSome: Effect.succeed,\n }),\n ),\n )\n\nexport const removeService = (id: string, dir: string): Effect.Effect<void> =>\n Effect.sync(() => rmSync(serviceDir(id, dir), { recursive: true, force: true }))\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { i as runtimeVersion, n as runtimeKey, r as runtimeSpecifiers, t as installHostRuntime } from "./Runtime-
|
|
2
|
+
import { i as runtimeVersion, n as runtimeKey, r as runtimeSpecifiers, t as installHostRuntime } from "./Runtime-CE2kCsKX.js";
|
|
3
3
|
export { installHostRuntime, runtimeKey, runtimeSpecifiers, runtimeVersion };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as dist_exports } from "./dist-
|
|
3
|
-
import { r as LanguageService_exports } from "./LanguageService-
|
|
2
|
+
import { t as dist_exports } from "./dist-NXZtp5_0.js";
|
|
3
|
+
import { r as LanguageService_exports } from "./LanguageService-C3_9lh8E.js";
|
|
4
4
|
//#region ../loom-lang-services/src/Runtime.ts
|
|
5
5
|
var runtimeKey = "__loomRuntime";
|
|
6
6
|
var runtimeVersion = "1";
|
|
@@ -22,4 +22,4 @@ var installHostRuntime = (tsdk) => {
|
|
|
22
22
|
//#endregion
|
|
23
23
|
export { runtimeVersion as i, runtimeKey as n, runtimeSpecifiers as r, installHostRuntime as t };
|
|
24
24
|
|
|
25
|
-
//# sourceMappingURL=Runtime-
|
|
25
|
+
//# sourceMappingURL=Runtime-CE2kCsKX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Runtime-
|
|
1
|
+
{"version":3,"file":"Runtime-CE2kCsKX.js","names":[],"sources":["../../loom-lang-services/src/Runtime.ts"],"sourcesContent":["export const runtimeKey = '__loomRuntime'\n\nexport const runtimeVersion = '1'\n\nexport const runtimeSpecifiers: ReadonlyArray<string> = [\n 'effect',\n '@athrio/loom-lang-services/LanguageService',\n 'typescript',\n]\n\nimport * as EffectNS from 'effect'\nimport * as LanguageServiceNS from './LanguageService'\n\ninterface HostRuntime {\n readonly version: string\n readonly modules: Record<string, unknown>\n}\n\nexport const installHostRuntime = (tsdk: typeof import('typescript')): void => {\n ;(globalThis as Record<string, unknown>)[runtimeKey] = {\n version: runtimeVersion,\n modules: {\n effect: EffectNS,\n '@athrio/loom-lang-services/LanguageService': LanguageServiceNS,\n typescript: tsdk,\n },\n } satisfies HostRuntime\n}\n"],"mappings":";;;;AAAA,IAAa,aAAa;AAE1B,IAAa,iBAAiB;AAE9B,IAAa,oBAA2C;CACtD;CACA;CACA;AACF;AAUA,IAAa,sBAAsB,SAA4C;CAC5E,WAAwC,cAAc;EACrD,SAAA;EACA,SAAS;GACP,QAAQ;GACR,8CAA8C;GAC9C,YAAY;EACd;CACF;AACF"}
|