Fix root hashing due to missing root dirs

This commit is contained in:
Misode
2024-11-21 01:30:42 +01:00
parent 4bc6e758da
commit 5cfd17a107
4 changed files with 9 additions and 6 deletions

View File

@@ -33,9 +33,10 @@ export function ProjectCreation() {
} }
} }
const onCreate = useCallback(() => { const onCreate = useCallback(async () => {
setCreating(true) setCreating(true)
const rootUri = `${PROJECTS_URI}${hexId()}/` const rootUri = `${PROJECTS_URI}${hexId()}/`
await client.fs.mkdir(rootUri)
createProject({ name, namespace, version, storage: { type: 'indexeddb', rootUri } }) createProject({ name, namespace, version, storage: { type: 'indexeddb', rootUri } })
changeProject(name) changeProject(name)
if (file) { if (file) {

View File

@@ -32,7 +32,7 @@ export function ProjectPanel() {
} }
service.watchTree(projectRoot, setEntries) service.watchTree(projectRoot, setEntries)
client.fs.readdir(projectRoot).then(entries => { client.fs.readdir(projectRoot).then(entries => {
setEntries(entries.flatMap(e => e.name.startsWith(projectRoot) ? [e.name.slice(projectRoot.length)] : [])) setEntries(entries.flatMap(e => e.isFile() && e.name.startsWith(projectRoot) ? [e.name.slice(projectRoot.length)] : []))
}) })
return () => service.unwatchTree(projectRoot, setEntries) return () => service.unwatchTree(projectRoot, setEntries)
}, [service, projectRoot]) }, [service, projectRoot])

View File

@@ -2,7 +2,7 @@ import type { ComponentChildren } from 'preact'
import { createContext } from 'preact' import { createContext } from 'preact'
import { useCallback, useContext, useEffect, useMemo, useState } from 'preact/hooks' import { useCallback, useContext, useEffect, useMemo, useState } from 'preact/hooks'
import type { VersionId } from '../services/index.js' import type { VersionId } from '../services/index.js'
import { ROOT_URI, SpyglassClient } from '../services/Spyglass.js' import { DRAFTS_URI, SpyglassClient } from '../services/Spyglass.js'
import { Store } from '../Store.js' import { Store } from '../Store.js'
export type ProjectMeta = { export type ProjectMeta = {
@@ -37,7 +37,7 @@ export const DRAFT_PROJECT: ProjectMeta = {
namespace: 'draft', namespace: 'draft',
storage: { storage: {
type: 'indexeddb', type: 'indexeddb',
rootUri: `${ROOT_URI}drafts/`, rootUri: DRAFTS_URI,
}, },
} }

View File

@@ -21,6 +21,9 @@ export const ROOT_URI = 'file:///root/'
export const DEPENDENCY_URI = `${ROOT_URI}dependency/` export const DEPENDENCY_URI = `${ROOT_URI}dependency/`
export const UNSAVED_URI = `${ROOT_URI}unsaved/` export const UNSAVED_URI = `${ROOT_URI}unsaved/`
export const PROJECTS_URI = `${ROOT_URI}projects/` export const PROJECTS_URI = `${ROOT_URI}projects/`
export const DRAFTS_URI = `${ROOT_URI}drafts/`
const INITIAL_DIRS = [CACHE_URI, ROOT_URI, DEPENDENCY_URI, UNSAVED_URI, PROJECTS_URI, DRAFTS_URI]
const builtinMcdoc = ` const builtinMcdoc = `
use ::java::server::util::text::Text use ::java::server::util::text::Text
@@ -169,8 +172,6 @@ export class SpyglassService {
} }
await this.service.project.externals.fs.writeFile(newUri, content) await this.service.project.externals.fs.writeFile(newUri, content)
await this.service.project.externals.fs.unlink(oldUri) await this.service.project.externals.fs.unlink(oldUri)
// await this.service.project.externals.fs.writeFile(oldUri, content)
// await this.service.project.externals.fs.unlink(oldUri)
const d = this.client.documents.get(oldUri) const d = this.client.documents.get(oldUri)
if (d) { if (d) {
const doc = TextDocument.create(newUri, d.doc.languageId, d.doc.version, d.doc.getText()) const doc = TextDocument.create(newUri, d.doc.languageId, d.doc.version, d.doc.getText())
@@ -261,6 +262,7 @@ export class SpyglassService {
} }
public static async create(versionId: VersionId, client: SpyglassClient) { public static async create(versionId: VersionId, client: SpyglassClient) {
await Promise.allSettled(INITIAL_DIRS.map(async uri => client.externals.fs.mkdir(uri)))
const version = siteConfig.versions.find(v => v.id === versionId)! const version = siteConfig.versions.find(v => v.id === versionId)!
const logger = console const logger = console
const service = new core.Service({ const service = new core.Service({