@noya-app/noya-api-client-react 0.1.34 → 0.1.36
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/.eslintrc.js +1 -5
- package/.turbo/turbo-build.log +9 -9
- package/CHANGELOG.md +20 -0
- package/dist/index.d.mts +66 -102
- package/dist/index.d.ts +66 -102
- package/dist/index.js +10336 -43
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10381 -40
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +1 -0
- package/src/react/context.ts +10 -7
- package/src/react/hooks.ts +17 -52
- package/src/react/tableHooks.ts +102 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/react/context.ts","../src/react/hooks.ts"],"sourcesContent":["export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\n","import { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n const memoryClient = useMemo(() => {\n return new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n });\n }, []);\n\n return value ?? memoryClient;\n}\n","import { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useObservable } from \"@noya-app/observable-react\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaFiles(): {\n files: NoyaAPI.File[];\n loading: boolean;\n reload: () => Promise<void>;\n} {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(useNoyaClient().session$);\n\n useEffect(() => {\n if (!session) return;\n\n if (\n files.loading === \"notStarted\" ||\n files.loading === \"populatedOnServer\"\n ) {\n client.files.refetch();\n }\n }, [client, files.loading, session]);\n\n const reload = useCallback(() => {\n return client.files.refetch();\n }, [client]);\n\n return {\n files: files.files,\n loading: !(\n files.loading === \"loadedInClient\" ||\n files.loading === \"populatedOnServer\"\n ),\n reload,\n };\n}\n\nexport function useNoyaFile(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n return files.files.find((file) => file.id === fileId);\n}\n\nexport function useNoyaIsOwnFile(fileId?: string) {\n const file = useNoyaFile(fileId);\n const session = useNoyaSession();\n return file?.userId === session?.user.id;\n}\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSecrets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ secrets: [], loading: true }), []);\n const secrets = useSelector(\n fileId ? client.secretsByFileId$[fileId] : client.secrets$\n );\n return secrets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaWorkspaceBilling(workspaceId: string) {\n const client = useNoyaClientOrFallback();\n const workspaceBilling = useSelector(\n useNoyaClient().workspaceBilling$.billingByWorkspaceId[workspaceId]\n );\n\n // Workspace billing will always have products, but will be empty until the billing is fetched\n const hasFetchedWorkspaceBilling =\n workspaceBilling?.loading === false &&\n workspaceBilling?.availableProducts.length > 0;\n\n useEffect(() => {\n if (!hasFetchedWorkspaceBilling) {\n client.workspaces.getBilling(workspaceId);\n }\n }, [client, hasFetchedWorkspaceBilling, workspaceId]);\n\n return (\n workspaceBilling || {\n subscriptions: [],\n availableProducts: [],\n portalUrl: undefined,\n loading: true,\n }\n );\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useNoyaSites() {\n const sites = useSelector(useNoyaClientOrFallback().sites$);\n return sites;\n}\n\nexport function useNoyaDeployments() {\n const deployments = useSelector(useNoyaClientOrFallback().deployments$);\n return deployments;\n}\n\nexport function useNoyaSite(siteId: string) {\n const { sites } = useNoyaSites();\n const site = sites.find((s) => s.id === siteId);\n\n if (!site) {\n throw new Error(`Site ${siteId} not found`);\n }\n\n return { site };\n}\n\nexport function useNoyaPersonalAccessTokens() {\n const tokens = useSelector(useNoyaClientOrFallback().personalAccessTokens$);\n return tokens;\n}\n\nexport function useNoyaWorkspaces() {\n const client = useNoyaClientOrFallback();\n const workspaces = useSelector(client.workspaces$);\n const session = useSelector(client.session$);\n const fetchWorkspaces = !workspaces.workspaces.length && session;\n\n useEffect(() => {\n if (fetchWorkspaces) {\n client.workspaces.read();\n }\n }, [client, fetchWorkspaces]);\n\n return workspaces;\n}\n\nexport function useNoyaWorkspaceInvitations(workspaceId: string) {\n const client = useNoyaClientOrFallback();\n const workspaceInvitations = useSelector(\n useNoyaClient().workspaceInvitations$.invitationsByWorkspaceId[workspaceId]\n );\n\n const fallback = useMemo(\n () => ({\n invitations: [],\n loading: true as const,\n }),\n []\n );\n\n useEffect(() => {\n if (!workspaceInvitations) {\n client.workspaces.getInvitations(workspaceId);\n }\n }, [client, workspaceId, workspaceInvitations]);\n\n return workspaceInvitations || fallback;\n}\n\nconst emptyObservedFileVersions: {\n fileVersions: NoyaAPI.FileVersion[];\n loading: NoyaAPI.DataLoadingState;\n} = {\n fileVersions: [],\n loading: \"notStarted\",\n};\n\nexport function useNoyaOwnedFileVersions(fileId: string): {\n fileVersions: NoyaAPI.FileVersion[];\n loading: NoyaAPI.DataLoadingState;\n reload: () => Promise<void>;\n} {\n const client = useNoyaClientOrFallback();\n const path = useMemo(() => [fileId] as [string], [fileId]);\n const fileVersions = useObservable(client.ownedFileVersions$, path);\n\n useEffect(() => {\n if (!fileVersions || fileVersions.loading === \"notStarted\") {\n client.fileVersions.refetch({ fileId, type: \"owned\" });\n }\n }, [client, fileId, fileVersions, fileVersions?.loading]);\n\n const reload = useCallback(() => {\n return client.fileVersions.refetch({ fileId, type: \"owned\" });\n }, [client, fileId]);\n\n const result = useMemo(() => {\n return {\n ...(fileVersions ?? emptyObservedFileVersions),\n reload,\n };\n }, [fileVersions, reload]);\n\n return result;\n}\n\nexport function useNoyaTemplates() {\n const client = useNoyaClientOrFallback();\n const { templates, loading } = useSelector(client.templates$);\n\n useEffect(() => {\n if (loading === \"notStarted\" || loading === \"populatedOnServer\") {\n client.templates.read();\n }\n }, [client, loading]);\n\n return {\n templates,\n loading: !(loading === \"loadedInClient\" || loading === \"populatedOnServer\"),\n };\n}\n"],"mappings":"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","names":["import_react","import_noya_api"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tree-visit/lib/access.js","../../../node_modules/tree-visit/lib/sort.js","../../../node_modules/tree-visit/lib/ancestors.js","../../../node_modules/tree-visit/lib/diagram/boxDiagram.js","../../../node_modules/tree-visit/lib/diagram/directoryDiagram.js","../../../node_modules/tree-visit/lib/diagram.js","../../../node_modules/tree-visit/lib/visit.js","../../../node_modules/tree-visit/lib/entries.js","../../../node_modules/tree-visit/lib/find.js","../../../node_modules/tree-visit/lib/reduce.js","../../../node_modules/tree-visit/lib/flat.js","../../../node_modules/tree-visit/lib/map.js","../../../node_modules/tree-visit/lib/transformPath.js","../../../node_modules/tree-visit/lib/operation.js","../../../node_modules/tree-visit/lib/insert.js","../../../node_modules/tree-visit/lib/move.js","../../../node_modules/tree-visit/lib/remove.js","../../../node_modules/tree-visit/lib/replace.js","../../../node_modules/tree-visit/lib/splice.js","../../../node_modules/tree-visit/lib/defineTree.js","../../../node_modules/tree-visit/lib/indexPath.js","../../../node_modules/tree-visit/lib/options.js","../../../node_modules/tree-visit/lib/withOptions.js","../../../node_modules/tree-visit/lib/index.js","../../../node_modules/fast-diff/diff.js","../src/index.ts","../src/react/context.ts","../src/react/hooks.ts","../src/react/tableHooks.ts","../../../node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/registry/format.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/registry/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/deref/deref.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/strict/strict.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../../node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../../node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../../node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../../node_modules/@sinclair/typebox/build/esm/system/system.mjs","../../../node_modules/@sinclair/typebox/build/esm/value/hash/hash.mjs","../../../node_modules/@sinclair/typebox/build/esm/errors/errors.mjs","../../../node_modules/@sinclair/typebox/build/esm/value/delta/delta.mjs","../../emitter/src/index.ts","../../state-manager/src/AIManager.ts","../../state-manager/src/AssetManager.ts","../../noya-schemas/src/asset.ts","../../noya-schemas/src/encode.ts","../../noya-schemas/src/filesSchema.ts","../../noya-schemas/src/gitHubSchema.ts","../../noya-schemas/src/jsonSchema.ts","../../noya-schemas/src/input.ts","../../noya-schemas/src/SchemaTree.ts","../../noya-schemas/src/index.ts","../../state-manager/src/ConnectedUsersManager.ts","../../state-manager/src/ConnectionEventManager.ts","../../../node_modules/mutative/src/constant.ts","../../../node_modules/mutative/src/utils/proto.ts","../../../node_modules/mutative/src/utils/draft.ts","../../../node_modules/mutative/src/utils/copy.ts","../../../node_modules/mutative/src/utils/mark.ts","../../../node_modules/mutative/src/utils/deepFreeze.ts","../../../node_modules/mutative/src/utils/forEach.ts","../../../node_modules/mutative/src/utils/finalize.ts","../../../node_modules/mutative/src/current.ts","../../../node_modules/mutative/src/interface.ts","../../../node_modules/mutative/src/internal.ts","../../../node_modules/mutative/src/patch.ts","../../../node_modules/mutative/src/unsafe.ts","../../../node_modules/mutative/src/map.ts","../../../node_modules/mutative/src/set.ts","../../../node_modules/mutative/src/draft.ts","../../../node_modules/mutative/src/draftify.ts","../../../node_modules/mutative/src/makeCreator.ts","../../../node_modules/mutative/src/create.ts","../../../node_modules/mutative/src/apply.ts","../../../node_modules/mutative/src/original.ts","../../../node_modules/mutative/src/rawReturn.ts","../../../node_modules/mutative/src/utils/marker.ts","../../../node_modules/mutative/src/utils/cast.ts","../../state-manager/src/typeboxDiff.ts","../../state-manager/src/extended.ts","../../state-manager/src/diff.ts","../../state-manager/src/EvalManager.ts","../../state-manager/src/historyEntries.ts","../../state-manager/src/IOManager.ts","../../state-manager/src/jwt.ts","../../state-manager/src/MenuManager.ts","../../state-manager/src/multiplayer.ts","../../state-manager/src/stateManager.ts","../../state-manager/src/NoyaManager.ts","../../noya-pipeline/src/graphToTasks.ts","../../noya-pipeline/src/state.ts","../../state-manager/src/PipelineManager.ts","../../state-manager/src/PublishingManager.ts","../../state-manager/src/rpcManager.ts","../../state-manager/src/SecretManager.ts","../../state-manager/src/TaskManager.ts","../../noya-keymap/src/hooks.ts","../../noya-keymap/src/platform.ts","../../../node_modules/w3c-keyname/index.js","../../state-manager/src/menuTree.ts","../../noya-multiplayer-react/src/ai.ts","../../noya-multiplayer-react/src/NoyaStateContext.tsx","../../noya-react-utils/src/components/AutoSizer.tsx","../../noya-react-utils/src/hooks/useSize.ts","../../noya-react-utils/src/components/FileDropTarget.tsx","../../noya-react-utils/src/hooks/useFileDropTarget.ts","../../noya-react-utils/src/utils/reactGenerics.ts","../../noya-react-utils/src/hooks/useControlledOrUncontrolled.ts","../../noya-react-utils/src/hooks/useDeepArray.ts","../../noya-react-utils/src/hooks/useDeepState.ts","../../noya-react-utils/src/hooks/useFetch.ts","../../noya-react-utils/src/hooks/useIsMounted.ts","../../noya-react-utils/src/hooks/useIsomorphicLayoutEffect.ts","../../noya-react-utils/src/hooks/useLateReference.ts","../../noya-react-utils/src/hooks/useLazyValue.ts","../../noya-react-utils/src/hooks/useMergeRefs.ts","../../noya-react-utils/src/hooks/useMutableState.ts","../../noya-react-utils/src/hooks/usePersistentState.ts","../../noya-react-utils/src/hooks/usePixelRatio.ts","../../noya-react-utils/src/hooks/useShallowArray.ts","../../noya-react-utils/src/hooks/useStableCallback.ts","../../noya-react-utils/src/hooks/useSystemColorScheme.ts","../../noya-react-utils/src/hooks/useUrlHashParameters.ts","../../noya-react-utils/src/hooks/useWindowSize.ts","../../noya-react-utils/src/utils/ClientStorage.ts","../../noya-react-utils/src/utils/download.ts","../../noya-multiplayer-react/src/noyaApp.ts","../../noya-multiplayer-react/src/hooks.ts","../../noya-multiplayer-react/src/components/ErrorOverlay.tsx","../../noya-multiplayer-react/src/inspector/useStateInspector.tsx","../../noya-multiplayer-react/src/inspector/StateInspector.tsx","../../../node_modules/react-inspector/node_modules/is-object/index.js","../../../node_modules/react-inspector/node_modules/is-window/index.js","../../../node_modules/react-inspector/node_modules/is-dom/index.js","../../../node_modules/react-inspector/src/styles/themes/index.tsx","../../../node_modules/react-inspector/src/styles/themes/chromeDark.tsx","../../../node_modules/react-inspector/src/styles/themes/chromeLight.tsx","../../../node_modules/react-inspector/src/object-inspector/ObjectInspector.tsx","../../../node_modules/react-inspector/src/tree-view/TreeView.tsx","../../../node_modules/react-inspector/src/tree-view/ExpandedPathsContext.tsx","../../../node_modules/react-inspector/src/tree-view/TreeNode.tsx","../../../node_modules/react-inspector/src/styles/styles.tsx","../../../node_modules/react-inspector/src/styles/unselectable.tsx","../../../node_modules/react-inspector/src/styles/base.tsx","../../../node_modules/react-inspector/src/tree-view/pathUtils.ts","../../../node_modules/react-inspector/src/object-inspector/ObjectRootLabel.tsx","../../../node_modules/react-inspector/src/object/ObjectName.tsx","../../../node_modules/react-inspector/src/object-inspector/ObjectPreview.tsx","../../../node_modules/react-inspector/src/object/ObjectValue.tsx","../../../node_modules/react-inspector/src/utils/objectPrototype.tsx","../../../node_modules/react-inspector/src/utils/propertyUtils.tsx","../../../node_modules/react-inspector/src/object-inspector/ObjectLabel.tsx","../../../node_modules/react-inspector/src/table-inspector/TableInspector.tsx","../../../node_modules/react-inspector/src/table-inspector/getHeaders.ts","../../../node_modules/react-inspector/src/table-inspector/DataContainer.tsx","../../../node_modules/react-inspector/src/table-inspector/HeaderContainer.tsx","../../../node_modules/react-inspector/src/table-inspector/TH.tsx","../../../node_modules/react-inspector/src/dom-inspector/DOMInspector.tsx","../../../node_modules/react-inspector/src/dom-inspector/DOMNodePreview.tsx","../../../node_modules/react-inspector/src/dom-inspector/shouldInline.tsx","../../../node_modules/react-inspector/src/index.tsx","../../noya-multiplayer-react/src/useObservable.ts","../../noya-multiplayer-react/src/inspector/ColoredDot.tsx","../../noya-multiplayer-react/src/inspector/inspectorTheme.ts","../../noya-multiplayer-react/src/inspector/sections/EventsSection.tsx","../../noya-multiplayer-react/src/inspector/ObjectRootLabel.tsx","../../noya-multiplayer-react/src/inspector/StateInspectorDisclosureSection.tsx","../../noya-multiplayer-react/src/inspector/StateInspectorArrow.tsx","../../noya-multiplayer-react/src/inspector/StateInspectorRow.tsx","../../noya-multiplayer-react/src/inspector/sections/HistorySection.tsx","../../noya-multiplayer-react/src/inspector/StateInspectorButton.tsx","../../noya-multiplayer-react/src/inspector/utils.ts","../../noya-multiplayer-react/src/inspector/zip/crc32.ts","../../noya-multiplayer-react/src/inspector/zip/struct.ts","../../noya-multiplayer-react/src/inspector/zip/TinyZip.ts","../../noya-multiplayer-react/src/inspector/serialization.ts","../../noya-multiplayer-react/src/inspector/StateInspectorToggleButton.tsx","../../noya-multiplayer-react/src/inspector/useLocalStorageState.tsx","../../noya-multiplayer-react/src/components/UserPointersOverlay.tsx"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.get = get;\nexports.ancestors = ancestors;\nexports.access = access;\nexports.accessPath = accessPath;\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction get(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = _getPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n const children = options.getChildren(node, path);\n const child = children[index];\n if (!child) {\n return undefined;\n }\n node = child;\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`, excluding the last node.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction ancestors(node, indexPath, options) {\n return _getPath(node, indexPath, options).slice(0, -1);\n}\nfunction _getPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n const children = options.getChildren(node, path, context);\n const child = children[index];\n if (!child) {\n return result;\n }\n node = child;\n result.push(node);\n }\n return result;\n}\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction access(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = accessPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n node = options.getChildren(node, path)[index];\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction accessPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n node = options.getChildren(node, path, context)[index];\n result.push(node);\n }\n return result;\n}\nfunction makeTraversalContext(array) {\n return {\n getRoot: () => array[0],\n getParent: () => array[array.length - 2],\n getAncestors: () => array.slice(0, -1),\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.comparePathsByComponent = comparePathsByComponent;\nexports.sortPaths = sortPaths;\nfunction comparePathsByComponent(a, b) {\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n if (a[i] < b[i])\n return -1;\n if (a[i] > b[i])\n return 1;\n }\n // If all preceding components are equal, the shorter array comes first\n return a.length - b.length;\n}\nfunction sortPaths(indexPaths) {\n return [...indexPaths].sort(comparePathsByComponent);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ancestorPaths = ancestorPaths;\nconst sort_1 = require(\"./sort\");\n/**\n * This function cleans up the `indexPaths` array by\n *\n * 1. sorting the `indexPaths`\n * 2. removing any `indexPaths` that are descendants of other `indexPaths`\n * 3. removing any `indexPaths` that are duplicates\n */\nfunction ancestorPaths(paths, options) {\n var _a;\n const result = new Map();\n const compare = (_a = options === null || options === void 0 ? void 0 : options.compare) !== null && _a !== void 0 ? _a : sort_1.comparePathsByComponent;\n const sortedIndexPaths = paths.sort(compare);\n for (const indexPath of sortedIndexPaths) {\n const foundParent = indexPath.some((_, index) => {\n const parentKey = indexPath.slice(0, index).join();\n return result.has(parentKey);\n });\n if (foundParent)\n continue;\n result.set(indexPath.join(), indexPath);\n }\n return Array.from(result.values());\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boxDiagram = boxDiagram;\nvar BoxDrawing;\n(function (BoxDrawing) {\n BoxDrawing[\"TopLeft\"] = \"\\u250C\";\n BoxDrawing[\"TopRight\"] = \"\\u2510\";\n BoxDrawing[\"BottomLeft\"] = \"\\u2514\";\n BoxDrawing[\"BottomRight\"] = \"\\u2518\";\n BoxDrawing[\"Horizontal\"] = \"\\u2500\";\n BoxDrawing[\"Vertical\"] = \"\\u2502\";\n BoxDrawing[\"BottomConnectorDown\"] = \"\\u252C\";\n BoxDrawing[\"BottomConnectorUp\"] = \"\\u2534\";\n BoxDrawing[\"TopConnectorUp\"] = \"\\u2534\";\n})(BoxDrawing || (BoxDrawing = {}));\nfunction wrapLabelInBox(label) {\n const lines = label.split('\\n');\n const length = Math.max(...lines.map((line) => line.length));\n const horizontalMargin = 1;\n const width = length + horizontalMargin * 2 + 2;\n const height = 2 + lines.length;\n const diagram = [\n [\n BoxDrawing.TopLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.TopRight,\n ],\n ...lines.map((line) => [\n BoxDrawing.Vertical,\n ' '.repeat(horizontalMargin),\n line + (line.length < length ? ' '.repeat(length - line.length) : ''),\n ' '.repeat(horizontalMargin),\n BoxDrawing.Vertical,\n ]),\n [\n BoxDrawing.BottomLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.BottomRight,\n ],\n ];\n return {\n width,\n height,\n contents: diagram.map((parts) => parts.join('')),\n };\n}\nfunction mergeBoxesHorizontal(boxes) {\n const horizontalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n return boxes.slice(1).reduce((result, box) => {\n const height = Math.max(result.height, box.height);\n const width = result.width + horizontalMargin + box.width;\n const contents = [];\n for (let i = 0; i < height; i++) {\n contents.push((result.contents[i] || ' '.repeat(result.width)) +\n ' '.repeat(horizontalMargin) +\n (box.contents[i] || ' '.repeat(box.width)));\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction mergeBoxesVertical(boxes) {\n const verticalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n const width = Math.max(...boxes.map((box) => box.width));\n return boxes.slice(1).reduce((result, box) => {\n const height = result.height + verticalMargin + box.height;\n const contents = [];\n for (let i = 0; i < height; i++) {\n if (i < result.height) {\n contents.push(result.contents[i]);\n }\n else if (i === result.height) {\n contents.push(' '.repeat(width));\n }\n else {\n contents.push(box.contents[i - result.height - 1]);\n }\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const box = wrapLabelInBox(label);\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return box;\n const childBoxes = children.map((child, index) => {\n const childBox = nodeDiagram(child, [...indexPath, index], options);\n // Draw top connector for each child\n childBox.contents[0] = insertSubstring(childBox.contents[0], centerIndex(childBox.contents[0].length), BoxDrawing.TopConnectorUp);\n return childBox;\n });\n const result = mergeBoxesVertical([box, mergeBoxesHorizontal(childBoxes)]);\n // Draw connectors\n const contents = result.contents;\n const mid = centerIndex(result.width);\n contents[box.height - 1] = insertSubstring(contents[box.height - 1], mid, BoxDrawing.BottomConnectorDown);\n let min = contents[box.height + 1].indexOf(BoxDrawing.TopConnectorUp);\n let max = contents[box.height + 1].lastIndexOf(BoxDrawing.TopConnectorUp);\n for (let i = min; i <= max; i++) {\n let character;\n if (i === mid) {\n character =\n childBoxes.length > 1\n ? BoxDrawing.BottomConnectorUp\n : BoxDrawing.Vertical;\n }\n else if (i === min) {\n character = BoxDrawing.TopLeft;\n }\n else if (i === max) {\n character = BoxDrawing.TopRight;\n }\n else {\n character = BoxDrawing.Horizontal;\n }\n result.contents[box.height] = insertSubstring(result.contents[box.height], i, character);\n }\n return result;\n}\nfunction boxDiagram(node, options) {\n return nodeDiagram(node, [], options).contents.join('\\n');\n}\nfunction centerIndex(width) {\n return Math.floor(width / 2);\n}\nfunction centerLine(line, width) {\n const remainder = width - line.length;\n if (remainder <= 0)\n return line;\n const prefixLength = centerIndex(remainder);\n const suffixLength = centerIndex(remainder);\n const result = ' '.repeat(prefixLength) + line + ' '.repeat(suffixLength);\n return prefixLength + suffixLength + result.length < width\n ? result + ' '\n : result;\n}\nfunction centerBlock(lines, width) {\n return lines.map((line) => centerLine(line, width));\n}\nfunction insertSubstring(string, index, substring) {\n if (index > string.length - 1)\n return string;\n return string.substring(0, index) + substring + string.substring(index + 1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.directoryDiagram = directoryDiagram;\nexports.isMultiline = isMultiline;\nexports.prefixBlock = prefixBlock;\nvar LinePrefix;\n(function (LinePrefix) {\n LinePrefix[\"Child\"] = \"\\u251C\\u2500\\u2500 \";\n LinePrefix[\"LastChild\"] = \"\\u2514\\u2500\\u2500 \";\n LinePrefix[\"NestedChild\"] = \"\\u2502 \";\n LinePrefix[\"LastNestedChild\"] = \" \";\n})(LinePrefix || (LinePrefix = {}));\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const depth = indexPath.length;\n let rootLine = { label, depth, prefix: '', multilinePrefix: '' };\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return [rootLine];\n // Special-case nodes with a single child, collapsing their labels to a single line\n if (options.flattenSingleChildNodes &&\n children.length === 1 &&\n !isMultiline(label)) {\n const [line] = nodeDiagram(children[0], [...indexPath, 0], options);\n const hideRoot = indexPath.length === 0 && label === '';\n rootLine.label = hideRoot\n ? `/ ${line.label}`\n : `${rootLine.label} / ${line.label}`;\n return [rootLine];\n }\n const nestedLines = children.flatMap((file, index, array) => {\n const childIsLast = index === array.length - 1;\n const childLines = nodeDiagram(file, [...indexPath, index], options);\n const childPrefix = childIsLast ? LinePrefix.LastChild : LinePrefix.Child;\n const childMultilinePrefix = childIsLast\n ? LinePrefix.LastNestedChild\n : LinePrefix.NestedChild;\n childLines.forEach((line) => {\n if (line.depth === depth + 1) {\n line.prefix = childPrefix + line.prefix;\n line.multilinePrefix = childMultilinePrefix + line.multilinePrefix;\n }\n else if (childIsLast) {\n line.prefix = LinePrefix.LastNestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.LastNestedChild + line.multilinePrefix;\n }\n else {\n line.prefix = LinePrefix.NestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.NestedChild + line.multilinePrefix;\n }\n });\n return childLines;\n });\n return [rootLine, ...nestedLines];\n}\nfunction directoryDiagram(node, options) {\n const lines = nodeDiagram(node, [], options);\n const strings = lines.map((line) => prefixBlock(line.label, line.prefix, line.multilinePrefix));\n return strings.join('\\n');\n}\nfunction isMultiline(line) {\n return line.includes('\\n');\n}\nfunction prefixBlock(block, prefix, multilinePrefix) {\n if (!isMultiline(block))\n return prefix + block;\n return block\n .split('\\n')\n .map((line, index) => (index === 0 ? prefix : multilinePrefix) + line)\n .join('\\n');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagram = diagram;\nconst boxDiagram_1 = require(\"./diagram/boxDiagram\");\nconst directoryDiagram_1 = require(\"./diagram/directoryDiagram\");\n/**\n * Generate a diagram of the tree, as a string.\n */\nfunction diagram(node, options) {\n if (options.type === 'box') {\n return (0, boxDiagram_1.boxDiagram)(node, options);\n }\n return (0, directoryDiagram_1.directoryDiagram)(node, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.STOP = exports.SKIP = void 0;\nexports.visit = visit;\nexports.SKIP = 'skip';\nexports.STOP = 'stop';\n/**\n * Visit each node in the tree, calling an optional `onEnter` and `onLeave` for each.\n *\n * From `onEnter`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"skip\"` to skip the children of that node and the subsequent `onLeave`\n * - return `\"stop\"` to end traversal\n *\n * From `onLeave`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"stop\"` to end traversal\n */\nfunction visit(node, options) {\n const { onEnter, onLeave, getChildren: originalGetChildren, onDetectCycle, getIdentifier, direction = 'forward', } = options;\n const getChildren = (node, indexPath, context) => {\n const children = originalGetChildren(node, indexPath, context);\n return direction === 'forward' ? children : children.slice().reverse();\n };\n let indexPath = [];\n let stack = [{ node }];\n const visited = onDetectCycle ? new Set() : undefined;\n const context = options.includeTraversalContext\n ? {\n getRoot() {\n return node;\n },\n getParent() {\n var _a;\n return (_a = stack[stack.length - 2]) === null || _a === void 0 ? void 0 : _a.node;\n },\n getAncestors() {\n return stack.slice(0, -1).map((wrapper) => wrapper.node);\n },\n }\n : undefined;\n const getIndexPath = options.reuseIndexPath\n ? () => indexPath\n : () => indexPath.slice();\n while (stack.length > 0) {\n let wrapper = stack[stack.length - 1];\n // Visit the wrapped node\n if (wrapper.state === undefined) {\n // Add cycle detection before visiting node\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n if (visited.has(id)) {\n const action = typeof onDetectCycle === 'function'\n ? onDetectCycle(wrapper.node, getIndexPath(), context)\n : onDetectCycle;\n if (action === 'error') {\n throw new Error('Cycle detected in tree');\n }\n else {\n // action === 'skip'\n wrapper.state = -1; // Mark as skipped\n continue;\n }\n }\n visited.add(id);\n }\n const enterResult = onEnter === null || onEnter === void 0 ? void 0 : onEnter(wrapper.node, getIndexPath());\n if (enterResult === exports.STOP)\n return;\n wrapper.state = enterResult === exports.SKIP ? -1 : 0;\n }\n const children = wrapper.children || getChildren(wrapper.node, getIndexPath(), context);\n if (!wrapper.children) {\n wrapper.children = children;\n }\n // If the node wasn't skipped\n if (wrapper.state !== -1) {\n // Visit the next child\n if (wrapper.state < children.length) {\n let currentIndex = wrapper.state;\n indexPath.push(direction === 'forward'\n ? currentIndex\n : children.length - currentIndex - 1);\n stack.push({ node: children[currentIndex] });\n wrapper.state = currentIndex + 1;\n continue;\n }\n const leaveResult = onLeave === null || onLeave === void 0 ? void 0 : onLeave(wrapper.node, getIndexPath());\n if (leaveResult === exports.STOP)\n return;\n }\n // Remove node from visited set when leaving\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n visited.delete(id);\n }\n indexPath.pop();\n stack.pop();\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.entries = entries;\nconst visit_1 = require(\"./visit\");\nfunction entries(node, options) {\n let result = [];\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (item, indexPath) => {\n result.push([indexPath, item]);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.find = find;\nexports.findAll = findAll;\nexports.findPath = findPath;\nexports.findAllPaths = findAllPaths;\nconst visit_1 = require(\"./visit\");\nfunction find(node, options) {\n let found;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found = child;\n return visit_1.STOP;\n }\n } }));\n return found;\n}\nfunction findAll(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found.push(child);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of a node matching a predicate function.\n */\nfunction findPath(node, options) {\n let found;\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found = [...indexPath];\n return visit_1.STOP;\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of all nodes matching a predicate function.\n */\nfunction findAllPaths(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found.push([...indexPath]);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reduce = reduce;\nconst visit_1 = require(\"./visit\");\nfunction reduce(node, options) {\n let result = options.initialResult;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n result = options.nextResult(result, child, indexPath);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flat = flat;\nconst reduce_1 = require(\"./reduce\");\n/**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\nfunction flat(node, options) {\n return (0, reduce_1.reduce)(node, Object.assign(Object.assign({}, options), { initialResult: [], nextResult: (result, child) => {\n result.push(child);\n return result;\n } }));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.map = map;\nexports.flatMap = flatMap;\nconst visit_1 = require(\"./visit\");\n/**\n * Map each node into a new node.\n *\n * The shape of the tree remains the same. You can omit nodes from the tree by\n * filtering them out of the `transformedChildren` argument. The root can't be omitted.\n */\nfunction map(node, options) {\n return flatMap(node, Object.assign(Object.assign({}, options), { transform: (node, transformedChildren, indexPath) => [\n options.transform(node, transformedChildren, indexPath),\n ] }));\n}\n/**\n * Map each node into an array of new nodes.\n *\n * You can omit nodes from the tree by returning an empty array from the `transform` function.\n * The first element of the returned top-level array will be the new root.\n */\nfunction flatMap(node, options) {\n const childrenMap = {};\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onLeave: (child, indexPath) => {\n var _a, _b;\n // Add a 0 so we can always slice off the last element to get a unique parent key\n const keyIndexPath = [0, ...indexPath];\n const key = keyIndexPath.join();\n const transformed = options.transform(child, (_a = childrenMap[key]) !== null && _a !== void 0 ? _a : [], indexPath);\n const parentKey = keyIndexPath.slice(0, -1).join();\n const parentChildren = (_b = childrenMap[parentKey]) !== null && _b !== void 0 ? _b : [];\n parentChildren.push(...transformed);\n childrenMap[parentKey] = parentChildren;\n } }));\n return childrenMap[''][0];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transformPath = transformPath;\nconst sort_1 = require(\"./sort\");\nfunction commonAncestor(path, otherPath) {\n const length = Math.min(path.length, otherPath.length);\n for (let i = 0; i < length; i++) {\n if (path[i] !== otherPath[i]) {\n return path.slice(0, i);\n }\n }\n return path.slice(0, length);\n}\nfunction transformPath(path, operation, otherPath, count = 1) {\n if (otherPath.length > path.length ||\n (0, sort_1.comparePathsByComponent)(otherPath, path) > 0) {\n return path;\n }\n if (otherPath.length === 0 && operation === 'remove') {\n return undefined;\n }\n const common = commonAncestor(path, otherPath);\n const adjustmentIndex = common.length === path.length || common.length === otherPath.length\n ? common.length - 1\n : common.length;\n const pathValue = path[adjustmentIndex];\n const otherPathValue = otherPath[adjustmentIndex];\n if (operation === 'insert' && otherPathValue <= pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] += count;\n return newPath;\n }\n else if (operation === 'remove') {\n if (otherPathValue === pathValue) {\n return undefined;\n }\n else if (otherPathValue < pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] -= count;\n return newPath;\n }\n }\n return path;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insertOperation = insertOperation;\nexports.removeOperation = removeOperation;\nexports.replaceOperation = replaceOperation;\nexports.getInsertionOperations = getInsertionOperations;\nexports.getRemovalOperations = getRemovalOperations;\nexports.getReplaceOperations = getReplaceOperations;\nexports.applyOperations = applyOperations;\nexports.arraySplice = arraySplice;\nexports.transformPathsByOperations = transformPathsByOperations;\nconst ancestors_1 = require(\"./ancestors\");\nconst map_1 = require(\"./map\");\nconst transformPath_1 = require(\"./transformPath\");\nfunction insertOperation(index, nodes) {\n return {\n type: 'insert',\n index,\n nodes,\n };\n}\nfunction removeOperation(indexes) {\n return {\n type: 'remove',\n indexes,\n };\n}\nfunction replaceOperation() {\n return {\n type: 'replace',\n };\n}\nfunction splitIndexPath(indexPath) {\n return [indexPath.slice(0, -1), indexPath[indexPath.length - 1]];\n}\nfunction getInsertionOperations(indexPath, nodes, operations = new Map()) {\n var _a;\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n switch ((_a = operations.get(parentKey)) === null || _a === void 0 ? void 0 : _a.type) {\n case 'remove':\n continue;\n }\n operations.set(parentKey, replaceOperation());\n }\n const operation = operations.get(parentIndexPath.join());\n // Mark insertion node\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: operation.indexes,\n insertIndex: index,\n insertNodes: nodes,\n });\n break;\n default:\n operations.set(parentIndexPath.join(), insertOperation(index, nodes));\n }\n return operations;\n}\nfunction getRemovalOperations(indexPaths) {\n var _a, _b;\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(indexPaths);\n const indexesToRemove = new Map();\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n const value = (_a = indexesToRemove.get(parentKey)) !== null && _a !== void 0 ? _a : [];\n value.push(indexPath[indexPath.length - 1]);\n indexesToRemove.set(parentKey, value);\n }\n const operations = new Map();\n // Mark all parents for replacing\n for (const indexPath of _ancestorIndexPaths) {\n for (let i = indexPath.length - 1; i >= 0; i--) {\n const parentKey = indexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n }\n // Mark all nodes for removal\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n operations.set(parentKey, removeOperation((_b = indexesToRemove.get(parentKey)) !== null && _b !== void 0 ? _b : []));\n }\n return operations;\n}\nfunction getReplaceOperations(indexPath, node) {\n const operations = new Map();\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: [index],\n insertIndex: index,\n insertNodes: [node],\n });\n return operations;\n}\nfunction adjustInsertIndex(index, removeIndexes) {\n return removeIndexes.reduce((index, removedIndex) => (removedIndex < index ? index - 1 : index), index);\n}\nfunction applyOperations(node, operations, options) {\n return (0, map_1.map)(node, Object.assign(Object.assign({}, options), { \n // Avoid calling `getChildren` for every node in the tree.\n // Return [] if we're just going to return the original node anyway.\n getChildren: (node, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'replace':\n case 'remove':\n case 'removeThenInsert':\n case 'insert':\n return options.getChildren(node, indexPath);\n default:\n return [];\n }\n }, transform: (node, children, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n return options.create(node, children.filter((_, index) => !operation.indexes.includes(index)), indexPath);\n case 'removeThenInsert':\n const updatedChildren = children.filter((_, index) => !operation.removeIndexes.includes(index));\n const adjustedIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return options.create(node, arraySplice(updatedChildren, adjustedIndex, 0, ...operation.insertNodes), indexPath);\n case 'insert':\n return options.create(node, arraySplice(children, operation.index, 0, ...operation.nodes), indexPath);\n case 'replace':\n return options.create(node, children, indexPath);\n default:\n return node;\n }\n } }));\n}\nfunction arraySplice(array, start, deleteCount, ...items) {\n return [\n ...array.slice(0, start),\n ...items,\n ...array.slice(start + deleteCount),\n ];\n}\nfunction transformPathsByOperations(paths, operations) {\n let transformedPaths = paths;\n for (const [parentKey, operation] of operations.entries()) {\n const parentPath = parentKey ? parentKey.split(',').map(Number) : [];\n transformedPaths = transformByOperation(transformedPaths, parentPath, operation);\n }\n return transformedPaths;\n}\nfunction transformByOperation(transformedPaths, parentPath, operation) {\n switch (operation.type) {\n case 'insert': {\n const otherPath = parentPath.concat(operation.index);\n return transformedPaths.map((path) => path\n ? (0, transformPath_1.transformPath)(path, 'insert', otherPath, operation.nodes.length)\n : undefined);\n }\n case 'remove': {\n const otherPaths = [...operation.indexes]\n .reverse()\n .map((index) => parentPath.concat(index));\n return transformedPaths.map((path) => {\n for (const otherPath of otherPaths) {\n path = path ? (0, transformPath_1.transformPath)(path, 'remove', otherPath) : undefined;\n }\n return path;\n });\n }\n case 'removeThenInsert': {\n const result = transformByOperation(transformedPaths, parentPath, {\n type: 'remove',\n indexes: operation.removeIndexes,\n });\n const insertIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return transformByOperation(result, parentPath, {\n type: 'insert',\n index: insertIndex,\n nodes: operation.insertNodes,\n });\n }\n case 'replace': {\n return transformedPaths;\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insert = insert;\nexports.insertWithPathTracking = insertWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insert(node, options) {\n return _insertWithPathTracking(node, options).node;\n}\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insertWithPathTracking(node, options) {\n return _insertWithPathTracking(node, options);\n}\nfunction _insertWithPathTracking(node, options) {\n const { nodes, path: at, track } = options;\n if (at.length === 0) {\n throw new Error(`Can't insert nodes at the root`);\n }\n const state = (0, operation_1.getInsertionOperations)(at, nodes);\n const transformedPaths = track ? (0, operation_1.transformPathsByOperations)(track, state) : [];\n return {\n node: (0, operation_1.applyOperations)(node, state, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.move = move;\nconst access_1 = require(\"./access\");\nconst ancestors_1 = require(\"./ancestors\");\nconst operation_1 = require(\"./operation\");\nfunction move(node, options) {\n if (options.paths.length === 0)\n return node;\n for (const indexPath of options.paths) {\n if (indexPath.length === 0) {\n throw new Error(`Can't move the root node`);\n }\n }\n if (options.to.length === 0) {\n throw new Error(`Can't move nodes to the root`);\n }\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(options.paths);\n const nodesToInsert = _ancestorIndexPaths.map((indexPath) => (0, access_1.access)(node, indexPath, options));\n const operations = (0, operation_1.getInsertionOperations)(options.to, nodesToInsert, (0, operation_1.getRemovalOperations)(_ancestorIndexPaths));\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remove = remove;\nexports.removeWithPathTracking = removeWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction remove(node, options) {\n return _removeWithPathTracking(node, options).node;\n}\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction removeWithPathTracking(node, options) {\n return _removeWithPathTracking(node, options);\n}\nfunction _removeWithPathTracking(node, options) {\n const { paths, track } = options;\n const operations = (0, operation_1.getRemovalOperations)(paths);\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replace = replace;\nconst operation_1 = require(\"./operation\");\n/**\n * Replace the node at the given `IndexPath` with another.\n */\nfunction replace(node, options) {\n if (options.path.length === 0)\n return options.node;\n const operations = (0, operation_1.getReplaceOperations)(options.path, options.node);\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splice = splice;\nexports.spliceWithPathTracking = spliceWithPathTracking;\nconst operation_1 = require(\"./operation\");\nfunction splice(node, options) {\n return _spliceWithPathTracking(node, options).node;\n}\nfunction spliceWithPathTracking(node, options) {\n return _spliceWithPathTracking(node, options);\n}\nfunction _spliceWithPathTracking(node, options) {\n const { path, deleteCount = 0, nodes, track } = options;\n if (path.length === 0) {\n throw new Error(`Can't splice at the root`);\n }\n const pathsToRemove = getPathsToRemove(path, deleteCount);\n const operations = (0, operation_1.getInsertionOperations)(path, nodes, (0, operation_1.getRemovalOperations)(pathsToRemove));\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\nfunction getPathsToRemove(path, deleteCount) {\n let pathsToRemove = [];\n let parentPath = path.slice(0, -1);\n let index = path[path.length - 1];\n for (let i = 0; i < deleteCount; i++) {\n pathsToRemove.push(parentPath.concat(index + i));\n }\n return pathsToRemove;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defineTree = defineTree;\nconst access_1 = require(\"./access\");\nconst diagram_1 = require(\"./diagram\");\nconst entries_1 = require(\"./entries\");\nconst find_1 = require(\"./find\");\nconst flat_1 = require(\"./flat\");\nconst insert_1 = require(\"./insert\");\nconst map_1 = require(\"./map\");\nconst move_1 = require(\"./move\");\nconst reduce_1 = require(\"./reduce\");\nconst remove_1 = require(\"./remove\");\nconst replace_1 = require(\"./replace\");\nconst splice_1 = require(\"./splice\");\nconst visit_1 = require(\"./visit\");\nclass Tree {\n constructor(getChildrenOrBaseOptions, appliedOptions) {\n this.appliedOptions = appliedOptions;\n /**\n * Returns the node's children.\n *\n * This is the same as the `getChildren` option passed to `defineTree`, included here for convenience.\n */\n this.getChildren = (node, indexPath, context) => {\n return this._getChildren(node, indexPath, context);\n };\n this.mergeOptions = (options) => (Object.assign(Object.assign(Object.assign({}, this.baseOptions), this.appliedOptions), options));\n this.withOptions = (newOptions) => new Tree(this.baseOptions, Object.assign(Object.assign({}, this.appliedOptions), newOptions));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.access = (node, indexPath) => (0, access_1.access)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.accessPath = (node, indexPath) => (0, access_1.accessPath)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.get = (node, indexPath) => (0, access_1.get)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns the ancestors of a node.\n */\n this.ancestors = (node, indexPath) => (0, access_1.ancestors)(node, indexPath, this.mergeOptions({}));\n /**\n * Generate a diagram of the tree, as a string.\n */\n this.diagram = (node, options) => typeof options === 'function'\n ? (0, diagram_1.diagram)(node, this.mergeOptions({ getLabel: options }))\n : (0, diagram_1.diagram)(node, this.mergeOptions(options));\n this.find = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.find)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.find)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAll = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAll)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAll)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findPath = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findPath)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findPath)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAllPaths = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAllPaths)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAllPaths)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n /**\n * Returns an array of every [IndexPath, Node] pair in the tree.\n */\n this.entries = (node) => (0, entries_1.entries)(node, this.mergeOptions({}));\n /**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\n this.flat = (node) => (0, flat_1.flat)(node, this.mergeOptions({}));\n this.reduce = (node, nextResult, initialResult) => (0, reduce_1.reduce)(node, this.mergeOptions({ nextResult, initialResult }));\n this.map = (node, transform) => (0, map_1.map)(node, this.mergeOptions({ transform }));\n this.flatMap = (node, transform) => (0, map_1.flatMap)(node, this.mergeOptions({ transform }));\n this.visit = (node, onEnterOrOptions) => typeof onEnterOrOptions === 'function'\n ? (0, visit_1.visit)(node, this.mergeOptions({ onEnter: onEnterOrOptions }))\n : (0, visit_1.visit)(node, this.mergeOptions(Object.assign({}, onEnterOrOptions)));\n // --- Mutations ---\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insert = (node, options) => (0, insert_1.insert)(node, this.mergeOptions(options));\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insertWithPathTracking = (node, options) => (0, insert_1.insertWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.remove = (node, options) => (0, remove_1.remove)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.removeWithPathTracking = (node, options) => (0, remove_1.removeWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Move nodes from one `IndexPath` to another.\n */\n this.move = (node, options) => (0, move_1.move)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.splice = (node, options) => (0, splice_1.splice)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.spliceWithPathTracking = (node, options) => (0, splice_1.spliceWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Replace the node at the given `IndexPath` with another\n */\n this.replace = (node, options) => (0, replace_1.replace)(node, this.mergeOptions(options));\n this.baseOptions =\n typeof getChildrenOrBaseOptions === 'function'\n ? { getChildren: getChildrenOrBaseOptions }\n : getChildrenOrBaseOptions;\n this._getChildren = this.baseOptions.getChildren;\n }\n}\nfunction defineTree(getChildren) {\n return new Tree(getChildren, {});\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withOptions = void 0;\nconst defineTree_1 = require(\"./defineTree\");\n/**\n * Return every tree utility function with options partially applied.\n *\n * @deprecated Use `defineTree` instead\n */\nexports.withOptions = defineTree_1.defineTree;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./access\"), exports);\n__exportStar(require(\"./ancestors\"), exports);\n__exportStar(require(\"./defineTree\"), exports);\n__exportStar(require(\"./diagram\"), exports);\n__exportStar(require(\"./entries\"), exports);\n__exportStar(require(\"./find\"), exports);\n__exportStar(require(\"./flat\"), exports);\n__exportStar(require(\"./indexPath\"), exports);\n__exportStar(require(\"./insert\"), exports);\n__exportStar(require(\"./map\"), exports);\n__exportStar(require(\"./move\"), exports);\n__exportStar(require(\"./options\"), exports);\n__exportStar(require(\"./reduce\"), exports);\n__exportStar(require(\"./remove\"), exports);\n__exportStar(require(\"./replace\"), exports);\n__exportStar(require(\"./sort\"), exports);\n__exportStar(require(\"./splice\"), exports);\n__exportStar(require(\"./transformPath\"), exports);\n__exportStar(require(\"./visit\"), exports);\n__exportStar(require(\"./withOptions\"), exports);\n","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @param {boolean} [cleanup] Apply semantic cleanup before returning.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n // Check for equality\n if (text1 === text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n if (cursor_pos != null) {\n var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n if (editdiff) {\n return editdiff;\n }\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs, _fix_unicode);\n if (cleanup) {\n diff_cleanupSemantic(diffs);\n }\n return diffs;\n}\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i !== -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)],\n ];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length === 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = delta % 2 !== 0;\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (\n x1 < text1_length &&\n y1 < text2_length &&\n text1.charAt(x1) === text2.charAt(y1)\n ) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (\n x2 < text1_length &&\n y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ===\n text2.charAt(text2_length - y2 - 1)\n ) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\nfunction diff_commonOverlap_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (\n found == 0 ||\n text1.substring(text_length - length) == text2.substring(0, length)\n ) {\n best = length;\n length++;\n }\n }\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = \"\";\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n var prefixLength = diff_commonPrefix(\n longtext.substring(i),\n shorttext.substring(j)\n );\n var suffixLength = diff_commonSuffix(\n longtext.substring(0, i),\n shorttext.substring(0, j)\n );\n if (best_common.length < suffixLength + prefixLength) {\n best_common =\n shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [\n best_longtext_a,\n best_longtext_b,\n best_shorttext_a,\n best_shorttext_b,\n best_common,\n ];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 4)\n );\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 2)\n );\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemantic(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastequality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (\n lastequality &&\n lastequality.length <=\n Math.max(length_insertions1, length_deletions1) &&\n lastequality.length <= Math.max(length_insertions2, length_deletions2)\n ) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [\n DIFF_DELETE,\n lastequality,\n ]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (\n diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT\n ) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (\n overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2\n ) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n insertion.substring(0, overlap_length1),\n ]);\n diffs[pointer - 1][1] = deletion.substring(\n 0,\n deletion.length - overlap_length1\n );\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (\n overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2\n ) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n deletion.substring(0, overlap_length2),\n ]);\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(\n 0,\n insertion.length - overlap_length2\n );\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n}\n\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemanticLossless(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n}\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n diffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = \"\";\n var text_insert = \"\";\n var commonlength;\n while (pointer < diffs.length) {\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n diffs.splice(pointer, 1);\n continue;\n }\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n var previous_equality = pointer - count_insert - count_delete - 1;\n if (fix_unicode) {\n // prevent splitting of unicode surrogate pairs. when fix_unicode is true,\n // we assume that the old and new text in the diff are complete and correct\n // unicode-encoded JS strings, but the tuple boundaries may fall between\n // surrogate pairs. we fix this by shaving off stray surrogates from the end\n // of the previous equality and the beginning of this equality. this may create\n // empty equalities or a common prefix or suffix. for example, if AB and AC are\n // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n // inserting 'AC', and then the common suffix 'AC' will be eliminated. in this\n // particular case, both equalities go away, we absorb any previous inequalities,\n // and we keep scanning for the next equality before rewriting the tuples.\n if (\n previous_equality >= 0 &&\n ends_with_pair_start(diffs[previous_equality][1])\n ) {\n var stray = diffs[previous_equality][1].slice(-1);\n diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n 0,\n -1\n );\n text_delete = stray + text_delete;\n text_insert = stray + text_insert;\n if (!diffs[previous_equality][1]) {\n // emptied out previous equality, so delete it and include previous delete/insert\n diffs.splice(previous_equality, 1);\n pointer--;\n var k = previous_equality - 1;\n if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n count_insert++;\n text_insert = diffs[k][1] + text_insert;\n k--;\n }\n if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n count_delete++;\n text_delete = diffs[k][1] + text_delete;\n k--;\n }\n previous_equality = k;\n }\n }\n if (starts_with_pair_end(diffs[pointer][1])) {\n var stray = diffs[pointer][1].charAt(0);\n diffs[pointer][1] = diffs[pointer][1].slice(1);\n text_delete += stray;\n text_insert += stray;\n }\n }\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n // for empty equality not at end, wait for next equality\n diffs.splice(pointer, 1);\n break;\n }\n if (text_delete.length > 0 || text_insert.length > 0) {\n // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n if (text_delete.length > 0 && text_insert.length > 0) {\n // Factor out any common prefixes.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (previous_equality >= 0) {\n diffs[previous_equality][1] += text_insert.substring(\n 0,\n commonlength\n );\n } else {\n diffs.splice(0, 0, [\n DIFF_EQUAL,\n text_insert.substring(0, commonlength),\n ]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixes.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) +\n diffs[pointer][1];\n text_insert = text_insert.substring(\n 0,\n text_insert.length - commonlength\n );\n text_delete = text_delete.substring(\n 0,\n text_delete.length - commonlength\n );\n }\n }\n // Delete the offending records and add the merged ones.\n var n = count_insert + count_delete;\n if (text_delete.length === 0 && text_insert.length === 0) {\n diffs.splice(pointer - n, n);\n pointer = pointer - n;\n } else if (text_delete.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 1;\n } else if (text_insert.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n pointer = pointer - n + 1;\n } else {\n diffs.splice(\n pointer - n,\n n,\n [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]\n );\n pointer = pointer - n + 2;\n }\n }\n if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = \"\";\n text_insert = \"\";\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === \"\") {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] === DIFF_EQUAL &&\n diffs[pointer + 1][0] === DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n if (\n diffs[pointer][1].substring(\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n ) === diffs[pointer - 1][1]\n ) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] =\n diffs[pointer - 1][1] +\n diffs[pointer][1].substring(\n 0,\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n );\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (\n diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]\n ) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs, fix_unicode);\n }\n}\n\nfunction is_surrogate_pair_start(charCode) {\n return charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n return charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n var ret = [];\n for (var i = 0; i < tuples.length; i++) {\n if (tuples[i][1].length > 0) {\n ret.push(tuples[i]);\n }\n }\n return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n return null;\n }\n return remove_empty_tuples([\n [DIFF_EQUAL, before],\n [DIFF_DELETE, oldMiddle],\n [DIFF_INSERT, newMiddle],\n [DIFF_EQUAL, after],\n ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n // note: this runs after equality check has ruled out exact equality\n var oldRange =\n typeof cursor_pos === \"number\"\n ? { index: cursor_pos, length: 0 }\n : cursor_pos.oldRange;\n var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n // take into account the old and new selection to generate the best diff\n // possible for a text edit. for example, a text change from \"xxx\" to \"xx\"\n // could be a delete or forwards-delete of any one of the x's, or the\n // result of selecting two of the x's and typing \"x\".\n var oldLength = oldText.length;\n var newLength = newText.length;\n if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n // see if we have an insert or delete before or after cursor\n var oldCursor = oldRange.index;\n var oldBefore = oldText.slice(0, oldCursor);\n var oldAfter = oldText.slice(oldCursor);\n var maybeNewCursor = newRange ? newRange.index : null;\n editBefore: {\n // is this an insert or delete right before oldCursor?\n var newCursor = oldCursor + newLength - oldLength;\n if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n break editBefore;\n }\n if (newCursor < 0 || newCursor > newLength) {\n break editBefore;\n }\n var newBefore = newText.slice(0, newCursor);\n var newAfter = newText.slice(newCursor);\n if (newAfter !== oldAfter) {\n break editBefore;\n }\n var prefixLength = Math.min(oldCursor, newCursor);\n var oldPrefix = oldBefore.slice(0, prefixLength);\n var newPrefix = newBefore.slice(0, prefixLength);\n if (oldPrefix !== newPrefix) {\n break editBefore;\n }\n var oldMiddle = oldBefore.slice(prefixLength);\n var newMiddle = newBefore.slice(prefixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n }\n editAfter: {\n // is this an insert or delete right after oldCursor?\n if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n break editAfter;\n }\n var cursor = oldCursor;\n var newBefore = newText.slice(0, cursor);\n var newAfter = newText.slice(cursor);\n if (newBefore !== oldBefore) {\n break editAfter;\n }\n var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n if (oldSuffix !== newSuffix) {\n break editAfter;\n }\n var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n }\n }\n if (oldRange.length > 0 && newRange && newRange.length === 0) {\n replaceRange: {\n // see if diff could be a splice of the old selection range\n var oldPrefix = oldText.slice(0, oldRange.index);\n var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n var prefixLength = oldPrefix.length;\n var suffixLength = oldSuffix.length;\n if (newLength < prefixLength + suffixLength) {\n break replaceRange;\n }\n var newPrefix = newText.slice(0, prefixLength);\n var newSuffix = newText.slice(newLength - suffixLength);\n if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n break replaceRange;\n }\n var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n }\n }\n\n return null;\n}\n\nfunction diff(text1, text2, cursor_pos, cleanup) {\n // only pass fix_unicode=true at the top level, not when diff_main is\n // recursively invoked\n return diff_main(text1, text2, cursor_pos, cleanup, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n","export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\nexport * from \"./react/tableHooks\";\n","\"use client\";\n\nimport { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n return useMemo(() => {\n return (\n value ??\n new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n })\n );\n }, [value]);\n}\n","\"use client\";\n\nimport { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useObservable } from \"@noya-app/observable-react\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSecrets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ secrets: [], loading: true }), []);\n const secrets = useSelector(\n fileId ? client.secretsByFileId$[fileId] : client.secrets$\n );\n return secrets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaWorkspaceBilling(workspaceId: string) {\n const client = useNoyaClientOrFallback();\n const workspaceBilling = useSelector(\n useNoyaClient().workspaceBilling$.billingByWorkspaceId[workspaceId]\n );\n\n // Workspace billing will always have products, but will be empty until the billing is fetched\n const hasFetchedWorkspaceBilling =\n workspaceBilling?.loading === false &&\n workspaceBilling?.availableProducts.length > 0;\n\n useEffect(() => {\n if (!hasFetchedWorkspaceBilling) {\n client.workspaces.getBilling(workspaceId);\n }\n }, [client, hasFetchedWorkspaceBilling, workspaceId]);\n\n return (\n workspaceBilling || {\n subscriptions: [],\n availableProducts: [],\n portalUrl: undefined,\n loading: true,\n }\n );\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useNoyaSites() {\n const sites = useSelector(useNoyaClientOrFallback().sites$);\n return sites;\n}\n\nexport function useNoyaDeployments() {\n const deployments = useSelector(useNoyaClientOrFallback().deployments$);\n return deployments;\n}\n\nexport function useNoyaSite(siteId: string) {\n const { sites } = useNoyaSites();\n const site = sites.find((s) => s.id === siteId);\n\n if (!site) {\n throw new Error(`Site ${siteId} not found`);\n }\n\n return { site };\n}\n\nexport function useNoyaPersonalAccessTokens() {\n const tokens = useSelector(useNoyaClientOrFallback().personalAccessTokens$);\n return tokens;\n}\n\nexport function useNoyaWorkspaces() {\n const client = useNoyaClientOrFallback();\n const workspaces = useSelector(client.workspaces$);\n const session = useSelector(client.session$);\n const fetchWorkspaces = !workspaces.workspaces.length && session;\n\n useEffect(() => {\n if (fetchWorkspaces) {\n client.workspaces.read();\n }\n }, [client, fetchWorkspaces]);\n\n return workspaces;\n}\n\nexport function useNoyaMultiplayerRoomToken(fileId: string) {\n const client = useNoyaClientOrFallback();\n const multiplayerRoomToken = useObservable(\n client.multiplayerRoomTokens$,\n useMemo(() => (tokens) => tokens[fileId]?.payload ?? undefined, [fileId])\n );\n return multiplayerRoomToken as { access: \"read\" | \"write\" } | undefined;\n}\n\nexport function useNoyaWorkspaceInvitations(workspaceId: string) {\n const client = useNoyaClientOrFallback();\n const workspaceInvitations = useSelector(\n useNoyaClient().workspaceInvitations$.invitationsByWorkspaceId[workspaceId]\n );\n\n const fallback = useMemo(\n () => ({\n invitations: [],\n loading: true as const,\n }),\n []\n );\n\n useEffect(() => {\n if (!workspaceInvitations) {\n client.workspaces.getInvitations(workspaceId);\n }\n }, [client, workspaceId, workspaceInvitations]);\n\n return workspaceInvitations || fallback;\n}\n\nconst emptyObservedFileVersions: {\n fileVersions: NoyaAPI.FileVersion[];\n loading: NoyaAPI.FetchStatus;\n} = {\n fileVersions: [],\n loading: \"idle\",\n};\n\nexport function useNoyaOwnedFileVersions(fileId: string): {\n fileVersions: NoyaAPI.FileVersion[];\n loading: NoyaAPI.FetchStatus;\n reload: () => Promise<void>;\n} {\n const client = useNoyaClientOrFallback();\n const path = useMemo(() => [fileId] as [string], [fileId]);\n const fileVersions = useObservable(client.ownedFileVersions$, path);\n\n useEffect(() => {\n if (!fileVersions || fileVersions.loading === \"idle\") {\n client.fileVersions.refetch({ fileId, type: \"owned\" });\n }\n }, [client, fileId, fileVersions, fileVersions?.loading]);\n\n const reload = useCallback(() => {\n return client.fileVersions.refetch({ fileId, type: \"owned\" });\n }, [client, fileId]);\n\n const result = useMemo(() => {\n return {\n ...(fileVersions ?? emptyObservedFileVersions),\n reload,\n };\n }, [fileVersions, reload]);\n\n return result;\n}\n\nexport function useNoyaTemplates() {\n const client = useNoyaClientOrFallback();\n const { templates, loading } = useSelector(client.templates$);\n\n useEffect(() => {\n if (loading === \"idle\") {\n client.templates.read();\n }\n }, [client, loading]);\n\n return {\n templates,\n loading: loading === \"fetching\",\n };\n}\n","import { NoyaAPI, RefetchableObservable } from \"@noya-app/noya-api\";\nimport { useObservable } from \"@noya-app/noya-multiplayer-react\";\nimport { SelectConfig, SelectedShape } from \"@noya-app/observable\";\nimport { useMemo } from \"react\";\nimport { useNoyaClientOrFallback } from \"./context\";\n\ntype FileListTableOptions = {\n policy?: NoyaAPI.FetchPolicy;\n debug?: boolean;\n};\n\nfunction useFileListTable<Config extends SelectConfig<NoyaAPI.FileListItem>>(\n { where, select }: { where?: { id?: string | null }; select: Config },\n options: FileListTableOptions\n): {\n status: NoyaAPI.FetchStatus;\n data: SelectedShape<NoyaAPI.FileListItem, Config>[];\n refetch: () => void;\n} {\n const client = useNoyaClientOrFallback();\n\n const stableSelect = useMemo(() => {\n return JSON.stringify(select);\n }, [select]);\n\n const observable = useMemo(() => {\n if (where?.id === null) {\n return new RefetchableObservable<{\n status: NoyaAPI.FetchStatus;\n data: SelectedShape<NoyaAPI.FileListItem, Config>[];\n }>({\n status: \"success\",\n data: [],\n });\n }\n\n const parsedSelect = JSON.parse(stableSelect) as typeof select;\n\n return client.fileList$.query(\n {\n $where: { id: where?.id },\n $select: parsedSelect,\n },\n {\n policy: options.policy,\n debug: options.debug,\n }\n );\n }, [\n client.fileList$,\n options.policy,\n stableSelect,\n where?.id,\n options.debug,\n ]);\n\n const { status, data } = useObservable(observable);\n\n return useMemo(() => {\n return {\n status,\n data,\n refetch: observable.refetch,\n };\n }, [status, data, observable]);\n}\n\nexport function useFileList<Config extends SelectConfig<NoyaAPI.FileListItem>>(\n select: Config,\n options: FileListTableOptions = {}\n): {\n status: NoyaAPI.FetchStatus;\n data: SelectedShape<NoyaAPI.FileListItem, Config>[];\n refetch: () => void;\n} {\n return useFileListTable({ select }, options);\n}\n\nexport function useFileListItem<\n Config extends SelectConfig<NoyaAPI.FileListItem>,\n>(\n id: string | undefined,\n select: Config,\n options: FileListTableOptions = {}\n): {\n status: NoyaAPI.FetchStatus;\n data: SelectedShape<NoyaAPI.FileListItem, Config> | undefined;\n refetch: () => void;\n} {\n const { status, data, refetch } = useFileListTable(\n { where: { id: id ?? null }, select },\n options\n );\n\n return useMemo(() => {\n return {\n data: data.at(0),\n status,\n refetch,\n };\n }, [data, status, refetch]);\n}\n","/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options = {}) {\n return { ...Clone(schema), ...options };\n}\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\n","/** A registry for user defined string formats */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined string formats */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered format */\nexport function Delete(format) {\n return map.delete(format);\n}\n/** Returns true if the user defined string format exists */\nexport function Has(format) {\n return map.has(format);\n}\n/** Sets a validation function for a user defined string format */\nexport function Set(format, func) {\n map.set(format, func);\n}\n/** Gets a validation function for a user defined string format */\nexport function Get(format) {\n return map.get(format);\n}\n","/** A registry for user defined types */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined types */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered type */\nexport function Delete(kind) {\n return map.delete(kind);\n}\n/** Returns true if this registry contains this kind */\nexport function Has(kind) {\n return map.has(kind);\n}\n/** Sets a validation function for a user defined type */\nexport function Set(kind, func) {\n map.set(kind, func);\n}\n/** Gets a custom validation function for a user defined type */\nexport function Get(kind) {\n return map.get(kind);\n}\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options = {}) {\n return { ...options, [Kind]: 'Any' };\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(schema, options = {}) {\n return {\n ...options,\n [Kind]: 'Array',\n type: 'array',\n items: CloneType(schema),\n };\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options = {}) {\n return {\n ...options,\n [Kind]: 'AsyncIterator',\n type: 'AsyncIterator',\n items: CloneType(items),\n };\n}\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options = {}) {\n return {\n ...options,\n [Kind]: 'Never',\n not: {},\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return {\n [Kind]: 'MappedResult',\n properties\n };\n}\n","import { CloneType, CloneRest } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return {\n ...options,\n [Kind]: 'Constructor',\n type: 'Constructor',\n parameters: CloneRest(parameters),\n returns: CloneType(returns),\n };\n}\n","import { CloneType, CloneRest } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return {\n ...options,\n [Kind]: 'Function',\n type: 'Function',\n parameters: CloneRest(parameters),\n returns: CloneType(returns),\n };\n}\n","import { CloneRest } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return { ...options, [Kind]: 'Union', anyOf: CloneRest(T) };\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(T) {\n return T.some(L => IsOptional(L));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(T) {\n return T.map(L => IsOptional(L) ? RemoveOptionalFromType(L) : L);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(T, options) {\n return (IsUnionOptional(T)\n ? Optional(UnionCreate(RemoveOptionalFromRest(T), options))\n : UnionCreate(RemoveOptionalFromRest(T), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options = {}) {\n // prettier-ignore\n return (T.length === 0 ? Never(options) :\n T.length === 1 ? CloneType(T[0], options) :\n ResolveUnion(T, options));\n}\n","import { Never } from '../never/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(T, options = {}) {\n // prettier-ignore\n return (T.length === 0 ? Never(options) :\n T.length === 1 ? CloneType(T[0], options) :\n UnionCreate(T, options));\n}\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options = {}) {\n return {\n ...options,\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options = {}) {\n return {\n ...options,\n [Kind]: 'Boolean',\n type: 'boolean',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options = {}) {\n return {\n ...options,\n [Kind]: 'BigInt',\n type: 'bigint',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options = {}) {\n return {\n ...options,\n [Kind]: 'Number',\n type: 'number',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options = {}) {\n return { ...options, [Kind]: 'String', type: 'string' };\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options = {}) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return { ...options, [Kind]: 'TemplateLiteral', type: 'string', pattern };\n}\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(T) {\n const R = TemplateLiteralGenerate(T);\n return R.map(S => S.toString());\n}\n// prettier-ignore\nfunction FromUnion(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexPropertyKeys(L));\n return Acc;\n}\n// prettier-ignore\nfunction FromLiteral(T) {\n return ([T.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(T) {\n return [...new Set((IsTemplateLiteral(T) ? FromTemplateLiteral(T) :\n IsUnion(T) ? FromUnion(T.anyOf) :\n IsLiteral(T) ? FromLiteral(T.const) :\n IsNumber(T) ? ['[number]'] :\n IsInteger(T) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(T, P, options) {\n const Acc = {};\n for (const K2 of Object.getOwnPropertyNames(P)) {\n Acc[K2] = Index(T, IndexPropertyKeys(P[K2]), options);\n }\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(T, R, options) {\n return FromProperties(T, R.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(T, R, options) {\n const P = FromMappedResult(T, R, options);\n return MappedResult(P);\n}\n","import { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(T, K) {\n return T.map(L => IndexFromPropertyKey(L, K));\n}\n// prettier-ignore\nfunction FromIntersectRest(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction FromIntersect(T, K) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(T, K))));\n}\n// prettier-ignore\nfunction FromUnionRest(T) {\n return (T.some(L => IsNever(L))\n ? []\n : T);\n}\n// prettier-ignore\nfunction FromUnion(T, K) {\n return (UnionEvaluated(FromUnionRest(FromRest(T, K))));\n}\n// prettier-ignore\nfunction FromTuple(T, K) {\n return (K in T ? T[K] :\n K === '[number]' ? UnionEvaluated(T) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(T, K) {\n return (K === '[number]'\n ? T\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(T, K) {\n return (K in T ? T[K] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(T, K) {\n return (IsIntersect(T) ? FromIntersect(T.allOf, K) :\n IsUnion(T) ? FromUnion(T.anyOf, K) :\n IsTuple(T) ? FromTuple(T.items ?? [], K) :\n IsArray(T) ? FromArray(T.items, K) :\n IsObject(T) ? FromProperty(T.properties, K) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(T, K) {\n return K.map(L => IndexFromPropertyKey(T, L));\n}\n// prettier-ignore\nfunction FromSchema(T, K) {\n return (UnionEvaluated(IndexFromPropertyKeys(T, K)));\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(T, K, options = {}) {\n // prettier-ignore\n return (IsMappedResult(K) ? CloneType(IndexFromMappedResult(T, K, options)) :\n IsMappedKey(K) ? CloneType(IndexFromMappedKey(T, K, options)) :\n IsSchema(K) ? CloneType(FromSchema(T, IndexPropertyKeys(K)), options) :\n CloneType(FromSchema(T, K), options));\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(T, K, options) {\n return { [K]: Index(T, [K], options) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(T, K, options) {\n return K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIndexPropertyKey(T, L, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(T, K, options) {\n return MappedIndexPropertyKeys(T, K.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(T, K, options) {\n const P = MappedIndexProperties(T, K, options);\n return MappedResult(P);\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options = {}) {\n return {\n ...options,\n [Kind]: 'Iterator',\n type: 'Iterator',\n items: CloneType(items),\n };\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsSchema } from '../guard/kind.mjs';\n/** `[Json]` Creates an Object type */\nfunction _Object(properties, options = {}) {\n const propertyKeys = globalThis.Object.getOwnPropertyNames(properties);\n const optionalKeys = propertyKeys.filter((key) => IsOptional(properties[key]));\n const requiredKeys = propertyKeys.filter((name) => !optionalKeys.includes(name));\n const clonedAdditionalProperties = IsSchema(options.additionalProperties) ? { additionalProperties: CloneType(options.additionalProperties) } : {};\n const clonedProperties = {};\n for (const key of propertyKeys)\n clonedProperties[key] = CloneType(properties[key]);\n return (requiredKeys.length > 0\n ? { ...options, ...clonedAdditionalProperties, [Kind]: 'Object', type: 'object', properties: clonedProperties, required: requiredKeys }\n : { ...options, ...clonedAdditionalProperties, [Kind]: 'Object', type: 'object', properties: clonedProperties });\n}\n/** `[Json]` Creates an Object type */\nexport const Object = _Object;\n","import { CloneType } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options = {}) {\n return {\n ...options,\n [Kind]: 'Promise',\n type: 'Promise',\n item: CloneType(item),\n };\n}\n","import { ReadonlyKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return Discard(CloneType(schema), [ReadonlyKind]);\n}\nfunction AddReadonly(schema) {\n return { ...CloneType(schema), [ReadonlyKind]: 'Readonly' };\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CloneRest } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(items, options = {}) {\n // return TupleResolver.Resolve(T)\n const [additionalItems, minItems, maxItems] = [false, items.length, items.length];\n // prettier-ignore\n return (items.length > 0 ?\n { ...options, [Kind]: 'Tuple', type: 'array', items: CloneRest(items), additionalItems, minItems, maxItems } :\n { ...options, [Kind]: 'Tuple', type: 'array', minItems, maxItems });\n}\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns)) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns)) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items)) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items)) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf)) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf)) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? [])) :\n IsObject(T) ? Object(FromProperties(K, T.properties)) :\n IsArray(T) ? Array(FromSchemaType(K, T.items)) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item)) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options = {}) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return CloneType(Object(R), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return Discard(CloneType(schema), [OptionalKind]);\n}\nfunction AddOptional(schema) {\n return { ...CloneType(schema), [OptionalKind]: 'Optional' };\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CloneType, CloneRest } from '../clone/type.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: CloneType(options.unevaluatedProperties) }\n : {};\n return ((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: CloneRest(T) }\n : { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: CloneRest(T) }));\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(T) {\n return T.every(L => IsOptional(L));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(T) {\n return T.map(L => IsOptional(L) ? RemoveOptionalFromType(L) : L);\n}\n// prettier-ignore\nfunction ResolveIntersect(T, options) {\n return (IsIntersectOptional(T)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(T), options))\n : IntersectCreate(RemoveOptionalFromRest(T), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(T, options = {}) {\n if (T.length === 0)\n return Never(options);\n if (T.length === 1)\n return CloneType(T[0], options);\n if (T.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(T, options);\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(T, options = {}) {\n if (T.length === 0)\n return Never(options);\n if (T.length === 1)\n return CloneType(T[0], options);\n if (T.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(T, options);\n}\n","import { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(T) {\n return T.map(L => AwaitedResolve(L));\n}\n// prettier-ignore\nfunction FromIntersect(T) {\n return Intersect(FromRest(T));\n}\n// prettier-ignore\nfunction FromUnion(T) {\n return Union(FromRest(T));\n}\n// prettier-ignore\nfunction FromPromise(T) {\n return AwaitedResolve(T);\n}\n// ----------------------------------------------------------------\n// AwaitedResolve\n// ----------------------------------------------------------------\n// prettier-ignore\nfunction AwaitedResolve(T) {\n return (IsIntersect(T) ? FromIntersect(T.allOf) :\n IsUnion(T) ? FromUnion(T.anyOf) :\n IsPromise(T) ? FromPromise(T.item) :\n T);\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(T, options = {}) {\n return CloneType(AwaitedResolve(T), options);\n}\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(KeyOfPropertyKeys(L));\n return Acc;\n}\n// prettier-ignore\nfunction FromIntersect(T) {\n const C = FromRest(T);\n const R = SetUnionMany(C);\n return R;\n}\n// prettier-ignore\nfunction FromUnion(T) {\n const C = FromRest(T);\n const R = SetIntersectMany(C);\n return R;\n}\n// prettier-ignore\nfunction FromTuple(T) {\n return T.map((_, I) => I.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(T) {\n return (IsIntersect(T) ? FromIntersect(T.allOf) :\n IsUnion(T) ? FromUnion(T.anyOf) :\n IsTuple(T) ? FromTuple(T.items ?? []) :\n IsArray(T) ? FromArray(T.items) :\n IsObject(T) ? FromProperties(T.properties) :\n IsRecord(T) ? FromPatternProperties(T.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(T) {\n return T.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(T, options = {}) {\n if (IsMappedResult(T)) {\n return KeyOfFromMappedResult(T, options);\n }\n else {\n const K = KeyOfPropertyKeys(T);\n const S = KeyOfPropertyKeysToRest(K);\n const U = UnionEvaluated(S);\n return CloneType(U, options);\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = KeyOf(K[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options = {}) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = Object(P, options);\n return R;\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options = {}) {\n return {\n ...options,\n [Kind]: 'Date',\n type: 'Date',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options = {}) {\n return {\n ...options,\n [Kind]: 'Null',\n type: 'null',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return { ...options, [Kind]: 'Symbol', type: 'symbol' };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options = {}) {\n return { ...options, [Kind]: 'Undefined', type: 'undefined' };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options = {}) {\n return { ...options, [Kind]: 'Uint8Array', type: 'Uint8Array' };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options = {}) {\n return {\n ...options,\n [Kind]: 'Unknown',\n };\n}\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(Object(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n Object({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options = {}) {\n return CloneType(FromValue(T, true), options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { CloneRest } from '../clone/type.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options = {}) {\n return Tuple(CloneRest(schema.parameters), { ...options });\n}\n","import { CloneType, CloneRest } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsConstructor, IsFunction, IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsPromise, IsAsyncIterator, IsIterator, IsRef } from '../guard/kind.mjs';\nfunction FromRest(schema, references) {\n return schema.map((schema) => Deref(schema, references));\n}\n// prettier-ignore\nfunction FromProperties(properties, references) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties)) {\n Acc[K] = Deref(properties[K], references);\n }\n return Acc;\n}\n// prettier-ignore\nfunction FromConstructor(schema, references) {\n schema.parameters = FromRest(schema.parameters, references);\n schema.returns = Deref(schema.returns, references);\n return schema;\n}\n// prettier-ignore\nfunction FromFunction(schema, references) {\n schema.parameters = FromRest(schema.parameters, references);\n schema.returns = Deref(schema.returns, references);\n return schema;\n}\n// prettier-ignore\nfunction FromIntersect(schema, references) {\n schema.allOf = FromRest(schema.allOf, references);\n return schema;\n}\n// prettier-ignore\nfunction FromUnion(schema, references) {\n schema.anyOf = FromRest(schema.anyOf, references);\n return schema;\n}\n// prettier-ignore\nfunction FromTuple(schema, references) {\n if (IsUndefined(schema.items))\n return schema;\n schema.items = FromRest(schema.items, references);\n return schema;\n}\n// prettier-ignore\nfunction FromArray(schema, references) {\n schema.items = Deref(schema.items, references);\n return schema;\n}\n// prettier-ignore\nfunction FromObject(schema, references) {\n schema.properties = FromProperties(schema.properties, references);\n return schema;\n}\n// prettier-ignore\nfunction FromPromise(schema, references) {\n schema.item = Deref(schema.item, references);\n return schema;\n}\n// prettier-ignore\nfunction FromAsyncIterator(schema, references) {\n schema.items = Deref(schema.items, references);\n return schema;\n}\n// prettier-ignore\nfunction FromIterator(schema, references) {\n schema.items = Deref(schema.items, references);\n return schema;\n}\n// prettier-ignore\nfunction FromRef(schema, references) {\n const target = references.find(remote => remote.$id === schema.$ref);\n if (target === undefined)\n throw Error(`Unable to dereference schema with $id ${schema.$ref}`);\n const discard = Discard(target, ['$id']);\n return Deref(discard, references);\n}\n// prettier-ignore\nfunction DerefResolve(schema, references) {\n return (IsConstructor(schema) ? FromConstructor(schema, references) :\n IsFunction(schema) ? FromFunction(schema, references) :\n IsIntersect(schema) ? FromIntersect(schema, references) :\n IsUnion(schema) ? FromUnion(schema, references) :\n IsTuple(schema) ? FromTuple(schema, references) :\n IsArray(schema) ? FromArray(schema, references) :\n IsObject(schema) ? FromObject(schema, references) :\n IsPromise(schema) ? FromPromise(schema, references) :\n IsAsyncIterator(schema) ? FromAsyncIterator(schema, references) :\n IsIterator(schema) ? FromIterator(schema, references) :\n IsRef(schema) ? FromRef(schema, references) :\n schema);\n}\n// ------------------------------------------------------------------\n// TDeref\n// ------------------------------------------------------------------\n/** `[Json]` Creates a dereferenced type */\nexport function Deref(schema, references) {\n return DerefResolve(CloneType(schema), CloneRest(references));\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options = {}) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options = {}) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CloneType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CloneType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, options)\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CloneType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CloneType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CloneType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CloneType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CloneType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CloneType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { CloneType } from '../clone/type.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options = {}) {\n return CloneType(schema.returns, options);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options = {}) {\n return {\n ...options,\n [Kind]: 'Integer',\n type: 'integer',\n };\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, options)\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n return K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, schema) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n schema);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(schema, options) {\n return {\n ...options,\n [Kind]: 'Not',\n not: CloneType(schema),\n };\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\n// prettier-ignore\nfunction FromProperties(P, K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Omit(P[K2], K, options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, K, options) {\n return FromProperties(R.properties, K, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(R, K, options) {\n const P = FromMappedResult(R, K, options);\n return MappedResult(P);\n}\n","import { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromIntersect(T, K) {\n return T.map((T) => OmitResolve(T, K));\n}\n// prettier-ignore\nfunction FromUnion(T, K) {\n return T.map((T) => OmitResolve(T, K));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(T, K) {\n const { [K]: _, ...R } = T;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(T, K) {\n return K.reduce((T, K2) => FromProperty(T, K2), T);\n}\n// ------------------------------------------------------------------\n// OmitResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction OmitResolve(T, K) {\n return (IsIntersect(T) ? Intersect(FromIntersect(T.allOf, K)) :\n IsUnion(T) ? Union(FromUnion(T.anyOf, K)) :\n IsObject(T) ? Object(FromProperties(T.properties, K)) :\n Object({}));\n}\nexport function Omit(T, K, options = {}) {\n // mapped\n if (IsMappedKey(K))\n return OmitFromMappedKey(T, K, options);\n if (IsMappedResult(T))\n return OmitFromMappedResult(T, K, options);\n // non-mapped\n const I = IsSchema(K) ? IndexPropertyKeys(K) : K;\n const D = Discard(T, [TransformKind, '$id', 'required']);\n const R = CloneType(OmitResolve(T, I), options);\n return { ...D, ...R };\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\n// prettier-ignore\nfunction FromPropertyKey(T, K, options) {\n return {\n [K]: Omit(T, [K], options)\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(T, K, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(T, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(T, K, options) {\n return FromPropertyKeys(T, K.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(T, K, options) {\n const P = FromMappedKey(T, K, options);\n return MappedResult(P);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { CloneRest } from '../clone/type.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options = {}) {\n return Tuple(CloneRest(schema.parameters), { ...options });\n}\n","import { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsIntersect, IsUnion, IsObject } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(T) {\n return T.map(L => PartialResolve(L));\n}\n// prettier-ignore\nfunction FromProperties(T) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(T))\n Acc[K] = Optional(T[K]);\n return Acc;\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(T) {\n return (IsIntersect(T) ? Intersect(FromRest(T.allOf)) :\n IsUnion(T) ? Union(FromRest(T.anyOf)) :\n IsObject(T) ? Object(FromProperties(T.properties)) :\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(T, options = {}) {\n if (IsMappedResult(T))\n return PartialFromMappedResult(T, options);\n const D = Discard(T, [TransformKind, '$id', 'required']);\n const R = CloneType(PartialResolve(T), options);\n return { ...D, ...R };\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\n// prettier-ignore\nfunction FromProperties(P, K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Pick(P[K2], K, options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, K, options) {\n return FromProperties(R.properties, K, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(R, K, options) {\n const P = FromMappedResult(R, K, options);\n return MappedResult(P);\n}\n","import { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema } from '../guard/kind.mjs';\nfunction FromIntersect(T, K) {\n return T.map((T) => PickResolve(T, K));\n}\n// prettier-ignore\nfunction FromUnion(T, K) {\n return T.map((T) => PickResolve(T, K));\n}\n// prettier-ignore\nfunction FromProperties(T, K) {\n const Acc = {};\n for (const K2 of K)\n if (K2 in T)\n Acc[K2] = T[K2];\n return Acc;\n}\n// ------------------------------------------------------------------\n// PickResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PickResolve(T, K) {\n return (IsIntersect(T) ? Intersect(FromIntersect(T.allOf, K)) :\n IsUnion(T) ? Union(FromUnion(T.anyOf, K)) :\n IsObject(T) ? Object(FromProperties(T.properties, K)) :\n Object({}));\n}\nexport function Pick(T, K, options = {}) {\n // mapped\n if (IsMappedKey(K))\n return PickFromMappedKey(T, K, options);\n if (IsMappedResult(T))\n return PickFromMappedResult(T, K, options);\n // non-mapped\n const I = IsSchema(K) ? IndexPropertyKeys(K) : K;\n const D = Discard(T, [TransformKind, '$id', 'required']);\n const R = CloneType(PickResolve(T, I), options);\n return { ...D, ...R };\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\n// prettier-ignore\nfunction FromPropertyKey(T, K, options) {\n return {\n [K]: Pick(T, [K], options)\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(T, K, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(T, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(T, K, options) {\n return FromPropertyKeys(T, K.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(T, K, options) {\n const P = FromMappedKey(T, K, options);\n return MappedResult(P);\n}\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","import { Object } from '../object/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return {\n ...options,\n [Kind]: 'Record',\n type: 'object',\n patternProperties: { [pattern]: CloneType(T) }\n };\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const Acc = {};\n for (const K2 of K)\n Acc[K2] = CloneType(T);\n return Object(Acc, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(K, T, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(K)), T, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(K, T, options) {\n return RecordCreateFromKeys([K.toString()], T, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(K, T, options) {\n return RecordCreateFromPattern(K.source, T, options);\n}\n// prettier-ignore\nfunction FromStringKey(K, T, options) {\n const pattern = IsUndefined(K.pattern) ? PatternStringExact : K.pattern;\n return RecordCreateFromPattern(pattern, T, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_, T, options) {\n return RecordCreateFromPattern(PatternNumberExact, T, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, T, options) {\n return RecordCreateFromPattern(PatternNumberExact, T, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(K, T, options = {}) {\n // prettier-ignore\n return (IsUnion(K) ? FromUnionKey(K.anyOf, T, options) :\n IsTemplateLiteral(K) ? FromTemplateLiteralKey(K, T, options) :\n IsLiteral(K) ? FromLiteralKey(K.const, T, options) :\n IsInteger(K) ? FromIntegerKey(K, T, options) :\n IsNumber(K) ? FromNumberKey(K, T, options) :\n IsRegExp(K) ? FromRegExpKey(K, T, options) :\n IsString(K) ? FromStringKey(K, T, options) :\n Never(options));\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = callback({ [Kind]: 'This', $ref: `${options.$id}` });\n thisType.$id = options.$id;\n // prettier-ignore\n return CloneType({ ...options, [Hint]: 'Recursive', ...thisType });\n}\n","import { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsString, IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Ref type. */\nexport function Ref(unresolved, options = {}) {\n if (IsString(unresolved))\n return { ...options, [Kind]: 'Ref', $ref: unresolved };\n if (IsUndefined(unresolved.$id))\n throw new Error('Reference target type must specify an $id');\n return {\n ...options,\n [Kind]: 'Ref',\n $ref: unresolved.$id,\n };\n}\n","import { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options = {}) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return { ...options, [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags };\n}\n","import { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsIntersect, IsUnion, IsObject } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(T) {\n return T.map(L => RequiredResolve(L));\n}\n// prettier-ignore\nfunction FromProperties(T) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(T))\n Acc[K] = Discard(T[K], [OptionalKind]);\n return Acc;\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(T) {\n return (IsIntersect(T) ? Intersect(FromRest(T.allOf)) :\n IsUnion(T) ? Union(FromRest(T.anyOf)) :\n IsObject(T) ? Object(FromProperties(T.properties)) :\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(T, options = {}) {\n if (IsMappedResult(T)) {\n return RequiredFromMappedResult(T, options);\n }\n else {\n const D = Discard(T, [TransformKind, '$id', 'required']);\n const R = CloneType(RequiredResolve(T), options);\n return { ...D, ...R };\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CloneRest } from '../clone/type.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? CloneRest(T.allOf) :\n IsUnion(T) ? CloneRest(T.anyOf) :\n IsTuple(T) ? CloneRest(T.items ?? []) :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return CloneRest(RestResolve(T));\n}\n","import { CloneType } from '../clone/type.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options = {}) {\n return CloneType(schema.returns, options);\n}\n","/** `[Json]` Omits compositing symbols from this schema. */\nexport function Strict(schema) {\n return JSON.parse(JSON.stringify(schema));\n}\n","import { TransformKind } from '../symbols/index.mjs';\nimport { CloneType } from '../clone/type.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n schema;\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n schema;\n decode;\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n const schema = CloneType(this.schema);\n return (IsTransform(schema) ? this.EncodeTransform(encode, schema) : this.EncodeSchema(encode, schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return {\n ...options,\n [Kind]: options[Kind] ?? 'Unsafe',\n };\n}\n","import { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options = {}) {\n return {\n ...options,\n [Kind]: 'Void',\n type: 'void',\n };\n}\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Deref } from '../deref/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { Strict } from '../strict/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return Array.isArray(value) && !ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy\n // ------------------------------------------------------------------\n /** Shared assertion routines used by the value and errors modules */\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Asserts this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Asserts this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Asserts this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Asserts this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Asserts this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import { TypeRegistry, FormatRegistry } from '../type/registry/index.mjs';\nimport { Unsafe } from '../type/unsafe/index.mjs';\nimport { Kind } from '../type/symbols/index.mjs';\nimport { TypeBoxError } from '../type/error/index.mjs';\n// ------------------------------------------------------------------\n// Errors\n// ------------------------------------------------------------------\nexport class TypeSystemDuplicateTypeKind extends TypeBoxError {\n constructor(kind) {\n super(`Duplicate type kind '${kind}' detected`);\n }\n}\nexport class TypeSystemDuplicateFormat extends TypeBoxError {\n constructor(kind) {\n super(`Duplicate string format '${kind}' detected`);\n }\n}\n/** Creates user defined types and formats and provides overrides for value checking behaviours */\nexport var TypeSystem;\n(function (TypeSystem) {\n /** Creates a new type */\n function Type(kind, check) {\n if (TypeRegistry.Has(kind))\n throw new TypeSystemDuplicateTypeKind(kind);\n TypeRegistry.Set(kind, check);\n return (options = {}) => Unsafe({ ...options, [Kind]: kind });\n }\n TypeSystem.Type = Type;\n /** Creates a new string format */\n function Format(format, check) {\n if (FormatRegistry.Has(format))\n throw new TypeSystemDuplicateFormat(format);\n FormatRegistry.Set(format, check);\n return format;\n }\n TypeSystem.Format = Format;\n})(TypeSystem || (TypeSystem = {}));\n","import { IsArray, IsBoolean, IsBigInt, IsDate, IsNull, IsNumber, IsStandardObject, IsString, IsSymbol, IsUint8Array, IsUndefined } from '../guard/index.mjs';\nimport { TypeBoxError } from '../../type/error/index.mjs';\n// ------------------------------------------------------------------\n// Errors\n// ------------------------------------------------------------------\nexport class ValueHashError extends TypeBoxError {\n value;\n constructor(value) {\n super(`Unable to hash value`);\n this.value = value;\n }\n}\n// ------------------------------------------------------------------\n// ByteMarker\n// ------------------------------------------------------------------\nvar ByteMarker;\n(function (ByteMarker) {\n ByteMarker[ByteMarker[\"Undefined\"] = 0] = \"Undefined\";\n ByteMarker[ByteMarker[\"Null\"] = 1] = \"Null\";\n ByteMarker[ByteMarker[\"Boolean\"] = 2] = \"Boolean\";\n ByteMarker[ByteMarker[\"Number\"] = 3] = \"Number\";\n ByteMarker[ByteMarker[\"String\"] = 4] = \"String\";\n ByteMarker[ByteMarker[\"Object\"] = 5] = \"Object\";\n ByteMarker[ByteMarker[\"Array\"] = 6] = \"Array\";\n ByteMarker[ByteMarker[\"Date\"] = 7] = \"Date\";\n ByteMarker[ByteMarker[\"Uint8Array\"] = 8] = \"Uint8Array\";\n ByteMarker[ByteMarker[\"Symbol\"] = 9] = \"Symbol\";\n ByteMarker[ByteMarker[\"BigInt\"] = 10] = \"BigInt\";\n})(ByteMarker || (ByteMarker = {}));\n// ------------------------------------------------------------------\n// State\n// ------------------------------------------------------------------\nlet Accumulator = BigInt('14695981039346656037');\nconst [Prime, Size] = [BigInt('1099511628211'), BigInt('2') ** BigInt('64')];\nconst Bytes = Array.from({ length: 256 }).map((_, i) => BigInt(i));\nconst F64 = new Float64Array(1);\nconst F64In = new DataView(F64.buffer);\nconst F64Out = new Uint8Array(F64.buffer);\n// ------------------------------------------------------------------\n// NumberToBytes\n// ------------------------------------------------------------------\nfunction* NumberToBytes(value) {\n const byteCount = value === 0 ? 1 : Math.ceil(Math.floor(Math.log2(value) + 1) / 8);\n for (let i = 0; i < byteCount; i++) {\n yield (value >> (8 * (byteCount - 1 - i))) & 0xff;\n }\n}\n// ------------------------------------------------------------------\n// Hashing Functions\n// ------------------------------------------------------------------\nfunction ArrayType(value) {\n FNV1A64(ByteMarker.Array);\n for (const item of value) {\n Visit(item);\n }\n}\nfunction BooleanType(value) {\n FNV1A64(ByteMarker.Boolean);\n FNV1A64(value ? 1 : 0);\n}\nfunction BigIntType(value) {\n FNV1A64(ByteMarker.BigInt);\n F64In.setBigInt64(0, value);\n for (const byte of F64Out) {\n FNV1A64(byte);\n }\n}\nfunction DateType(value) {\n FNV1A64(ByteMarker.Date);\n Visit(value.getTime());\n}\nfunction NullType(value) {\n FNV1A64(ByteMarker.Null);\n}\nfunction NumberType(value) {\n FNV1A64(ByteMarker.Number);\n F64In.setFloat64(0, value);\n for (const byte of F64Out) {\n FNV1A64(byte);\n }\n}\nfunction ObjectType(value) {\n FNV1A64(ByteMarker.Object);\n for (const key of globalThis.Object.getOwnPropertyNames(value).sort()) {\n Visit(key);\n Visit(value[key]);\n }\n}\nfunction StringType(value) {\n FNV1A64(ByteMarker.String);\n for (let i = 0; i < value.length; i++) {\n for (const byte of NumberToBytes(value.charCodeAt(i))) {\n FNV1A64(byte);\n }\n }\n}\nfunction SymbolType(value) {\n FNV1A64(ByteMarker.Symbol);\n Visit(value.description);\n}\nfunction Uint8ArrayType(value) {\n FNV1A64(ByteMarker.Uint8Array);\n for (let i = 0; i < value.length; i++) {\n FNV1A64(value[i]);\n }\n}\nfunction UndefinedType(value) {\n return FNV1A64(ByteMarker.Undefined);\n}\nfunction Visit(value) {\n if (IsArray(value))\n return ArrayType(value);\n if (IsBoolean(value))\n return BooleanType(value);\n if (IsBigInt(value))\n return BigIntType(value);\n if (IsDate(value))\n return DateType(value);\n if (IsNull(value))\n return NullType(value);\n if (IsNumber(value))\n return NumberType(value);\n if (IsStandardObject(value))\n return ObjectType(value);\n if (IsString(value))\n return StringType(value);\n if (IsSymbol(value))\n return SymbolType(value);\n if (IsUint8Array(value))\n return Uint8ArrayType(value);\n if (IsUndefined(value))\n return UndefinedType(value);\n throw new ValueHashError(value);\n}\nfunction FNV1A64(byte) {\n Accumulator = Accumulator ^ Bytes[byte];\n Accumulator = (Accumulator * Prime) % Size;\n}\n// ------------------------------------------------------------------\n// Hash\n// ------------------------------------------------------------------\n/** Creates a FNV1A-64 non cryptographic hash of the given value */\nexport function Hash(value) {\n Accumulator = BigInt('14695981039346656037');\n Visit(value);\n return Accumulator;\n}\n","import { TypeSystemPolicy } from '../system/index.mjs';\nimport { KeyOfPattern } from '../type/keyof/index.mjs';\nimport { TypeRegistry, FormatRegistry } from '../type/registry/index.mjs';\nimport { ExtendsUndefinedCheck } from '../type/extends/extends-undefined.mjs';\nimport { GetErrorFunction } from './function.mjs';\nimport { TypeBoxError } from '../type/error/index.mjs';\nimport { Deref } from '../value/deref/index.mjs';\nimport { Hash } from '../value/hash/index.mjs';\nimport { Kind } from '../type/symbols/index.mjs';\nimport { Never } from '../type/never/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\n// prettier-ignore\nimport { IsArray, IsUint8Array, IsDate, IsPromise, IsFunction, IsAsyncIterator, IsIterator, IsBoolean, IsNumber, IsBigInt, IsString, IsSymbol, IsInteger, IsNull, IsUndefined } from '../value/guard/index.mjs';\n// ------------------------------------------------------------------\n// ValueErrorType\n// ------------------------------------------------------------------\nexport var ValueErrorType;\n(function (ValueErrorType) {\n ValueErrorType[ValueErrorType[\"ArrayContains\"] = 0] = \"ArrayContains\";\n ValueErrorType[ValueErrorType[\"ArrayMaxContains\"] = 1] = \"ArrayMaxContains\";\n ValueErrorType[ValueErrorType[\"ArrayMaxItems\"] = 2] = \"ArrayMaxItems\";\n ValueErrorType[ValueErrorType[\"ArrayMinContains\"] = 3] = \"ArrayMinContains\";\n ValueErrorType[ValueErrorType[\"ArrayMinItems\"] = 4] = \"ArrayMinItems\";\n ValueErrorType[ValueErrorType[\"ArrayUniqueItems\"] = 5] = \"ArrayUniqueItems\";\n ValueErrorType[ValueErrorType[\"Array\"] = 6] = \"Array\";\n ValueErrorType[ValueErrorType[\"AsyncIterator\"] = 7] = \"AsyncIterator\";\n ValueErrorType[ValueErrorType[\"BigIntExclusiveMaximum\"] = 8] = \"BigIntExclusiveMaximum\";\n ValueErrorType[ValueErrorType[\"BigIntExclusiveMinimum\"] = 9] = \"BigIntExclusiveMinimum\";\n ValueErrorType[ValueErrorType[\"BigIntMaximum\"] = 10] = \"BigIntMaximum\";\n ValueErrorType[ValueErrorType[\"BigIntMinimum\"] = 11] = \"BigIntMinimum\";\n ValueErrorType[ValueErrorType[\"BigIntMultipleOf\"] = 12] = \"BigIntMultipleOf\";\n ValueErrorType[ValueErrorType[\"BigInt\"] = 13] = \"BigInt\";\n ValueErrorType[ValueErrorType[\"Boolean\"] = 14] = \"Boolean\";\n ValueErrorType[ValueErrorType[\"DateExclusiveMaximumTimestamp\"] = 15] = \"DateExclusiveMaximumTimestamp\";\n ValueErrorType[ValueErrorType[\"DateExclusiveMinimumTimestamp\"] = 16] = \"DateExclusiveMinimumTimestamp\";\n ValueErrorType[ValueErrorType[\"DateMaximumTimestamp\"] = 17] = \"DateMaximumTimestamp\";\n ValueErrorType[ValueErrorType[\"DateMinimumTimestamp\"] = 18] = \"DateMinimumTimestamp\";\n ValueErrorType[ValueErrorType[\"DateMultipleOfTimestamp\"] = 19] = \"DateMultipleOfTimestamp\";\n ValueErrorType[ValueErrorType[\"Date\"] = 20] = \"Date\";\n ValueErrorType[ValueErrorType[\"Function\"] = 21] = \"Function\";\n ValueErrorType[ValueErrorType[\"IntegerExclusiveMaximum\"] = 22] = \"IntegerExclusiveMaximum\";\n ValueErrorType[ValueErrorType[\"IntegerExclusiveMinimum\"] = 23] = \"IntegerExclusiveMinimum\";\n ValueErrorType[ValueErrorType[\"IntegerMaximum\"] = 24] = \"IntegerMaximum\";\n ValueErrorType[ValueErrorType[\"IntegerMinimum\"] = 25] = \"IntegerMinimum\";\n ValueErrorType[ValueErrorType[\"IntegerMultipleOf\"] = 26] = \"IntegerMultipleOf\";\n ValueErrorType[ValueErrorType[\"Integer\"] = 27] = \"Integer\";\n ValueErrorType[ValueErrorType[\"IntersectUnevaluatedProperties\"] = 28] = \"IntersectUnevaluatedProperties\";\n ValueErrorType[ValueErrorType[\"Intersect\"] = 29] = \"Intersect\";\n ValueErrorType[ValueErrorType[\"Iterator\"] = 30] = \"Iterator\";\n ValueErrorType[ValueErrorType[\"Kind\"] = 31] = \"Kind\";\n ValueErrorType[ValueErrorType[\"Literal\"] = 32] = \"Literal\";\n ValueErrorType[ValueErrorType[\"Never\"] = 33] = \"Never\";\n ValueErrorType[ValueErrorType[\"Not\"] = 34] = \"Not\";\n ValueErrorType[ValueErrorType[\"Null\"] = 35] = \"Null\";\n ValueErrorType[ValueErrorType[\"NumberExclusiveMaximum\"] = 36] = \"NumberExclusiveMaximum\";\n ValueErrorType[ValueErrorType[\"NumberExclusiveMinimum\"] = 37] = \"NumberExclusiveMinimum\";\n ValueErrorType[ValueErrorType[\"NumberMaximum\"] = 38] = \"NumberMaximum\";\n ValueErrorType[ValueErrorType[\"NumberMinimum\"] = 39] = \"NumberMinimum\";\n ValueErrorType[ValueErrorType[\"NumberMultipleOf\"] = 40] = \"NumberMultipleOf\";\n ValueErrorType[ValueErrorType[\"Number\"] = 41] = \"Number\";\n ValueErrorType[ValueErrorType[\"ObjectAdditionalProperties\"] = 42] = \"ObjectAdditionalProperties\";\n ValueErrorType[ValueErrorType[\"ObjectMaxProperties\"] = 43] = \"ObjectMaxProperties\";\n ValueErrorType[ValueErrorType[\"ObjectMinProperties\"] = 44] = \"ObjectMinProperties\";\n ValueErrorType[ValueErrorType[\"ObjectRequiredProperty\"] = 45] = \"ObjectRequiredProperty\";\n ValueErrorType[ValueErrorType[\"Object\"] = 46] = \"Object\";\n ValueErrorType[ValueErrorType[\"Promise\"] = 47] = \"Promise\";\n ValueErrorType[ValueErrorType[\"RegExp\"] = 48] = \"RegExp\";\n ValueErrorType[ValueErrorType[\"StringFormatUnknown\"] = 49] = \"StringFormatUnknown\";\n ValueErrorType[ValueErrorType[\"StringFormat\"] = 50] = \"StringFormat\";\n ValueErrorType[ValueErrorType[\"StringMaxLength\"] = 51] = \"StringMaxLength\";\n ValueErrorType[ValueErrorType[\"StringMinLength\"] = 52] = \"StringMinLength\";\n ValueErrorType[ValueErrorType[\"StringPattern\"] = 53] = \"StringPattern\";\n ValueErrorType[ValueErrorType[\"String\"] = 54] = \"String\";\n ValueErrorType[ValueErrorType[\"Symbol\"] = 55] = \"Symbol\";\n ValueErrorType[ValueErrorType[\"TupleLength\"] = 56] = \"TupleLength\";\n ValueErrorType[ValueErrorType[\"Tuple\"] = 57] = \"Tuple\";\n ValueErrorType[ValueErrorType[\"Uint8ArrayMaxByteLength\"] = 58] = \"Uint8ArrayMaxByteLength\";\n ValueErrorType[ValueErrorType[\"Uint8ArrayMinByteLength\"] = 59] = \"Uint8ArrayMinByteLength\";\n ValueErrorType[ValueErrorType[\"Uint8Array\"] = 60] = \"Uint8Array\";\n ValueErrorType[ValueErrorType[\"Undefined\"] = 61] = \"Undefined\";\n ValueErrorType[ValueErrorType[\"Union\"] = 62] = \"Union\";\n ValueErrorType[ValueErrorType[\"Void\"] = 63] = \"Void\";\n})(ValueErrorType || (ValueErrorType = {}));\n// ------------------------------------------------------------------\n// ValueErrors\n// ------------------------------------------------------------------\nexport class ValueErrorsUnknownTypeError extends TypeBoxError {\n schema;\n constructor(schema) {\n super('Unknown type');\n this.schema = schema;\n }\n}\n// ------------------------------------------------------------------\n// EscapeKey\n// ------------------------------------------------------------------\nfunction EscapeKey(key) {\n return key.replace(/~/g, '~0').replace(/\\//g, '~1'); // RFC6901 Path\n}\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nfunction IsDefined(value) {\n return value !== undefined;\n}\n// ------------------------------------------------------------------\n// ValueErrorIterator\n// ------------------------------------------------------------------\nexport class ValueErrorIterator {\n iterator;\n constructor(iterator) {\n this.iterator = iterator;\n }\n [Symbol.iterator]() {\n return this.iterator;\n }\n /** Returns the first value error or undefined if no errors */\n First() {\n const next = this.iterator.next();\n return next.done ? undefined : next.value;\n }\n}\n// --------------------------------------------------------------------------\n// Create\n// --------------------------------------------------------------------------\nfunction Create(errorType, schema, path, value) {\n return { type: errorType, schema, path, value, message: GetErrorFunction()({ errorType, path, schema, value }) };\n}\n// --------------------------------------------------------------------------\n// Types\n// --------------------------------------------------------------------------\nfunction* FromAny(schema, references, path, value) { }\nfunction* FromArray(schema, references, path, value) {\n if (!IsArray(value)) {\n return yield Create(ValueErrorType.Array, schema, path, value);\n }\n if (IsDefined(schema.minItems) && !(value.length >= schema.minItems)) {\n yield Create(ValueErrorType.ArrayMinItems, schema, path, value);\n }\n if (IsDefined(schema.maxItems) && !(value.length <= schema.maxItems)) {\n yield Create(ValueErrorType.ArrayMaxItems, schema, path, value);\n }\n for (let i = 0; i < value.length; i++) {\n yield* Visit(schema.items, references, `${path}/${i}`, value[i]);\n }\n // prettier-ignore\n if (schema.uniqueItems === true && !((function () { const set = new Set(); for (const element of value) {\n const hashed = Hash(element);\n if (set.has(hashed)) {\n return false;\n }\n else {\n set.add(hashed);\n }\n } return true; })())) {\n yield Create(ValueErrorType.ArrayUniqueItems, schema, path, value);\n }\n // contains\n if (!(IsDefined(schema.contains) || IsDefined(schema.minContains) || IsDefined(schema.maxContains))) {\n return;\n }\n const containsSchema = IsDefined(schema.contains) ? schema.contains : Never();\n const containsCount = value.reduce((acc, value, index) => (Visit(containsSchema, references, `${path}${index}`, value).next().done === true ? acc + 1 : acc), 0);\n if (containsCount === 0) {\n yield Create(ValueErrorType.ArrayContains, schema, path, value);\n }\n if (IsNumber(schema.minContains) && containsCount < schema.minContains) {\n yield Create(ValueErrorType.ArrayMinContains, schema, path, value);\n }\n if (IsNumber(schema.maxContains) && containsCount > schema.maxContains) {\n yield Create(ValueErrorType.ArrayMaxContains, schema, path, value);\n }\n}\nfunction* FromAsyncIterator(schema, references, path, value) {\n if (!IsAsyncIterator(value))\n yield Create(ValueErrorType.AsyncIterator, schema, path, value);\n}\nfunction* FromBigInt(schema, references, path, value) {\n if (!IsBigInt(value))\n return yield Create(ValueErrorType.BigInt, schema, path, value);\n if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) {\n yield Create(ValueErrorType.BigIntExclusiveMaximum, schema, path, value);\n }\n if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) {\n yield Create(ValueErrorType.BigIntExclusiveMinimum, schema, path, value);\n }\n if (IsDefined(schema.maximum) && !(value <= schema.maximum)) {\n yield Create(ValueErrorType.BigIntMaximum, schema, path, value);\n }\n if (IsDefined(schema.minimum) && !(value >= schema.minimum)) {\n yield Create(ValueErrorType.BigIntMinimum, schema, path, value);\n }\n if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === BigInt(0))) {\n yield Create(ValueErrorType.BigIntMultipleOf, schema, path, value);\n }\n}\nfunction* FromBoolean(schema, references, path, value) {\n if (!IsBoolean(value))\n yield Create(ValueErrorType.Boolean, schema, path, value);\n}\nfunction* FromConstructor(schema, references, path, value) {\n yield* Visit(schema.returns, references, path, value.prototype);\n}\nfunction* FromDate(schema, references, path, value) {\n if (!IsDate(value))\n return yield Create(ValueErrorType.Date, schema, path, value);\n if (IsDefined(schema.exclusiveMaximumTimestamp) && !(value.getTime() < schema.exclusiveMaximumTimestamp)) {\n yield Create(ValueErrorType.DateExclusiveMaximumTimestamp, schema, path, value);\n }\n if (IsDefined(schema.exclusiveMinimumTimestamp) && !(value.getTime() > schema.exclusiveMinimumTimestamp)) {\n yield Create(ValueErrorType.DateExclusiveMinimumTimestamp, schema, path, value);\n }\n if (IsDefined(schema.maximumTimestamp) && !(value.getTime() <= schema.maximumTimestamp)) {\n yield Create(ValueErrorType.DateMaximumTimestamp, schema, path, value);\n }\n if (IsDefined(schema.minimumTimestamp) && !(value.getTime() >= schema.minimumTimestamp)) {\n yield Create(ValueErrorType.DateMinimumTimestamp, schema, path, value);\n }\n if (IsDefined(schema.multipleOfTimestamp) && !(value.getTime() % schema.multipleOfTimestamp === 0)) {\n yield Create(ValueErrorType.DateMultipleOfTimestamp, schema, path, value);\n }\n}\nfunction* FromFunction(schema, references, path, value) {\n if (!IsFunction(value))\n yield Create(ValueErrorType.Function, schema, path, value);\n}\nfunction* FromInteger(schema, references, path, value) {\n if (!IsInteger(value))\n return yield Create(ValueErrorType.Integer, schema, path, value);\n if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) {\n yield Create(ValueErrorType.IntegerExclusiveMaximum, schema, path, value);\n }\n if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) {\n yield Create(ValueErrorType.IntegerExclusiveMinimum, schema, path, value);\n }\n if (IsDefined(schema.maximum) && !(value <= schema.maximum)) {\n yield Create(ValueErrorType.IntegerMaximum, schema, path, value);\n }\n if (IsDefined(schema.minimum) && !(value >= schema.minimum)) {\n yield Create(ValueErrorType.IntegerMinimum, schema, path, value);\n }\n if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) {\n yield Create(ValueErrorType.IntegerMultipleOf, schema, path, value);\n }\n}\nfunction* FromIntersect(schema, references, path, value) {\n for (const inner of schema.allOf) {\n const next = Visit(inner, references, path, value).next();\n if (!next.done) {\n yield Create(ValueErrorType.Intersect, schema, path, value);\n yield next.value;\n }\n }\n if (schema.unevaluatedProperties === false) {\n const keyCheck = new RegExp(KeyOfPattern(schema));\n for (const valueKey of Object.getOwnPropertyNames(value)) {\n if (!keyCheck.test(valueKey)) {\n yield Create(ValueErrorType.IntersectUnevaluatedProperties, schema, `${path}/${valueKey}`, value);\n }\n }\n }\n if (typeof schema.unevaluatedProperties === 'object') {\n const keyCheck = new RegExp(KeyOfPattern(schema));\n for (const valueKey of Object.getOwnPropertyNames(value)) {\n if (!keyCheck.test(valueKey)) {\n const next = Visit(schema.unevaluatedProperties, references, `${path}/${valueKey}`, value[valueKey]).next();\n if (!next.done)\n yield next.value; // yield interior\n }\n }\n }\n}\nfunction* FromIterator(schema, references, path, value) {\n if (!IsIterator(value))\n yield Create(ValueErrorType.Iterator, schema, path, value);\n}\nfunction* FromLiteral(schema, references, path, value) {\n if (!(value === schema.const))\n yield Create(ValueErrorType.Literal, schema, path, value);\n}\nfunction* FromNever(schema, references, path, value) {\n yield Create(ValueErrorType.Never, schema, path, value);\n}\nfunction* FromNot(schema, references, path, value) {\n if (Visit(schema.not, references, path, value).next().done === true)\n yield Create(ValueErrorType.Not, schema, path, value);\n}\nfunction* FromNull(schema, references, path, value) {\n if (!IsNull(value))\n yield Create(ValueErrorType.Null, schema, path, value);\n}\nfunction* FromNumber(schema, references, path, value) {\n if (!TypeSystemPolicy.IsNumberLike(value))\n return yield Create(ValueErrorType.Number, schema, path, value);\n if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) {\n yield Create(ValueErrorType.NumberExclusiveMaximum, schema, path, value);\n }\n if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) {\n yield Create(ValueErrorType.NumberExclusiveMinimum, schema, path, value);\n }\n if (IsDefined(schema.maximum) && !(value <= schema.maximum)) {\n yield Create(ValueErrorType.NumberMaximum, schema, path, value);\n }\n if (IsDefined(schema.minimum) && !(value >= schema.minimum)) {\n yield Create(ValueErrorType.NumberMinimum, schema, path, value);\n }\n if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) {\n yield Create(ValueErrorType.NumberMultipleOf, schema, path, value);\n }\n}\nfunction* FromObject(schema, references, path, value) {\n if (!TypeSystemPolicy.IsObjectLike(value))\n return yield Create(ValueErrorType.Object, schema, path, value);\n if (IsDefined(schema.minProperties) && !(Object.getOwnPropertyNames(value).length >= schema.minProperties)) {\n yield Create(ValueErrorType.ObjectMinProperties, schema, path, value);\n }\n if (IsDefined(schema.maxProperties) && !(Object.getOwnPropertyNames(value).length <= schema.maxProperties)) {\n yield Create(ValueErrorType.ObjectMaxProperties, schema, path, value);\n }\n const requiredKeys = Array.isArray(schema.required) ? schema.required : [];\n const knownKeys = Object.getOwnPropertyNames(schema.properties);\n const unknownKeys = Object.getOwnPropertyNames(value);\n for (const requiredKey of requiredKeys) {\n if (unknownKeys.includes(requiredKey))\n continue;\n yield Create(ValueErrorType.ObjectRequiredProperty, schema.properties[requiredKey], `${path}/${EscapeKey(requiredKey)}`, undefined);\n }\n if (schema.additionalProperties === false) {\n for (const valueKey of unknownKeys) {\n if (!knownKeys.includes(valueKey)) {\n yield Create(ValueErrorType.ObjectAdditionalProperties, schema, `${path}/${EscapeKey(valueKey)}`, value[valueKey]);\n }\n }\n }\n if (typeof schema.additionalProperties === 'object') {\n for (const valueKey of unknownKeys) {\n if (knownKeys.includes(valueKey))\n continue;\n yield* Visit(schema.additionalProperties, references, `${path}/${EscapeKey(valueKey)}`, value[valueKey]);\n }\n }\n for (const knownKey of knownKeys) {\n const property = schema.properties[knownKey];\n if (schema.required && schema.required.includes(knownKey)) {\n yield* Visit(property, references, `${path}/${EscapeKey(knownKey)}`, value[knownKey]);\n if (ExtendsUndefinedCheck(schema) && !(knownKey in value)) {\n yield Create(ValueErrorType.ObjectRequiredProperty, property, `${path}/${EscapeKey(knownKey)}`, undefined);\n }\n }\n else {\n if (TypeSystemPolicy.IsExactOptionalProperty(value, knownKey)) {\n yield* Visit(property, references, `${path}/${EscapeKey(knownKey)}`, value[knownKey]);\n }\n }\n }\n}\nfunction* FromPromise(schema, references, path, value) {\n if (!IsPromise(value))\n yield Create(ValueErrorType.Promise, schema, path, value);\n}\nfunction* FromRecord(schema, references, path, value) {\n if (!TypeSystemPolicy.IsRecordLike(value))\n return yield Create(ValueErrorType.Object, schema, path, value);\n if (IsDefined(schema.minProperties) && !(Object.getOwnPropertyNames(value).length >= schema.minProperties)) {\n yield Create(ValueErrorType.ObjectMinProperties, schema, path, value);\n }\n if (IsDefined(schema.maxProperties) && !(Object.getOwnPropertyNames(value).length <= schema.maxProperties)) {\n yield Create(ValueErrorType.ObjectMaxProperties, schema, path, value);\n }\n const [patternKey, patternSchema] = Object.entries(schema.patternProperties)[0];\n const regex = new RegExp(patternKey);\n for (const [propertyKey, propertyValue] of Object.entries(value)) {\n if (regex.test(propertyKey))\n yield* Visit(patternSchema, references, `${path}/${EscapeKey(propertyKey)}`, propertyValue);\n }\n if (typeof schema.additionalProperties === 'object') {\n for (const [propertyKey, propertyValue] of Object.entries(value)) {\n if (!regex.test(propertyKey))\n yield* Visit(schema.additionalProperties, references, `${path}/${EscapeKey(propertyKey)}`, propertyValue);\n }\n }\n if (schema.additionalProperties === false) {\n for (const [propertyKey, propertyValue] of Object.entries(value)) {\n if (regex.test(propertyKey))\n continue;\n return yield Create(ValueErrorType.ObjectAdditionalProperties, schema, `${path}/${EscapeKey(propertyKey)}`, propertyValue);\n }\n }\n}\nfunction* FromRef(schema, references, path, value) {\n yield* Visit(Deref(schema, references), references, path, value);\n}\nfunction* FromRegExp(schema, references, path, value) {\n if (!IsString(value))\n return yield Create(ValueErrorType.String, schema, path, value);\n if (IsDefined(schema.minLength) && !(value.length >= schema.minLength)) {\n yield Create(ValueErrorType.StringMinLength, schema, path, value);\n }\n if (IsDefined(schema.maxLength) && !(value.length <= schema.maxLength)) {\n yield Create(ValueErrorType.StringMaxLength, schema, path, value);\n }\n const regex = new RegExp(schema.source, schema.flags);\n if (!regex.test(value)) {\n return yield Create(ValueErrorType.RegExp, schema, path, value);\n }\n}\nfunction* FromString(schema, references, path, value) {\n if (!IsString(value))\n return yield Create(ValueErrorType.String, schema, path, value);\n if (IsDefined(schema.minLength) && !(value.length >= schema.minLength)) {\n yield Create(ValueErrorType.StringMinLength, schema, path, value);\n }\n if (IsDefined(schema.maxLength) && !(value.length <= schema.maxLength)) {\n yield Create(ValueErrorType.StringMaxLength, schema, path, value);\n }\n if (IsString(schema.pattern)) {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value)) {\n yield Create(ValueErrorType.StringPattern, schema, path, value);\n }\n }\n if (IsString(schema.format)) {\n if (!FormatRegistry.Has(schema.format)) {\n yield Create(ValueErrorType.StringFormatUnknown, schema, path, value);\n }\n else {\n const format = FormatRegistry.Get(schema.format);\n if (!format(value)) {\n yield Create(ValueErrorType.StringFormat, schema, path, value);\n }\n }\n }\n}\nfunction* FromSymbol(schema, references, path, value) {\n if (!IsSymbol(value))\n yield Create(ValueErrorType.Symbol, schema, path, value);\n}\nfunction* FromTemplateLiteral(schema, references, path, value) {\n if (!IsString(value))\n return yield Create(ValueErrorType.String, schema, path, value);\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value)) {\n yield Create(ValueErrorType.StringPattern, schema, path, value);\n }\n}\nfunction* FromThis(schema, references, path, value) {\n yield* Visit(Deref(schema, references), references, path, value);\n}\nfunction* FromTuple(schema, references, path, value) {\n if (!IsArray(value))\n return yield Create(ValueErrorType.Tuple, schema, path, value);\n if (schema.items === undefined && !(value.length === 0)) {\n return yield Create(ValueErrorType.TupleLength, schema, path, value);\n }\n if (!(value.length === schema.maxItems)) {\n return yield Create(ValueErrorType.TupleLength, schema, path, value);\n }\n if (!schema.items) {\n return;\n }\n for (let i = 0; i < schema.items.length; i++) {\n yield* Visit(schema.items[i], references, `${path}/${i}`, value[i]);\n }\n}\nfunction* FromUndefined(schema, references, path, value) {\n if (!IsUndefined(value))\n yield Create(ValueErrorType.Undefined, schema, path, value);\n}\nfunction* FromUnion(schema, references, path, value) {\n let count = 0;\n for (const subschema of schema.anyOf) {\n const errors = [...Visit(subschema, references, path, value)];\n if (errors.length === 0)\n return; // matched\n count += errors.length;\n }\n if (count > 0) {\n yield Create(ValueErrorType.Union, schema, path, value);\n }\n}\nfunction* FromUint8Array(schema, references, path, value) {\n if (!IsUint8Array(value))\n return yield Create(ValueErrorType.Uint8Array, schema, path, value);\n if (IsDefined(schema.maxByteLength) && !(value.length <= schema.maxByteLength)) {\n yield Create(ValueErrorType.Uint8ArrayMaxByteLength, schema, path, value);\n }\n if (IsDefined(schema.minByteLength) && !(value.length >= schema.minByteLength)) {\n yield Create(ValueErrorType.Uint8ArrayMinByteLength, schema, path, value);\n }\n}\nfunction* FromUnknown(schema, references, path, value) { }\nfunction* FromVoid(schema, references, path, value) {\n if (!TypeSystemPolicy.IsVoidLike(value))\n yield Create(ValueErrorType.Void, schema, path, value);\n}\nfunction* FromKind(schema, references, path, value) {\n const check = TypeRegistry.Get(schema[Kind]);\n if (!check(schema, value))\n yield Create(ValueErrorType.Kind, schema, path, value);\n}\nfunction* Visit(schema, references, path, value) {\n const references_ = IsDefined(schema.$id) ? [...references, schema] : references;\n const schema_ = schema;\n switch (schema_[Kind]) {\n case 'Any':\n return yield* FromAny(schema_, references_, path, value);\n case 'Array':\n return yield* FromArray(schema_, references_, path, value);\n case 'AsyncIterator':\n return yield* FromAsyncIterator(schema_, references_, path, value);\n case 'BigInt':\n return yield* FromBigInt(schema_, references_, path, value);\n case 'Boolean':\n return yield* FromBoolean(schema_, references_, path, value);\n case 'Constructor':\n return yield* FromConstructor(schema_, references_, path, value);\n case 'Date':\n return yield* FromDate(schema_, references_, path, value);\n case 'Function':\n return yield* FromFunction(schema_, references_, path, value);\n case 'Integer':\n return yield* FromInteger(schema_, references_, path, value);\n case 'Intersect':\n return yield* FromIntersect(schema_, references_, path, value);\n case 'Iterator':\n return yield* FromIterator(schema_, references_, path, value);\n case 'Literal':\n return yield* FromLiteral(schema_, references_, path, value);\n case 'Never':\n return yield* FromNever(schema_, references_, path, value);\n case 'Not':\n return yield* FromNot(schema_, references_, path, value);\n case 'Null':\n return yield* FromNull(schema_, references_, path, value);\n case 'Number':\n return yield* FromNumber(schema_, references_, path, value);\n case 'Object':\n return yield* FromObject(schema_, references_, path, value);\n case 'Promise':\n return yield* FromPromise(schema_, references_, path, value);\n case 'Record':\n return yield* FromRecord(schema_, references_, path, value);\n case 'Ref':\n return yield* FromRef(schema_, references_, path, value);\n case 'RegExp':\n return yield* FromRegExp(schema_, references_, path, value);\n case 'String':\n return yield* FromString(schema_, references_, path, value);\n case 'Symbol':\n return yield* FromSymbol(schema_, references_, path, value);\n case 'TemplateLiteral':\n return yield* FromTemplateLiteral(schema_, references_, path, value);\n case 'This':\n return yield* FromThis(schema_, references_, path, value);\n case 'Tuple':\n return yield* FromTuple(schema_, references_, path, value);\n case 'Undefined':\n return yield* FromUndefined(schema_, references_, path, value);\n case 'Union':\n return yield* FromUnion(schema_, references_, path, value);\n case 'Uint8Array':\n return yield* FromUint8Array(schema_, references_, path, value);\n case 'Unknown':\n return yield* FromUnknown(schema_, references_, path, value);\n case 'Void':\n return yield* FromVoid(schema_, references_, path, value);\n default:\n if (!TypeRegistry.Has(schema_[Kind]))\n throw new ValueErrorsUnknownTypeError(schema);\n return yield* FromKind(schema_, references_, path, value);\n }\n}\n/** Returns an iterator for each error in this value. */\nexport function Errors(...args) {\n const iterator = args.length === 3 ? Visit(args[0], args[1], '', args[2]) : Visit(args[0], [], '', args[1]);\n return new ValueErrorIterator(iterator);\n}\n","import { IsStandardObject, IsArray, IsTypedArray, IsValueType, IsSymbol, IsUndefined } from '../guard/index.mjs';\nimport { ValuePointer } from '../pointer/index.mjs';\nimport { Clone } from '../clone/index.mjs';\nimport { TypeBoxError } from '../../type/error/index.mjs';\nimport { Literal } from '../../type/literal/index.mjs';\nimport { Object } from '../../type/object/index.mjs';\nimport { String } from '../../type/string/index.mjs';\nimport { Unknown } from '../../type/unknown/index.mjs';\nimport { Union } from '../../type/union/index.mjs';\nexport const Insert = Object({\n type: Literal('insert'),\n path: String(),\n value: Unknown(),\n});\nexport const Update = Object({\n type: Literal('update'),\n path: String(),\n value: Unknown(),\n});\nexport const Delete = Object({\n type: Literal('delete'),\n path: String(),\n});\nexport const Edit = Union([Insert, Update, Delete]);\n// ------------------------------------------------------------------\n// Errors\n// ------------------------------------------------------------------\nexport class ValueDeltaError extends TypeBoxError {\n value;\n constructor(value, message) {\n super(message);\n this.value = value;\n }\n}\nexport class ValueDeltaSymbolError extends ValueDeltaError {\n value;\n constructor(value) {\n super(value, 'Cannot diff objects with symbol keys');\n this.value = value;\n }\n}\n// ------------------------------------------------------------------\n// Command Factory\n// ------------------------------------------------------------------\nfunction CreateUpdate(path, value) {\n return { type: 'update', path, value };\n}\nfunction CreateInsert(path, value) {\n return { type: 'insert', path, value };\n}\nfunction CreateDelete(path) {\n return { type: 'delete', path };\n}\n// ------------------------------------------------------------------\n// Diffing Generators\n// ------------------------------------------------------------------\nfunction* ObjectType(path, current, next) {\n if (!IsStandardObject(next))\n return yield CreateUpdate(path, next);\n const currentKeys = [...globalThis.Object.keys(current), ...globalThis.Object.getOwnPropertySymbols(current)];\n const nextKeys = [...globalThis.Object.keys(next), ...globalThis.Object.getOwnPropertySymbols(next)];\n for (const key of currentKeys) {\n if (IsSymbol(key))\n throw new ValueDeltaSymbolError(key);\n if (IsUndefined(next[key]) && nextKeys.includes(key))\n yield CreateUpdate(`${path}/${globalThis.String(key)}`, undefined);\n }\n for (const key of nextKeys) {\n if (IsUndefined(current[key]) || IsUndefined(next[key]))\n continue;\n if (IsSymbol(key))\n throw new ValueDeltaSymbolError(key);\n yield* Visit(`${path}/${globalThis.String(key)}`, current[key], next[key]);\n }\n for (const key of nextKeys) {\n if (IsSymbol(key))\n throw new ValueDeltaSymbolError(key);\n if (IsUndefined(current[key]))\n yield CreateInsert(`${path}/${globalThis.String(key)}`, next[key]);\n }\n for (const key of currentKeys.reverse()) {\n if (IsSymbol(key))\n throw new ValueDeltaSymbolError(key);\n if (IsUndefined(next[key]) && !nextKeys.includes(key))\n yield CreateDelete(`${path}/${globalThis.String(key)}`);\n }\n}\nfunction* ArrayType(path, current, next) {\n if (!IsArray(next))\n return yield CreateUpdate(path, next);\n for (let i = 0; i < Math.min(current.length, next.length); i++) {\n yield* Visit(`${path}/${i}`, current[i], next[i]);\n }\n for (let i = 0; i < next.length; i++) {\n if (i < current.length)\n continue;\n yield CreateInsert(`${path}/${i}`, next[i]);\n }\n for (let i = current.length - 1; i >= 0; i--) {\n if (i < next.length)\n continue;\n yield CreateDelete(`${path}/${i}`);\n }\n}\nfunction* TypedArrayType(path, current, next) {\n if (!IsTypedArray(next) || current.length !== next.length || globalThis.Object.getPrototypeOf(current).constructor.name !== globalThis.Object.getPrototypeOf(next).constructor.name)\n return yield CreateUpdate(path, next);\n for (let i = 0; i < Math.min(current.length, next.length); i++) {\n yield* Visit(`${path}/${i}`, current[i], next[i]);\n }\n}\nfunction* ValueType(path, current, next) {\n if (current === next)\n return;\n yield CreateUpdate(path, next);\n}\nfunction* Visit(path, current, next) {\n if (IsStandardObject(current))\n return yield* ObjectType(path, current, next);\n if (IsArray(current))\n return yield* ArrayType(path, current, next);\n if (IsTypedArray(current))\n return yield* TypedArrayType(path, current, next);\n if (IsValueType(current))\n return yield* ValueType(path, current, next);\n throw new ValueDeltaError(current, 'Unable to create diff edits for unknown value');\n}\n// ------------------------------------------------------------------\n// Diff\n// ------------------------------------------------------------------\nexport function Diff(current, next) {\n return [...Visit('', current, next)];\n}\n// ------------------------------------------------------------------\n// Patch\n// ------------------------------------------------------------------\nfunction IsRootUpdate(edits) {\n return edits.length > 0 && edits[0].path === '' && edits[0].type === 'update';\n}\nfunction IsIdentity(edits) {\n return edits.length === 0;\n}\nexport function Patch(current, edits) {\n if (IsRootUpdate(edits)) {\n return Clone(edits[0].value);\n }\n if (IsIdentity(edits)) {\n return Clone(current);\n }\n const clone = Clone(current);\n for (const edit of edits) {\n switch (edit.type) {\n case 'insert': {\n ValuePointer.Set(clone, edit.path, edit.value);\n break;\n }\n case 'update': {\n ValuePointer.Set(clone, edit.path, edit.value);\n break;\n }\n case 'delete': {\n ValuePointer.Delete(clone, edit.path);\n break;\n }\n }\n }\n return clone;\n}\n","type EmitterConfiguration = {\n bufferEventsIfNoListeners: boolean;\n};\n\nexport class Emitter<T extends any[] = []> {\n constructor(options: Partial<EmitterConfiguration> = {}) {\n this.bufferEventsIfNoListeners = options.bufferEventsIfNoListeners ?? false;\n }\n\n bufferEventsIfNoListeners: boolean;\n\n listeners: ((...args: T) => void)[] = [];\n\n addListener = (f: (...args: T) => void, options: { once?: boolean } = {}) => {\n if (options.once) {\n const handler = (...args: T) => {\n this.removeListener(handler);\n return f(...args);\n };\n this.listeners.push(handler);\n } else {\n this.listeners.push(f);\n }\n\n if (this.bufferedEvents.length > 0) {\n const eventsToEmit = this.bufferedEvents;\n\n this.bufferedEvents = [];\n\n eventsToEmit.forEach((event) => {\n this.emit(...event);\n });\n }\n\n return () => this.removeListener(f);\n };\n\n removeListener = (f: (...args: T) => void) => {\n const index = this.listeners.indexOf(f);\n\n if (index === -1) return;\n\n this.listeners.splice(index, 1);\n };\n\n emit = (...args: T) => {\n if (this.bufferEventsIfNoListeners && this.listeners.length === 0) {\n this.bufferedEvents.push(args);\n\n return;\n }\n\n this.listeners.forEach((l) => l(...args));\n };\n\n bufferedEvents: T[] = [];\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { Observable } from \"@noya-app/observable\";\nimport { RPCManager } from \"./rpcManager\";\n\nexport type AIToolDefinition = {\n functionName: string;\n description: string;\n parameters: Record<string, unknown>;\n onCall: (parameters: Record<string, unknown>) => Promise<string>;\n};\n\nexport type CallableAIToolsMap = Record<\n string,\n { description: string; parameters: Record<string, unknown> }\n>;\n\nexport type AIToolInvocation = {\n id: string;\n name: string;\n parameters: Record<string, unknown>;\n};\n\nexport class AIManager {\n invocationEmitter = new Emitter<[AIToolInvocation]>();\n responseEmitter = new Emitter<[AIToolInvocation, string | undefined]>();\n\n tools$ = new Observable<AIToolDefinition[]>([]);\n systemMessage$ = new Observable<string | undefined>(undefined);\n\n callableTools$ = this.tools$.map(\n (tools): CallableAIToolsMap =>\n Object.fromEntries(\n tools.map(({ functionName, description, parameters }) => [\n functionName,\n { description, parameters },\n ])\n )\n );\n configuration$ = Observable.combine(\n [this.callableTools$, this.systemMessage$],\n ([callableTools, systemMessage]) => ({\n tools: callableTools,\n systemMessage,\n }),\n { isEqual: isDeepEqual }\n );\n\n get callableTools() {\n return this.callableTools$.get();\n }\n\n constructor(public rpcManager: RPCManager) {\n this.fetch = this.createFetch();\n }\n\n private createFetch(): typeof globalThis.fetch {\n return async (_input: RequestInfo | URL, init?: RequestInit) => {\n // Create a TransformStream to handle the response body\n const { readable, writable } = new TransformStream();\n const writer = writable.getWriter();\n\n // Make the RPC request with streaming\n this.rpcManager\n .requestStreamingRoute(\"POST /api/ai\", {\n body: init?.body?.toString(),\n headers: init?.headers\n ? Object.fromEntries(new Headers(init.headers).entries())\n : undefined,\n onStreamChunk: async (chunk) => {\n // Write each chunk to the stream\n await writer.write(new TextEncoder().encode(chunk));\n },\n onStreamEnd: async () => {\n await writer.close();\n },\n })\n .then(\n async () => {\n // Nothing to do here - writer is closed in onStreamEnd\n },\n async (error) => {\n await writer.abort(error);\n }\n );\n\n // Create response object immediately with default values\n const response = new Response(readable, {\n status: 200,\n statusText: \"OK\",\n headers: new Headers({\n \"content-type\": \"text/plain; charset=utf-8\",\n }),\n });\n\n return response;\n };\n }\n\n fetch: typeof globalThis.fetch;\n\n registerTool(tool: AIToolDefinition) {\n this.tools$.set([...this.tools$.get(), tool]);\n\n return () => this.unregisterTool(tool.functionName);\n }\n\n unregisterTool(name: string) {\n this.tools$.set(\n this.tools$.get().filter((tool) => tool.functionName !== name)\n );\n }\n\n callTool(toolInvocation: AIToolInvocation) {\n const tool = this.tools$\n .get()\n .find((tool) => tool.functionName === toolInvocation.name);\n\n if (!tool) {\n console.error(`Tool ${toolInvocation.name} not found`);\n return;\n }\n\n return tool.onCall(toolInvocation.parameters);\n }\n}\n","import { Asset } from \"@noya-app/noya-schemas\";\nimport { Base64, uuid } from \"@noya-app/noya-utils\";\nimport { Observable } from \"@noya-app/observable\";\nimport { UploadProgress } from \"./rpc/types\";\nimport { RPCManager } from \"./rpcManager\";\n\ntype AssetManagerOptions = {\n assetStore?: IAssetStore;\n initialAssets?: Asset[];\n};\n\ntype AssetUploadProgress = UploadProgress & {\n id: string;\n name?: string;\n contentType?: string;\n};\n\n/**\n * AssetManager is an abstraction for managing assets.\n * It can be backed by IndexedDB, or a remote asset server.\n */\nexport class AssetManager {\n isInitialized$ = new Observable<boolean>(false);\n\n assets$ = new Observable<Asset[]>([]);\n\n uploads$ = new Observable<Record<string, AssetUploadProgress | undefined>>({\n // example: {\n // name: \"example.png\",\n // percent: 50,\n // loaded: 1024 * 1024 * 2,\n // total: 1024 * 1024 * 5,\n // contentType: \"image/png\",\n // },\n // example2: {\n // name: \"example2.png\",\n // percent: 50,\n // loaded: 1024 * 1024 * 2,\n // total: 1024 * 1024 * 5,\n // contentType: \"image/png\",\n // },\n });\n\n _assetStore: IAssetStore;\n\n get assetStore() {\n return this._assetStore;\n }\n\n set assetStore(value: IAssetStore) {\n this._assetStore = value;\n this.fetch();\n }\n\n constructor(options: AssetManagerOptions = {}) {\n this._assetStore = options.assetStore ?? new AssetStoreMemory();\n if (options.initialAssets) {\n this.set(options.initialAssets);\n }\n }\n\n /**\n * Handles external updates to the asset list\n */\n set = (assets: Asset[]) => {\n this.assets$.set(assets);\n this.isInitialized$.set(true);\n };\n\n fetch = async (): Promise<void> => {\n try {\n const assets = await this.assetStore.list();\n this.set(assets);\n } catch (error) {\n console.warn(\n \"Failed to fetch assets. This is probably okay, they will be pushed to us later.\",\n error\n );\n }\n };\n\n create = async (\n options: CreateAssetOptions | Uint8Array | File | Blob\n ): Promise<Asset> => {\n let data: Uint8Array;\n let contentType: string | undefined;\n let name: string | undefined;\n\n if (options instanceof Uint8Array) {\n data = options;\n } else if (options instanceof File) {\n data = new Uint8Array(await options.arrayBuffer());\n contentType = options.type;\n name = options.name;\n } else if (options instanceof Blob) {\n data = new Uint8Array(await options.arrayBuffer());\n contentType = options.type;\n } else {\n data = options.data;\n contentType = options.contentType;\n }\n\n let asset: Asset;\n const uploadId = uuid();\n\n try {\n asset = await this.assetStore.create({\n data,\n contentType,\n onUploadProgress: (progress) => {\n this.uploads$.set({\n ...this.uploads$.get(),\n [uploadId]: { ...progress, name, id: uploadId },\n });\n },\n });\n } finally {\n const { [uploadId]: _, ...uploads } = this.uploads$.get();\n this.uploads$.set(uploads);\n }\n\n await this.fetch();\n return this.assets$.get().find((a) => a.id === asset.id)!;\n };\n\n delete = async (id: string): Promise<void> => {\n await this.assetStore.delete(id);\n await this.fetch();\n };\n}\n\nexport type StoreAsset = {\n id: string;\n data: Uint8Array;\n createdAt: string;\n size: number;\n contentType?: string;\n};\n\nexport type CreateAssetOptions = {\n data: Uint8Array;\n contentType?: string;\n onUploadProgress?: (progress: {\n loaded: number;\n total?: number;\n percent?: number;\n }) => void;\n};\n\nexport interface IAssetStore {\n read: (id: string) => Promise<Asset | null>;\n list: () => Promise<Asset[]>;\n create: (options: CreateAssetOptions) => Promise<Asset>;\n delete: (id: string) => Promise<void>;\n}\n\ntype AssetManagerLocalOptions = {\n randomId?: () => string;\n databaseName?: string;\n indexedDB?: typeof globalThis.indexedDB;\n};\n\n/**\n * AssetManagerLocal is a local asset manager that uses IndexedDB to store assets.\n */\nexport class AssetStoreIndexedDB implements IAssetStore {\n databaseName: string;\n randomId: () => string;\n db: Promise<IDBDatabase>;\n\n constructor(options: AssetManagerLocalOptions = {}) {\n this.databaseName = options.databaseName ?? \"noya-assets\";\n this.randomId = options.randomId ?? uuid;\n this.db = this._initialize(options);\n }\n\n async _initialize({\n indexedDB = globalThis.indexedDB,\n }: {\n indexedDB?: typeof globalThis.indexedDB;\n } & Omit<AssetManagerLocalOptions, \"db\"> = {}): Promise<IDBDatabase> {\n const db = await new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.databaseName, 1);\n\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n if (!db.objectStoreNames.contains(\"assets\")) {\n db.createObjectStore(\"assets\", { keyPath: \"id\" });\n }\n };\n });\n\n await this._populateUrlCache(db);\n\n return db;\n }\n\n read = async (id: string): Promise<Asset | null> => {\n const db = await this.db;\n\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(\"assets\", \"readonly\");\n const objectStore = transaction.objectStore(\"assets\");\n const request = objectStore.get(id) as IDBRequest<StoreAsset | null>;\n\n request.onerror = () => reject(request.error);\n request.onsuccess = () =>\n resolve(\n request.result ? { ...request.result, url: this._getUrl(id) } : null\n );\n });\n };\n\n list = async (): Promise<Asset[]> => {\n const db = await this.db;\n\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(\"assets\", \"readonly\");\n const objectStore = transaction.objectStore(\"assets\");\n const request = objectStore.getAll() as IDBRequest<StoreAsset[]>;\n\n request.onerror = () => reject(request.error);\n request.onsuccess = () =>\n resolve(\n request.result.map(({ data, ...rest }) => ({\n ...rest,\n url: this._getUrl(rest.id),\n }))\n );\n });\n };\n\n create = async (asset: CreateAssetOptions): Promise<Asset> => {\n const id = this.randomId();\n const createdAsset: StoreAsset = {\n id,\n data: asset.data,\n size: asset.data.length,\n createdAt: new Date().toISOString(),\n contentType: asset.contentType,\n };\n const db = await this.db;\n\n await db\n .transaction(\"assets\", \"readwrite\")\n .objectStore(\"assets\")\n .put(createdAsset);\n\n this._createAssetUrl(createdAsset);\n\n return {\n id,\n url: this._getUrl(id),\n createdAt: createdAsset.createdAt,\n size: createdAsset.size,\n contentType: createdAsset.contentType,\n };\n };\n\n delete = async (id: string) => {\n const db = await this.db;\n await db\n .transaction(\"assets\", \"readwrite\")\n .objectStore(\"assets\")\n .delete(id);\n };\n\n // Private methods\n\n _list = async (db: IDBDatabase): Promise<StoreAsset[]> => {\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(\"assets\", \"readonly\");\n const objectStore = transaction.objectStore(\"assets\");\n const request = objectStore.getAll();\n\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n });\n };\n\n _urlCache = new Map<string, string>();\n\n _getUrl = (id: string) => {\n const url = this._urlCache.get(id);\n\n if (!url) {\n throw new Error(`URL for asset ${id} not found`);\n }\n\n return url;\n };\n\n _createAssetUrl(asset: StoreAsset) {\n const url = URL.createObjectURL(new Blob([asset.data]));\n this._urlCache.set(asset.id, url);\n }\n\n async _populateUrlCache(db: IDBDatabase) {\n const assets = await this._list(db);\n\n for (const asset of assets) {\n this._createAssetUrl(asset);\n }\n }\n}\n\ntype AssetStoreMemoryOptions = {\n randomId?: () => string;\n initialAssets?: StoreAsset[];\n};\n\nexport class AssetStoreMemory implements IAssetStore {\n assets: StoreAsset[] = [];\n randomId: () => string;\n\n constructor(options: AssetStoreMemoryOptions = {}) {\n this.randomId = options.randomId ?? uuid;\n this.assets = options.initialAssets ?? [];\n this.assets.forEach((asset) => {\n this._createAssetUrl(asset);\n });\n }\n\n read = async (id: string): Promise<Asset | null> => {\n const asset = this.assets.find((asset) => asset.id === id);\n return asset ? { ...asset, url: this._getUrl(id) } : null;\n };\n\n list = async (): Promise<Asset[]> => {\n return this.assets.map(({ data, ...rest }) => ({\n ...rest,\n url: this._getUrl(rest.id),\n }));\n };\n\n create = async (asset: CreateAssetOptions): Promise<Asset> => {\n const id = this.randomId();\n const createdAsset: StoreAsset = {\n id,\n data: asset.data,\n size: asset.data.length,\n createdAt: new Date().toISOString(),\n contentType: asset.contentType,\n };\n\n this.assets.push(createdAsset);\n\n this._createAssetUrl(createdAsset);\n\n return {\n id,\n url: this._getUrl(id),\n createdAt: createdAsset.createdAt,\n size: createdAsset.size,\n contentType: createdAsset.contentType,\n };\n };\n\n delete = async (id: string) => {\n this.assets = this.assets.filter((asset) => asset.id !== id);\n };\n\n _urlCache = new Map<string, string>();\n\n _getUrl = (id: string) => {\n const url = this._urlCache.get(id);\n\n if (!url) {\n throw new Error(`URL for asset ${id} not found`);\n }\n\n return url;\n };\n\n _createAssetUrl(asset: StoreAsset) {\n const url = URL.createObjectURL(new Blob([asset.data]));\n this._urlCache.set(asset.id, url);\n }\n}\n\nexport class AssetStoreRemote implements IAssetStore {\n constructor(private rpcManager: RPCManager) {}\n\n read = async (id: string) => {\n const list = await this.list();\n return list.find((asset) => asset.id === id) ?? null;\n };\n\n list = async () => {\n const response = await this.rpcManager.requestRoute(\"GET /api/assets\");\n return JSON.parse(response.body) as Asset[];\n };\n\n create = async (options: CreateAssetOptions) => {\n const response = await this.rpcManager.requestRoute(\"POST /api/assets\", {\n body: Base64.encode(options.data),\n headers: {\n ...(options.contentType ? { \"Content-Type\": options.contentType } : {}),\n },\n onUploadProgress: options.onUploadProgress,\n });\n\n return JSON.parse(response.body) as Asset;\n };\n\n delete = async (id: string) => {\n await this.rpcManager.requestRoute(\n `DELETE /api/assets/${id}` as \"DELETE /api/assets/:id\"\n );\n };\n}\n","import { Static, Type } from \"@sinclair/typebox\";\n\nexport const assetSchema = Type.Object({\n id: Type.String(),\n url: Type.String(),\n createdAt: Type.String(),\n size: Type.Number(),\n contentType: Type.Optional(Type.String()),\n});\n\nexport type Asset = Static<typeof assetSchema>;\n","import { Hint, Kind, TSchema } from \"@sinclair/typebox\";\n\nconst SchemaMap = new Map<symbol, string>([\n [Kind, \"_kind\"],\n [Hint, \"_hint\"],\n]);\n\nconst InverseSchemaMap = new Map<string, symbol>(\n Array.from(SchemaMap.entries()).map(([key, value]) => [value, key])\n);\n\nexport type Brand<T> = T & { __brand: string };\n\nexport type EncodedSchema = Brand<\"schema\">;\n\ntype NestedObject = {\n [key: string]: any;\n [sym: symbol]: any;\n};\n\nexport function encodeSchema(\n obj: TSchema,\n symMap: Map<Symbol, string> = SchemaMap\n): EncodedSchema {\n function replaceSymbols(item: any): any {\n if (Array.isArray(item)) {\n return item.map(replaceSymbols);\n } else if (typeof item === \"object\" && item !== null) {\n const newObj: NestedObject = {};\n for (const key in item) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n newObj[key] = replaceSymbols(value);\n }\n }\n\n for (const sym of Object.getOwnPropertySymbols(item)) {\n const stringKey = symMap.get(sym);\n if (stringKey) {\n newObj[stringKey] = replaceSymbols(item[sym]);\n }\n }\n return newObj;\n }\n return item;\n }\n\n return replaceSymbols(obj);\n}\n\nexport function decodeSchema(\n obj: EncodedSchema,\n strMap: Map<string, symbol> = InverseSchemaMap\n): TSchema {\n function replaceStringKeys(item: any): any {\n if (Array.isArray(item)) {\n return item.map(replaceStringKeys);\n } else if (typeof item === \"object\" && item !== null) {\n const newObj: NestedObject = {};\n for (const key in item) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n const symbolKey = strMap.get(key);\n if (symbolKey) {\n newObj[symbolKey] = replaceStringKeys(value);\n } else {\n newObj[key] = replaceStringKeys(value);\n }\n }\n }\n return newObj;\n }\n return item;\n }\n\n return replaceStringKeys(obj);\n}\n","import { Static, Type } from \"@sinclair/typebox\";\n\nexport const encodingSchema = Type.Union([\n Type.Literal(\"utf-8\"),\n Type.Literal(\"base64\"),\n]);\n\nexport const folderMediaItemSchema = Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n kind: Type.Literal(\"folder\"),\n});\n\nexport const assetMediaItemSchema = Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n kind: Type.Literal(\"asset\"),\n assetId: Type.String(),\n});\n\nexport const fileSchema = Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n kind: Type.Literal(\"file\"),\n content: Type.String(),\n encoding: encodingSchema,\n});\n\nexport const noyaFileSchema = Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n kind: Type.Literal(\"noyaFile\"),\n fileId: Type.String(),\n});\n\nexport const mediaItemSchema = Type.Union(\n [folderMediaItemSchema, assetMediaItemSchema, fileSchema, noyaFileSchema],\n {\n discriminator: \"kind\",\n }\n);\n\nexport type FolderMediaItem = Static<typeof folderMediaItemSchema>;\nexport type AssetMediaItem = Static<typeof assetMediaItemSchema>;\nexport type FileMediaItem = Static<typeof fileSchema>;\nexport type NoyaFileMediaItem = Static<typeof noyaFileSchema>;\nexport type MediaItem = Static<typeof mediaItemSchema>;\n\nexport const mediaMapSchema = Type.Record(Type.String(), mediaItemSchema);\nexport type MediaMap = Static<typeof mediaMapSchema>;\n","import { Static, Type } from \"@sinclair/typebox\";\n\nexport const repositorySchema = Type.Object({\n owner: Type.Optional(Type.String()),\n name: Type.Optional(Type.String()),\n ref: Type.Optional(Type.String()),\n path: Type.Optional(Type.String()),\n});\n\nexport type Repository = Static<typeof repositorySchema>;\n\nexport const gistSchema = Type.Object({\n id: Type.Optional(Type.String()),\n});\n\nexport type Gist = Static<typeof gistSchema>;\n","import { Static, Type } from \"@sinclair/typebox\";\n\nconst jsonSchema = Type.Recursive(\n (This) =>\n Type.Union(\n [\n Type.Object({\n type: Type.Literal(\"string\"),\n default: Type.Optional(Type.String()),\n _kind: Type.Literal(\"String\"),\n }),\n Type.Object({\n type: Type.Literal(\"number\"),\n default: Type.Optional(Type.Number()),\n minimum: Type.Optional(Type.Number()),\n maximum: Type.Optional(Type.Number()),\n _kind: Type.Literal(\"Number\"),\n }),\n Type.Object({\n type: Type.Literal(\"boolean\"),\n default: Type.Optional(Type.Boolean()),\n _kind: Type.Literal(\"Boolean\"),\n }),\n Type.Object({\n type: Type.Literal(\"null\"),\n _kind: Type.Literal(\"Null\"),\n }),\n Type.Object({\n type: Type.Literal(\"array\"),\n items: This,\n // default: Type.Optional(Type.Array(Type.Any())),\n // minItems: Type.Optional(Type.Number()),\n // maxItems: Type.Optional(Type.Number()),\n _kind: Type.Literal(\"Array\"),\n }),\n Type.Object({\n type: Type.Literal(\"object\"),\n properties: Type.Record(Type.String(), This),\n required: Type.Optional(Type.Array(Type.String())),\n // default: Type.Optional(Type.Record(Type.String(), Type.Any())),\n _kind: Type.Literal(\"Object\"),\n }),\n ],\n {\n discriminator: \"type\",\n }\n ),\n {\n $id: \"jsonSchema\",\n }\n);\n\nexport type JSONSchema = Static<typeof jsonSchema>;\nexport { jsonSchema };\n","import { Static, TSchema, Type } from \"@sinclair/typebox\";\nimport { jsonSchema } from \"./jsonSchema\";\n\nfunction Nullable<T extends TSchema>(type: T) {\n return Type.Union([type, Type.Null()], { default: null });\n}\n\nconst inputSchemaBase = {\n id: Type.String({ format: \"uuid\", default: \"\" }),\n stableId: Type.String({ format: \"uuid\", default: \"\" }),\n name: Type.String(),\n description: Nullable(Type.String()),\n required: Type.Boolean({ default: false }),\n};\n\nconst fileInputSchema = Type.Object({\n ...inputSchemaBase,\n kind: Type.Literal(\"file\"),\n toolId: Nullable(Type.String()),\n});\n\nexport type FileInput = Static<typeof fileInputSchema>;\n\nconst dataInputSchema = Type.Object({\n ...inputSchemaBase,\n kind: Type.Literal(\"data\"),\n schema: Nullable(jsonSchema),\n});\n\nexport type DataInput = Static<typeof dataInputSchema>;\n\nconst secretInputSchema = Type.Object({\n ...inputSchemaBase,\n kind: Type.Literal(\"secret\"),\n authProvider: Type.Optional(\n Type.Union([Type.Null(), Type.Literal(\"github\"), Type.Literal(\"figma\")], {\n default: null,\n })\n ),\n authScope: Type.Optional(Nullable(Type.String())),\n});\n\nexport type SecretInput = Static<typeof secretInputSchema>;\n\nexport const inputSchema = Type.Union(\n [fileInputSchema, dataInputSchema, secretInputSchema],\n {\n discriminator: \"kind\",\n }\n);\n\nexport type Input = Static<typeof inputSchema>;\n\nconst outputTransformSchemaBase = {\n id: Type.String({ format: \"uuid\", default: \"\" }),\n stableId: Type.String({ format: \"uuid\", default: \"\" }),\n order: Type.Number(),\n};\n\nconst scriptOutputTransformSchema = Type.Object({\n ...outputTransformSchemaBase,\n kind: Type.Literal(\"script\"),\n location: Type.Union([Type.Literal(\"state\"), Type.Literal(\"url\")]),\n value: Type.String(),\n});\n\nexport type ScriptOutputTransform = Static<typeof scriptOutputTransformSchema>;\n\nconst jsonPointerOutputTransformSchema = Type.Object({\n ...outputTransformSchemaBase,\n kind: Type.Literal(\"jsonPointer\"),\n value: Type.String(),\n});\n\nexport type JsonPointerOutputTransform = Static<\n typeof jsonPointerOutputTransformSchema\n>;\n\nexport const outputTransformSchema = Type.Union(\n [scriptOutputTransformSchema, jsonPointerOutputTransformSchema],\n { discriminator: \"kind\" }\n);\n\nexport type OutputTransform = Static<typeof outputTransformSchema>;\n\nexport function createFileInput(\n input: Pick<FileInput, \"id\" | \"name\" | \"stableId\"> & Partial<FileInput>\n): Input {\n return {\n ...input,\n kind: \"file\",\n toolId: input.toolId ?? null,\n description: input.description ?? null,\n required: input.required ?? false,\n };\n}\n\nexport function createDataInput(\n input: Pick<DataInput, \"id\" | \"name\" | \"stableId\"> & Partial<DataInput>\n): Input {\n return {\n ...input,\n kind: \"data\",\n schema: input.schema ?? null,\n description: input.description ?? null,\n required: input.required ?? false,\n };\n}\n\nexport function createSecretInput(\n input: Pick<SecretInput, \"id\" | \"name\" | \"stableId\"> & Partial<SecretInput>\n): Input {\n return {\n ...input,\n kind: \"secret\",\n description: input.description ?? null,\n required: input.required ?? false,\n authProvider: input.authProvider,\n authScope: input.authScope,\n };\n}\n\nexport function createScriptOutputTransform(\n transform: Pick<ScriptOutputTransform, \"id\" | \"order\" | \"stableId\"> &\n Partial<ScriptOutputTransform>\n): OutputTransform {\n return {\n ...transform,\n kind: transform.kind ?? \"script\",\n location: transform.location ?? \"state\",\n value: transform.value ?? \"\",\n };\n}\n\nexport function createJsonPointerOutputTransform(\n transform: Pick<JsonPointerOutputTransform, \"id\" | \"order\" | \"stableId\"> &\n Partial<JsonPointerOutputTransform>\n): OutputTransform {\n return {\n ...transform,\n kind: transform.kind ?? \"jsonPointer\",\n value: transform.value ?? \"\",\n };\n}\n","import { Kind, TSchema, TypeGuard } from \"@sinclair/typebox\";\nimport { defineTree } from \"tree-visit\";\n\nexport const SchemaTree = defineTree<TSchema>((schema) => {\n if (TypeGuard.IsUnion(schema)) {\n return schema.anyOf;\n } else if (TypeGuard.IsObject(schema)) {\n return Object.values(schema.properties);\n } else if (TypeGuard.IsArray(schema)) {\n return [schema.items];\n }\n\n return [];\n}).withOptions({\n getLabel(node) {\n return node[Kind] ?? \"<UnknownKind>\";\n },\n});\n\nexport type SchemaDefs = Record<string, TSchema>;\n\nexport function findAllDefs(schema?: TSchema): TSchema[] {\n if (!schema) return [];\n\n return SchemaTree.flat(schema).flatMap((node) => {\n return node.$id ? [node] : [];\n });\n}\n\nexport type SchemaDefsOrReferences = SchemaDefs | TSchema[];\n\nexport function normalizeDefs(defs: SchemaDefsOrReferences): TSchema[] {\n if (Array.isArray(defs)) {\n return defs;\n }\n\n return Object.values(defs);\n}\n\nexport function toSchemaDefs(defs: SchemaDefsOrReferences): SchemaDefs {\n if (Array.isArray(defs)) {\n return Object.fromEntries(defs.map((def) => [def.$id, def]));\n }\n\n return defs;\n}\n","import { FormatRegistry } from \"@sinclair/typebox/type\";\n\nexport * from \"./asset\";\nexport * from \"./encode\";\nexport * from \"./filesSchema\";\nexport * from \"./gitHubSchema\";\nexport * from \"./input\";\nexport * from \"./jsonSchema\";\nexport * from \"./parseType\";\nexport * from \"./SchemaTree\";\n\nfunction validateUUID(value: string) {\n return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(\n value\n );\n}\n\n// Register color format\nFormatRegistry.Set(\"color\", () => true);\nFormatRegistry.Set(\"uuid\", validateUUID);\n","import { Observable } from \"@noya-app/observable\";\nimport { MultiplayerUser } from \"@noya-app/state-manager\";\n\nexport class ConnectedUsersManager {\n connectedUsers$ = new Observable<MultiplayerUser[]>([]);\n\n currentUserCount$ = this.connectedUsers$.map((users) => users.length);\n\n currentUserId$ = new Observable<string | undefined>(undefined);\n\n setCurrentUserId(userId: string) {\n this.currentUserId$.set(userId);\n }\n}\n","import { Observable } from \"@noya-app/observable\";\nimport {\n ClientToServerMessage,\n MultiplayerStateManagerError,\n ServerToClientMessage,\n} from \"./multiplayer\";\nimport { ReconnectingWebSocketState } from \"./ReconnectingWebsocket\";\n\nexport type ConnectionEvent<S> =\n | {\n type: \"stateChange\";\n state: ReconnectingWebSocketState;\n }\n | {\n type: \"send\";\n message: ClientToServerMessage<S>;\n }\n | {\n type: \"receive\";\n message: ServerToClientMessage<S>;\n }\n | {\n type: \"error\";\n error: MultiplayerStateManagerError;\n };\n\nexport class ConnectionEventManager<S> {\n constructor(public options: { maxEvents?: number } = {}) {}\n\n events$ = new Observable<ConnectionEvent<S>[]>([]);\n\n addEvent(event: ConnectionEvent<S>) {\n const existing = this.events$.get();\n const merged = [...existing, event];\n const maxEvents = this.options.maxEvents ?? 50;\n this.events$.set(merged.slice(-maxEvents)); // Take last maxEvents items\n }\n\n getEvents() {\n return this.events$.get();\n }\n}\n","// Don't use `Symbol()` just for 3rd party access the draft\nexport const PROXY_DRAFT = Symbol.for('__MUTATIVE_PROXY_DRAFT__');\nexport const RAW_RETURN_SYMBOL = Symbol('__MUTATIVE_RAW_RETURN_SYMBOL__');\n\nexport const iteratorSymbol: typeof Symbol.iterator = Symbol.iterator;\n\nexport const dataTypes = {\n mutable: 'mutable',\n immutable: 'immutable',\n} as const;\n","export function has(target: object, key: PropertyKey) {\n return target instanceof Map\n ? target.has(key)\n : Object.prototype.hasOwnProperty.call(target, key);\n}\n\nexport function getDescriptor(target: object, key: PropertyKey) {\n if (key in target) {\n let prototype = Reflect.getPrototypeOf(target);\n while (prototype) {\n const descriptor = Reflect.getOwnPropertyDescriptor(prototype, key);\n if (descriptor) return descriptor;\n prototype = Reflect.getPrototypeOf(prototype);\n }\n }\n return;\n}\n\nexport function isBaseSetInstance(obj: any) {\n return Object.getPrototypeOf(obj) === Set.prototype;\n}\n\nexport function isBaseMapInstance(obj: any) {\n return Object.getPrototypeOf(obj) === Map.prototype;\n}\n","import { DraftType, Mark, ProxyDraft } from '../interface';\nimport { dataTypes, PROXY_DRAFT } from '../constant';\nimport { has } from './proto';\n\nexport function latest<T = any>(proxyDraft: ProxyDraft): T {\n return proxyDraft.copy ?? proxyDraft.original;\n}\n\n/**\n * Check if the value is a draft\n */\nexport function isDraft(target: any) {\n return !!getProxyDraft(target);\n}\n\nexport function getProxyDraft<T extends any>(value: T): ProxyDraft | null {\n if (typeof value !== 'object') return null;\n return (value as { [PROXY_DRAFT]: any })?.[PROXY_DRAFT];\n}\n\nexport function getValue<T extends object>(value: T): T {\n const proxyDraft = getProxyDraft(value);\n return proxyDraft ? proxyDraft.copy ?? proxyDraft.original : value;\n}\n\n/**\n * Check if a value is draftable\n */\nexport function isDraftable(value: any, options?: { mark?: Mark<any, any> }) {\n if (!value || typeof value !== 'object') return false;\n let markResult: any;\n return (\n Object.getPrototypeOf(value) === Object.prototype ||\n Array.isArray(value) ||\n value instanceof Map ||\n value instanceof Set ||\n (!!options?.mark &&\n ((markResult = options.mark(value, dataTypes)) === dataTypes.immutable ||\n typeof markResult === 'function'))\n );\n}\n\nexport function getPath(\n target: ProxyDraft,\n path: any[] = []\n): (string | number | object)[] | null {\n if (Object.hasOwnProperty.call(target, 'key')) {\n // check if the parent is a draft and the original value is not equal to the current value\n const parentCopy = target.parent!.copy;\n const proxyDraft = getProxyDraft(get(parentCopy, target.key!));\n if (proxyDraft !== null && proxyDraft?.original !== target.original) {\n return null;\n }\n const isSet = target.parent!.type === DraftType.Set;\n const key = isSet\n ? Array.from(target.parent!.setMap!.keys()).indexOf(target.key)\n : target.key;\n // check if the key is still in the next state parent\n if (\n !((isSet && parentCopy.size > (key as number)) || has(parentCopy, key!))\n )\n return null;\n path.push(key);\n }\n if (target.parent) {\n return getPath(target.parent, path);\n }\n // `target` is root draft.\n path.reverse();\n try {\n // check if the path is valid\n resolvePath(target.copy, path);\n } catch (e) {\n return null;\n }\n return path;\n}\n\nexport function getType(target: any) {\n if (Array.isArray(target)) return DraftType.Array;\n if (target instanceof Map) return DraftType.Map;\n if (target instanceof Set) return DraftType.Set;\n return DraftType.Object;\n}\n\nexport function get(target: any, key: PropertyKey) {\n return getType(target) === DraftType.Map ? target.get(key) : target[key];\n}\n\nexport function set(target: any, key: PropertyKey, value: any) {\n const type = getType(target);\n if (type === DraftType.Map) {\n target.set(key, value);\n } else {\n target[key] = value;\n }\n}\n\nexport function peek(target: any, key: PropertyKey) {\n const state = getProxyDraft(target);\n const source = state ? latest(state) : target;\n return source[key];\n}\n\nexport function isEqual(x: any, y: any) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport function revokeProxy(proxyDraft: ProxyDraft | null) {\n if (!proxyDraft) return;\n while (proxyDraft.finalities.revoke.length > 0) {\n const revoke = proxyDraft.finalities.revoke.pop()!;\n revoke();\n }\n}\n\n// handle JSON Pointer path with spec https://www.rfc-editor.org/rfc/rfc6901\nexport function escapePath(path: string[], pathAsArray: boolean) {\n return pathAsArray\n ? path\n : ['']\n .concat(path)\n .map((_item) => {\n const item = `${_item}`;\n if (item.indexOf('/') === -1 && item.indexOf('~') === -1) return item;\n return item.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/');\n}\n\nexport function unescapePath(path: string | (string | number)[]) {\n if (Array.isArray(path)) return path;\n return path\n .split('/')\n .map((_item) => _item.replace(/~1/g, '/').replace(/~0/g, '~'))\n .slice(1);\n}\n\nexport function resolvePath(base: any, path: (string | number)[]) {\n for (let index = 0; index < path.length - 1; index += 1) {\n const key = path[index];\n // use `index` in Set draft\n base = get(getType(base) === DraftType.Set ? Array.from(base) : base, key);\n if (typeof base !== 'object') {\n throw new Error(`Cannot resolve patch at '${path.join('/')}'.`);\n }\n }\n return base;\n}\n","import type { Options, ProxyDraft } from '../interface';\nimport { dataTypes } from '../constant';\nimport { getValue, isDraft, isDraftable } from './draft';\nimport { isBaseMapInstance, isBaseSetInstance } from './proto';\n\nfunction strictCopy(target: any) {\n const copy = Object.create(Object.getPrototypeOf(target));\n Reflect.ownKeys(target).forEach((key: any) => {\n let desc = Reflect.getOwnPropertyDescriptor(target, key)!;\n if (desc.enumerable && desc.configurable && desc.writable) {\n copy[key] = target[key];\n return;\n }\n // for freeze\n if (!desc.writable) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n desc = {\n configurable: true,\n writable: true,\n enumerable: desc.enumerable,\n value: target[key],\n };\n Reflect.defineProperty(copy, key, desc);\n });\n return copy;\n}\n\nconst propIsEnum = Object.prototype.propertyIsEnumerable;\n\nexport function shallowCopy(original: any, options?: Options<any, any>) {\n let markResult: any;\n if (Array.isArray(original)) {\n return Array.prototype.concat.call(original);\n } else if (original instanceof Set) {\n if (!isBaseSetInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original.values());\n }\n return Set.prototype.difference\n ? Set.prototype.difference.call(original, new Set())\n : new Set(original.values());\n } else if (original instanceof Map) {\n if (!isBaseMapInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original);\n }\n return new Map(original);\n } else if (\n options?.mark &&\n ((markResult = options.mark(original, dataTypes)),\n markResult !== undefined) &&\n markResult !== dataTypes.mutable\n ) {\n if (markResult === dataTypes.immutable) {\n return strictCopy(original);\n } else if (typeof markResult === 'function') {\n if (__DEV__ && (options.enablePatches || options.enableAutoFreeze)) {\n throw new Error(\n `You can't use mark and patches or auto freeze together.`\n );\n }\n return markResult();\n }\n throw new Error(`Unsupported mark result: ${markResult}`);\n } else if (\n typeof original === 'object' &&\n Object.getPrototypeOf(original) === Object.prototype\n ) {\n // For best performance with shallow copies,\n // don't use `Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));` by default.\n const copy: Record<string | symbol, any> = {};\n Object.keys(original).forEach((key) => {\n copy[key] = original[key];\n });\n Object.getOwnPropertySymbols(original).forEach((key) => {\n if (propIsEnum.call(original, key)) {\n copy[key] = original[key];\n }\n });\n return copy;\n } else {\n throw new Error(\n `Please check mark() to ensure that it is a stable marker draftable function.`\n );\n }\n}\n\nexport function ensureShallowCopy(target: ProxyDraft) {\n if (target.copy) return;\n target.copy = shallowCopy(target.original, target.options)!;\n}\n\nfunction deepClone<T>(target: T): T;\nfunction deepClone(target: any) {\n if (!isDraftable(target)) return getValue(target);\n if (Array.isArray(target)) return target.map(deepClone);\n if (target instanceof Map) {\n const iterable = Array.from(target.entries()).map(([k, v]) => [\n k,\n deepClone(v),\n ]) as Iterable<readonly [any, any]>;\n if (!isBaseMapInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Map(iterable);\n }\n if (target instanceof Set) {\n const iterable = Array.from(target).map(deepClone);\n if (!isBaseSetInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Set(iterable);\n }\n const copy = Object.create(Object.getPrototypeOf(target));\n for (const key in target) copy[key] = deepClone(target[key]);\n return copy;\n}\n\nexport function cloneIfNeeded<T>(target: T): T {\n return isDraft(target) ? deepClone(target) : target;\n}\n\nexport { deepClone };\n","import { ProxyDraft } from '../interface';\n\nexport function markChanged(proxyDraft: ProxyDraft) {\n proxyDraft.assignedMap = proxyDraft.assignedMap ?? new Map();\n if (!proxyDraft.operated) {\n proxyDraft.operated = true;\n if (proxyDraft.parent) {\n markChanged(proxyDraft.parent);\n }\n }\n}\n","import { DraftType } from '../interface';\nimport { getType, isDraft } from './draft';\n\nfunction throwFrozenError() {\n throw new Error('Cannot modify frozen object');\n}\n\nfunction isFreezable(value: any) {\n return (\n __DEV__ || (value && typeof value === 'object' && !Object.isFrozen(value))\n );\n}\n\nexport function deepFreeze(\n target: any,\n subKey?: any,\n updatedValues?: WeakMap<any, any>,\n stack?: any[],\n keys?: any[]\n) {\n if (__DEV__) {\n updatedValues = updatedValues ?? new WeakMap();\n stack = stack ?? [];\n keys = keys ?? [];\n const value = updatedValues.has(target)\n ? updatedValues.get(target)\n : target;\n if (stack.length > 0) {\n const index = stack.indexOf(value);\n if (value && typeof value === 'object' && index !== -1) {\n if (stack[0] === value) {\n throw new Error(`Forbids circular reference`);\n }\n throw new Error(\n `Forbids circular reference: ~/${keys\n .slice(0, index)\n .map((key, index) => {\n if (typeof key === 'symbol') return `[${key.toString()}]`;\n const parent = stack![index];\n if (\n typeof key === 'object' &&\n (parent instanceof Map || parent instanceof Set)\n )\n return Array.from(parent.keys()).indexOf(key);\n return key;\n })\n .join('/')}`\n );\n }\n stack.push(value);\n keys.push(subKey);\n } else {\n stack.push(value);\n }\n }\n if (Object.isFrozen(target) || isDraft(target)) {\n if (__DEV__) {\n stack!.pop();\n keys!.pop();\n }\n return;\n }\n const type = getType(target);\n switch (type) {\n case DraftType.Map:\n for (const [key, value] of target) {\n if (isFreezable(key)) deepFreeze(key, key, updatedValues, stack, keys);\n if (isFreezable(value))\n deepFreeze(value, key, updatedValues, stack, keys);\n }\n target.set = target.clear = target.delete = throwFrozenError;\n break;\n case DraftType.Set:\n for (const value of target) {\n if (isFreezable(value))\n deepFreeze(value, value, updatedValues, stack, keys);\n }\n target.add = target.clear = target.delete = throwFrozenError;\n break;\n case DraftType.Array:\n Object.freeze(target);\n let index = 0;\n for (const value of target) {\n if (isFreezable(value))\n deepFreeze(value, index, updatedValues, stack, keys);\n index += 1;\n }\n break;\n default:\n Object.freeze(target);\n // ignore non-enumerable or symbol properties\n Object.keys(target).forEach((name) => {\n const value = target[name];\n if (isFreezable(value))\n deepFreeze(value, name, updatedValues, stack, keys);\n });\n }\n if (__DEV__) {\n stack!.pop();\n keys!.pop();\n }\n}\n","import { DraftType } from '../interface';\nimport { getType } from './draft';\n\nexport function forEach<T extends object>(\n target: T,\n iter: (key: string | number | symbol, value: any, source: T) => void\n) {\n const type = getType(target);\n if (type === DraftType.Object) {\n Reflect.ownKeys(target).forEach((key) => {\n iter(key, (target as any)[key], target);\n });\n } else if (type === DraftType.Array) {\n let index = 0;\n for (const entry of target as any[]) {\n iter(index, entry, target);\n index += 1;\n }\n } else {\n (target as Map<any, any> | Set<any>).forEach((entry: any, index: any) =>\n iter(index, entry, target)\n );\n }\n}\n","import { DraftType, Patches, ProxyDraft } from '../interface';\nimport { ensureShallowCopy } from './copy';\nimport {\n get,\n getPath,\n getProxyDraft,\n getValue,\n isDraft,\n isDraftable,\n isEqual,\n set,\n} from './draft';\nimport { forEach } from './forEach';\n\nexport function handleValue(\n target: any,\n handledSet: WeakSet<any>,\n options?: ProxyDraft['options']\n) {\n if (\n isDraft(target) ||\n !isDraftable(target, options) ||\n handledSet.has(target) ||\n Object.isFrozen(target)\n )\n return;\n const isSet = target instanceof Set;\n const setMap: Map<any, any> | undefined = isSet ? new Map() : undefined;\n handledSet.add(target);\n forEach(target, (key, value) => {\n if (isDraft(value)) {\n const proxyDraft = getProxyDraft(value)!;\n ensureShallowCopy(proxyDraft);\n // A draft where a child node has been changed, or assigned a value\n const updatedValue =\n proxyDraft.assignedMap?.size || proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original;\n // final update value\n set(isSet ? setMap! : target, key, updatedValue);\n } else {\n handleValue(value, handledSet, options);\n }\n });\n if (setMap) {\n const set = target as Set<any>;\n const values = Array.from(set);\n set.clear();\n values.forEach((value) => {\n set.add(setMap!.has(value) ? setMap!.get(value) : value);\n });\n }\n}\n\nexport function finalizeAssigned(proxyDraft: ProxyDraft, key: PropertyKey) {\n // handle the draftable assigned values, and the value is not a draft\n const copy =\n proxyDraft.type === DraftType.Set ? proxyDraft.setMap : proxyDraft.copy;\n if (\n proxyDraft.finalities.revoke.length > 1 &&\n proxyDraft.assignedMap!.get(key) &&\n copy\n ) {\n handleValue(\n get(copy, key),\n proxyDraft.finalities.handledSet,\n proxyDraft.options\n );\n }\n}\n\nexport type GeneratePatches = (\n proxyState: ProxyDraft,\n basePath: any[],\n patches: Patches,\n inversePatches: Patches\n) => void;\n\nexport function finalizeSetValue(target: ProxyDraft) {\n if (target.type === DraftType.Set && target.copy) {\n target.copy.clear();\n target.setMap!.forEach((value) => {\n target.copy!.add(getValue(value));\n });\n }\n}\n\nexport function finalizePatches(\n target: ProxyDraft,\n generatePatches: GeneratePatches,\n patches?: Patches,\n inversePatches?: Patches\n) {\n const shouldFinalize =\n target.operated &&\n target.assignedMap &&\n target.assignedMap.size > 0 &&\n !target.finalized;\n if (shouldFinalize) {\n if (patches && inversePatches) {\n const basePath = getPath(target);\n if (basePath) {\n generatePatches(target, basePath, patches, inversePatches);\n }\n }\n target.finalized = true;\n }\n}\n\nexport function markFinalization(\n target: ProxyDraft,\n key: any,\n value: any,\n generatePatches: GeneratePatches\n) {\n const proxyDraft = getProxyDraft(value);\n if (proxyDraft) {\n // !case: assign the draft value\n if (!proxyDraft.callbacks) {\n proxyDraft.callbacks = [];\n }\n proxyDraft.callbacks.push((patches, inversePatches) => {\n const copy = target.type === DraftType.Set ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n let updatedValue = proxyDraft.original;\n if (proxyDraft.copy) {\n updatedValue = proxyDraft.copy;\n }\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n if (__DEV__ && target.options.enableAutoFreeze) {\n target.options.updatedValues =\n target.options.updatedValues ?? new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key, updatedValue);\n }\n });\n if (target.options.enableAutoFreeze) {\n // !case: assign the draft value in cross draft tree\n if (proxyDraft.finalities !== target.finalities) {\n target.options.enableAutoFreeze = false;\n }\n }\n }\n if (isDraftable(value, target.options)) {\n // !case: assign the non-draft value\n target.finalities.draft.push(() => {\n const copy = target.type === DraftType.Set ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n finalizeAssigned(target, key);\n }\n });\n }\n}\n","import { type Draft, DraftType, type ProxyDraft } from './interface';\nimport {\n forEach,\n get,\n getProxyDraft,\n getType,\n isBaseMapInstance,\n isBaseSetInstance,\n isDraft,\n isDraftable,\n isEqual,\n set,\n shallowCopy,\n} from './utils';\n\nexport function handleReturnValue<T extends object>(options: {\n rootDraft: ProxyDraft<any> | undefined;\n value: T;\n useRawReturn?: boolean;\n isContainDraft?: boolean;\n isRoot?: boolean;\n}) {\n const { rootDraft, value, useRawReturn = false, isRoot = true } = options;\n forEach(value, (key, item, source) => {\n const proxyDraft = getProxyDraft(item);\n // just handle the draft which is created by the same rootDraft\n if (\n proxyDraft &&\n rootDraft &&\n proxyDraft.finalities === rootDraft.finalities\n ) {\n options.isContainDraft = true;\n const currentValue = proxyDraft.original;\n // final update value, but just handle return value\n if (source instanceof Set) {\n const arr = Array.from(source);\n source.clear();\n arr.forEach((_item) =>\n source.add(key === _item ? currentValue : _item)\n );\n } else {\n set(source, key, currentValue);\n }\n } else if (typeof item === 'object' && item !== null) {\n options.value = item;\n options.isRoot = false;\n handleReturnValue(options);\n }\n });\n if (__DEV__ && isRoot) {\n if (!options.isContainDraft)\n console.warn(\n `The return value does not contain any draft, please use 'rawReturn()' to wrap the return value to improve performance.`\n );\n\n if (useRawReturn) {\n console.warn(\n `The return value contains drafts, please don't use 'rawReturn()' to wrap the return value.`\n );\n }\n }\n}\n\nfunction getCurrent(target: any) {\n const proxyDraft = getProxyDraft(target);\n if (!isDraftable(target, proxyDraft?.options)) return target;\n const type = getType(target);\n if (proxyDraft && !proxyDraft.operated) return proxyDraft.original;\n let currentValue: any;\n function ensureShallowCopy() {\n currentValue =\n type === DraftType.Map\n ? !isBaseMapInstance(target)\n ? new (Object.getPrototypeOf(target).constructor)(target)\n : new Map(target)\n : type === DraftType.Set\n ? Array.from(proxyDraft!.setMap!.values()!)\n : shallowCopy(target, proxyDraft?.options);\n }\n\n if (proxyDraft) {\n // It's a proxy draft, let's create a shallow copy eagerly\n proxyDraft.finalized = true;\n try {\n ensureShallowCopy();\n } finally {\n proxyDraft.finalized = false;\n }\n } else {\n // It's not a proxy draft, let's use the target directly and let's see\n // lazily if we need to create a shallow copy\n currentValue = target;\n }\n\n forEach(currentValue, (key, value) => {\n if (proxyDraft && isEqual(get(proxyDraft.original, key), value)) return;\n const newValue = getCurrent(value);\n if (newValue !== value) {\n if (currentValue === target) ensureShallowCopy();\n set(currentValue, key, newValue);\n }\n });\n if (type === DraftType.Set) {\n const value = proxyDraft?.original ?? currentValue;\n return !isBaseSetInstance(value)\n ? new (Object.getPrototypeOf(value).constructor)(currentValue)\n : new Set(currentValue);\n }\n return currentValue;\n}\n\n/**\n * `current(draft)` to get current state in the draft mutation function.\n *\n * ## Example\n *\n * ```ts\n * import { create, current } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * expect(current(draft.foo)).toEqual({ bar: 'str2' });\n * },\n * );\n * ```\n */\nexport function current<T extends object>(target: Draft<T>): T;\n/** @deprecated You should call current only on `Draft<T>` types. */\nexport function current<T extends object>(target: T): T;\nexport function current<T extends object>(target: T | Draft<T>): T {\n if (!isDraft(target)) {\n throw new Error(`current() is only used for Draft, parameter: ${target}`);\n }\n return getCurrent(target);\n}\n","import { dataTypes } from './constant';\n\nexport const enum DraftType {\n Object,\n Array,\n Map,\n Set,\n}\n\nexport const Operation = {\n Remove: 'remove',\n Replace: 'replace',\n Add: 'add',\n Move: 'move',\n} as const;\n\nexport type DataType = keyof typeof dataTypes;\n\nexport type PatchesOptions =\n | boolean\n | {\n /**\n * The default value is `true`. If it's `true`, the path will be an array, otherwise it is a string.\n */\n pathAsArray?: boolean;\n /**\n * The default value is `true`. If it's `true`, the array length will be included in the patches, otherwise no include array length.\n */\n arrayLengthAssignment?: boolean;\n };\n\nexport interface Finalities {\n draft: ((patches?: Patches, inversePatches?: Patches) => void)[];\n revoke: (() => void)[];\n handledSet: WeakSet<any>;\n}\n\nexport interface ProxyDraft<T = any> {\n type: DraftType;\n operated?: boolean;\n finalized: boolean;\n original: T;\n copy: T | null;\n proxy: T | null;\n finalities: Finalities;\n options: Options<any, any> & { updatedValues?: WeakMap<any, any> };\n parent?: ProxyDraft | null;\n key?: string | number | symbol;\n setMap?: Map<any, ProxyDraft>;\n assignedMap?: Map<any, boolean>;\n callbacks?: ((patches?: Patches, inversePatches?: Patches) => void)[];\n}\n\nexport interface IPatch {\n op: (typeof Operation)[keyof typeof Operation];\n value?: any;\n length?: number;\n}\n\nexport type Patch<P extends PatchesOptions = any> = P extends {\n pathAsArray: false;\n}\n ? IPatch & {\n path: string;\n from?: string;\n }\n : P extends true | object\n ? IPatch & {\n path: (string | number)[];\n from?: (string | number)[];\n }\n : IPatch & {\n path: string | (string | number)[];\n from?: string | (string | number)[];\n };\n\nexport type Patches<P extends PatchesOptions = any> = Patch<P>[];\n\nexport type Result<\n T extends any,\n O extends PatchesOptions,\n F extends boolean,\n> = O extends true | object\n ? [F extends true ? Immutable<T> : T, Patches<O>, Patches<O>]\n : F extends true\n ? Immutable<T>\n : T;\n\nexport type CreateResult<\n T extends any,\n O extends PatchesOptions,\n F extends boolean,\n R extends void | Promise<void> | T | Promise<T>,\n> = R extends Promise<void> | Promise<T>\n ? Promise<Result<T, O, F>>\n : Result<T, O, F>;\n\ntype BaseMark = null | undefined | DataType;\ntype MarkWithCopy = BaseMark | (() => any);\n\nexport type Mark<O extends PatchesOptions, F extends boolean> = (\n target: any,\n types: typeof dataTypes\n) => O extends true | object\n ? BaseMark\n : F extends true\n ? BaseMark\n : MarkWithCopy;\n\nexport interface ApplyMutableOptions {\n /**\n * If it's `true`, the state will be mutated directly.\n */\n mutable?: boolean;\n}\n\nexport interface CreateArrayPatchesParameters {\n isAssigned: (index: number) => boolean;\n cloneIfNeeded: (value: any) => any;\n concatPath: (segment: number | string) => string | string[];\n basePath: (string | number)[];\n original: any[];\n copy: any[];\n}\n\nexport interface ArrayPatches<P extends PatchesOptions = any> {\n patches: Patches<P>;\n inversePatches: Patches<P>;\n}\n\nexport type CreateArrayPatches<P extends PatchesOptions = any> = (\n params: CreateArrayPatchesParameters\n) => ArrayPatches<P> | null;\n\nexport interface Options<O extends PatchesOptions, F extends boolean> {\n /**\n * In strict mode, Forbid accessing non-draftable values and forbid returning a non-draft value.\n */\n strict?: boolean;\n /**\n * Enable patch, and return the patches and inversePatches.\n */\n enablePatches?: O;\n /**\n * Enable autoFreeze, and return frozen state.\n */\n enableAutoFreeze?: F;\n /**\n * Set a mark to determine if the object is mutable or if an instance is an immutable.\n * And it can also return a shallow copy function(AutoFreeze and Patches should both be disabled).\n */\n mark?: Mark<O, F>;\n\n createArrayPatches?: CreateArrayPatches;\n}\n\nexport interface ExternalOptions<O extends PatchesOptions, F extends boolean> {\n /**\n * In strict mode, Forbid accessing non-draftable values and forbid returning a non-draft value.\n */\n strict?: boolean;\n /**\n * Enable patch, and return the patches and inversePatches.\n */\n enablePatches?: O;\n /**\n * Enable autoFreeze, and return frozen state.\n */\n enableAutoFreeze?: F;\n /**\n * Set a mark to determine if the object is mutable or if an instance is an immutable.\n * And it can also return a shallow copy function(AutoFreeze and Patches should both be disabled).\n */\n mark?: Mark<O, F>[] | Mark<O, F>;\n\n createArrayPatches?: CreateArrayPatches;\n}\n\n// Exclude `symbol`\ntype Primitive = string | number | bigint | boolean | null | undefined;\n\ntype ImmutableMap<K, V> = ReadonlyMap<Immutable<K>, Immutable<V>>;\ntype ImmutableSet<T> = ReadonlySet<Immutable<T>>;\ntype ImmutableObject<T> = { readonly [K in keyof T]: Immutable<T[K]> };\n\nexport type IfAvailable<T, Fallback = void> = true | false extends (\n T extends never ? true : false\n)\n ? Fallback\n : keyof T extends never\n ? Fallback\n : T;\ntype WeakReferences =\n | IfAvailable<WeakMap<any, any>>\n | IfAvailable<WeakSet<any>>;\ntype AtomicObject = Function | Promise<any> | Date | RegExp;\n\nexport type Immutable<T> = T extends Primitive | AtomicObject\n ? T\n : T extends IfAvailable<ReadonlyMap<infer K, infer V>>\n ? ImmutableMap<K, V>\n : T extends IfAvailable<ReadonlySet<infer V>>\n ? ImmutableSet<V>\n : T extends WeakReferences\n ? T\n : T extends object\n ? ImmutableObject<T>\n : T;\n\ntype DraftedMap<K, V> = Map<K, Draft<V>>;\ntype DraftedSet<T> = Set<Draft<T>>;\ntype DraftedObject<T> = {\n -readonly [K in keyof T]: Draft<T[K]>;\n};\n\nexport type Draft<T> = T extends Primitive | AtomicObject\n ? T\n : T extends IfAvailable<ReadonlyMap<infer K, infer V>>\n ? DraftedMap<K, V>\n : T extends IfAvailable<ReadonlySet<infer V>>\n ? DraftedSet<V>\n : T extends WeakReferences\n ? T\n : T extends object\n ? DraftedObject<T>\n : T;\n\nexport type ApplyOptions<F extends boolean> =\n | Pick<\n Options<boolean, F>,\n Exclude<keyof Options<boolean, F>, 'enablePatches'>\n >\n | ApplyMutableOptions;\n\nexport type ApplyResult<\n T extends object,\n F extends boolean = false,\n A extends ApplyOptions<F> = ApplyOptions<F>,\n> = A extends { mutable: true } ? void : T;\n","import { createDraft } from './draft';\n\nexport const internal = {} as {\n createDraft: typeof createDraft;\n};\n","import {\n CreateArrayPatches,\n CreateArrayPatchesParameters,\n DraftType,\n Operation,\n Patches,\n ProxyDraft,\n} from './interface';\nimport { cloneIfNeeded, escapePath, get, has, isEqual } from './utils';\n\nfunction generateArrayPatches(\n proxyState: ProxyDraft<Array<any>>,\n basePath: any[],\n patches: Patches,\n inversePatches: Patches,\n pathAsArray: boolean,\n createArrayPatches?: CreateArrayPatches\n) {\n let { original, assignedMap, options } = proxyState;\n let copy = proxyState.copy!;\n\n const params: CreateArrayPatchesParameters = {\n isAssigned: (index: number) => {\n return !!assignedMap!.get(index.toString());\n },\n cloneIfNeeded,\n concatPath: (segment: number | string) => {\n const _path = basePath.concat([segment]);\n const path = escapePath(_path, pathAsArray);\n return path;\n },\n basePath,\n original,\n copy,\n };\n\n if (createArrayPatches) {\n const arrayPatches = createArrayPatches(params);\n if (arrayPatches) {\n patches.push(...arrayPatches.patches);\n inversePatches.push(...arrayPatches.inversePatches);\n return;\n }\n }\n\n if (copy.length < original.length) {\n [original, copy] = [copy, original];\n [patches, inversePatches] = [inversePatches, patches];\n }\n\n for (let index = 0; index < original.length; index += 1) {\n if (assignedMap!.get(index.toString()) && copy[index] !== original[index]) {\n const path = params.concatPath(index);\n patches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: params.cloneIfNeeded(copy[index]),\n });\n inversePatches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: params.cloneIfNeeded(original[index]),\n });\n }\n }\n for (let index = original.length; index < copy.length; index += 1) {\n const path = params.concatPath(index);\n patches.push({\n op: Operation.Add,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: params.cloneIfNeeded(copy[index]),\n });\n }\n if (original.length < copy.length) {\n // https://www.rfc-editor.org/rfc/rfc6902#appendix-A.4\n // For performance, here we only generate an operation that replaces the length of the array,\n // which is inconsistent with JSON Patch specification\n const { arrayLengthAssignment = true } = options.enablePatches;\n if (arrayLengthAssignment) {\n const path = params.concatPath('length');\n inversePatches.push({\n op: Operation.Replace,\n path,\n value: original.length,\n });\n } else {\n for (let index = copy.length; original.length < index; index -= 1) {\n const path = params.concatPath(index - 1);\n inversePatches.push({\n op: Operation.Remove,\n path,\n });\n }\n }\n }\n}\n\nfunction generatePatchesFromAssigned(\n { original, copy, assignedMap }: ProxyDraft<Record<string, any>>,\n basePath: any[],\n patches: Patches,\n inversePatches: Patches,\n pathAsArray: boolean\n) {\n assignedMap!.forEach((assignedValue, key) => {\n const originalValue = get(original, key);\n const value = cloneIfNeeded(get(copy, key));\n const op = !assignedValue\n ? Operation.Remove\n : has(original, key)\n ? Operation.Replace\n : Operation.Add;\n if (isEqual(originalValue, value) && op === Operation.Replace) return;\n const _path = basePath.concat(key);\n const path = escapePath(_path, pathAsArray);\n patches.push(op === Operation.Remove ? { op, path } : { op, path, value });\n inversePatches.push(\n op === Operation.Add\n ? { op: Operation.Remove, path }\n : op === Operation.Remove\n ? { op: Operation.Add, path, value: originalValue }\n : { op: Operation.Replace, path, value: originalValue }\n );\n });\n}\n\nfunction generateSetPatches(\n { original, copy }: ProxyDraft<Set<any>>,\n basePath: any[],\n patches: Patches,\n inversePatches: Patches,\n pathAsArray: boolean\n) {\n let index = 0;\n original.forEach((value: any) => {\n if (!copy!.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Remove,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Add,\n path,\n value,\n });\n }\n index += 1;\n });\n index = 0;\n copy!.forEach((value: any) => {\n if (!original.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Add,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Remove,\n path,\n value,\n });\n }\n index += 1;\n });\n}\n\nexport function generatePatches(\n proxyState: ProxyDraft,\n basePath: any[],\n patches: Patches,\n inversePatches: Patches\n) {\n const { pathAsArray = true } = proxyState.options.enablePatches;\n const createArrayPatches = proxyState.options.createArrayPatches;\n\n switch (proxyState.type) {\n case DraftType.Object:\n case DraftType.Map:\n return generatePatchesFromAssigned(\n proxyState,\n basePath,\n patches,\n inversePatches,\n pathAsArray\n );\n case DraftType.Array:\n return generateArrayPatches(\n proxyState,\n basePath,\n patches,\n inversePatches,\n pathAsArray,\n createArrayPatches\n );\n case DraftType.Set:\n return generateSetPatches(\n proxyState,\n basePath,\n patches,\n inversePatches,\n pathAsArray\n );\n }\n}\n","import { Options } from './interface';\nimport { isDraftable } from './utils';\n\nlet readable = false;\n\nexport const checkReadable = (\n value: any,\n options: Options<any, any>,\n ignoreCheckDraftable = false\n) => {\n if (\n typeof value === 'object' &&\n value !== null &&\n (!isDraftable(value, options) || ignoreCheckDraftable) &&\n !readable\n ) {\n throw new Error(\n `Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.`\n );\n }\n};\n\n/**\n * `unsafe(callback)` to access mutable data directly in strict mode.\n *\n * ## Example\n *\n * ```ts\n * import { create, unsafe } from '../index';\n *\n * class Foobar {\n * bar = 1;\n * }\n *\n * const baseState = { foobar: new Foobar() };\n * const state = create(\n * baseState,\n * (draft) => {\n * unsafe(() => {\n * draft.foobar.bar = 2;\n * });\n * },\n * {\n * strict: true,\n * }\n * );\n *\n * expect(state).toBe(baseState);\n * expect(state.foobar).toBe(baseState.foobar);\n * expect(state.foobar.bar).toBe(2);\n * ```\n */\nexport function unsafe<T>(callback: () => T): T {\n readable = true;\n let result: T;\n try {\n result = callback();\n } finally {\n readable = false;\n }\n return result;\n}\n","import { dataTypes, iteratorSymbol } from './constant';\nimport { internal } from './internal';\nimport { generatePatches } from './patch';\nimport { checkReadable } from './unsafe';\nimport {\n ensureShallowCopy,\n getProxyDraft,\n isDraftable,\n isEqual,\n latest,\n markChanged,\n markFinalization,\n} from './utils';\n\nexport const mapHandler = {\n get size() {\n const current: Map<any, any> = latest(getProxyDraft(this)!);\n return current.size;\n },\n has(key: any): boolean {\n return latest(getProxyDraft(this)!).has(key);\n },\n set(key: any, value: any) {\n const target = getProxyDraft(this)!;\n const source = latest(target);\n if (!source.has(key) || !isEqual(source.get(key), value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap!.set(key, true);\n target.copy.set(key, value);\n markFinalization(target, key, value, generatePatches);\n }\n return this;\n },\n delete(key: any): boolean {\n if (!this.has(key)) {\n return false;\n }\n const target = getProxyDraft(this)!;\n ensureShallowCopy(target);\n markChanged(target);\n if (target.original.has(key)) {\n target.assignedMap!.set(key, false);\n } else {\n target.assignedMap!.delete(key);\n }\n target.copy.delete(key);\n return true;\n },\n clear() {\n const target = getProxyDraft(this)!;\n if (!this.size) return;\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap = new Map();\n for (const [key] of target.original) {\n target.assignedMap.set(key, false);\n }\n target.copy!.clear();\n },\n forEach(callback: (value: any, key: any, self: any) => void, thisArg?: any) {\n const target = getProxyDraft(this)!;\n latest(target).forEach((_value: any, _key: any) => {\n callback.call(thisArg, this.get(_key), _key, this);\n });\n },\n get(key: any): any {\n const target = getProxyDraft(this)!;\n const value = latest(target).get(key);\n const mutable =\n target.options.mark?.(value, dataTypes) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(value, target.options, mutable);\n }\n if (mutable) {\n return value;\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // drafted or reassigned\n if (value !== target.original.get(key)) {\n return value;\n }\n const draft = internal.createDraft({\n original: value,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n ensureShallowCopy(target);\n target.copy.set(key, draft);\n return draft;\n },\n keys(): IterableIterator<any> {\n return latest(getProxyDraft(this)!).keys();\n },\n values(): IterableIterator<any> {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.values(),\n next: () => {\n const result = iterator.next();\n if (result.done) return result;\n const value = this.get(result.value);\n return {\n done: false,\n value,\n };\n },\n } as any;\n },\n entries(): IterableIterator<[any, any]> {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.entries(),\n next: () => {\n const result = iterator.next();\n if (result.done) return result;\n const value = this.get(result.value);\n return {\n done: false,\n value: [result.value, value],\n };\n },\n } as any;\n },\n [iteratorSymbol]() {\n return this.entries();\n },\n};\n\nexport const mapHandlerKeys = Reflect.ownKeys(mapHandler);\n","import { ProxyDraft } from './interface';\nimport { dataTypes, iteratorSymbol } from './constant';\nimport { internal } from './internal';\nimport {\n ensureShallowCopy,\n getProxyDraft,\n isDraftable,\n markChanged,\n markFinalization,\n} from './utils';\nimport { checkReadable } from './unsafe';\nimport { generatePatches } from './patch';\n\nconst getNextIterator =\n (\n target: ProxyDraft<any>,\n iterator: IterableIterator<any>,\n { isValuesIterator }: { isValuesIterator: boolean }\n ) =>\n () => {\n const result = iterator.next();\n if (result.done) return result;\n const key = result.value as any;\n let value = target.setMap!.get(key);\n const currentDraft = getProxyDraft(value);\n const mutable =\n target.options.mark?.(value, dataTypes) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(key, target.options, mutable);\n }\n if (\n !mutable &&\n !currentDraft &&\n isDraftable(key, target.options) &&\n !target.finalized &&\n target.original!.has(key)\n ) {\n // draft a draftable original set item\n const proxy = internal.createDraft({\n original: key,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n target.setMap!.set(key, proxy);\n value = proxy;\n } else if (currentDraft) {\n // drafted\n value = currentDraft.proxy;\n }\n return {\n done: false,\n value: isValuesIterator ? value : [value, value],\n };\n };\n\nexport const setHandler = {\n get size() {\n const target: ProxyDraft<any> = getProxyDraft(this)!;\n return target.setMap!.size;\n },\n has(value: any) {\n const target = getProxyDraft(this)!;\n // reassigned or non-draftable values\n if (target.setMap!.has(value)) return true;\n ensureShallowCopy(target);\n const valueProxyDraft = getProxyDraft(value)!;\n // drafted\n if (valueProxyDraft && target.setMap!.has(valueProxyDraft.original))\n return true;\n return false;\n },\n add(value: any) {\n const target = getProxyDraft(this)!;\n if (!this.has(value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap!.set(value, true);\n target.setMap!.set(value, value);\n markFinalization(target, value, value, generatePatches);\n }\n return this;\n },\n delete(value: any): boolean {\n if (!this.has(value)) {\n return false;\n }\n const target = getProxyDraft(this)!;\n ensureShallowCopy(target);\n markChanged(target);\n const valueProxyDraft = getProxyDraft(value)!;\n if (valueProxyDraft && target.setMap!.has(valueProxyDraft.original)) {\n // delete drafted\n target.assignedMap!.set(valueProxyDraft.original, false);\n return target.setMap!.delete(valueProxyDraft.original);\n }\n if (!valueProxyDraft && target.setMap!.has(value)) {\n // non-draftable values\n target.assignedMap!.set(value, false);\n } else {\n // reassigned\n target.assignedMap!.delete(value);\n }\n // delete reassigned or non-draftable values\n return target.setMap!.delete(value);\n },\n clear() {\n if (!this.size) return;\n const target = getProxyDraft(this)!;\n ensureShallowCopy(target);\n markChanged(target);\n for (const value of target.original) {\n target.assignedMap!.set(value, false);\n }\n target.setMap!.clear();\n },\n values(): IterableIterator<any> {\n const target = getProxyDraft(this)!;\n ensureShallowCopy(target);\n const iterator = target.setMap!.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: getNextIterator(target, iterator, { isValuesIterator: true }),\n };\n },\n entries(): IterableIterator<[any, any]> {\n const target = getProxyDraft(this)!;\n ensureShallowCopy(target);\n const iterator = target.setMap!.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: getNextIterator(target, iterator, {\n isValuesIterator: false,\n }) as () => IteratorReturnResult<any>,\n };\n },\n keys(): IterableIterator<any> {\n return this.values();\n },\n [iteratorSymbol]() {\n return this.values();\n },\n forEach(callback: any, thisArg?: any) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n },\n};\n\nif (Set.prototype.difference) {\n // for compatibility with new Set methods\n // https://github.com/tc39/proposal-set-methods\n // And `https://github.com/tc39/proposal-set-methods/blob/main/details.md#symbolspecies` has some details about the `@@species` symbol.\n // So we can't use SubSet instance constructor to get the constructor of the SubSet instance.\n Object.assign(setHandler, {\n intersection(this: Set<any>, other: ReadonlySetLike<any>): Set<any> {\n return Set.prototype.intersection.call(new Set(this.values()), other);\n },\n union(this: Set<any>, other: ReadonlySetLike<any>): Set<any> {\n return Set.prototype.union.call(new Set(this.values()), other);\n },\n difference(this: Set<any>, other: ReadonlySetLike<any>): Set<any> {\n return Set.prototype.difference.call(new Set(this.values()), other);\n },\n symmetricDifference(this: Set<any>, other: ReadonlySetLike<any>): Set<any> {\n return Set.prototype.symmetricDifference.call(\n new Set(this.values()),\n other\n );\n },\n isSubsetOf(this: Set<any>, other: ReadonlySetLike<any>): boolean {\n return Set.prototype.isSubsetOf.call(new Set(this.values()), other);\n },\n isSupersetOf(this: Set<any>, other: ReadonlySetLike<any>): boolean {\n return Set.prototype.isSupersetOf.call(new Set(this.values()), other);\n },\n isDisjointFrom(this: Set<any>, other: ReadonlySetLike<any>): boolean {\n return Set.prototype.isDisjointFrom.call(new Set(this.values()), other);\n },\n });\n}\n\nexport const setHandlerKeys = Reflect.ownKeys(setHandler);\n","import {\n DraftType,\n Finalities,\n Patches,\n ProxyDraft,\n Options,\n Operation,\n} from './interface';\nimport { dataTypes, PROXY_DRAFT } from './constant';\nimport { mapHandler, mapHandlerKeys } from './map';\nimport { setHandler, setHandlerKeys } from './set';\nimport { internal } from './internal';\nimport {\n deepFreeze,\n ensureShallowCopy,\n getDescriptor,\n getProxyDraft,\n getType,\n getValue,\n has,\n isEqual,\n isDraftable,\n latest,\n markChanged,\n peek,\n get,\n set,\n revokeProxy,\n finalizeSetValue,\n markFinalization,\n finalizePatches,\n} from './utils';\nimport { checkReadable } from './unsafe';\nimport { generatePatches } from './patch';\n\nconst draftsCache = new WeakSet<object>();\n\nconst proxyHandler: ProxyHandler<ProxyDraft> = {\n get(target: ProxyDraft, key: string | number | symbol, receiver: any) {\n const copy = target.copy?.[key];\n // Improve draft reading performance by caching the draft copy.\n if (copy && draftsCache.has(copy)) {\n return copy;\n }\n if (key === PROXY_DRAFT) return target;\n let markResult: any;\n if (target.options.mark) {\n // handle `Uncaught TypeError: Method get Map.prototype.size called on incompatible receiver #<Map>`\n // or `Uncaught TypeError: Method get Set.prototype.size called on incompatible receiver #<Set>`\n const value =\n key === 'size' &&\n (target.original instanceof Map || target.original instanceof Set)\n ? Reflect.get(target.original, key)\n : Reflect.get(target.original, key, receiver);\n markResult = target.options.mark(value, dataTypes);\n if (markResult === dataTypes.mutable) {\n if (target.options.strict) {\n checkReadable(value, target.options, true);\n }\n return value;\n }\n }\n const source = latest(target);\n\n if (source instanceof Map && mapHandlerKeys.includes(key as any)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(mapHandler, 'size')!.get!.call(\n target.proxy\n );\n }\n const handle = mapHandler[key as keyof typeof mapHandler] as Function;\n if (handle) {\n return handle.bind(target.proxy);\n }\n }\n\n if (source instanceof Set && setHandlerKeys.includes(key as any)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(setHandler, 'size')!.get!.call(\n target.proxy\n );\n }\n const handle = setHandler[key as keyof typeof setHandler] as Function;\n if (handle) {\n return handle.bind(target.proxy);\n }\n }\n\n if (!has(source, key)) {\n const desc = getDescriptor(source, key);\n return desc\n ? `value` in desc\n ? desc.value\n : // !case: support for getter\n desc.get?.call(target.proxy)\n : undefined;\n }\n const value = source[key];\n if (target.options.strict) {\n checkReadable(value, target.options);\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // Ensure that the assigned values are not drafted\n if (value === peek(target.original, key)) {\n ensureShallowCopy(target);\n target.copy![key] = createDraft({\n original: target.original[key],\n parentDraft: target,\n key: target.type === DraftType.Array ? Number(key) : key,\n finalities: target.finalities,\n options: target.options,\n });\n // !case: support for custom shallow copy function\n if (typeof markResult === 'function') {\n const subProxyDraft = getProxyDraft(target.copy![key])!;\n ensureShallowCopy(subProxyDraft);\n // Trigger a custom shallow copy to update to a new copy\n markChanged(subProxyDraft);\n return subProxyDraft.copy;\n }\n return target.copy![key];\n }\n return value;\n },\n set(target: ProxyDraft, key: string | number | symbol, value: any) {\n if (target.type === DraftType.Set || target.type === DraftType.Map) {\n throw new Error(\n `Map/Set draft does not support any property assignment.`\n );\n }\n let _key: number;\n if (\n target.type === DraftType.Array &&\n key !== 'length' &&\n !(\n Number.isInteger((_key = Number(key))) &&\n _key >= 0 &&\n (key === 0 || _key === 0 || String(_key) === String(key))\n )\n ) {\n throw new Error(\n `Only supports setting array indices and the 'length' property.`\n );\n }\n const desc = getDescriptor(latest(target), key);\n if (desc?.set) {\n // !case: cover the case of setter\n desc.set.call(target.proxy, value);\n return true;\n }\n const current = peek(latest(target), key);\n const currentProxyDraft = getProxyDraft(current);\n if (currentProxyDraft && isEqual(currentProxyDraft.original, value)) {\n // !case: ignore the case of assigning the original draftable value to a draft\n target.copy![key] = value;\n target.assignedMap = target.assignedMap ?? new Map();\n target.assignedMap.set(key, false);\n return true;\n }\n // !case: handle new props with value 'undefined'\n if (\n isEqual(value, current) &&\n (value !== undefined || has(target.original, key))\n )\n return true;\n ensureShallowCopy(target);\n markChanged(target);\n if (has(target.original, key) && isEqual(value, target.original[key])) {\n // !case: handle the case of assigning the original non-draftable value to a draft\n target.assignedMap!.delete(key);\n } else {\n target.assignedMap!.set(key, true);\n }\n target.copy![key] = value;\n markFinalization(target, key, value, generatePatches);\n return true;\n },\n has(target: ProxyDraft, key: string | symbol) {\n return key in latest(target);\n },\n ownKeys(target: ProxyDraft) {\n return Reflect.ownKeys(latest(target));\n },\n getOwnPropertyDescriptor(target: ProxyDraft, key: string | symbol) {\n const source = latest(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(source, key);\n if (!descriptor) return descriptor;\n return {\n writable: true,\n configurable: target.type !== DraftType.Array || key !== 'length',\n enumerable: descriptor.enumerable,\n value: source[key],\n };\n },\n getPrototypeOf(target: ProxyDraft) {\n return Reflect.getPrototypeOf(target.original);\n },\n setPrototypeOf() {\n throw new Error(`Cannot call 'setPrototypeOf()' on drafts`);\n },\n defineProperty() {\n throw new Error(`Cannot call 'defineProperty()' on drafts`);\n },\n deleteProperty(target: ProxyDraft, key: string | symbol) {\n if (target.type === DraftType.Array) {\n return proxyHandler.set!.call(this, target, key, undefined, target.proxy);\n }\n if (peek(target.original, key) !== undefined || key in target.original) {\n // !case: delete an existing key\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap!.set(key, false);\n } else {\n target.assignedMap = target.assignedMap ?? new Map();\n // The original non-existent key has been deleted\n target.assignedMap.delete(key);\n }\n if (target.copy) delete target.copy[key];\n return true;\n },\n};\n\nexport function createDraft<T extends object>(createDraftOptions: {\n original: T;\n parentDraft?: ProxyDraft | null;\n key?: string | number | symbol;\n finalities: Finalities;\n options: Options<any, any>;\n}): T {\n const { original, parentDraft, key, finalities, options } =\n createDraftOptions;\n const type = getType(original);\n const proxyDraft: ProxyDraft = {\n type,\n finalized: false,\n parent: parentDraft,\n original,\n copy: null,\n proxy: null,\n finalities,\n options,\n // Mapping of draft Set items to their corresponding draft values.\n setMap:\n type === DraftType.Set\n ? new Map((original as Set<any>).entries())\n : undefined,\n };\n // !case: undefined as a draft map key\n if (key || 'key' in createDraftOptions) {\n proxyDraft.key = key;\n }\n const { proxy, revoke } = Proxy.revocable<any>(\n type === DraftType.Array ? Object.assign([], proxyDraft) : proxyDraft,\n proxyHandler\n );\n finalities.revoke.push(revoke);\n draftsCache.add(proxy);\n proxyDraft.proxy = proxy;\n if (parentDraft) {\n const target = parentDraft;\n target.finalities.draft.push((patches, inversePatches) => {\n const oldProxyDraft = getProxyDraft(proxy)!;\n // if target is a Set draft, `setMap` is the real Set copies proxy mapping.\n let copy = target.type === DraftType.Set ? target.setMap : target.copy;\n const draft = get(copy, key!);\n const proxyDraft = getProxyDraft(draft);\n if (proxyDraft) {\n // assign the updated value to the copy object\n let updatedValue = proxyDraft.original;\n if (proxyDraft.operated) {\n updatedValue = getValue(draft);\n }\n finalizeSetValue(proxyDraft);\n finalizePatches(proxyDraft, generatePatches, patches, inversePatches);\n if (__DEV__ && target.options.enableAutoFreeze) {\n target.options.updatedValues =\n target.options.updatedValues ?? new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key!, updatedValue);\n }\n // !case: handle the deleted key\n oldProxyDraft.callbacks?.forEach((callback) => {\n callback(patches, inversePatches);\n });\n });\n } else {\n // !case: handle the root draft\n const target = getProxyDraft(proxy)!;\n target.finalities.draft.push((patches, inversePatches) => {\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n });\n }\n return proxy;\n}\n\ninternal.createDraft = createDraft;\n\nexport function finalizeDraft<T>(\n result: T,\n returnedValue: [T] | [],\n patches?: Patches,\n inversePatches?: Patches,\n enableAutoFreeze?: boolean\n) {\n const proxyDraft = getProxyDraft(result);\n const original = proxyDraft?.original ?? result;\n const hasReturnedValue = !!returnedValue.length;\n if (proxyDraft?.operated) {\n while (proxyDraft.finalities.draft.length > 0) {\n const finalize = proxyDraft.finalities.draft.pop()!;\n finalize(patches, inversePatches);\n }\n }\n const state = hasReturnedValue\n ? returnedValue[0]\n : proxyDraft\n ? proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original\n : result;\n if (proxyDraft) revokeProxy(proxyDraft);\n if (enableAutoFreeze) {\n deepFreeze(state, state, proxyDraft?.options.updatedValues);\n }\n return [\n state,\n patches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: returnedValue[0] }]\n : patches,\n inversePatches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: original }]\n : inversePatches,\n ] as [T, Patches | undefined, Patches | undefined];\n}\n","import {\n Finalities,\n Options,\n Patches,\n PatchesOptions,\n Result,\n} from './interface';\nimport { createDraft, finalizeDraft } from './draft';\nimport { isDraftable } from './utils';\nimport { dataTypes } from './constant';\n\nexport function draftify<\n T extends object,\n O extends PatchesOptions = false,\n F extends boolean = false\n>(\n baseState: T,\n options: Options<O, F>\n): [T, (returnedValue: [T] | []) => Result<T, O, F>] {\n const finalities: Finalities = {\n draft: [],\n revoke: [],\n handledSet: new WeakSet<any>(),\n };\n let patches: Patches | undefined;\n let inversePatches: Patches | undefined;\n if (options.enablePatches) {\n patches = [];\n inversePatches = [];\n }\n const isMutable =\n options.mark?.(baseState, dataTypes) === dataTypes.mutable ||\n !isDraftable(baseState, options);\n const draft = isMutable\n ? baseState\n : createDraft({\n original: baseState,\n parentDraft: null,\n finalities,\n options,\n });\n return [\n draft,\n (returnedValue: [T] | [] = []) => {\n const [finalizedState, finalizedPatches, finalizedInversePatches] =\n finalizeDraft(\n draft,\n returnedValue,\n patches,\n inversePatches,\n options.enableAutoFreeze\n );\n return (\n options.enablePatches\n ? [finalizedState, finalizedPatches, finalizedInversePatches]\n : finalizedState\n ) as Result<T, O, F>;\n },\n ];\n}\n","import { RAW_RETURN_SYMBOL, dataTypes } from './constant';\nimport { current, handleReturnValue } from './current';\nimport { draftify } from './draftify';\nimport {\n CreateResult,\n Draft,\n ExternalOptions,\n Mark,\n Options,\n PatchesOptions,\n Result,\n} from './interface';\nimport {\n getProxyDraft,\n isDraft,\n isDraftable,\n isEqual,\n revokeProxy,\n} from './utils';\n\ntype MakeCreator = <\n _F extends boolean = false,\n _O extends PatchesOptions = false,\n>(\n options?: ExternalOptions<_O, _F>\n) => {\n <\n T extends any,\n F extends boolean = _F,\n O extends PatchesOptions = _O,\n R extends void | Promise<void> | T | Promise<T> = void,\n >(\n base: T,\n mutate: (draft: Draft<T>) => R,\n options?: ExternalOptions<O, F>\n ): CreateResult<T, O, F, R>;\n <\n T extends any,\n F extends boolean = _F,\n O extends PatchesOptions = _O,\n R extends void | Promise<void> = void,\n >(\n base: T,\n mutate: (draft: T) => R,\n options?: ExternalOptions<O, F>\n ): CreateResult<T, O, F, R>;\n <\n T extends any,\n P extends any[] = [],\n F extends boolean = _F,\n O extends PatchesOptions = _O,\n R extends void | Promise<void> = void,\n >(\n mutate: (draft: Draft<T>, ...args: P) => R,\n options?: ExternalOptions<O, F>\n ): (base: T, ...args: P) => CreateResult<T, O, F, R>;\n <T extends any, O extends PatchesOptions = _O, F extends boolean = _F>(\n base: T,\n options?: ExternalOptions<O, F>\n ): [Draft<T>, () => Result<T, O, F>];\n};\n\n/**\n * `makeCreator(options)` to make a creator function.\n *\n * ## Example\n *\n * ```ts\n * import { makeCreator } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const create = makeCreator({ enableAutoFreeze: true });\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * expect(Object.isFrozen(state)).toBeTruthy();\n * ```\n */\nexport const makeCreator: MakeCreator = (arg) => {\n if (\n __DEV__ &&\n arg !== undefined &&\n Object.prototype.toString.call(arg) !== '[object Object]'\n ) {\n throw new Error(\n `Invalid options: ${String(arg)}, 'options' should be an object.`\n );\n }\n return function create(arg0: any, arg1: any, arg2?: any): any {\n if (typeof arg0 === 'function' && typeof arg1 !== 'function') {\n return function (this: any, base: any, ...args: any[]) {\n return create(\n base,\n (draft: any) => arg0.call(this, draft, ...args),\n arg1\n );\n };\n }\n const base = arg0;\n const mutate = arg1 as (...args: any[]) => any;\n let options = arg2;\n if (typeof arg1 !== 'function') {\n options = arg1;\n }\n if (\n __DEV__ &&\n options !== undefined &&\n Object.prototype.toString.call(options) !== '[object Object]'\n ) {\n throw new Error(\n `Invalid options: ${options}, 'options' should be an object.`\n );\n }\n options = {\n ...arg,\n ...options,\n };\n const state = isDraft(base) ? current(base) : base;\n const mark = Array.isArray(options.mark)\n ? (((value: unknown, types: typeof dataTypes) => {\n for (const mark of options.mark as Mark<any, any>[]) {\n if (__DEV__ && typeof mark !== 'function') {\n throw new Error(\n `Invalid mark: ${mark}, 'mark' should be a function.`\n );\n }\n const result = mark(value, types);\n if (result) {\n return result;\n }\n }\n return;\n }) as Mark<any, any>)\n : options.mark;\n const enablePatches = options.enablePatches ?? false;\n const strict = options.strict ?? false;\n const enableAutoFreeze = options.enableAutoFreeze ?? false;\n const _options: Options<any, any> = {\n enableAutoFreeze,\n mark,\n strict,\n enablePatches,\n createArrayPatches: options.createArrayPatches,\n };\n if (\n !isDraftable(state, _options) &&\n typeof state === 'object' &&\n state !== null\n ) {\n throw new Error(\n `Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`\n );\n }\n const [draft, finalize] = draftify(state, _options);\n if (typeof arg1 !== 'function') {\n if (!isDraftable(state, _options)) {\n throw new Error(\n `Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`\n );\n }\n return [draft, finalize];\n }\n let result: any;\n try {\n result = mutate(draft);\n } catch (error) {\n revokeProxy(getProxyDraft(draft));\n throw error;\n }\n const returnValue = (value: any) => {\n const proxyDraft = getProxyDraft(draft)!;\n if (!isDraft(value)) {\n if (\n value !== undefined &&\n !isEqual(value, draft) &&\n proxyDraft?.operated\n ) {\n throw new Error(\n `Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.`\n );\n }\n const rawReturnValue = value?.[RAW_RETURN_SYMBOL] as [any] | undefined;\n if (rawReturnValue) {\n const _value = rawReturnValue[0];\n if (_options.strict && typeof value === 'object' && value !== null) {\n handleReturnValue({\n rootDraft: proxyDraft,\n value,\n useRawReturn: true,\n });\n }\n return finalize([_value]);\n }\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null) {\n handleReturnValue({ rootDraft: proxyDraft, value });\n }\n return finalize([value]);\n }\n }\n if (value === draft || value === undefined) {\n return finalize([]);\n }\n const returnedProxyDraft = getProxyDraft(value)!;\n if (_options === returnedProxyDraft.options) {\n if (returnedProxyDraft.operated) {\n throw new Error(`Cannot return a modified child draft.`);\n }\n return finalize([current(value)]);\n }\n return finalize([value]);\n };\n if (result instanceof Promise) {\n return result.then(returnValue, (error) => {\n revokeProxy(getProxyDraft(draft)!);\n throw error;\n });\n }\n return returnValue(result);\n };\n};\n","import { makeCreator } from './makeCreator';\n\n/**\n * `create(baseState, callback, options)` to create the next state\n *\n * ## Example\n *\n * ```ts\n * import { create } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * ```\n */\nconst create = makeCreator();\n\nexport { create };\n","import { create } from './create';\nimport type {\n ApplyMutableOptions,\n ApplyOptions,\n ApplyResult,\n Draft,\n Patches,\n} from './interface';\nimport { DraftType, Operation, Patch } from './interface';\nimport { deepClone, get, getType, isDraft, unescapePath } from './utils';\n\nexport function applyPatchToString(str: string, patch: Patch) {\n const index = Number(patch.path[patch.path.length - 1]);\n const length = patch.length ?? 1;\n\n switch (patch.op) {\n case 'add': {\n return str.slice(0, index) + patch.value + str.slice(index);\n }\n case 'remove': {\n return str.slice(0, index) + str.slice(index + length);\n }\n case 'replace': {\n return str.slice(0, index) + patch.value + str.slice(index + length);\n }\n default:\n return str;\n }\n}\n\nfunction evaluatePointer(draft: Draft<any>, path: (string | number)[]) {\n let base: any = draft;\n\n for (let index = 0; index < path.length - 1; index += 1) {\n const parentType = getType(base);\n let key = path[index];\n if (typeof key !== 'string' && typeof key !== 'number') {\n key = String(key);\n }\n if (\n ((parentType === DraftType.Object || parentType === DraftType.Array) &&\n (key === '__proto__' || key === 'constructor')) ||\n (typeof base === 'function' && key === 'prototype')\n ) {\n throw new Error(\n `Patching reserved attributes like __proto__ and constructor is not allowed.`\n );\n }\n // use `index` in Set draft\n base = get(parentType === DraftType.Set ? Array.from(base) : base, key);\n if (typeof base !== 'object' && typeof base !== 'string') {\n throw new Error(`Cannot apply patch at '${path.join('/')}'.`);\n }\n }\n\n return base;\n}\n\n/**\n * `apply(state, patches)` to apply patches to state\n *\n * ## Example\n *\n * ```ts\n * import { create, apply } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const [state, patches] = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * { enablePatches: true }\n * );\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(patches).toEqual([{ op: 'replace', path: ['foo', 'bar'], value: 'str2' }]);\n * expect(state).toEqual(apply(baseState, patches));\n * ```\n */\nexport function apply<\n T extends object,\n F extends boolean = false,\n A extends ApplyOptions<F> = ApplyOptions<F>,\n>(state: T, patches: Patches, applyOptions?: A): ApplyResult<T, F, A> {\n let i: number;\n for (i = patches.length - 1; i >= 0; i -= 1) {\n const { value, op, path, from } = patches[i];\n if (\n (!path.length && op === Operation.Replace) ||\n (path === '' && op === Operation.Add)\n ) {\n state = value;\n break;\n }\n if (!path.length && op === Operation.Move) {\n const fromPath = unescapePath(from!);\n const fromBase = evaluatePointer(state, fromPath);\n const fromKey = fromPath[fromPath.length - 1];\n const fromValue = deepClone(fromBase[fromKey]);\n state = fromValue;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const mutate = (draft: Draft<T> | T) => {\n patches.forEach((patch) => {\n const { path: _path, from: _fromPath, op } = patch;\n const path = unescapePath(_path);\n let base = evaluatePointer(draft, path);\n\n if (typeof base === 'string') {\n // Replace the string within the parent\n const parentPath = path.slice(0, -1);\n const parent = evaluatePointer(draft, parentPath);\n const key = path[path.length - 2];\n if (key === undefined) {\n return;\n }\n parent[key] = applyPatchToString(parent[key], patch);\n return;\n }\n\n const type = getType(base);\n // ensure the original patch is not modified.\n const value = deepClone(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case Operation.Move: {\n const fromPath = unescapePath(_fromPath!);\n const fromBase = evaluatePointer(draft, fromPath);\n const fromKey = fromPath[fromPath.length - 1];\n const fromType = getType(fromBase);\n\n if (fromBase === base && fromKey === key) {\n return;\n }\n\n const fromValue = deepClone(fromBase[fromKey]);\n\n if (path.length === 0) {\n return;\n }\n\n if (\n fromBase === base &&\n fromType === DraftType.Array &&\n type === DraftType.Array\n ) {\n const fromNumber = Number(fromKey);\n const toNumber = Number(key);\n\n if (fromNumber < toNumber) {\n base.splice(fromNumber, 1);\n base.splice(toNumber, 0, fromValue);\n return;\n } else {\n base.splice(toNumber, 0, fromValue);\n base.splice(fromNumber + 1, 1);\n return;\n }\n }\n\n switch (fromType) {\n case DraftType.Array:\n const fromNumber = Number(fromKey);\n fromBase.splice(fromNumber, 1);\n break;\n case DraftType.Map:\n fromBase.delete(fromKey);\n break;\n case DraftType.Set:\n fromBase.delete(value);\n break;\n default: {\n delete fromBase[fromKey];\n break;\n }\n }\n\n switch (type) {\n case DraftType.Array:\n const toNumber = Number(key);\n base.splice(toNumber, 0, fromValue);\n break;\n case DraftType.Map:\n base.set(key, fromValue);\n break;\n case DraftType.Set:\n base.add(fromValue);\n break;\n default: {\n base[key] = fromValue;\n break;\n }\n }\n\n return;\n }\n case Operation.Replace:\n switch (type) {\n case DraftType.Map:\n return base.set(key, value);\n case DraftType.Set:\n throw new Error(`Cannot apply replace patch to set.`);\n default:\n return (base[key] = value);\n }\n case Operation.Add:\n switch (type) {\n case DraftType.Array:\n // If the \"-\" character is used to\n // index the end of the array (see [RFC6901](https://datatracker.ietf.org/doc/html/rfc6902)),\n // this has the effect of appending the value to the array.\n return key === '-'\n ? base.push(value)\n : base.splice(key as number, 0, value);\n case DraftType.Map:\n return base.set(key, value);\n case DraftType.Set:\n return base.add(value);\n default:\n return (base[key] = value);\n }\n case Operation.Remove:\n switch (type) {\n case DraftType.Array:\n return base.splice(key as number, 1);\n case DraftType.Map:\n return base.delete(key);\n case DraftType.Set:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n throw new Error(`Unsupported patch operation: ${op}.`);\n }\n });\n };\n if ((applyOptions as ApplyMutableOptions)?.mutable) {\n if (__DEV__) {\n if (\n Object.keys(applyOptions!).filter((key) => key !== 'mutable').length\n ) {\n console.warn(\n 'The \"mutable\" option is not allowed to be used with other options.'\n );\n }\n }\n mutate(state);\n return undefined as ApplyResult<T, F, A>;\n }\n if (isDraft(state)) {\n if (applyOptions !== undefined) {\n throw new Error(`Cannot apply patches with options to a draft.`);\n }\n mutate(state as Draft<T>);\n return state as ApplyResult<T, F, A>;\n }\n return create<T, F>(state, mutate, {\n ...applyOptions,\n enablePatches: false,\n }) as T as ApplyResult<T, F, A>;\n}\n","import { getProxyDraft } from './utils';\n\n/**\n * `original(draft)` to get original state in the draft mutation function.\n *\n * ## Example\n *\n * ```ts\n * import { create, original } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * expect(original(draft.foo)).toEqual({ bar: 'str' });\n * }\n * );\n * ```\n */\nexport function original<T>(target: T): T {\n const proxyDraft = getProxyDraft(target);\n if (!proxyDraft) {\n throw new Error(\n `original() is only used for a draft, parameter: ${target}`\n );\n }\n return proxyDraft.original;\n}\n","import { RAW_RETURN_SYMBOL } from './constant';\n\n/**\n * Use rawReturn() to wrap the return value to skip the draft check and thus improve performance.\n *\n * ## Example\n *\n * ```ts\n * import { create, rawReturn } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * return rawReturn(baseState);\n * },\n * );\n * expect(state).toBe(baseState);\n * ```\n */\nexport function rawReturn<T extends object | undefined>(value: T): T {\n if (arguments.length === 0) {\n throw new Error('rawReturn() must be called with a value.');\n }\n if (arguments.length > 1) {\n throw new Error('rawReturn() must be called with one argument.');\n }\n if (\n __DEV__ &&\n value !== undefined &&\n (typeof value !== 'object' || value === null)\n ) {\n console.warn(\n 'rawReturn() must be called with an object(including plain object, arrays, Set, Map, etc.) or `undefined`, other types do not need to be returned via rawReturn().'\n );\n }\n return {\n [RAW_RETURN_SYMBOL]: [value],\n } as never;\n}\n","import { dataTypes } from '../constant';\n\nconst constructorString = Object.prototype.constructor.toString();\n/**\n * Check if the value is a simple object(No prototype chain object or iframe same-origin object),\n * support case: https://github.com/unadlib/mutative/issues/17\n */\nconst isSimpleObject = (value: unknown) => {\n if (!value || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null) {\n return true;\n }\n const constructor =\n Object.hasOwnProperty.call(prototype, 'constructor') &&\n prototype.constructor;\n\n if (constructor === Object) return true;\n\n return (\n typeof constructor === 'function' &&\n Function.toString.call(constructor) === constructorString\n );\n};\n\nexport const markSimpleObject = (value: unknown) => {\n if (isSimpleObject(value)) {\n return dataTypes.immutable;\n }\n return;\n};\n","import { Draft, Immutable } from '../interface';\n\n/**\n * Cast a value to an Draft type value.\n */\nexport function castDraft<T>(value: T): Draft<T> {\n return value as any;\n}\n\n/**\n * Cast a value to an Immutable type value.\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n return value as any;\n}\n\n/**\n * Cast a value to an Mutable type value.\n */\nexport function castMutable<T>(draft: Draft<T>): T {\n return draft as any;\n}\n","/*--------------------------------------------------------------------------\n\n@sinclair/typebox/value\n\nThe MIT License (MIT)\n\nCopyright (c) 2017-2025 Haydn Paterson (sinclair) <haydn.developer@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n---------------------------------------------------------------------------*/\n\nimport {\n computeArrayDiff,\n getArrayDiffMapping,\n} from \"@noya-app/noya-array-diff\";\nimport {\n Array,\n Literal,\n Number,\n Static,\n String,\n TArray,\n TLiteral,\n TNumber,\n TObject,\n TString,\n TUnion,\n TUnknown,\n TypeBoxError,\n Union,\n Unknown,\n} from \"@sinclair/typebox\";\nimport {\n Equal,\n HasPropertyKey,\n IsArray,\n IsStandardObject,\n IsTypedArray,\n IsValueType,\n} from \"@sinclair/typebox/value\";\n\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\nexport type ObjectType = Record<PropertyKey, unknown>;\nexport type ArrayType = unknown[];\nexport type ValueType =\n | null\n | undefined\n | symbol\n | bigint\n | number\n | boolean\n | string;\n// prettier-ignore\nexport type TypedArrayType = \n | Int8Array \n | Uint8Array \n | Uint8ClampedArray \n | Int16Array \n | Uint16Array \n | Int32Array \n | Uint32Array \n | Float32Array \n | Float64Array \n | BigInt64Array \n | BigUint64Array\n\n// ------------------------------------------------------------------\n// Commands\n// ------------------------------------------------------------------\n\n// Note: A TypeScript 5.4.2 compiler regression resulted in the type\n// import paths being generated incorrectly. We can resolve this by\n// explicitly importing the correct TSchema types above. Note also\n// that the left-side annotations are optional, but since the types\n// are imported we might as well use them. We should check this\n// regression in future. The regression occured between TypeScript\n// versions 5.3.3 -> 5.4.2.\n\nexport const Path: TArray<TUnion<[TString, TNumber]>> = Array(\n Union([String(), Number()])\n);\nexport type Path = Static<typeof Path>;\nexport type Insert = Static<typeof Insert>;\nexport const Insert: TObject<{\n op: TLiteral<\"add\">;\n path: typeof Path;\n value: TUnknown;\n}> = Object({\n op: Literal(\"add\"),\n path: Path,\n value: Unknown(),\n});\nexport type Update = Static<typeof Update>;\nexport const Update: TObject<{\n op: TLiteral<\"replace\">;\n path: typeof Path;\n value: TUnknown;\n}> = Object({\n op: Literal(\"replace\"),\n path: Path,\n value: Unknown(),\n});\nexport type Delete = Static<typeof Delete>;\nexport const Delete: TObject<{\n op: TLiteral<\"remove\">;\n path: typeof Path;\n}> = Object({\n op: Literal(\"remove\"),\n path: Path,\n});\nexport type Move = Static<typeof Move>;\nexport const Move: TObject<{\n op: TLiteral<\"move\">;\n from: typeof Path;\n path: typeof Path;\n}> = Object({\n op: Literal(\"move\"),\n from: Path,\n path: Path,\n});\nexport type Edit = Static<typeof Edit>;\nexport const Edit: TUnion<\n [typeof Insert, typeof Update, typeof Delete, typeof Move]\n> = Union([Insert, Update, Delete, Move]);\n\n// ------------------------------------------------------------------\n// Errors\n// ------------------------------------------------------------------\nexport class ValueDiffError extends TypeBoxError {\n constructor(\n public readonly value: unknown,\n message: string\n ) {\n super(message);\n }\n}\n// ------------------------------------------------------------------\n// Command Factory\n// ------------------------------------------------------------------\nfunction CreateUpdate(path: Path, value: unknown): Edit {\n return { op: \"replace\", path, value };\n}\nfunction CreateInsert(path: Path, value: unknown): Edit {\n return { op: \"add\", path, value };\n}\nfunction CreateDelete(path: Path): Edit {\n return { op: \"remove\", path };\n}\nfunction CreateMove(from: Path, to: Path): Edit {\n return { op: \"move\", from, path: to };\n}\n// ------------------------------------------------------------------\n// AssertDiffable\n// ------------------------------------------------------------------\nfunction AssertDiffable(\n value: unknown\n): asserts value is Record<string | number, unknown> {\n if (globalThis.Object.getOwnPropertySymbols(value).length > 0)\n throw new ValueDiffError(value, \"Cannot diff objects with symbols\");\n}\n// ------------------------------------------------------------------\n// Diffing Generators\n// ------------------------------------------------------------------\nfunction* ObjectType(\n path: Path,\n current: ObjectType,\n next: unknown\n): IterableIterator<Edit> {\n AssertDiffable(current);\n AssertDiffable(next);\n if (!IsStandardObject(next)) return yield CreateUpdate(path, next);\n const currentKeys = globalThis.Object.getOwnPropertyNames(current);\n const nextKeys = globalThis.Object.getOwnPropertyNames(next);\n // ----------------------------------------------------------------\n // inserts\n // ----------------------------------------------------------------\n for (const key of nextKeys) {\n if (HasPropertyKey(current, key)) continue;\n yield CreateInsert([...path, key], next[key]);\n }\n // ----------------------------------------------------------------\n // updates\n // ----------------------------------------------------------------\n for (const key of currentKeys) {\n if (!HasPropertyKey(next, key)) continue;\n if (Equal(current, next)) continue;\n yield* Visit([...path, key], current[key], next[key]);\n }\n // ----------------------------------------------------------------\n // deletes\n // ----------------------------------------------------------------\n for (const key of currentKeys) {\n if (HasPropertyKey(next, key)) continue;\n yield CreateDelete([...path, key]);\n }\n}\nfunction identity<T>(item: T): string {\n // return item as string;\n return typeof item === \"object\" && item !== null && \"id\" in item\n ? (item.id as string)\n : (item as string);\n}\nfunction* ArrayType(\n path: Path,\n current: ArrayType,\n next: unknown\n): IterableIterator<Edit> {\n if (!IsArray(next)) return yield CreateUpdate(path, next);\n\n const arrayDiff = computeArrayDiff(current, next, identity);\n\n for (const item of arrayDiff) {\n switch (item[0]) {\n case \"a\": {\n yield CreateInsert([...path, item[2]!], item[1]);\n break;\n }\n case \"r\": {\n yield CreateDelete([...path, item[1]]);\n break;\n }\n case \"m\": {\n yield CreateMove([...path, item[1]], [...path, item[2]]);\n break;\n }\n }\n }\n\n const mapping = getArrayDiffMapping(current.length, arrayDiff);\n\n for (let i = 0; i < mapping.length; i++) {\n const originalIndex = mapping[i];\n if (originalIndex !== null) {\n yield* Visit([...path, i], current[originalIndex], next[i]);\n }\n }\n}\nfunction* TypedArrayType(\n path: Path,\n current: TypedArrayType,\n next: unknown\n): IterableIterator<Edit> {\n if (\n !IsTypedArray(next) ||\n current.length !== next.length ||\n globalThis.Object.getPrototypeOf(current).constructor.name !==\n globalThis.Object.getPrototypeOf(next).constructor.name\n )\n return yield CreateUpdate(path, next);\n for (let i = 0; i < Math.min(current.length, next.length); i++) {\n yield* Visit([...path, i], current[i], next[i]);\n }\n}\nfunction* ValueType(\n path: Path,\n current: ValueType,\n next: unknown\n): IterableIterator<Edit> {\n if (current === next) return;\n yield CreateUpdate(path, next);\n}\nfunction* Visit(\n path: Path,\n current: unknown,\n next: unknown\n): IterableIterator<Edit> {\n if (IsStandardObject(current)) return yield* ObjectType(path, current, next);\n if (IsArray(current)) return yield* ArrayType(path, current, next);\n if (IsTypedArray(current)) return yield* TypedArrayType(path, current, next);\n if (IsValueType(current)) return yield* ValueType(path, current, next);\n throw new ValueDiffError(current, \"Unable to diff value\");\n}\n// ------------------------------------------------------------------\n// Diff\n// ------------------------------------------------------------------\nexport function Diff(current: unknown, next: unknown): Edit[] {\n return [...Visit([], current, next)];\n}\n// ------------------------------------------------------------------\n// Patch\n// ------------------------------------------------------------------\n// function IsRootUpdate(edits: Edit[]): edits is [Update] {\n// return (\n// edits.length > 0 &&\n// edits[0].type === \"replace\" &&\n// edits[0].path.length === 0\n// );\n// }\n// function IsIdentity(edits: Edit[]) {\n// return edits.length === 0;\n// }\n// export function Patch<T = any>(current: unknown, edits: Edit[]): T {\n// if (IsRootUpdate(edits)) {\n// return Clone(edits[0].value) as T;\n// }\n// if (IsIdentity(edits)) {\n// return Clone(current) as T;\n// }\n// const clone = Clone(current);\n// for (const edit of edits) {\n// switch (edit.type) {\n// case \"add\": {\n// ValuePointer.Set(clone, edit.path, edit.value);\n// break;\n// }\n// case \"replace\": {\n// ValuePointer.Set(clone, edit.path, edit.value);\n// break;\n// }\n// case \"remove\": {\n// ValuePointer.Delete(clone, edit.path);\n// break;\n// }\n// }\n// }\n// return clone as T;\n// }\n","import {\n ArrayDiffItem,\n computeArrayDiff,\n getArrayDiffMapping,\n} from \"@noya-app/noya-array-diff\";\nimport { Draft, Patch, create, apply as mutativeApply } from \"mutative\";\nimport type {\n CreateArrayPatchesParameters,\n Operation,\n} from \"mutative/dist/interface.js\";\nimport { Diff } from \"./typeboxDiff\";\n\nexport function applyPatchToString(str: string, patch: SimplePatch) {\n const index = Number(patch.path[patch.path.length - 1]);\n const length = patch.length ?? 1;\n\n switch (patch.op) {\n case \"add\": {\n return str.slice(0, index) + patch.value + str.slice(index);\n }\n case \"remove\": {\n return str.slice(0, index) + str.slice(index + length);\n }\n case \"replace\": {\n return str.slice(0, index) + patch.value + str.slice(index + length);\n }\n default:\n return str;\n }\n}\n\nexport function apply<S>(obj: S, patches: SimplePatch[]) {\n if (typeof obj === \"object\" && obj !== null) {\n return mutativeApply(obj, patches);\n }\n\n if (typeof obj === \"string\") {\n return patches.reduce((acc, patch) => {\n return applyPatchToString(acc, patch) as S & string;\n }, obj);\n }\n\n if (typeof obj === \"number\") {\n if (patches.length > 0) {\n const patch = patches[0];\n if (patch.op === \"replace\") {\n return patch.value;\n }\n return apply(obj, patches.slice(1));\n }\n }\n\n return obj;\n}\n\nexport type SimplePatch = Patch<true> & { length?: number };\n\nexport type SimplePatchWithStringPath = Patch<{ pathAsArray: false }>;\n\nexport type ExtendedPatch = {\n op: (typeof Operation)[keyof typeof Operation];\n value?: any;\n path: ExtendedPathKey[];\n from?: ExtendedPathKey[];\n length?: number;\n};\n\nexport type ExtendedPathKey = string | number | { id: string | number };\n\nexport function extractItemId(item: unknown): string | number | undefined {\n if (\n typeof item === \"object\" &&\n item !== null &&\n \"id\" in item &&\n (typeof item.id === \"string\" || typeof item.id === \"number\")\n ) {\n return item.id;\n }\n}\n\nexport function toExtendedPathKey(\n obj: any,\n path: (string | number)[],\n type?: \"insert\"\n): ExtendedPathKey[] {\n const extendedPath: ExtendedPathKey[] = [];\n let currentObj = obj;\n\n for (let i = 0; i < path.length; i++) {\n const key = path[i];\n if (Array.isArray(currentObj)) {\n let numericKey =\n typeof key === \"number\" ? key : parseInt(key as string, 10);\n if (isNaN(numericKey)) {\n numericKey = -1;\n }\n const arrayItem = currentObj[numericKey];\n const itemId = arrayItem ? extractItemId(arrayItem) : undefined;\n\n const nextKeyIsId = path[i + 1] === \"id\";\n\n // If the last key is a number and we're performing an add/move operation,\n // we're inserting something new, so we shouldn't target the id of the existing item.\n const isLastKey = i === path.length - 1;\n\n if (\n itemId !== undefined &&\n !nextKeyIsId &&\n !(isLastKey && type === \"insert\")\n ) {\n extendedPath.push({ id: itemId });\n } else {\n extendedPath.push(numericKey !== -1 ? numericKey : key);\n }\n currentObj = arrayItem;\n } else {\n extendedPath.push(key);\n currentObj = currentObj[key];\n }\n }\n\n return extendedPath;\n}\n\nexport function toSimplePath(\n obj: any,\n extendedPath: ExtendedPathKey[]\n): (string | number)[] {\n const simplePath: (string | number)[] = [];\n let currentObj = obj;\n\n for (let i = 0; i < extendedPath.length; i++) {\n const key = extendedPath[i];\n if (typeof key === \"object\" && \"id\" in key) {\n if (Array.isArray(currentObj)) {\n const index = currentObj.findIndex((item: any) => item.id === key.id);\n if (index !== -1) {\n simplePath.push(index);\n currentObj = currentObj[index];\n } else {\n throw new Error(`ID ${key.id} not found in array`);\n }\n } else {\n throw new Error(`Expected array but found ${typeof currentObj}`);\n }\n } else {\n simplePath.push(key);\n currentObj = currentObj[key];\n }\n }\n\n return simplePath;\n}\n\nexport function toExtendedPatch(obj: any, patch: SimplePatch): ExtendedPatch {\n return {\n op: patch.op,\n ...(patch.from ? { from: toExtendedPathKey(obj, patch.from) } : {}),\n path: toExtendedPathKey(\n obj,\n patch.path,\n patch.op === \"add\" || patch.op === \"move\" ? \"insert\" : undefined\n ),\n ...(\"value\" in patch ? { value: patch.value } : {}),\n };\n}\n\nexport function toSimplePatch(obj: any, patch: ExtendedPatch): SimplePatch {\n return {\n op: patch.op,\n path: toSimplePath(obj, patch.path),\n ...(\"value\" in patch ? { value: patch.value } : {}),\n ...(patch.from ? { from: toSimplePath(obj, patch.from) } : {}),\n ...(patch.length ? { length: patch.length } : {}),\n };\n}\n\nexport function applyExtendedPatch<S>(obj: S, patches: ExtendedPatch[]): S {\n for (const patch of patches) {\n obj = apply(obj, [toSimplePatch(obj, patch)]);\n }\n\n return obj;\n}\n\nexport function toExtendedPatches<S>(obj: S, patches: SimplePatch[]) {\n const extendedPatches: ExtendedPatch[] = [];\n\n for (const patch of patches) {\n const extendedPatch = toExtendedPatch(obj, patch);\n obj = applyExtendedPatch(obj, [extendedPatch]);\n extendedPatches.push(extendedPatch);\n }\n\n return extendedPatches;\n}\n\nexport function createExtended<S>(obj: S, mutator: (state: Draft<S>) => void) {\n const [updated, patches, inversePatches] = create(obj, mutator, {\n enablePatches: true,\n createArrayPatches,\n });\n\n const extendedPatches = toExtendedPatches(obj, patches);\n const extendedInversePatches = toExtendedPatches(updated, inversePatches);\n\n return [updated, extendedPatches, extendedInversePatches] as const;\n}\n\nfunction identity<T>(item: T): string {\n // return item as string;\n return typeof item === \"object\" && item !== null && \"id\" in item\n ? (item.id as string)\n : (item as string);\n}\n\nfunction createArrayPatches(params: CreateArrayPatchesParameters) {\n const arrayDiff = computeArrayDiff(params.original, params.copy, identity);\n\n const mapping = getArrayDiffMapping(params.original.length, arrayDiff);\n\n const itemPatches: Patch[] = [];\n const itemInversePatches: Patch[] = [];\n\n for (let i = 0; i < mapping.length; i++) {\n const originalIndex = mapping[i];\n if (\n originalIndex !== null &&\n params.isAssigned(originalIndex) &&\n params.original[originalIndex] !== params.copy[i]\n ) {\n const patches = Diff(params.original[originalIndex], params.copy[i]);\n const inversePatches = Diff(\n params.copy[i],\n params.original[originalIndex]\n );\n // apply path prefix to patches\n const prefixedPatches = patches.map((patch) => ({\n ...patch,\n path: [...params.basePath, originalIndex, ...patch.path],\n }));\n const prefixedInversePatches = inversePatches.map((patch) => ({\n ...patch,\n path: [...params.basePath, originalIndex, ...patch.path],\n }));\n itemPatches.push(...prefixedPatches);\n itemInversePatches.push(...prefixedInversePatches);\n }\n }\n\n const inverseArrayDiff = computeArrayDiff(\n params.copy,\n params.original,\n identity\n );\n\n function convert(item: ArrayDiffItem<any>): Patch {\n switch (item[0]) {\n case \"a\": {\n const [, value, to] = item;\n return {\n op: \"add\",\n path: params.concatPath(to ?? \"~\"),\n value: params.cloneIfNeeded(value),\n };\n }\n case \"r\": {\n return {\n op: \"remove\",\n path: params.concatPath(item[1]),\n };\n }\n case \"m\": {\n return {\n op: \"move\",\n from: params.concatPath(item[1]),\n path: params.concatPath(item[2]),\n };\n }\n }\n }\n\n const patches = [...itemPatches, ...arrayDiff.map(convert)];\n const inversePatches = [\n ...inverseArrayDiff.map(convert),\n ...itemInversePatches,\n ];\n\n return {\n patches,\n inversePatches,\n };\n}\n","import { ExtendedPatch, SimplePatch, toExtendedPatches } from \"./extended\";\nimport { Diff } from \"./typeboxDiff\";\n\nimport fastDiff from \"fast-diff\";\n\ntype Op =\n | { op: \"add\"; index: number; value: string }\n | { op: \"remove\"; index: number; length: number }\n | { op: \"replace\"; index: number; value: string; length: number };\n\nexport function diffString(original: string, updated: string): SimplePatch[] {\n const diffResult = fastDiff(original, updated);\n const ops: Op[] = [];\n let index = 0;\n\n for (const [type, value] of diffResult) {\n switch (type) {\n case fastDiff.INSERT:\n ops.push({ op: \"add\", index, value });\n index += value.length;\n break;\n case fastDiff.DELETE:\n ops.push({ op: \"remove\", index, length: value.length });\n break;\n case fastDiff.EQUAL:\n index += value.length;\n break;\n }\n }\n\n // Combine adjacent add and remove operations into replace\n for (let i = 0; i < ops.length - 1; i++) {\n const current = ops[i];\n const next = ops[i + 1];\n if (\n current.op === \"remove\" &&\n next.op === \"add\" &&\n current.index === next.index\n ) {\n ops.splice(i, 2, {\n op: \"replace\",\n index: current.index,\n value: next.value,\n length: current.length,\n });\n }\n }\n\n return ops.map(({ index, ...op }) => ({\n ...op,\n path: [index],\n }));\n}\n\nexport function diff(\n original: any,\n updated: any,\n { useExtendedPatches = false } = {}\n): [ExtendedPatch[], ExtendedPatch[]] {\n if (typeof original === \"string\" && typeof updated === \"string\") {\n return [diffString(original, updated), diffString(updated, original)];\n }\n\n const patches = Diff(original, updated);\n const inversePatches = Diff(updated, original);\n\n if (!useExtendedPatches) return [patches, inversePatches];\n\n return [\n toExtendedPatches(original, patches),\n toExtendedPatches(updated, inversePatches),\n ];\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport { uuid } from \"@noya-app/noya-utils\";\n\nexport type EvalRequest = {\n id: string;\n code: string;\n};\n\nexport type EvalResponse =\n | {\n id: string;\n type: \"error\";\n error: string;\n }\n | {\n id: string;\n type: \"result\";\n result: string;\n };\n\nexport type SafeEval = (code: string) => unknown;\n\nexport class EvalManager {\n constructor(options: { safeEval?: SafeEval }) {\n this.safeEval = options.safeEval;\n }\n\n safeEval?: SafeEval;\n requestEmitter = new Emitter<[EvalRequest]>();\n responseEmitter = new Emitter<[EvalResponse]>();\n\n _evalRequests = new Map<string, Promise<unknown>>();\n\n async evaluate(code: string) {\n if (this.safeEval) {\n return this.safeEval(code);\n }\n\n const id = uuid();\n const promise = new Promise<EvalResponse>((resolve, reject) => {\n this.responseEmitter.addListener((response) => {\n if (response.id === id) {\n if (response.type === \"error\") {\n reject(new Error(response.error));\n } else {\n try {\n resolve(JSON.parse(response.result as string));\n } catch (error) {\n reject(error);\n }\n }\n }\n });\n });\n this._evalRequests.set(id, promise);\n this.requestEmitter.emit({ id, code });\n const result = await promise;\n this._evalRequests.delete(id);\n return result;\n }\n}\n","import { ExtendedPatch, ExtendedPathKey, applyExtendedPatch } from \"./extended\";\nimport type { HistoryEntry } from \"./stateManager\";\n\nexport namespace HistoryEntries {\n export function merge<S, M = void>(parameters: {\n previous: HistoryEntry<S, M>;\n next: HistoryEntry<S, M>;\n mergeMetadata?: (parameters: { previous: M; next: M }) => M;\n }): HistoryEntry<S, M> {\n const { previous, next, mergeMetadata } = parameters;\n\n const metadata = mergeMetadata\n ? mergeMetadata({ previous: previous.metadata, next: next.metadata })\n : next.metadata;\n\n // If we don't have patches, fall back to a simple merge where we do both operations\n if (\n !next.undoPatches ||\n !next.redoPatches ||\n !previous.undoPatches ||\n !previous.redoPatches\n ) {\n return {\n metadata,\n undo: (s) => {\n s = next.undo(s);\n s = previous.undo(s);\n return s;\n },\n redo: (s) => {\n s = previous.redo(s);\n s = next.redo(s);\n return s;\n },\n };\n }\n\n const undoPatches = compactPatches([\n ...next.undoPatches,\n ...previous.undoPatches,\n ]);\n\n const redoPatches = compactPatches([\n ...previous.redoPatches,\n ...next.redoPatches,\n ]);\n\n return {\n metadata,\n undo: (s) => applyExtendedPatch(s, undoPatches),\n redo: (s) => applyExtendedPatch(s, redoPatches),\n undoPatches,\n redoPatches,\n };\n }\n\n export function mergeOperations(parameters: {\n previous: ExtendedPatch;\n next: ExtendedPatch;\n }): ExtendedPatch | \"conflict\" | \"ok\" {\n const { previous, next } = parameters;\n\n // If either is a move operation, we can't merge\n if (previous.op === \"move\" || next.op === \"move\") {\n return \"conflict\";\n }\n\n if (pathsEqual(previous.path, next.path)) {\n return next;\n }\n\n return \"ok\";\n }\n\n export function compactPatches(patches: ExtendedPatch[]) {\n let result: ExtendedPatch[] = [...patches];\n\n for (let i = 0; i < result.length; i++) {\n const patch = result[i];\n\n for (let j = i + 1; j < result.length; j++) {\n const next = result[j];\n const merged = mergeOperations({ previous: patch, next });\n\n if (merged === \"conflict\") {\n break;\n } else if (merged === \"ok\") {\n continue;\n } else {\n result[j] = merged;\n result.splice(i, 1);\n i--;\n break;\n }\n }\n }\n\n return result;\n }\n\n export function pathsEqual(a: ExtendedPathKey[], b: ExtendedPathKey[]) {\n // Check length first\n if (a.length !== b.length) {\n return false;\n }\n\n return a.every((path, index) => {\n const other = b[index];\n\n if (\n typeof path === \"object\" &&\n \"id\" in path &&\n typeof other === \"object\" &&\n \"id\" in other\n ) {\n return path.id === other.id;\n }\n\n return path === other;\n });\n }\n}\n","import { ExtendedPatch } from \"@noya-app/noya-multiplayer-react\";\nimport { Input, OutputTransform } from \"@noya-app/noya-schemas\";\nimport { Observable } from \"@noya-app/observable\";\nimport { RPCManager } from \"./rpcManager\";\n\n/** Helper type that preserves all properties and their requirements except for id */\nexport type CreateParams<T extends { id: string }> =\n | Omit<T, \"id\" | \"stableId\">\n | (Partial<T> & { id?: string; stableId?: string });\n\nexport class IOManager {\n constructor(public rpcManager: RPCManager) {}\n\n inputs$ = new Observable<Input[]>([]);\n outputTransforms$ = new Observable<OutputTransform[]>([]);\n inputsInitialized$ = new Observable<boolean>(false);\n outputTransformsInitialized$ = new Observable<boolean>(false);\n isInitialized$ = Observable.combine(\n [this.inputsInitialized$, this.outputTransformsInitialized$],\n ([inputsInitialized, outputTransformsInitialized]) =>\n inputsInitialized && outputTransformsInitialized\n );\n\n async fetchInputs(): Promise<Input[]> {\n const response = await this.rpcManager.requestRoute(\"GET /api/inputs\", {});\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n\n async fetchOutputTransforms(): Promise<OutputTransform[]> {\n const response = await this.rpcManager.requestRoute(\n \"GET /api/outputTransforms\",\n {}\n );\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n\n async createInput(input: CreateParams<Input>): Promise<Input> {\n const response = await this.rpcManager.requestRoute(\"POST /api/inputs\", {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(input),\n });\n const newInput = this.rpcManager.getResponseBody(response);\n return newInput;\n }\n\n async createOutputTransform(\n outputTransform: CreateParams<OutputTransform>\n ): Promise<OutputTransform> {\n const response = await this.rpcManager.requestRoute(\n \"POST /api/outputTransforms\",\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(outputTransform),\n }\n );\n const newOutputTransform = this.rpcManager.getResponseBody(response);\n return newOutputTransform;\n }\n\n async deleteInput(id: string): Promise<{ success: true }> {\n const response = await this.rpcManager.requestRoute(\"DELETE /api/inputs\", {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ id }),\n });\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n\n async deleteOutputTransform(id: string): Promise<{ success: true }> {\n const response = await this.rpcManager.requestRoute(\n \"DELETE /api/outputTransforms\",\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ id }),\n }\n );\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n\n async applyInputPatches(patches: ExtendedPatch[]): Promise<Input[]> {\n const response = await this.rpcManager.requestRoute(\"PATCH /api/inputs\", {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(patches),\n });\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n\n async applyOutputTransformPatches(\n patches: ExtendedPatch[]\n ): Promise<OutputTransform[]> {\n const response = await this.rpcManager.requestRoute(\n \"PATCH /api/outputTransforms\",\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(patches),\n }\n );\n const result = this.rpcManager.getResponseBody(response);\n return result;\n }\n}\n","// Helper function to Base64Url encode a string\nfunction base64UrlEncode(str: string): string {\n return btoa(str).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\n\n// Helper function to Base64Url decode a string\nfunction base64UrlDecode(str: string): string {\n // Replace URL-safe characters with Base64 standard characters\n str = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n // Add padding characters if necessary\n switch (str.length % 4) {\n case 2:\n str += \"==\";\n break;\n case 3:\n str += \"=\";\n break;\n }\n return atob(str);\n}\n\ntype JwtHeader = {\n alg: string;\n typ: string;\n};\n\nconst HEADER: JwtHeader = {\n alg: \"HS256\",\n typ: \"JWT\",\n};\n\nconst JWT_ERROR = {\n INVALID_JWT_FORMAT: \"Invalid JWT format\",\n // INVALID_SIGNATURE: \"Invalid signature\",\n};\n\n// Function to create a JWT\nasync function createJwt<\n P extends Record<string, unknown>,\n H extends JwtHeader = JwtHeader,\n>({\n payload,\n secret,\n header,\n}: {\n payload: P;\n secret: string;\n header?: H;\n}): Promise<string> {\n const encoder = new TextEncoder();\n\n // Step 1: Encode Header\n const encodedHeader = base64UrlEncode(\n JSON.stringify({ ...HEADER, ...header })\n );\n\n // Step 2: Encode Payload\n const encodedPayload = base64UrlEncode(JSON.stringify(payload));\n\n // Step 3: Create Data to Sign\n const dataToSign = `${encodedHeader}.${encodedPayload}`;\n\n // Step 4: Convert Secret to CryptoKey\n const key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n\n // Step 5: Sign Data\n const signature = await crypto.subtle.sign(\n \"HMAC\",\n key,\n encoder.encode(dataToSign)\n );\n\n // Step 6: Base64Url Encode Signature\n const encodedSignature = base64UrlEncode(\n String.fromCharCode(...new Uint8Array(signature))\n );\n\n // Step 7: Assemble JWT\n return `${dataToSign}.${encodedSignature}`;\n}\n\n// Function to decode and verify a JWT\nasync function decodeJwt<\n P extends Record<string, unknown>,\n H extends JwtHeader = JwtHeader,\n>({\n token,\n secret,\n}: {\n token: string;\n secret?: string;\n}): Promise<{ header: H; payload: P; valid: boolean }> {\n if (typeof token !== \"string\") {\n throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);\n }\n\n // Split the JWT into its parts\n const [encodedHeader, encodedPayload, encodedSignature] = token.split(\".\");\n\n if (!encodedHeader || !encodedPayload || !encodedSignature) {\n throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);\n }\n\n // Base64Url decode the header and payload\n const headerJson = base64UrlDecode(encodedHeader);\n const payloadJson = base64UrlDecode(encodedPayload);\n\n const header: H = JSON.parse(headerJson);\n const payload: P = JSON.parse(payloadJson);\n\n // Recreate the signature data\n const dataToVerify = `${encodedHeader}.${encodedPayload}`;\n\n const encoder = new TextEncoder();\n\n if (secret !== undefined) {\n // Convert the secret to CryptoKey\n const key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"verify\"]\n );\n\n // Convert the Base64Url encoded signature to a Uint8Array\n const binarySignature = base64UrlDecode(encodedSignature);\n const signature = new Uint8Array(\n [...binarySignature].map((char) => char.charCodeAt(0))\n );\n\n // Verify the signature\n const valid = await crypto.subtle.verify(\n \"HMAC\",\n key,\n signature,\n encoder.encode(dataToVerify)\n );\n\n // if (!valid) {\n // throw new Error(JWT_ERROR.INVALID_SIGNATURE);\n // }\n\n return { header, payload, valid };\n }\n\n return { header, payload, valid: false };\n}\n\nexport namespace jwt {\n export const encode = createJwt;\n export const decode = decodeJwt;\n export const ERROR = JWT_ERROR;\n export const DEFAULT_HEADER = HEADER;\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport { MenuItem } from \"@noya-app/noya-designsystem\";\nimport { Observable } from \"@noya-app/observable\";\n\nexport class MenuManager<T extends string = string> extends Emitter<[T]> {\n leftMenuItems$ = new Observable<MenuItem<T>[]>([]);\n rightMenuItems$ = new Observable<MenuItem<T>[]>([]);\n\n allMenuItems$ = Observable.combine(\n [this.leftMenuItems$, this.rightMenuItems$],\n ([left, right]) => [...left, ...right]\n );\n\n getLeftMenuItems(): MenuItem<T>[] {\n return this.leftMenuItems$.get();\n }\n\n getRightMenuItems(): MenuItem<T>[] {\n return this.rightMenuItems$.get();\n }\n\n getAllMenuItems(): MenuItem<T>[] {\n return this.allMenuItems$.get();\n }\n\n setLeftMenuItems(items: MenuItem<T>[]) {\n this.leftMenuItems$.set(items);\n }\n\n setRightMenuItems(items: MenuItem<T>[]) {\n this.rightMenuItems$.set(items);\n }\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport {\n Asset,\n EncodedSchema,\n Input,\n OutputTransform,\n decodeSchema,\n encodeSchema,\n findAllDefs,\n} from \"@noya-app/noya-schemas\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport {\n GetAtPath,\n Observable,\n PathKey,\n get,\n mutate,\n} from \"@noya-app/observable\";\nimport { TaskSnapshot } from \"@noya-app/task-runner\";\nimport { TSchema } from \"@sinclair/typebox\";\nimport { Hash } from \"@sinclair/typebox/value\";\nimport { Draft } from \"mutative\";\nimport { CreateParams } from \"./IOManager\";\nimport { Secret } from \"./SecretManager\";\nimport { checkType } from \"./checkType\";\nimport { diff } from \"./diff\";\nimport { ExtendedPatch, applyExtendedPatch } from \"./extended\";\nimport { HistoryEntries } from \"./historyEntries\";\nimport {\n HistoryEntry,\n OperationManager,\n StateManager,\n StateManagerOptions,\n createEditHistoryEntry,\n createPatchHistoryEntry,\n} from \"./stateManager\";\nimport { MultiplayerUser } from \"./sync\";\nimport { Task } from \"./tasks\";\n\nexport const createHash = Hash;\n\ntype SetStateAction<S> = S | ((prevState: S) => S);\n\n/**\n * TODO:\n *\n * Pending commits may need to be updated when a patch is accepted or rejected?\n * Since right now we're using optimisticState based on pending commits - but\n * instead we could use a memoization approach\n *\n * Server may want to say whether a commit is from self or not, so that we can\n * more easily ignore patches that we sent (e.g. in case we change a pending patch\n * after sending? but it already has an id so maybe not needed)\n *\n * Prune old patches from the server\n *\n * MSM can just have a sm StateManager, mostly separate from any multiplayer logic,\n * that does its usual patch merging etc, but can be used to send undo/redo patches\n */\n\nexport type MultiplayerPatchMetadata = {\n id: string;\n name?: string;\n timestamp: number;\n};\n\nexport type ClientCommit<S, M> = {\n state: S;\n baseHash: string;\n historyEntry: Required<HistoryEntry<S, M & MultiplayerPatchMetadata>>;\n};\n\nexport type ClientConnectionStatus = \"connected\" | \"disconnected\";\n\nexport type ClientToServerMessage<S> =\n | {\n type: \"init\";\n object: S;\n force?: boolean;\n schema?: EncodedSchema;\n inputs?: CreateParams<Input>[];\n outputTransforms?: CreateParams<OutputTransform>[];\n }\n | { type: \"patch\"; id: string; patches: ExtendedPatch[]; baseHash: string }\n | { type: \"setEphemeralUserData\"; userId: string; data?: unknown }\n | { type: \"ping\"; id: string };\n\nexport type RejectInitReason =\n | \"invalidDataType\"\n | \"schemaMismatch\"\n | \"outdatedSchema\"\n | \"dataMigrationFailure\";\n\nexport type RejectPatchReason =\n | \"serverStateNotInitialized\"\n | \"errorApplyingPatch\"\n | \"clientOutOfSync\"\n | \"invalidDataType\"\n | \"outdatedSchema\";\n\nexport type PipelineStatus = \"idle\" | \"running\" | \"success\" | \"error\";\n\nexport type ServerToClientMessage<S> =\n | { type: \"object\"; object: S; schema?: EncodedSchema }\n | { type: \"rejectInit\"; reason: RejectInitReason; error?: string }\n | { type: \"acceptPatch\"; id: string; patches: ExtendedPatch[]; hash?: string }\n | {\n type: \"rejectPatch\";\n id: string;\n reason: RejectPatchReason;\n error?: string;\n }\n | { type: \"connectedUsers\"; users: MultiplayerUser[] }\n | { type: \"schemaMigration\"; schema: EncodedSchema }\n | { type: \"ephemeralUserData\"; data: Record<string, unknown> }\n | {\n type: \"workflow\";\n workflow: {\n status: PipelineStatus;\n tasks: TaskSnapshot<any>[];\n result: any;\n };\n }\n | { type: \"tasks\"; tasks: Task[] }\n | { type: \"assets\"; assets: Asset[] }\n | { type: \"inputs\"; inputs: Input[] }\n | { type: \"outputTransforms\"; outputTransforms: OutputTransform[] }\n | { type: \"pong\"; id: string }\n | { type: \"secrets\"; secrets: Secret[] };\n\nexport type MultiplayerStateManagerErrorType =\n | RejectInitReason\n | \"schemaMigration\"\n | RejectPatchReason;\n\nexport class MultiplayerStateManagerError extends Error {\n constructor(\n public readonly reason: MultiplayerStateManagerErrorType,\n message?: string\n ) {\n super(message);\n }\n}\n\nexport type MultiplayerStateManagerMode = \"standalone\" | \"synchronized\";\n\nexport type MultiplayerStateManagerOptions<S, M> = StateManagerOptions<\n S,\n Partial<M> & MultiplayerPatchMetadata\n> & {\n randomId?: () => string;\n overrideExistingState?: boolean;\n outputTransforms?: CreateParams<OutputTransform>[];\n inputs?: CreateParams<Input>[];\n debug?: boolean;\n mode?: MultiplayerStateManagerMode;\n};\n\nexport class MultiplayerStateManager<\n TState,\n TMetadata extends object = object,\n> extends Emitter {\n get _metadataType(): Partial<TMetadata> & MultiplayerPatchMetadata {\n throw new Error(\"Not implemented - this is just a type hint\");\n }\n\n state: TState;\n schema?: TSchema;\n\n errorEmitter = new Emitter<[MultiplayerStateManagerError]>();\n\n sm: StateManager<TState, typeof this._metadataType>;\n\n pendingCommits: ClientCommit<TState, typeof this._metadataType>[] = [];\n connectionStatus$ = new Observable<ClientConnectionStatus>(\"disconnected\");\n isInitialized$ = new Observable<boolean>(false);\n\n outgoingMessages: ClientToServerMessage<TState>[] = [];\n incomingMessages: ServerToClientMessage<TState>[] = [];\n\n optimisticState$: Observable<TState>;\n\n enhanceMetadata(metadata: Partial<TMetadata>): typeof this._metadataType {\n return {\n id: this.getRandomId(),\n timestamp: Date.now(),\n ...metadata,\n };\n }\n\n getRandomId() {\n return this.options.randomId?.() ?? uuid();\n }\n\n constructor(\n state: TState | (() => TState),\n public options: MultiplayerStateManagerOptions<TState, TMetadata> = {}\n ) {\n super();\n\n this.state = state instanceof Function ? state() : state;\n this.schema = options.schema;\n\n this.sm = new StateManager<TState, typeof this._metadataType>(\n this.state,\n options\n );\n\n this.optimisticState$ = Observable.from(\n {\n get: this.getOptimisticState,\n subscribe: this.addListener,\n },\n {\n isEqual: (a, b) => createHash(a) === createHash(b),\n }\n );\n\n if (this.options.mode === \"standalone\") {\n this.autoConnect();\n }\n }\n\n autoConnect = () => {\n const handleEmitMessage = (message: ClientToServerMessage<TState>) => {\n switch (message.type) {\n case \"init\": {\n this.incomingMessages.push({\n type: \"object\",\n object: message.object,\n schema: message.schema,\n });\n this.processIncomingMessages();\n break;\n }\n case \"patch\": {\n this.incomingMessages.push({\n type: \"acceptPatch\",\n id: message.id,\n patches: message.patches,\n });\n this.processIncomingMessages();\n break;\n }\n }\n };\n\n this.messageEmitter.addListener(handleEmitMessage);\n this.connect();\n };\n\n getHash() {\n return createHash(this.state).toString();\n }\n\n _setState(state: TState, schema: TSchema | undefined) {\n this.state = state;\n this.schema = schema;\n this.emitIfChanged();\n this.sm._setState(state);\n }\n\n _lastEmittedHash: string | undefined;\n\n emitIfChanged = () => {\n if (this._lastEmittedHash === this.getOptimisticHash()) return;\n this._lastEmittedHash = this.getOptimisticHash();\n this.emit();\n };\n\n get isConnected() {\n return this.connectionStatus$.get() === \"connected\";\n }\n\n _pushCommit(\n state: TState,\n historyEntry: Required<HistoryEntry<TState, typeof this._metadataType>>,\n {\n addToHistory,\n shouldTypeCheck = true,\n }: { addToHistory: boolean; shouldTypeCheck?: boolean }\n ) {\n // Can't edit if not connected\n if (!this.isConnected) {\n console.warn(\"Can't edit when not connected\");\n\n return;\n }\n\n if (shouldTypeCheck) {\n checkType(state, this.schema, findAllDefs(this.schema));\n }\n\n const commit: ClientCommit<TState, typeof this._metadataType> = {\n state,\n historyEntry,\n baseHash: this.getOptimisticHash(),\n };\n\n this.pendingCommits.push(commit);\n this.emitIfChanged();\n\n if (addToHistory) {\n this.sm._setStateWithHistoryEntry(state, historyEntry, {\n shouldTypeCheck: false,\n });\n }\n\n this.sendMessage({\n type: \"patch\",\n id: commit.historyEntry.metadata.id,\n patches: commit.historyEntry.redoPatches,\n baseHash: commit.baseHash,\n });\n }\n\n canUndo = () => this.sm.canUndo();\n\n canRedo = () => this.sm.canRedo();\n\n undo = () => {\n if (!this.sm.canUndo()) return;\n\n const handler = this.sm.history[this.sm.historyIndex - 1];\n\n this.sm.historyIndex--;\n\n const result = createPatchHistoryEntry(\n this.getOptimisticState(),\n {},\n {\n ...handler.metadata,\n // we need a unique id for the commit, distinct from the original id\n id: this.getRandomId(),\n },\n handler.undoPatches!,\n handler.redoPatches!\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, {\n addToHistory: false,\n });\n\n return this.sm.history[this.sm.historyIndex];\n };\n\n redo = () => {\n if (!this.sm.canRedo()) return;\n\n const handler = this.sm.history[this.sm.historyIndex];\n\n this.sm.historyIndex++;\n\n const result = createPatchHistoryEntry(\n this.getOptimisticState(),\n {},\n {\n ...handler.metadata,\n // we need a unique id for the commit, distinct from the original id\n id: this.getRandomId(),\n },\n handler.redoPatches!,\n handler.undoPatches!\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, {\n addToHistory: false,\n });\n\n return this.sm.history[this.sm.historyIndex - 1];\n };\n\n /**\n * Mutate the state in-place.\n *\n * This will create a patch based on the changes made to the state and create\n * a history entry with the patch.\n */\n editDraft = (\n ...args:\n | [metadata: Partial<TMetadata>, callback: (draft: Draft<TState>) => void]\n | [callback: (draft: Draft<TState>) => void]\n ) => {\n const [metadata, callback] = args.length === 1 ? [{}, args[0]] : args;\n\n const result = createEditHistoryEntry(\n this.getOptimisticState(),\n {},\n this.enhanceMetadata(metadata),\n callback\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, { addToHistory: true });\n };\n\n /**\n * Apply a patch optimistically.\n *\n * Creates a history entry with the patch. If inversePatches are not provided,\n * this will perform a diff between the current state and the new state.\n */\n applyPatch = (\n ...args:\n | [\n metadata: Partial<TMetadata>,\n { patches: ExtendedPatch[]; inversePatches?: ExtendedPatch[] },\n ]\n | [{ patches: ExtendedPatch[]; inversePatches?: ExtendedPatch[] }]\n ) => {\n let [metadata, { patches, inversePatches }] =\n args.length === 1 ? [{}, args[0]] : args;\n\n const optimisticState = this.getOptimisticState();\n\n const newState = applyExtendedPatch(optimisticState, patches);\n\n checkType(newState, this.schema, findAllDefs(this.schema));\n\n if (!inversePatches) {\n const [, inv] = diff(optimisticState, newState);\n\n inversePatches = inv;\n }\n\n const result = createPatchHistoryEntry(\n newState,\n {},\n this.enhanceMetadata(metadata),\n patches,\n inversePatches\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, { addToHistory: true });\n };\n\n /**\n * Set the current state optimistically.\n *\n * This will perform a diff between the current state and the new state, and\n * create a history entry with the patch.\n */\n setState = (\n ...args:\n | [metadata: Partial<TMetadata>, action: SetStateAction<TState>]\n | [action: SetStateAction<TState>]\n ) => {\n const [metadata, action] = args.length === 1 ? [{}, args[0]] : args;\n\n const optimisticState = this.getOptimisticState();\n\n const newState =\n action instanceof Function ? action(optimisticState) : action;\n\n checkType(newState, this.schema, findAllDefs(this.schema));\n\n const [patches, inversePatches] = diff(optimisticState, newState);\n\n const result = createPatchHistoryEntry(\n newState,\n {},\n this.enhanceMetadata(metadata),\n patches,\n inversePatches\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, { addToHistory: true });\n };\n\n setStateAtPath = <P extends PathKey[] | string>(\n ...args:\n | [\n metadata: Partial<TMetadata>,\n path: P,\n value: SetStateAction<GetAtPath<TState, P>>,\n ]\n | [path: P, value: SetStateAction<GetAtPath<TState, P>>]\n ) => {\n const [metadata, path, value] =\n args.length === 2 ? [{}, args[0], args[1]] : args;\n\n const edit = this.editDraft as (\n metadata: Partial<TMetadata>,\n callback: (draft: Draft<TState>) => void\n ) => void;\n\n const setState = this.setState as (\n metadata: Partial<TMetadata>,\n action: SetStateAction<GetAtPath<TState, P>>\n ) => void;\n\n if (!path || path.length === 0) {\n setState(metadata, value);\n } else {\n edit(metadata, (draft) => {\n const newValue =\n value instanceof Function\n ? value(get(draft, path) as GetAtPath<TState, P>)\n : value;\n\n mutate(draft, path, newValue as never);\n });\n }\n };\n\n operate = (\n ...args:\n | [\n metadata: Partial<TMetadata>,\n operator: (operationManager: OperationManager<TState>) => void,\n ]\n | [operator: (operationManager: OperationManager<TState>) => void]\n ) => {\n const [metadata, operator] = args.length === 1 ? [{}, args[0]] : args;\n\n const operationManager = new OperationManager(this.state);\n\n operator(operationManager);\n\n const patches = HistoryEntries.compactPatches(operationManager.patches);\n const inversePatches = HistoryEntries.compactPatches(\n operationManager.inversePatches\n );\n const afterState = applyExtendedPatch(this.state, patches);\n\n if (this.options.allowEmptyEdits !== true) {\n // Ignore edits that don't change the state\n if (patches.length === 0) return;\n }\n\n const result = createPatchHistoryEntry(\n afterState,\n {},\n this.enhanceMetadata(metadata),\n patches,\n inversePatches\n );\n\n if (!result) return;\n\n this._pushCommit(result.state, result.historyEntry, { addToHistory: true });\n };\n\n getConfirmedState = () => {\n return this.state;\n };\n\n getOptimisticState = () => {\n return this.pendingCommits.at(-1)?.state ?? this.state;\n };\n\n getOptimisticHash() {\n return createHash(this.getOptimisticState()).toString();\n }\n\n reinitialize(state: TState) {\n this.pendingCommits = [];\n this.emitIfChanged();\n\n this.sendMessage({\n type: \"init\",\n object: state,\n ...(this.schema && { schema: encodeSchema(this.schema) }),\n });\n }\n\n _handledMessages: Record<string, boolean> = {};\n\n processIncomingMessages() {\n while (this.incomingMessages.length > 0) {\n const message = this.incomingMessages.shift()!;\n\n if (\"id\" in message) {\n if (this._handledMessages[message.id]) {\n continue;\n }\n\n this._handledMessages[message.id] = true;\n }\n\n switch (message.type) {\n case \"object\": {\n this._setState(\n message.object,\n message.schema ? decodeSchema(message.schema) : undefined\n );\n\n this.isInitialized$.set(true);\n break;\n }\n case \"acceptPatch\": {\n const patches = message.patches;\n\n const oldState = this.state;\n\n let newState: TState;\n\n try {\n newState = applyExtendedPatch(oldState, patches);\n } catch (e) {\n this.reinitialize(oldState);\n break;\n }\n\n // Remove from pending entries\n this.pendingCommits = this.pendingCommits.filter(\n (entry) => entry.historyEntry.metadata.id !== message.id\n );\n\n // Verify that the hash is the same as the one we received\n if (\n message.hash !== undefined &&\n message.hash !== createHash(newState).toString()\n ) {\n this.reinitialize(oldState);\n break;\n }\n\n this._setState(newState, this.schema);\n break;\n }\n case \"rejectPatch\": {\n switch (message.reason) {\n default: {\n this.reinitialize(this.state);\n\n this.errorEmitter.emit(\n new MultiplayerStateManagerError(message.reason, message.error)\n );\n\n break;\n }\n }\n\n break;\n }\n case \"rejectInit\": {\n console.error(\n \"State initialized with invalid data type.\",\n message.error\n );\n\n this.errorEmitter.emit(\n new MultiplayerStateManagerError(message.reason, message.error)\n );\n\n break;\n }\n case \"schemaMigration\": {\n this.errorEmitter.emit(\n new MultiplayerStateManagerError(\n \"schemaMigration\",\n \"Schema migration requires a page reload.\"\n )\n );\n\n break;\n }\n }\n }\n }\n\n connect() {\n this.connectionStatus$.set(\"connected\");\n this.sendInit();\n }\n\n sendInit({\n force = this.options.overrideExistingState,\n state = this.state,\n schema = this.schema,\n outputTransforms = this.options.outputTransforms,\n inputs = this.options.inputs,\n }: {\n force?: boolean;\n state?: TState;\n schema?: TSchema;\n outputTransforms?: CreateParams<OutputTransform>[];\n inputs?: CreateParams<Input>[];\n } = {}) {\n this.sendMessage({\n type: \"init\",\n object: state,\n ...(schema && { schema: encodeSchema(schema) }),\n ...(outputTransforms && { outputTransforms }),\n ...(inputs && { inputs }),\n ...(force && { force }),\n });\n }\n\n sendMessage(message: ClientToServerMessage<TState>) {\n this.outgoingMessages.push(message);\n this.messageEmitter.emit(message);\n }\n\n disconnect() {\n this.connectionStatus$.set(\"disconnected\");\n }\n\n hasPendingMessages() {\n return this.incomingMessages.length > 0 || this.outgoingMessages.length > 0;\n }\n\n messageEmitter = new Emitter<[ClientToServerMessage<TState>]>();\n}\n\nexport type EphemeralUserMetadata = {\n updatedAt: number;\n};\n\nexport type SelectionRange = {\n anchor: PathKey[];\n head?: PathKey[];\n};\n\ntype Point = {\n x: number;\n y: number;\n};\n\nexport type DefaultEphemeralData = {\n pointer?: Point;\n selection?: SelectionRange[];\n};\n\nexport class EphemeralUserDataManager<E extends object> extends Emitter<\n [\n Record<string, (E & DefaultEphemeralData) | undefined>,\n Record<string, { updatedAt: number } | undefined>,\n ]\n> {\n data$ = new Observable<\n Record<string, (E & DefaultEphemeralData) | undefined>\n >({});\n\n metadata$ = new Observable<Record<string, EphemeralUserMetadata | undefined>>(\n {}\n );\n\n currentUserId$ = new Observable<string | undefined>(undefined);\n\n currentUserDataEmitter = new Emitter<\n [(E & DefaultEphemeralData) | undefined]\n >();\n\n setCurrentUserId = (currentUserId: string) => {\n this.currentUserId$.set(currentUserId);\n };\n\n setForCurrentUser = (value: E & DefaultEphemeralData) => {\n const currentUserId = this.currentUserId$.get();\n\n if (!currentUserId) {\n // console.log(\"Ephemeral User Data: no current user\");\n return;\n }\n\n this.set(currentUserId, value);\n\n this.currentUserDataEmitter.emit(value);\n };\n\n set = (id: string, value: E & DefaultEphemeralData) => {\n this.metadata$.set({\n ...this.metadata$.get(),\n [id]: { updatedAt: Date.now() },\n });\n\n this.data$.set({ ...this.data$.get(), [id]: value });\n\n this.emit(this.data$.get(), this.metadata$.get());\n };\n\n merge = (partial: Record<string, E & DefaultEphemeralData>) => {\n this.data$.set({ ...this.data$.get(), ...partial });\n\n for (const id in partial) {\n this.metadata$.set({\n ...this.metadata$.get(),\n [id]: { updatedAt: Date.now() },\n });\n }\n\n this.emit(this.data$.get(), this.metadata$.get());\n };\n\n delete = (id: string) => {\n const { [id]: _d, ...restData } = this.data$.get();\n this.data$.set(restData);\n\n const { [id]: _m, ...restMetadata } = this.metadata$.get();\n this.metadata$.set(restMetadata);\n\n this.emit(this.data$.get(), this.metadata$.get());\n\n if (id === this.currentUserId$.get()) {\n this.currentUserDataEmitter.emit(undefined);\n }\n };\n\n _snapshot:\n | {\n data: Record<string, E | undefined>;\n metadata: Record<string, EphemeralUserMetadata | undefined>;\n currentUserId: string | undefined;\n }\n | undefined;\n\n getSnapshot = () => {\n if (\n !this._snapshot ||\n this._snapshot.data !== this.data$.get() ||\n this._snapshot.metadata !== this.metadata$.get() ||\n this._snapshot.currentUserId !== this.currentUserId$.get()\n ) {\n this._snapshot = {\n data: this.data$.get(),\n metadata: this.metadata$.get(),\n currentUserId: this.currentUserId$.get(),\n };\n }\n\n return this._snapshot;\n };\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport { findAllDefs } from \"@noya-app/noya-schemas\";\nimport { GetAtPath, PathKey, get as getPath } from \"@noya-app/observable\";\nimport { TSchema } from \"@sinclair/typebox\";\nimport { Draft, Patches } from \"mutative\";\nimport { checkType } from \"./checkType\";\nimport {\n ExtendedPatch,\n applyExtendedPatch,\n createExtended,\n extractItemId,\n toExtendedPatch,\n} from \"./extended\";\nimport { HistoryEntries } from \"./historyEntries\";\nimport { unescapePath } from \"./unescapePath\";\n\nexport type HistoryEntry<S, M> = {\n undo: (state: S) => S;\n redo: (state: S) => S;\n undoPatches?: ExtendedPatch[];\n redoPatches?: ExtendedPatch[];\n metadata: M;\n};\n\nexport type ActionHandler<S> = {\n run: (state: S) => S;\n undo: (state: S) => S;\n};\n\nexport type HistorySnapshot<S, M> = {\n version: number;\n history: HistoryEntry<S, M>[];\n historyIndex: number;\n canUndo: boolean;\n canRedo: boolean;\n};\n\nexport type StateManagerOptions<S, M = void> = {\n /**\n * By default, the state manager will ignore edits that don't change the state.\n * Set this to true to allow empty edits.\n */\n allowEmptyEdits?: boolean;\n\n /**\n * Merge two history entries into a single history entry.\n * Usually this means providing a name, timestamp, or other metadata, and\n * combining the undo/redo operations based on this metadata.\n */\n mergeHistoryEntries?: (\n parameters: {\n previous: HistoryEntry<S, M>;\n next: HistoryEntry<S, M>;\n },\n stateManager: StateManager<S, M>\n ) => HistoryEntry<S, M> | void;\n\n /**\n * Maximum number of history entries to retain.\n * When the limit is reached, older entries are discarded.\n */\n maxHistoryEntries?: number;\n\n /**\n * Schema to validate the state against.\n */\n schema?: TSchema;\n};\n\nexport function createEditHistoryEntry<S, M>(\n state: S,\n options: StateManagerOptions<S, M>,\n metadata: M,\n mutator: (draft: Draft<S>) => void\n): { state: S; historyEntry: Required<HistoryEntry<S, M>> } | undefined {\n let [updated, patches, inversePatches] = createExtended(state, mutator);\n\n patches = HistoryEntries.compactPatches(patches);\n inversePatches = HistoryEntries.compactPatches(inversePatches);\n\n if (options.allowEmptyEdits !== true) {\n // Ignore edits that don't change the state\n if (patches.length === 0 && inversePatches.length === 0) return;\n }\n\n const historyEntry = {\n undo: (afterState: S) => applyExtendedPatch(afterState, inversePatches),\n redo: (beforeState: S) => applyExtendedPatch(beforeState, patches),\n undoPatches: inversePatches,\n redoPatches: patches,\n metadata,\n };\n\n return { state: updated, historyEntry };\n}\n\nexport function createPatchHistoryEntry<S, M>(\n state: S,\n options: StateManagerOptions<S, M>,\n metadata: M,\n patches: ExtendedPatch[],\n inversePatches: ExtendedPatch[]\n): { state: S; historyEntry: Required<HistoryEntry<S, M>> } | undefined {\n if (options.allowEmptyEdits !== true) {\n // Ignore edits that don't change the state\n if (patches.length === 0 && inversePatches.length === 0) return;\n }\n\n const historyEntry = {\n undo: (afterState: S) => applyExtendedPatch(afterState, inversePatches),\n redo: (beforeState: S) => applyExtendedPatch(beforeState, patches),\n undoPatches: inversePatches,\n redoPatches: patches,\n metadata,\n };\n\n return { state, historyEntry };\n}\n\n/**\n * A wrapper class that allows easily creating JSON patches.\n *\n * Supports methods for the following operations:\n * - 'add'\n * - 'remove'\n * - 'replace'\n * - 'move'\n */\nexport class OperationManager<S> {\n constructor(public state: S) {}\n\n patches: ExtendedPatch[] = [];\n inversePatches: ExtendedPatch[] = [];\n\n getState = () => this.state;\n\n get = <P extends string | PathKey[]>(path: P): GetAtPath<S, P> => {\n return getPath(this.state, path);\n };\n\n _replaceLastDashWithIndex = (\n exInv: ExtendedPatch,\n state: S,\n value: unknown\n // eslint-disable-next-line @shopify/prefer-early-return\n ) => {\n if (exInv.op === \"remove\") {\n const lastSegment = exInv.path[exInv.path.length - 1];\n\n if (lastSegment === \"-\") {\n const parentValue = getPath(state, exInv.path.slice(0, -1).join(\"/\"));\n\n if (Array.isArray(parentValue)) {\n const itemId = extractItemId(value);\n if (itemId !== undefined) {\n exInv.path[exInv.path.length - 1] = { id: itemId };\n } else {\n exInv.path[exInv.path.length - 1] = parentValue.length;\n }\n }\n }\n }\n };\n\n set = <P extends string>(path: P | PathKey[], value: GetAtPath<S, P>) => {\n const existingValue = getPath(this.state, path);\n\n const op: Patches<true>[number] =\n existingValue !== undefined\n ? { op: \"replace\", path: unescapePath(path), value }\n : { op: \"add\", path: unescapePath(path), value };\n const inv: Patches<true>[number] =\n existingValue !== undefined\n ? { op: \"replace\", path: unescapePath(path), value: existingValue }\n : { op: \"remove\", path: unescapePath(path) };\n\n const exOp = toExtendedPatch(this.state, op);\n const exInv = toExtendedPatch(this.state, inv);\n\n this._replaceLastDashWithIndex(exInv, this.state, value);\n\n this.patches.push(exOp);\n this.inversePatches.push(exInv);\n\n this.state = applyExtendedPatch(this.state, [exOp]);\n };\n\n /**\n * Alias for `set`\n */\n replace = this.set;\n\n /**\n * For objects, behaves like `set`.\n * For arrays, inserts the value instead of replacing an existing value.\n */\n add = <P extends string | PathKey[]>(path: P, value: GetAtPath<S, P>) => {\n const op: Patches<true>[number] = {\n op: \"add\",\n path: unescapePath(path),\n value,\n };\n const inv: Patches<true>[number] = {\n op: \"remove\",\n path: unescapePath(path),\n };\n\n const exOp = toExtendedPatch(this.state, op);\n const exInv = toExtendedPatch(this.state, inv);\n\n this._replaceLastDashWithIndex(exInv, this.state, value);\n\n this.patches.push(exOp);\n this.inversePatches.push(exInv);\n\n this.state = applyExtendedPatch(this.state, [exOp]);\n };\n\n remove = <P extends string | PathKey[]>(path: P) => {\n const existingValue = getPath(this.state, path);\n\n const op: Patches<true>[number] = {\n op: \"remove\",\n path: unescapePath(path),\n };\n const inv: Patches<true>[number] = {\n op: \"add\",\n path: unescapePath(path),\n value: existingValue,\n };\n\n const exOp = toExtendedPatch(this.state, op);\n const exInv = toExtendedPatch(this.state, inv);\n\n this.patches.push(exOp);\n this.inversePatches.push(exInv);\n\n this.state = applyExtendedPatch(this.state, [exOp]);\n };\n\n /**\n * Alias for `remove`\n */\n delete = this.remove;\n\n static getInverseMoveIndexes({\n state,\n opFrom,\n opTo,\n }: {\n state?: any;\n opFrom: PathKey[];\n opTo: PathKey[];\n }) {\n const invFrom = opTo.slice();\n const invTo = opFrom.slice();\n\n for (let i = 0; i < Math.min(invFrom.length, invTo.length); i++) {\n let fromValue = invFrom[i];\n let toValue = invTo[i];\n\n let shouldAdjust = false;\n\n if (state) {\n const fromParentPath = invFrom.slice(0, i);\n const toParentPath = invTo.slice(0, i);\n const fromParent = getPath(state, fromParentPath);\n const toParent = getPath(state, toParentPath);\n // console.log({ fromParent, toParent, fromParentPath, toParentPath });\n shouldAdjust = Array.isArray(fromParent) && Array.isArray(toParent);\n } else {\n shouldAdjust =\n typeof fromValue === \"number\" && typeof toValue === \"number\";\n }\n\n if (shouldAdjust) {\n fromValue = Number(fromValue);\n toValue = Number(toValue);\n\n if (fromValue <= toValue && opFrom.length > opTo.length) {\n invTo[i] = toValue + 1;\n }\n\n if (fromValue >= toValue && opFrom.length < opTo.length) {\n invFrom[i] = fromValue - 1;\n }\n } else if (fromValue !== toValue) {\n break;\n }\n }\n\n return { invFrom, invTo };\n }\n\n move = <P extends string | PathKey[], F extends string | PathKey[]>(\n from: F,\n to: P\n ) => {\n function isSameParent(state: S, path1: PathKey[], path2: PathKey[]) {\n return (\n getPath(state, path1.slice(0, -1)) ===\n getPath(state, path2.slice(0, -1))\n );\n }\n\n let opFrom = [...unescapePath(from)];\n let opTo = [...unescapePath(to)];\n\n const op: Patches<true>[number] = {\n op: \"move\",\n from: opFrom,\n path: opTo,\n };\n\n const exOp: ExtendedPatch = toExtendedPatch(this.state, op);\n\n this.patches.push(exOp);\n this.state = applyExtendedPatch(this.state, [exOp]);\n\n let invFrom = opTo.slice();\n let invTo = opFrom.slice();\n\n // Inverse patch should operate on the updated state to make sure\n // we're targeting the right value by id in the case of an extended patch\n if (!isSameParent(this.state, invFrom, invTo)) {\n // Update the indexes in the inverse patch\n const result = OperationManager.getInverseMoveIndexes({\n state: this.state,\n opFrom,\n opTo,\n });\n\n invFrom = result.invFrom;\n invTo = result.invTo;\n }\n\n const inv: Patches<true>[number] = {\n op: \"move\",\n from: invFrom,\n path: invTo,\n };\n\n const exInv = toExtendedPatch(this.state, inv);\n this.inversePatches.push(exInv);\n };\n\n editDraft = (mutator: (draft: Draft<S>) => void) => {\n const [updated, patches, inversePatches] = createExtended(\n this.state,\n mutator\n );\n\n this.patches.push(...patches);\n this.inversePatches.unshift(...inversePatches);\n\n this.state = updated;\n };\n}\n\nexport class StateManager<S, M = void> extends Emitter {\n state: S;\n schema?: TSchema;\n version = 0;\n\n // Note: The history object is mutable, but each entry is immutable\n history: HistoryEntry<S, M>[] = [];\n historyIndex = 0;\n historyEmittor = new Emitter();\n\n constructor(\n initialState: S,\n public options: StateManagerOptions<S, M> = {}\n ) {\n super();\n\n this.state = initialState;\n this.schema = options.schema;\n\n // Bind overloaded methods\n this.getState = this.getState.bind(this);\n\n this.getHistorySnapshot = this._createVersionMemoizer(\n this.getHistorySnapshot\n );\n }\n\n _setState(newState: S) {\n this.state = newState;\n this.version++;\n this.emit();\n this.historyEmittor.emit();\n }\n\n _setStateWithHistoryEntry(\n newState: S,\n historyEntry: HistoryEntry<S, M>,\n {\n shouldTypeCheck = true,\n }: {\n shouldTypeCheck?: boolean;\n } = {}\n ) {\n if (shouldTypeCheck) {\n checkType(newState, this.schema, findAllDefs(this.schema));\n }\n\n this.history.length = this.historyIndex;\n\n if (this.history.length > 0 && this.options.mergeHistoryEntries) {\n const merged = this.options.mergeHistoryEntries(\n {\n previous: this.history[this.history.length - 1],\n next: historyEntry,\n },\n this\n );\n\n if (merged) {\n this.history[this.history.length - 1] = merged;\n this._setState(newState);\n return;\n }\n }\n\n this.history.push(historyEntry);\n this.historyIndex++;\n\n // Ensure the history does not exceed the maxHistoryEntries limit\n if (\n this.options.maxHistoryEntries !== undefined &&\n this.history.length > this.options.maxHistoryEntries\n ) {\n this.history.shift();\n this.historyIndex--;\n }\n\n this._setState(newState);\n }\n\n edit = (\n ...args: M extends {}\n ? [metadata: M, mutator: (draft: Draft<S>) => void]\n : [mutator: (draft: Draft<S>) => void]\n ) => {\n const [metadata, mutator] =\n args.length === 1 ? [undefined as M, args[0]] : args;\n\n const result = createEditHistoryEntry(\n this.state,\n this.options,\n metadata,\n mutator\n );\n\n if (!result) return;\n\n this._setStateWithHistoryEntry(result.state, result.historyEntry);\n };\n\n operate = (\n ...args: M extends {}\n ? [metadata: M, operator: (operationManager: OperationManager<S>) => void]\n : [operator: (operationManager: OperationManager<S>) => void]\n ) => {\n const [metadata, operator] =\n args.length === 1 ? [undefined, args[0]] : args;\n\n const operationManager = new OperationManager(this.getState());\n\n operator(operationManager);\n\n const patches = HistoryEntries.compactPatches(operationManager.patches);\n const inversePatches = HistoryEntries.compactPatches(\n operationManager.inversePatches\n );\n const afterState = applyExtendedPatch(this.state, patches);\n\n if (this.options.allowEmptyEdits !== true) {\n // Ignore edits that don't change the state\n if (patches.length === 0) return;\n }\n\n this._setStateWithHistoryEntry(afterState, {\n undo: (afterState: S) => applyExtendedPatch(afterState, inversePatches),\n redo: (beforeState: S) => applyExtendedPatch(beforeState, patches),\n undoPatches: inversePatches,\n redoPatches: patches,\n metadata: metadata as M,\n });\n\n return patches;\n };\n\n performAction = (\n ...args: M extends {}\n ? [metadata: M, handler: ActionHandler<S>]\n : [handler: ActionHandler<S>]\n ) => {\n const [metadata, handler] =\n args.length === 1 ? [undefined as M, args[0]] : args;\n\n this._setStateWithHistoryEntry(handler.run(this.state), {\n undo: handler.undo,\n redo: handler.run,\n metadata,\n });\n };\n\n canUndo = () => {\n return this.historyIndex > 0;\n };\n\n canRedo = () => {\n return this.historyIndex < this.history.length;\n };\n\n undo = () => {\n if (!this.canUndo()) return;\n\n const handler = this.history[this.historyIndex - 1];\n\n this.historyIndex--;\n this._setState(handler.undo(this.state));\n };\n\n redo = () => {\n if (!this.canRedo()) return;\n\n const handler = this.history[this.historyIndex];\n\n this.historyIndex++;\n this._setState(handler.redo(this.state));\n };\n\n getState(): S;\n getState<P extends string | PathKey[]>(path: P): GetAtPath<S, P>;\n getState<P extends string | PathKey[]>(path?: P) {\n if (path === undefined) return this.state;\n\n return getPath(this.state, path);\n }\n\n clearHistory = () => {\n this.history.length = 0;\n this.historyIndex = 0;\n this.historyEmittor.emit();\n };\n\n replaceState = (newState: S) => {\n this.clearHistory();\n this._setState(newState);\n };\n\n /**\n * Replace the initial state of the state manager, effectively rebasing the history.\n *\n * Replaces the initial state with the new state then applies each redo up to the\n * current history index.\n */\n rebase = (newInitialState: S) => {\n let state = newInitialState;\n\n for (let i = 0; i < this.historyIndex; i++) {\n const handler = this.history[i];\n state = handler.redo(state);\n }\n\n this._setState(state);\n };\n\n getStateAtHistoryIndex = (index: number) => {\n let state = this.state;\n\n // undo all the way to the base state\n for (let i = this.historyIndex; i > index; i--) {\n const handler = this.history[i - 1];\n state = handler.undo(state);\n }\n\n return state;\n };\n\n _rewindToIndex = (index: number, f: (state: S) => S) => {\n let state = this.state;\n\n // undo all the way to the base state\n for (let i = this.historyIndex; i > index; i--) {\n const handler = this.history[i - 1];\n state = handler.undo(state);\n }\n\n state = f(state);\n\n // reapply all the history\n for (let i = 0; i < this.historyIndex; i++) {\n const handler = this.history[i];\n state = handler.redo(state);\n }\n\n this._setState(state);\n };\n\n /**\n * Accept a patch to the base state, effectively rebasing the history.\n */\n acceptPatchesAtIndex = (\n index: number,\n patches: ExtendedPatch[],\n filterHistoryEntry?: (entry: HistoryEntry<S, M>, index: number) => boolean\n ) => {\n let state = this.getStateAtHistoryIndex(index);\n\n state = applyExtendedPatch(state, patches);\n\n // reapply all the history\n for (let i = 0; i < this.historyIndex; i++) {\n if (filterHistoryEntry && !filterHistoryEntry(this.history[i], i))\n continue;\n\n const handler = this.history[i];\n state = handler.redo(state);\n }\n\n this._setState(state);\n };\n\n goToHistoryIndex = (index: number) => {\n if (index < 0 || index > this.history.length) return;\n\n if (index < this.historyIndex) {\n while (this.historyIndex > index) {\n this.undo();\n }\n } else {\n while (this.historyIndex < index) {\n this.redo();\n }\n }\n };\n\n getHistorySnapshot = (): HistorySnapshot<S, M> => {\n return {\n version: this.version,\n history: this.history.slice(),\n historyIndex: this.historyIndex,\n canUndo: this.canUndo(),\n canRedo: this.canRedo(),\n };\n };\n\n _createVersionMemoizer<F extends (...args: any[]) => any>(f: F) {\n let version: number | undefined;\n let memoizedValue: ReturnType<F> | undefined;\n\n return (...args: Parameters<F>): ReturnType<F> => {\n if (version !== this.version) {\n memoizedValue = f(...args);\n version = this.version;\n }\n\n return memoizedValue!;\n };\n }\n}\n","import { Asset } from \"@noya-app/noya-schemas\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport { Observable, set } from \"@noya-app/observable\";\nimport { Static, Type } from \"@sinclair/typebox\";\nimport { AIManager } from \"./AIManager\";\nimport { AssetManager } from \"./AssetManager\";\nimport { createOrCastValue } from \"./checkType\";\nimport { ConnectedUsersManager } from \"./ConnectedUsersManager\";\nimport { ConnectionEventManager } from \"./ConnectionEventManager\";\nimport { diff } from \"./diff\";\nimport { EvalManager, SafeEval } from \"./EvalManager\";\nimport { ExtendedPatch } from \"./extended\";\nimport { HistoryEntries } from \"./historyEntries\";\nimport { IOManager } from \"./IOManager\";\nimport { MenuManager } from \"./MenuManager\";\nimport {\n EphemeralUserDataManager,\n MultiplayerPatchMetadata,\n MultiplayerStateManager,\n MultiplayerStateManagerError,\n MultiplayerStateManagerOptions,\n} from \"./multiplayer\";\nimport { PipelineManager } from \"./PipelineManager\";\nimport { PublishingManager } from \"./PublishingManager\";\nimport { RPCManager } from \"./rpcManager\";\nimport { Secret, SecretManager } from \"./SecretManager\";\nimport { HistoryEntry } from \"./stateManager\";\nimport { TaskManager } from \"./TaskManager\";\n\nexport type NoyaManagerOptions<S, M> = MultiplayerStateManagerOptions<S, M> & {\n initialAssets?: Asset[];\n initialSecrets?: Secret[];\n registerDefaultAITools?: boolean;\n safeEval?: SafeEval;\n};\n\nexport function defaultMergeHistoryEntries<\n S,\n M extends MultiplayerPatchMetadata,\n>({\n previous,\n next,\n}: {\n previous: HistoryEntry<S, M>;\n next: HistoryEntry<S, M>;\n}) {\n if (\n previous.metadata.name !== undefined &&\n previous.metadata.name === next.metadata.name &&\n previous.metadata.timestamp + 500 > next.metadata.timestamp\n ) {\n return HistoryEntries.merge({ previous, next });\n }\n}\n\nexport class NoyaManager<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n> {\n id = uuid();\n multiplayerStateManager: MultiplayerStateManager<S, M>;\n rpcManager: RPCManager;\n pipelineManager: PipelineManager;\n secretManager: SecretManager;\n aiManager: AIManager;\n ioManager: IOManager;\n ephemeralUserDataManager = new EphemeralUserDataManager<E>();\n assetManager: AssetManager;\n connectedUsersManager = new ConnectedUsersManager();\n taskManager = new TaskManager();\n connectionEventManager = new ConnectionEventManager<S>();\n menuManager = new MenuManager<MenuT>();\n evalManager: EvalManager;\n publishingManager = new PublishingManager();\n\n initialState: S | (() => S);\n options: NoyaManagerOptions<S, M>;\n\n unrecoverableError = new Observable<MultiplayerStateManagerError | undefined>(\n undefined\n );\n\n constructor(\n initialState: S | (() => S),\n options: NoyaManagerOptions<S, M> = {}\n ) {\n options = {\n ...options,\n mergeHistoryEntries:\n options.mergeHistoryEntries === undefined\n ? defaultMergeHistoryEntries\n : options.mergeHistoryEntries,\n };\n\n this.multiplayerStateManager = new MultiplayerStateManager<S, M>(\n initialState,\n options\n );\n this.initialState = initialState;\n this.options = options;\n\n this.assetManager = new AssetManager({\n initialAssets: options.initialAssets,\n });\n this.rpcManager = new RPCManager({ debug: this.options.debug });\n this.pipelineManager = new PipelineManager(this.rpcManager);\n this.secretManager = new SecretManager(this.rpcManager, {\n initialSecrets: options.initialSecrets,\n });\n this.aiManager = new AIManager(this.rpcManager);\n this.ioManager = new IOManager(this.rpcManager);\n this.evalManager = new EvalManager({\n safeEval: this.options.safeEval,\n });\n\n this.multiplayerStateManager.errorEmitter.addListener((error) => {\n switch (error.reason) {\n case \"invalidDataType\":\n case \"schemaMismatch\":\n case \"outdatedSchema\":\n case \"dataMigrationFailure\":\n case \"schemaMigration\":\n this.unrecoverableError.set(error);\n break;\n }\n });\n\n if (this.options.registerDefaultAITools !== false) {\n this.aiManager.systemMessage$.set(\n [\n `Please act as an efficient, competent, conscientious, and industrious professional assistant. \n Help the user achieve their goals, and you do so in a way that is as efficient as possible, without unnecessary fluff, \n but also without sacrificing professionalism. Always be polite and respectful, and prefer brevity over verbosity.\n `,\n this.multiplayerStateManager.schema &&\n `Their document state conforms to the following schema: \\`\\`\\`\\n${JSON.stringify(this.multiplayerStateManager.schema, null, 2)}\\n\\`\\`\\``,\n `They have also provided you with functions you can call to initiate actions on their behalf, \n or functions you can call to receive more information. Please assist them as best you can.\n You can ask them for clarifying questions if needed, but don't be annoying about it.\n If you can determine a single best course of action, update the user's document state automatically without further questions.\n If you can reasonably 'fill in the blanks' yourself, do so. If you would like to call a function, call it without saying anything else.`,\n ]\n .filter(Boolean)\n .join(\"\\n\")\n );\n\n this.aiManager.registerTool({\n functionName: \"createMutator\",\n description: `Create a JavaScript function called \"updateState\" that can be invoked to mutate the document state. \n The function must be a named function. The function must accept the current document state as an argument and mutate it directly.\n There should be no return value. E.g.\n \\`\\`\\`js\n function updateState(state) {\n state.someProperty = \"new value\";\n state.someArray.push({\n id: crypto.randomUUID(),\n name: \"new item\",\n });\n }\n \\`\\`\\`\n You may use the \\`crypto\\` object to generate random UUIDs.`,\n parameters: createMutatorParametersSchema,\n onCall: async (parameters) => {\n const state = this.multiplayerStateManager.optimisticState$.get();\n const sourceCode = parameters.sourceCode as string;\n const code = `const __state = ${JSON.stringify(state, null, 2)};\n ${sourceCode};\n updateState(__state);\n __state;`;\n\n let newState;\n\n try {\n newState = await this.evalManager.evaluate(code);\n } catch (error) {\n console.error(error);\n return internalErrorMessage;\n }\n\n let patches: ExtendedPatch[];\n let inversePatches: ExtendedPatch[];\n\n try {\n [patches, inversePatches] = diff(\n this.multiplayerStateManager.optimisticState$.get(),\n newState\n );\n } catch (error) {\n console.error(error);\n return internalErrorMessage;\n }\n\n try {\n this.multiplayerStateManager.applyPatch({\n patches,\n inversePatches,\n });\n } catch (error) {\n console.error(error);\n return internalErrorMessage;\n }\n\n return typeof parameters.message === \"string\"\n ? parameters.message\n : \"\";\n },\n });\n\n const setPropertyParametersSchema = Type.Object({\n message: Type.String({\n description: `A message that summarizes the changes made to the document state.`,\n }),\n property: Type.Array(\n Type.String({\n description: `The path to the property to set. For example, to update the content \n of a property {\"files\": {\"index.tsx\": {\"content\": \"...\"}}}, you would use \n [\"files\", \"index.tsx\", \"content\"].`,\n })\n ),\n value: Type.Any({\n description: `The value to set the property to.`,\n }),\n });\n\n this.aiManager.registerTool({\n functionName: \"setProperty\",\n description: `Set a property on the document state`,\n parameters: setPropertyParametersSchema,\n onCall: async (parameters) => {\n try {\n const parsedParameters = createOrCastValue({\n schema: setPropertyParametersSchema,\n value: parameters,\n defs: {},\n });\n\n this.multiplayerStateManager.editDraft((draft) => {\n set(\n draft,\n parsedParameters.property as any,\n parsedParameters.value\n );\n });\n\n return parsedParameters.message;\n } catch (error) {\n console.error(error);\n return internalErrorMessage;\n }\n },\n });\n }\n }\n\n forceInit = () => {\n const initialState =\n this.initialState instanceof Function\n ? this.initialState()\n : this.initialState;\n const schema = this.options?.schema;\n\n this.multiplayerStateManager.sm.clearHistory();\n this.multiplayerStateManager.sendInit({\n force: true,\n state: initialState,\n schema,\n });\n };\n\n undo = () => this.multiplayerStateManager.undo();\n redo = () => this.multiplayerStateManager.redo();\n canUndo = () => this.multiplayerStateManager.canUndo();\n canRedo = () => this.multiplayerStateManager.canRedo();\n}\n\nexport const createMutatorParametersSchema = Type.Object({\n sourceCode: Type.String({\n description: \"The source code of the mutator function.\",\n }),\n message: Type.String({\n description: `A message that summarizes the changes made to the document state.`,\n }),\n});\n\nexport type CreateMutatorParameters = Static<\n typeof createMutatorParametersSchema\n>;\n\nconst internalErrorMessage =\n \"An error occurred internally, no changes were made.\";\n","import { MediaItem, OutputTransform } from \"@noya-app/noya-schemas\";\nimport { get } from \"@noya-app/observable\";\nimport { TaskReference, TaskRunner } from \"@noya-app/task-runner\";\nimport { DAGraph } from \"./DAGraph\";\nimport { decrypt } from \"./decrypt\";\nimport { formatError, ParsedError } from \"./formatError\";\nimport { getGraphNodeStableId, GraphNode } from \"./pipelineToGraph\";\nimport {\n CodeBody,\n PipelineGraphAPI,\n PipelineState,\n RemoteEvaluateParameters,\n Secret,\n URLBody,\n} from \"./state\";\n\nexport function evaluate(sourceCode: string) {\n function esModuleInterop(moduleExports: any) {\n if (moduleExports === null || moduleExports === undefined) {\n throw new Error(\"Module exports is null or undefined\");\n }\n\n // Handle ES modules with default export\n if (moduleExports.__esModule && \"default\" in moduleExports) {\n return moduleExports.default;\n }\n\n // Handle CommonJS modules exported as default\n if (\n typeof moduleExports === \"object\" &&\n \"default\" in moduleExports &&\n Object.keys(moduleExports).length === 1\n ) {\n return moduleExports.default;\n }\n\n // Return as-is if it's not a module with default export\n return moduleExports;\n }\n\n const exports = {};\n const module = { exports };\n const require = () => {};\n\n new Function(\"exports\", \"module\", \"require\", sourceCode)(\n exports,\n module,\n require\n );\n\n return esModuleInterop(module.exports);\n}\n\nexport function createEvaluateScriptLocally({\n fetch = globalThis.fetch,\n}: {\n fetch?: typeof globalThis.fetch;\n} = {}) {\n return async (\n parameters: RemoteEvaluateParameters,\n _log?: (...args: any[]) => void\n ) => {\n const logs: string[][] = [];\n\n // const customConsole = {\n // log: (...args: any[]) => {\n // logs.push([\"log\", ...args]);\n // },\n // error: (...args: any[]) => {\n // logs.push([\"error\", ...args]);\n // },\n // warn: (...args: any[]) => {\n // logs.push([\"warn\", ...args]);\n // },\n // info: (...args: any[]) => {\n // logs.push([\"info\", ...args]);\n // },\n // };\n\n // const originalConsole = globalThis.console;\n // (globalThis as any).console = customConsole;\n\n try {\n if (parameters.type === \"url\") {\n const response = await fetch(parameters.url);\n const text = await response.text();\n\n parameters = {\n ...parameters,\n type: \"code\",\n code: text,\n };\n }\n\n const defaultExport = evaluate(parameters.code);\n const result = await defaultExport(...parameters.args);\n\n return { result, logs };\n } catch (error) {\n console.error(error);\n\n return { error, logs };\n } finally {\n // Restore original console\n // globalThis.console = originalConsole;\n }\n };\n}\n\nexport function createEvaluateScriptRemotely({\n url,\n bundlerUrl = url,\n fetch = globalThis.fetch,\n}: {\n url: string;\n bundlerUrl?: string;\n fetch?: typeof globalThis.fetch;\n}) {\n return async (\n parameters: RemoteEvaluateParameters,\n _log?: (...args: any[]) => void\n ) => {\n let encodedParameters: string;\n\n try {\n encodedParameters = JSON.stringify(parameters);\n } catch (error) {\n throw new Error(\n `Failed to encode parameters: ${(error as Error).message}`\n );\n }\n\n const urlToUse =\n parameters.type === \"url\" && parameters.url.includes(\"/js/bundler\")\n ? bundlerUrl\n : url;\n\n const response = await fetch(urlToUse, {\n method: \"POST\",\n body: encodedParameters,\n });\n\n if (!response.ok) {\n let message;\n try {\n message = await response.text();\n } catch (error) {\n message = response.statusText;\n }\n\n throw new Error(\n `Remote evaluate failed: ${response.status} ${response.statusText} ${urlToUse}. ${message}`\n );\n }\n\n try {\n const json = await response.json();\n return json;\n } catch (error) {\n throw new Error(`Failed to decode response: ${(error as Error).message}`);\n }\n };\n}\n\nexport function createFetchFileVersionEnv({\n baseUrl,\n headers,\n fetch = globalThis.fetch,\n ENCRYPTION_KEY,\n MULTIPLAYER_SHARED_TOKEN,\n}: {\n baseUrl: string;\n headers?: Record<string, string>;\n fetch?: typeof globalThis.fetch;\n ENCRYPTION_KEY: string;\n MULTIPLAYER_SHARED_TOKEN: string;\n}) {\n return async (fileVersionId: string) => {\n const response = await fetch(\n `${baseUrl}/api/fileVersions/${fileVersionId}/secrets?includeValues=true`,\n {\n headers: {\n \"x-noya-shared-token\": MULTIPLAYER_SHARED_TOKEN,\n ...headers,\n },\n }\n );\n\n const secrets = await response.json();\n\n return decodeEnv(secrets, ENCRYPTION_KEY);\n };\n}\n\nexport function createFetchFileEnv({\n baseUrl,\n headers,\n fetch = globalThis.fetch,\n ENCRYPTION_KEY,\n MULTIPLAYER_SHARED_TOKEN,\n}: {\n baseUrl: string;\n headers?: Record<string, string>;\n fetch?: typeof globalThis.fetch;\n ENCRYPTION_KEY: string;\n MULTIPLAYER_SHARED_TOKEN: string;\n}) {\n return async (fileId: string) => {\n const secrets = await fetch(\n `${baseUrl}/api/files/${fileId}/secrets?includeValues=true`,\n {\n headers: {\n \"x-noya-shared-token\": MULTIPLAYER_SHARED_TOKEN,\n ...headers,\n },\n }\n );\n\n const json = await secrets.json();\n\n return decodeEnv(json, ENCRYPTION_KEY);\n };\n}\n\nasync function decodeEnv(secrets: any, ENCRYPTION_KEY: string) {\n const env: Record<string, string> = {};\n\n for (const secret of secrets) {\n const decoded = await decodeSecret(secret, ENCRYPTION_KEY);\n\n if (!decoded) {\n continue;\n }\n\n env[decoded.name] = decoded.value;\n }\n\n return env;\n}\n\nasync function decodeSecret(\n secret: Secret,\n ENCRYPTION_KEY: string\n): Promise<Secret | null> {\n const { value, ...rest } = secret;\n\n if (!value) {\n console.warn(`No value for secret ${rest.name}`);\n return null;\n }\n\n const parsed = JSON.parse(value) as {\n encrypted: string;\n iv: string;\n tag: string;\n };\n\n const decryptedValue = await decrypt({ ...parsed, ENCRYPTION_KEY });\n\n return { ...rest, value: decryptedValue };\n}\n\nexport async function getFileSecrets({\n fileId,\n baseUrl,\n MULTIPLAYER_SHARED_TOKEN,\n ENCRYPTION_KEY,\n headers,\n}: {\n fileId: string;\n baseUrl: string;\n MULTIPLAYER_SHARED_TOKEN: string;\n ENCRYPTION_KEY: string;\n headers?: Record<string, string>;\n}) {\n const secrets = await fetch(\n `${baseUrl}/api/files/${fileId}/secrets?includeValues=true`,\n {\n headers: {\n \"x-noya-shared-token\": MULTIPLAYER_SHARED_TOKEN,\n ...headers,\n },\n }\n );\n\n const json = await secrets.json();\n\n return await Promise.all(\n json.map((secret: Secret) => decodeSecret(secret, ENCRYPTION_KEY))\n );\n}\n\ntype TaskArtifact = { name: string; size: number; url: string };\n\nexport type TaskMetadata = {\n artifacts: TaskArtifact[];\n};\n\nexport type TaskResult = {\n state: any;\n assets: Record<string, MediaItem>;\n inputs?: any;\n name?: string;\n __isSecret?: boolean;\n};\n\nconst systemLogPrefix = \"__system__\";\n\nfunction createTask({\n state: workflowState,\n node,\n api,\n taskRunner,\n dependencyTaskRefs,\n}: {\n state: PipelineState;\n node: GraphNode;\n api: PipelineGraphAPI;\n taskRunner: TaskRunner<TaskMetadata>;\n dependencyTaskRefs: TaskReference<any>[];\n}): TaskReference<TaskResult> {\n let name: string;\n switch (node.gType) {\n case \"block\": {\n name = `[Block] ${node.name}`;\n break;\n }\n case \"input\": {\n name = `[Input] ${node.gBlockName} / ${node.name}`;\n break;\n }\n case \"transform\": {\n const value = (node as OutputTransform).value;\n name = `[Transform] ${node.gBlockName} / ${node.kind}${value ? ` (${value})` : \"\"}`;\n break;\n }\n }\n\n const task = taskRunner\n .createContext(...dependencyTaskRefs)\n .addTask(\n { id: getGraphNodeStableId(node), name },\n async (\n deps: TaskResult[],\n { log: logFn, setMetadata }\n ): Promise<TaskResult> => {\n const rawLog = (...args: any[]) => {\n const timestamp = new Date().toISOString();\n logFn(timestamp, ...args);\n };\n\n const log = (...args: any[]) => {\n rawLog(systemLogPrefix, ...args);\n };\n\n const logError = (...args: any[]) => {\n rawLog(systemLogPrefix, \"__error__\", ...args);\n };\n\n const dep0 = deps[0];\n\n async function addArtifact(\n parameters:\n | {\n type: \"string\";\n value: string;\n name: string;\n }\n | {\n type: \"json\";\n value: object;\n name: string;\n }\n ) {\n if (api.createArtifact) {\n try {\n const stringValue =\n parameters.type === \"string\"\n ? parameters.value\n : JSON.stringify(parameters.value);\n\n const resultUint8Array = new TextEncoder().encode(stringValue);\n const artifact = await api.createArtifact(resultUint8Array);\n\n setMetadata((m): TaskMetadata => {\n return {\n ...m,\n artifacts: [\n {\n name: parameters.name,\n size: resultUint8Array.byteLength,\n url: artifact,\n },\n ],\n };\n });\n } catch (error) {\n logError(`${name} failed to create ${name} artifact`);\n logError((error as Error).message);\n }\n }\n }\n\n // console.log(\"run task\", name, deps);\n\n const safeGetAssets = (dep: TaskResult): Record<string, MediaItem> => {\n try {\n return dep.assets;\n } catch (error) {\n return {};\n }\n };\n\n const createInputsByName = (inputs: any[]): Record<string, any> =>\n inputs.reduce((acc, input) => {\n acc[input.name] = input.state;\n return acc;\n }, {});\n\n const collectAssets = (deps: any[]): Record<string, any> =>\n deps.reduce((acc, dep) => {\n Object.assign(acc, safeGetAssets(dep));\n return acc;\n }, {});\n\n try {\n switch (node.gType) {\n case \"block\": {\n switch (node.type) {\n case \"file\": {\n const { fileVersionId } = node;\n log(`fetching ${name} - ${fileVersionId}`);\n\n try {\n const state = await api.getFileVersionData(fileVersionId);\n const fileVersionAssets =\n await api.getFileVersionAssets(fileVersionId);\n\n const assets = {\n ...collectAssets(deps),\n ...Object.fromEntries(\n fileVersionAssets.map((asset) => [asset.id, asset])\n ),\n };\n\n log(`fetched ${name} - ${fileVersionId}`, state);\n\n return {\n state,\n assets,\n inputs: createInputsByName(deps),\n };\n } catch (error) {\n logError(\n `error fetching ${name} - ${fileVersionId}`,\n (error as Error).message\n );\n throw error;\n }\n }\n case \"data\": {\n log(`evaluating data node ${name}`);\n return { state: node.data, assets: {}, inputs: {} };\n }\n case \"secret\": {\n log(`[Secret] loading ${name}`);\n try {\n const secret = await api.getFileSecret(node.secretStableId);\n log(`[Secret] loaded ${name}`);\n return {\n state: secret.value,\n assets: {},\n inputs: {},\n __isSecret: true,\n };\n } catch (error) {\n logError(`[Secret] error loading ${name}`);\n throw error;\n }\n }\n case \"workflowOutput\": {\n const inputs = createInputsByName(deps);\n\n await addArtifact({\n type: \"json\",\n value: inputs,\n name: \"output\",\n });\n\n return {\n state: workflowState,\n assets: {},\n inputs,\n };\n }\n default: {\n throw new Error(`Unknown node type: ${(node as any).type}`);\n }\n }\n }\n case \"input\": {\n // Combine multiple upstream dependencies for a single input\n const depValues = deps.map((d) => d.state);\n\n const isArray = (v: any) => Array.isArray(v);\n const isPlainObject = (v: any) =>\n v !== null && typeof v === \"object\" && !Array.isArray(v);\n\n let combinedValue: any;\n let combinedAssets: Record<string, MediaItem>;\n\n if (depValues.length === 0) {\n combinedValue = undefined;\n combinedAssets = {};\n } else if (depValues.every(isArray)) {\n // Concatenate arrays\n combinedValue = depValues.flat();\n combinedAssets = collectAssets(deps);\n } else if (depValues.every(isPlainObject)) {\n // Shallow merge objects; last wins on conflicts\n combinedValue = Object.assign({}, ...depValues);\n combinedAssets = collectAssets(deps);\n } else {\n // Inconsistent or primitive types: last dependency wins\n combinedValue = depValues[depValues.length - 1];\n const lastDep = deps[deps.length - 1] as any;\n combinedAssets = safeGetAssets(lastDep);\n }\n\n if (deps.some((d: any) => d?.__isSecret)) {\n log(name, \"secret value\", \"•\".repeat(20));\n } else {\n log(name, \"value\", combinedValue);\n }\n\n return {\n name: node.name,\n state: combinedValue,\n assets: combinedAssets,\n };\n }\n case \"transform\": {\n log(`${name} - ${node.kind}`);\n\n async function evaluateTransform(\n parameters: Omit<CodeBody, \"env\"> | Omit<URLBody, \"env\">\n ) {\n let env: Record<string, string> = {};\n\n if (node.gFileVersionId) {\n env = await api.getFileVersionEnv(node.gFileVersionId);\n }\n\n let response: {\n result: any;\n logs: unknown[][];\n error: ParsedError | undefined;\n };\n\n try {\n response = await api.evaluateScript(\n {\n ...parameters,\n env,\n },\n log\n );\n } catch (networkError) {\n logError(\n `${name} failed to evaluate`,\n (networkError as Error).message\n );\n throw networkError;\n }\n\n const { result, logs, error } = response;\n\n await addArtifact({\n type: \"json\",\n value: result,\n name: \"result\",\n });\n\n for (const item of logs) {\n rawLog(...item);\n }\n\n if (error) {\n logError(`${name} failed to evaluate`);\n logError(formatError(error));\n throw new Error(error.message);\n }\n\n log(`${name} evaluated script`);\n\n return {\n state: result,\n assets: safeGetAssets(dep0),\n inputs: dep0.inputs,\n };\n }\n\n switch (node.kind) {\n case \"jsonPointer\": {\n log(`${name} json pointer`, node.value);\n\n if (!node.value.startsWith(\"/\")) {\n log(\n `${name} json pointer missing leading slash`,\n node.value\n );\n throw new Error(\n `${name} json pointer missing leading slash: ${node.value}`\n );\n }\n\n const resultState = get(dep0.state, node.value, [\"/\"]);\n log(\n `${name} json pointer result`,\n JSON.stringify(resultState, null, 2)\n );\n return {\n state: resultState,\n assets: safeGetAssets(dep0),\n inputs: dep0.inputs,\n };\n }\n case \"script\": {\n let scriptText: string;\n\n switch (node.location) {\n case \"state\": {\n if (typeof dep0.state !== \"string\") {\n throw new Error(\n `Script transform requires string input, got: ${typeof dep0.state} ${JSON.stringify(dep0).slice(0, 1000)}`\n );\n }\n\n scriptText = dep0.state;\n break;\n }\n case \"url\": {\n let remoteScript:\n | { text(): Promise<string>; url: string; cid?: string }\n | undefined;\n\n try {\n const fetchScript =\n api.fetchScript ?? defaultFetchScript;\n remoteScript = await fetchScript(node.value);\n } catch (error) {\n logError(\n `${name} error fetching script: ${(error as Error).message}`\n );\n throw error;\n }\n\n const { cid, url } = remoteScript;\n\n const cache =\n node.value.includes(\"/js/bundler\") && api.cache;\n\n let hash: string | undefined;\n\n if (cache) {\n log(`${name} - computing hash`);\n\n try {\n let hashable = JSON.stringify({ cid, args: [dep0] });\n\n hash = await cache.hash(\n new TextEncoder().encode(hashable)\n );\n\n log(`${name} - computed hash: ${hash}`);\n } catch (error) {\n log(\n `${name} - error computing hash: ${(error as Error).message}`\n );\n }\n }\n\n if (hash && cache) {\n log(`${name} - checking cache for ${hash}`);\n\n let cachedResult: any;\n\n try {\n const cachedValue = await cache.getValue(hash);\n cachedResult = JSON.parse(\n new TextDecoder().decode(cachedValue)\n );\n } catch (error) {\n log(`${name} - no cached result found for ${hash}`);\n }\n\n if (cachedResult) {\n log(`${name} - found cached result`);\n return {\n state: cachedResult,\n assets: safeGetAssets(dep0),\n inputs: dep0.inputs,\n };\n }\n }\n\n let result: TaskResult;\n\n try {\n result = await evaluateTransform({\n type: \"url\",\n url,\n cid,\n args: [\n dep0.inputs,\n { state: dep0.state, assets: safeGetAssets(dep0) },\n ],\n });\n } catch (error) {\n logError(\n `${name} - error evaluating script: ${(error as Error).message}`\n );\n throw error;\n }\n\n if (hash && cache) {\n log(`${name} - caching result for ${hash}`);\n try {\n const resultString = JSON.stringify(result.state);\n const resultBuffer = new TextEncoder().encode(\n resultString\n );\n await cache.setValue(hash, resultBuffer);\n log(`${name} - cached result for ${hash}`);\n } catch (error) {\n log(`${name} - error caching result for ${hash}`);\n log((error as Error).message);\n }\n }\n\n return result;\n }\n default: {\n throw new Error(\n `Unknown script location: ${node.location}`\n );\n }\n }\n\n await addArtifact({\n type: \"string\",\n value: scriptText,\n name: \"script\",\n });\n\n return evaluateTransform({\n type: \"code\",\n code: scriptText,\n args: [\n dep0.inputs,\n { state: dep0.state, assets: safeGetAssets(dep0) },\n ],\n });\n }\n default: {\n throw new Error(\n `Unknown transform type: ${(node as any).type}`\n );\n }\n }\n }\n default: {\n throw new Error(\n `Unknown graph node type: ${(node as GraphNode).gType}`\n );\n }\n }\n } catch (error) {\n logError(`${name} failed to run`);\n logError((error as Error).message);\n throw error;\n }\n }\n );\n\n return task;\n}\n\nexport async function defaultFetchScript(\n url: string\n): Promise<{ text(): Promise<string>; url: string; cid?: string }> {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch script ${url}: ${response.statusText}`);\n }\n\n return {\n text: () => response.text(),\n url,\n cid: response.headers.get(\"x-noya-cid\") ?? undefined,\n };\n}\n\nexport function graphToTasks({\n graph,\n state,\n api,\n}: {\n graph: DAGraph<GraphNode>;\n state: PipelineState;\n api: PipelineGraphAPI;\n}) {\n const taskRunner = new TaskRunner<TaskMetadata>();\n\n if (!graph.isAcyclic()) {\n throw new Error(\"Workflow graph has cycles\");\n }\n\n const workflowOutputNode = Array.from(graph.nodes()).find(\n (node) => node.gType === \"block\" && node.type === \"workflowOutput\"\n )!;\n\n function createTaskForNode(node: GraphNode): TaskReference<TaskResult> {\n if (taskRunner.tasks[getGraphNodeStableId(node)]) {\n return TaskRunner.toRef(taskRunner.tasks[getGraphNodeStableId(node)]);\n }\n\n const dependencies = [\n ...graph.getNodeDependencies(getGraphNodeStableId(node)),\n ];\n const dependencyTasks = dependencies.map((depId) => {\n const depNode = graph.getNode(depId)!;\n return createTaskForNode(depNode);\n });\n\n return createTask({\n node,\n api,\n taskRunner,\n state,\n dependencyTaskRefs: dependencyTasks,\n });\n }\n\n const rootTask = createTaskForNode(workflowOutputNode);\n\n return {\n taskRunner,\n rootTask,\n };\n}\n","import {\n Asset,\n Input,\n inputSchema,\n jsonSchema,\n OutputTransform,\n} from \"@noya-app/noya-schemas\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport { Static, Type } from \"@sinclair/typebox\";\n\nexport const rectSchema = Type.Object({\n x: Type.Number(),\n y: Type.Number(),\n width: Type.Number(),\n height: Type.Number(),\n});\n\nexport const transformSchema = Type.Union(\n [\n Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n type: Type.Literal(\"script\"),\n location: Type.Union([Type.Literal(\"state\"), Type.Literal(\"url\")]),\n value: Type.String(),\n }),\n Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n type: Type.Literal(\"jsonPointer\"),\n value: Type.String(),\n }),\n ],\n {\n discriminator: \"type\",\n }\n);\n\n// Common properties for all node types\nconst baseBlockProperties = {\n id: Type.String({ format: \"uuid\", default: \"\" }),\n name: Type.String(),\n} as const;\n\nexport const preferredFileSourceSchema = Type.Union(\n [Type.Literal(\"fileVersion\"), Type.Literal(\"file\")],\n {\n default: \"fileVersion\",\n }\n);\n\nexport const fileBlockSchema = Type.Object({\n ...baseBlockProperties,\n type: Type.Literal(\"file\"),\n fileId: Type.Optional(Type.String()),\n fileVersionId: Type.String(),\n preferredFileSource: preferredFileSourceSchema,\n});\n\nexport const placeholderBlockSchema = Type.Object({\n ...baseBlockProperties,\n type: Type.Literal(\"placeholder\"),\n inputs: Type.Array(inputSchema),\n});\n\nexport const displaySchema = Type.Union([\n Type.Literal(\"canvas\"),\n Type.Literal(\"inspector\"),\n]);\n\nexport type Display = Static<typeof displaySchema>;\n\nexport const dataBlockSchema = Type.Object({\n ...baseBlockProperties,\n type: Type.Literal(\"data\"),\n data: Type.Any(),\n schema: Type.Optional(jsonSchema),\n display: Type.Optional(displaySchema),\n});\n\nexport const secretBlockSchema = Type.Object({\n ...baseBlockProperties,\n type: Type.Literal(\"secret\"),\n secretStableId: Type.String(),\n display: Type.Optional(displaySchema),\n});\n\nexport const pipelineOutputBlockSchema = Type.Object({\n ...baseBlockProperties,\n type: Type.Literal(\"workflowOutput\"),\n inputs: Type.Array(inputSchema),\n});\n\nexport const blockSchema = Type.Union(\n [\n fileBlockSchema,\n dataBlockSchema,\n secretBlockSchema,\n pipelineOutputBlockSchema,\n placeholderBlockSchema,\n ],\n {\n discriminator: \"type\",\n }\n);\n\nexport const connectionSchema = Type.Object({\n id: Type.String({ format: \"uuid\", default: \"\" }),\n sourceBlockId: Type.String(),\n targetBlockId: Type.String(),\n targetInputStableId: Type.String(),\n});\n\nexport const blockArraySchema = Type.Array(blockSchema);\n\nexport const pipelineSchema = Type.Object(\n {\n blocks: blockArraySchema,\n connections: Type.Array(connectionSchema),\n },\n {\n version: 18,\n }\n);\n\nexport const createInitialPipelineState = (): PipelineState => {\n const startId = uuid();\n const endId = uuid();\n const endInputStableId = uuid();\n return {\n blocks: [\n {\n id: endId,\n name: \"End\",\n type: \"workflowOutput\",\n inputs: [\n {\n id: uuid(),\n stableId: endInputStableId,\n name: \"Result\",\n required: true,\n kind: \"file\",\n toolId: null,\n description: null,\n },\n ],\n } satisfies PipelineOutputBlock,\n {\n id: startId,\n name: \"Start\",\n type: \"placeholder\",\n inputs: [],\n } satisfies PlaceholderBlock,\n ],\n connections: [\n {\n id: uuid(),\n sourceBlockId: startId,\n targetBlockId: endId,\n targetInputStableId: endInputStableId,\n },\n ],\n };\n};\n\nexport type Block = Static<typeof blockSchema>;\nexport type FileBlock = Static<typeof fileBlockSchema>;\nexport type DataBlock = Static<typeof dataBlockSchema>;\nexport type SecretBlock = Static<typeof secretBlockSchema>;\nexport type PlaceholderBlock = Static<typeof placeholderBlockSchema>;\nexport type PipelineOutputBlock = Static<typeof pipelineOutputBlockSchema>;\nexport type Connection = Static<typeof connectionSchema>;\nexport type PipelineState = Static<typeof pipelineSchema>;\n\nconst emptyNodeInputs: Input[] = [];\nconst emptyNodeTransforms: OutputTransform[] = [];\n\nexport function getBlockInputs(\n node: Block | undefined,\n api: PipelineGraphAPI\n): Input[] {\n let inputs;\n if (!node) inputs = emptyNodeInputs;\n else if (node.type === \"workflowOutput\") inputs = node.inputs;\n else if (node.type === \"placeholder\") inputs = node.inputs;\n else if (node.type === \"file\") {\n inputs = api.getFileVersionInputs(node.fileVersionId) ?? emptyNodeInputs;\n } else {\n inputs = emptyNodeInputs;\n }\n return inputs.toSorted((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function getBlockTransforms(\n node: Block | undefined,\n api: PipelineGraphAPI\n): OutputTransform[] {\n if (node?.type === \"file\") {\n return (\n api\n .getFileVersionTransforms(node.fileVersionId)\n .toSorted((a, b) => a.order - b.order) ?? emptyNodeTransforms\n );\n }\n return emptyNodeTransforms;\n}\n\ntype BodyBase = {\n env: Record<string, string>;\n args: any[];\n};\n\nexport type CodeBody = BodyBase & {\n type: \"code\";\n code: string;\n};\n\nexport type URLBody = BodyBase & {\n type: \"url\";\n url: string;\n cid?: string;\n};\n\ntype Body = CodeBody | URLBody;\n\nexport type RemoteEvaluateParameters = Body;\n\nexport type Secret = {\n id: string;\n name: string;\n value: string;\n stableId: string;\n};\n\nexport interface PipelineGraphAPI {\n getFileVersionData: (fileVersionId: string) => Promise<any>;\n getFileVersionEnv: (fileVersionId: string) => Promise<Record<string, string>>;\n getFileVersionInputs: (fileVersionId: string) => Input[];\n getFileVersionTransforms: (fileVersionId: string) => OutputTransform[];\n getFileVersionIds: (fileId: string) => string[];\n getFileVersionAssets: (fileVersionId: string) => Promise<Asset[]>;\n getFileSecret: (secretId: string) => Promise<Secret>;\n getFileAssets: (fileId: string) => Promise<Asset[]>;\n evaluateScript: (\n params: RemoteEvaluateParameters,\n log?: (...args: any[]) => void\n ) => Promise<any>;\n fetchScript?: (\n url: string\n ) => Promise<{ text(): Promise<string>; url: string; cid?: string }>;\n cache?: {\n getValue: (key: string) => Promise<Uint8Array>;\n setValue: (key: string, value: Uint8Array) => Promise<void>;\n hash: (value: Uint8Array) => Promise<string>;\n };\n createArtifact?: (uint8Array: Uint8Array) => Promise<string>;\n createFileVersion: (fileId: string) => Promise<any>;\n}\n\nexport function createConnection(\n sourceNode: Block,\n targetBlock: Block,\n targetInput: Input\n): Connection {\n return {\n id: uuid(),\n sourceBlockId: sourceNode.id,\n targetBlockId: targetBlock.id,\n targetInputStableId: targetInput.stableId,\n };\n}\n","/* eslint-disable turbo/no-undeclared-env-vars */\nimport {\n createEvaluateScriptLocally,\n createEvaluateScriptRemotely,\n createFetchFileVersionEnv,\n createPipelineTaskRunner,\n PipelineGraphAPI,\n PipelineState,\n RemoteEvaluateParameters,\n} from \"@noya-app/noya-pipeline\";\nimport { Observable } from \"@noya-app/observable\";\nimport { TaskSnapshot } from \"@noya-app/task-runner\";\nimport type { PipelineStatus } from \"./multiplayer\";\nimport { RPCManager } from \"./rpcManager\";\n\nexport type TaskArtifact = { name: string; size: number; url: string };\n\nexport type TaskMetadata = {\n artifacts: TaskArtifact[];\n};\n\nexport class PipelineManager {\n constructor(public rpcManager: RPCManager) {}\n\n status$ = new Observable<PipelineStatus>(\"idle\");\n\n tasks$ = new Observable<TaskSnapshot<TaskMetadata>[]>([]);\n\n result$ = new Observable<any>(undefined);\n\n async run(parameters: RemoteEvaluateParameters) {\n const response = await this.rpcManager.requestRoute(\"POST /api/evaluate\", {\n body: JSON.stringify(parameters),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n return JSON.parse(response.body).result;\n }\n\n async runScript(\n scriptUrl: string,\n parameters: Pick<RemoteEvaluateParameters, \"args\" | \"env\">\n ) {\n const response = await fetch(scriptUrl);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch script\");\n }\n\n const scriptText = await response.text();\n\n return this.run({\n type: \"code\",\n code: scriptText,\n args: parameters.args,\n env: parameters.env,\n });\n }\n\n async runScriptOnFileState(scriptUrl: string, state: unknown) {\n return await this.runScript(scriptUrl, {\n args: [{ state }],\n env: {},\n });\n }\n\n async runPipeline(pipelineState?: PipelineState) {\n const response = await this.rpcManager.requestRoute(\n \"POST /api/runWorkflow\",\n {\n body: JSON.stringify({\n ...(pipelineState && { pipelineState }),\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n const { result, snapshot } = JSON.parse(response.body);\n return { result, snapshot };\n }\n\n getPipelineGraphAPI(\n options: {\n getFileVersionData: PipelineGraphAPI[\"getFileVersionData\"];\n getFileVersionInputs: PipelineGraphAPI[\"getFileVersionInputs\"];\n getFileVersionTransforms: PipelineGraphAPI[\"getFileVersionTransforms\"];\n getFileVersionIds: PipelineGraphAPI[\"getFileVersionIds\"];\n getFileSecret: PipelineGraphAPI[\"getFileSecret\"];\n getFileVersionAssets: PipelineGraphAPI[\"getFileVersionAssets\"];\n getFileAssets: PipelineGraphAPI[\"getFileAssets\"];\n createFileVersion: PipelineGraphAPI[\"createFileVersion\"];\n } & (\n | {\n executionEnvironment: \"local\";\n }\n | {\n executionEnvironment: \"remote\";\n baseUrl: string;\n }\n )\n ): PipelineGraphAPI {\n return {\n evaluateScript:\n options.executionEnvironment === \"local\"\n ? createEvaluateScriptLocally()\n : createEvaluateScriptRemotely({\n url: process.env.NEXT_PUBLIC_DEV_EVALUATE_SCRIPT_URL!,\n bundlerUrl: process.env.NEXT_PUBLIC_DEV_EVALUATE_SCRIPT_URL!,\n }),\n getFileVersionEnv:\n options.executionEnvironment === \"local\"\n ? () => Promise.resolve({})\n : createFetchFileVersionEnv({\n baseUrl: options.baseUrl,\n ENCRYPTION_KEY: process.env.NEXT_PUBLIC_DEV_ENCRYPTION_KEY!,\n MULTIPLAYER_SHARED_TOKEN:\n process.env.NEXT_PUBLIC_DEV_MULTIPLAYER_SHARED_TOKEN!,\n }),\n getFileVersionData: options.getFileVersionData,\n getFileVersionInputs: options.getFileVersionInputs,\n getFileVersionTransforms: options.getFileVersionTransforms,\n getFileVersionIds: options.getFileVersionIds,\n getFileSecret: options.getFileSecret,\n getFileVersionAssets: options.getFileVersionAssets,\n getFileAssets: options.getFileAssets,\n createArtifact:\n options.executionEnvironment === \"local\"\n ? async (uint8Array) => {\n const blob = new Blob([uint8Array]);\n return URL.createObjectURL(blob);\n }\n : undefined,\n createFileVersion: options.createFileVersion,\n };\n }\n\n async runPipelineLocally(\n pipelineState: PipelineState,\n options: Parameters<typeof this.getPipelineGraphAPI>[0]\n ) {\n const { taskRunner, rootTask } = await createPipelineTaskRunner({\n state: pipelineState,\n api: this.getPipelineGraphAPI(options),\n });\n\n this.status$.set(\"running\");\n\n taskRunner.subscribe(() => {\n this.tasks$.set(taskRunner.getSnapshot());\n });\n\n try {\n const result = await taskRunner.runTask(rootTask);\n\n this.status$.set(\"success\");\n this.result$.set(result);\n return { result, snapshot: taskRunner.getSnapshot() };\n } catch (error) {\n this.status$.set(\"error\");\n\n return { error, snapshot: taskRunner.getSnapshot() };\n }\n }\n}\n","import { MediaMap } from \"@noya-app/noya-schemas\";\nimport { Observable } from \"@noya-app/observable\";\n\nexport type PublishCallback = () => Promise<MediaMap>;\n\nexport class PublishingManager {\n enablePublishing$ = new Observable<boolean>(false);\n\n setPublishingEnabled(enabled: boolean) {\n this.enablePublishing$.set(enabled);\n }\n\n getFilesToPublish?: PublishCallback;\n}\n","import { Emitter } from \"@noya-app/emitter\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport { Observable } from \"@noya-app/observable\";\nimport { Routes } from \"./rpc/routes\";\nimport {\n SerializableRequest,\n SerializableResponse,\n TypedBody,\n UploadProgress,\n} from \"./rpc/types\";\n\nexport type RPCStatus = \"pending\" | \"resolved\" | \"rejected\" | \"streaming\";\n\nexport type RPCResponseMessage = { id: string } & (\n | { type: \"end\"; response: SerializableResponse }\n | { type: \"chunk\"; chunk: string }\n | { type: \"error\"; error: any }\n);\n\ntype RequestOptions = {\n headers?: Record<string, string>;\n body?: string;\n onUploadProgress?: (progress: UploadProgress) => void;\n};\n\ntype StreamingHandlers = {\n onStreamChunk?: (chunk: string) => void;\n onStreamEnd?: () => Promise<void>;\n};\n\n// Helper type to extract route key from method and URL\ntype RouteKey = keyof Routes;\ntype RouteMethod<K extends RouteKey> =\n Routes[K][\"request\"][\"options\"][\"method\"];\ntype RouteURL<K extends RouteKey> = Routes[K][\"request\"][\"url\"];\n\nexport class RPCManager extends Emitter<[SerializableRequest]> {\n debug: boolean;\n\n constructor(options: { isConnected?: boolean; debug?: boolean } = {}) {\n super();\n this.isConnected$ = new Observable<boolean>(options.isConnected ?? false);\n this.debug = options.debug ?? false;\n }\n\n isConnected$: Observable<boolean>;\n\n setIsConnected(connected: boolean) {\n this.isConnected$.set(connected);\n }\n\n requests: Record<\n string,\n {\n request: SerializableRequest;\n status: RPCStatus;\n resolve: (response: SerializableResponse) => void;\n reject: (reason: any) => void;\n onStreamChunk?: (chunk: string) => void;\n onStreamEnd?: () => Promise<void>;\n onUploadProgress?: (progress: UploadProgress) => void;\n }\n > = {};\n\n request = async <K extends keyof Routes>(\n request: Routes[K][\"request\"],\n options?: RequestOptions & StreamingHandlers & { streaming?: boolean }\n ): Promise<Routes[K][\"response\"]> => {\n if (this.debug) {\n console.info(\"[rpcManager] request waiting for connection\");\n }\n\n await this.isConnected$.waitFor(true);\n\n if (this.debug) {\n console.info(\"[rpcManager] request\", request);\n }\n\n const id = uuid();\n const requestWithId = { ...request, id };\n\n const { promise, resolve, reject } =\n Promise.withResolvers<Routes[K][\"response\"]>();\n\n this.requests[id] = {\n request: requestWithId,\n status: \"pending\",\n resolve: resolve as (response: SerializableResponse) => void,\n reject,\n onStreamChunk: options?.onStreamChunk,\n onStreamEnd: options?.onStreamEnd,\n onUploadProgress: options?.onUploadProgress,\n };\n\n this.emit(requestWithId);\n\n return promise;\n };\n\n requestRoute = async <K extends RouteKey>(\n route: K,\n { body, headers, onUploadProgress }: RequestOptions = {}\n ): Promise<Routes[K][\"response\"]> => {\n const [method, url] = route.split(\" \") as [RouteMethod<K>, RouteURL<K>];\n\n return this.request<K>(\n {\n url,\n options: {\n method,\n ...(body ? { body } : {}),\n ...(headers ? { headers } : {}),\n },\n } as Routes[K][\"request\"],\n {\n onUploadProgress,\n }\n );\n };\n\n requestStreamingRoute = async <K extends RouteKey>(\n route: K,\n {\n body,\n headers,\n onStreamChunk,\n onStreamEnd,\n }: RequestOptions & StreamingHandlers\n ): Promise<Routes[K][\"response\"]> => {\n const [method, url] = route.split(\" \") as [RouteMethod<K>, RouteURL<K>];\n\n return this.request<K>(\n {\n url,\n options: {\n method,\n ...(body ? { body } : {}),\n ...(headers ? { headers } : {}),\n },\n streaming: true,\n } as Routes[K][\"request\"],\n {\n onStreamChunk,\n onStreamEnd,\n }\n );\n };\n\n handleMessage = (message: RPCResponseMessage) => {\n const request = this.requests[message.id];\n\n if (this.debug) {\n console.info(\"[rpcManager] handleMessage\", message);\n }\n\n if (request) {\n if (message.type === \"chunk\") {\n request.status = \"streaming\";\n request.onStreamChunk?.(message.chunk!);\n } else if (message.type === \"end\") {\n request.status = \"resolved\";\n if (request.onStreamEnd) {\n request.onStreamEnd().then(() => {\n request.resolve(message.response!);\n });\n } else {\n request.resolve(message.response!);\n }\n } else if (message.type === \"error\") {\n request.status = \"rejected\";\n request.reject(message.error);\n }\n } else {\n console.error(\n \"Response without corresponding request\",\n message,\n this.requests\n );\n }\n };\n\n getResponseBody = <\n R extends { body: TypedBody<any>; headers: Record<string, string> },\n >(\n response: R\n ): NonNullable<R[\"body\"][\"__type\"]> => {\n const contentType =\n \"content-type\" in response.headers\n ? response.headers[\"content-type\"]\n : null;\n\n if (contentType?.includes(\"application/json\")) {\n return JSON.parse(response.body);\n }\n\n return response.body;\n };\n}\n","import { Observable } from \"@noya-app/observable\";\nimport { RPCManager } from \"./rpcManager\";\n\nexport type Secret = {\n id: string;\n stableId: string;\n name: string;\n // value: string;\n};\n\nexport type SecretManagerOptions = {\n initialSecrets?: Secret[];\n};\n\nexport class SecretManager {\n constructor(\n public rpcManager: RPCManager,\n options: SecretManagerOptions\n ) {\n if (!options.initialSecrets) return;\n\n this.secrets$.set(options.initialSecrets);\n this.isInitialized$.set(true);\n }\n\n secrets$ = new Observable<Secret[]>([]);\n\n isInitialized$ = new Observable<boolean>(false);\n\n async createSecret(id: string | null, name: string, value: string) {\n const response = await this.rpcManager.requestRoute(\"POST /api/secrets\", {\n body: JSON.stringify({ id, name, value }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n const newSecret = this.rpcManager.getResponseBody(response);\n return newSecret;\n }\n\n async deleteSecret(id: string) {\n return await this.rpcManager.requestRoute(\"DELETE /api/secrets\", {\n body: JSON.stringify({ id }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n}\n","import { Observable } from \"@noya-app/observable\";\nimport { Task } from \"./tasks\";\n\nexport class TaskManager {\n constructor(public options: { maxTasks?: number } = {}) {}\n\n tasks$ = new Observable<Task[]>([]);\n\n setTasks(tasks: Task[]) {\n const old = this.tasks$.get();\n\n const newIds = new Set(tasks.map((t) => t.id));\n\n // merge old and new tasks, preferring new tasks\n const unchanged = old.filter((t) => !newIds.has(t.id));\n\n const merged = [...unchanged, ...tasks];\n\n this.tasks$.set(merged.slice(0, this.options.maxTasks ?? 20));\n }\n\n getTasks() {\n return this.tasks$.get();\n }\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { elementShouldHandleOwnShortcut, handleKeyboardEvent } from \"./events\";\nimport { KeyShortcuts } from \"./keyMap\";\nimport { getCurrentPlatform } from \"./platform\";\n\nexport const KEYBOARD_SHORTCUT_PASSTHROUGH_CLASS = \"ignore-global-events\";\n\ntype KeyEventName = \"keydown\" | \"keyup\" | \"keypress\";\n\ninterface KeyboardEventListener {\n addEventListener: (\n name: string,\n handler: (keyboardEvent: KeyboardEvent) => void\n ) => void;\n removeEventListener: (\n name: string,\n handler: (keyboardEvent: KeyboardEvent) => void\n ) => void;\n}\n\ninterface KeyboardShortcutOptions {\n eventName?: KeyEventName;\n}\n\nconst listenerElement: KeyboardEventListener | null =\n typeof window !== \"undefined\" ? window : null;\nconst platformName =\n typeof navigator !== \"undefined\" ? getCurrentPlatform(navigator) : \"key\";\n\nexport function useKeyboardShortcuts(\n shortcuts: KeyShortcuts,\n options: KeyboardShortcutOptions = {}\n) {\n const eventName = options.eventName ?? \"keydown\";\n\n const shortcutsRef = useRef(shortcuts);\n\n useEffect(() => {\n shortcutsRef.current = shortcuts;\n });\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n const invokedWithinInput = elementShouldHandleOwnShortcut(event.target);\n\n handleKeyboardEvent(event, platformName, shortcutsRef.current, {\n invokedWithinInput,\n });\n };\n\n listenerElement?.addEventListener(eventName, handler);\n\n return () => {\n listenerElement?.removeEventListener(eventName, handler);\n };\n }, [eventName]);\n}\n","export type PlatformName = 'mac' | 'win' | 'linux' | 'key';\n\nexport const getCurrentPlatform = (navigator?: {\n platform: string;\n}): PlatformName =>\n typeof navigator === 'undefined'\n ? 'key'\n : /Mac/.test(navigator.platform)\n ? 'mac'\n : /Win/.test(navigator.platform)\n ? 'win'\n : /Linux|X11/.test(navigator.platform)\n ? 'linux'\n : 'key';\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n // On IE, shift effect is never included in `.key`.\n var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { MenuItem, SelectableMenuItem } from \"@noya-app/noya-designsystem\";\nimport { defineTree } from \"tree-visit\";\n\nexport const MenuItemTree = defineTree<MenuItem<string>>((node) => {\n return node.type === \"submenu\" ? node.items : [];\n});\n\nexport type ShortcutMenuItem<T extends string> = SelectableMenuItem<T> & {\n shortcut: string;\n};\n\nexport const getSelectableMenuItems = <T extends string>(\n menuItems: MenuItem<T>[]\n): SelectableMenuItem<T>[] => {\n return menuItems\n .flatMap((items) => MenuItemTree.flat(items))\n .flatMap((item) => {\n if (item.type) return [];\n return [item as SelectableMenuItem<T>];\n });\n};\n\nexport const getShortcutMenuItems = <T extends string>(\n menuItems: MenuItem<T>[]\n): ShortcutMenuItem<T>[] => {\n return getSelectableMenuItems(menuItems).filter(\n (item): item is ShortcutMenuItem<T> => !!item.shortcut\n );\n};\n","\"use client\";\n\nimport { AIToolDefinition } from \"@noya-app/state-manager\";\nimport { useEffect } from \"react\";\nimport { useAIManager } from \"./NoyaStateContext\";\nimport { useObservable } from \"./useObservable\";\n\nexport function useRegisterAITool(tool: AIToolDefinition) {\n const aiManager = useAIManager();\n\n useEffect(() => {\n return aiManager.registerTool(tool);\n }, [aiManager, tool]);\n}\n\nexport function useCallableAITools() {\n const aiManager = useAIManager();\n return useObservable(aiManager.callableTools$);\n}\n","\"use client\";\n\nimport { MenuItem } from \"@noya-app/noya-designsystem\";\nimport { Input, OutputTransform } from \"@noya-app/noya-schemas\";\nimport {\n GetAtPath,\n Observable,\n ObservableOptions,\n PathKey,\n} from \"@noya-app/observable\";\nimport { useStableCallback } from \"@noya-app/react-utils\";\nimport {\n ConnectedUsersManager,\n CreateParams,\n EphemeralUserDataManager,\n MultiplayerPatchMetadata,\n MultiplayerStateManager,\n NoyaManager,\n PublishCallback,\n SafeEval,\n StateManagerOptions,\n Static,\n TSchema,\n} from \"@noya-app/state-manager\";\nimport React, {\n createContext,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport {\n AppTheme,\n AppViewType,\n useNoyaState,\n UseNoyaStateOptions,\n} from \"./noyaApp\";\nimport { useObservable } from \"./useObservable\";\n\nexport interface NoyaStateProviderProps<\n S,\n M extends object,\n E extends object,\n MenuT extends string,\n> extends Omit<\n UseNoyaStateOptions<S, M, E, MenuT>,\n \"schema\" | \"mergeHistoryEntries\"\n > {\n children: React.ReactNode;\n initialState?: S;\n fallback?: React.ReactNode;\n}\n\nexport type AnyNoyaStateContextValue = {\n noyaManager: NoyaManager<any, any, any, any>;\n theme: AppTheme;\n viewType: AppViewType;\n};\n\nexport const AnyNoyaStateContext = createContext<\n AnyNoyaStateContextValue | undefined\n>(undefined);\n\nexport function useAnyNoyaStateContext() {\n const value = useContext(AnyNoyaStateContext);\n\n if (!value) {\n throw new Error(\n \"useNoyaStateContext must be used within a NoyaStateProvider\"\n );\n }\n\n return value;\n}\n\nexport function useAnyNoyaManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n return noyaManager as NoyaManager<any, any, any, any>;\n}\n\nexport function useColorScheme() {\n const { theme } = useAnyNoyaStateContext();\n return theme;\n}\n\nexport function useViewType() {\n const { viewType } = useAnyNoyaStateContext();\n return viewType;\n}\n\nexport function useAssets() {\n const { noyaManager } = useAnyNoyaStateContext();\n return useObservable(noyaManager.assetManager.assets$);\n}\n\nexport function useAsset(id: string | undefined) {\n const { noyaManager } = useAnyNoyaStateContext();\n const observable = useMemo(\n () =>\n noyaManager.assetManager.assets$.map((assets) =>\n assets.find((a) => a.id === id)\n ),\n [noyaManager, id]\n );\n return useObservable(observable);\n}\n\nexport function useAssetManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);\n return useMemo(\n () => ({\n create: noyaManager.assetManager.create,\n delete: noyaManager.assetManager.delete,\n isInitialized,\n }),\n [noyaManager, isInitialized]\n );\n}\n\nexport function useAIManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n return noyaManager.aiManager;\n}\n\nexport function useSecretManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n return noyaManager.secretManager;\n}\n\nexport function useSecrets() {\n const { noyaManager } = useAnyNoyaStateContext();\n return useObservable(noyaManager.secretManager.secrets$);\n}\n\nexport function useSecret(name: string) {\n const { noyaManager } = useAnyNoyaStateContext();\n\n return useObservable(\n noyaManager.secretManager.secrets$,\n useCallback((secrets) => secrets.find((s) => s.name === name), [name])\n );\n}\n\nexport function useInputs() {\n const { noyaManager } = useAnyNoyaStateContext();\n return useObservable(noyaManager.ioManager.inputs$);\n}\n\nexport function useOutputTransforms() {\n const { noyaManager } = useAnyNoyaStateContext();\n return useObservable(noyaManager.ioManager.outputTransforms$);\n}\n\nexport function useIOManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n return noyaManager.ioManager;\n}\n\nexport function usePublish(callback: PublishCallback) {\n const { noyaManager } = useAnyNoyaStateContext();\n const stableCallback = useStableCallback(callback);\n\n useEffect(() => {\n noyaManager.publishingManager.setPublishingEnabled(true);\n noyaManager.publishingManager.getFilesToPublish = stableCallback;\n\n return () => {\n noyaManager.publishingManager.setPublishingEnabled(false);\n noyaManager.publishingManager.getFilesToPublish = undefined;\n };\n }, [noyaManager, stableCallback]);\n}\n\nexport function useIsInitialized() {\n const { noyaManager, viewType } = useAnyNoyaStateContext();\n\n const isInitializedObservable = useMemo(\n () =>\n Observable.combine(\n [\n ...(viewType === \"preview\"\n ? []\n : [noyaManager.multiplayerStateManager.isInitialized$]),\n noyaManager.secretManager.isInitialized$,\n noyaManager.assetManager.isInitialized$,\n ],\n (values) => values.every((v) => v)\n ),\n [noyaManager, viewType]\n );\n\n return useObservable(isInitializedObservable);\n}\n\nexport function usePipelineManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n return noyaManager.pipelineManager;\n}\n\nexport const ConnectedUsersContext = createContext<\n ConnectedUsersManager | undefined\n>(undefined);\n\nexport function useConnectedUsersManager() {\n return useContext(ConnectedUsersContext);\n}\n\nexport const AnyEphemeralUserDataManagerContext = createContext<\n EphemeralUserDataManager<object> | undefined\n>(undefined);\n\nexport function useAnyEphemeralUserData() {\n return useContext(AnyEphemeralUserDataManagerContext);\n}\n\nexport function useCurrentUserId() {\n const connectedUsersManager = useConnectedUsersManager();\n return useObservable(connectedUsersManager?.currentUserId$);\n}\n\nexport const FallbackUntilInitialized = ({\n children,\n fallback,\n}: {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}) => {\n const isInitialized = useIsInitialized();\n\n return isInitialized ? children : fallback ?? null;\n};\n\nexport function createNoyaContext<\n Schema extends TSchema,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n>({\n schema,\n mergeHistoryEntries,\n outputTransforms,\n inputs,\n safeEval,\n}: {\n schema: Schema;\n mergeHistoryEntries?: StateManagerOptions<\n Static<Schema>,\n M & Pick<MultiplayerPatchMetadata, \"name\" | \"timestamp\">\n >[\"mergeHistoryEntries\"];\n safeEval?: SafeEval;\n outputTransforms?: CreateParams<OutputTransform>[];\n inputs?: CreateParams<Input>[];\n}) {\n type S = Static<Schema>;\n type PartialM = Partial<\n M & Pick<MultiplayerPatchMetadata, \"name\" | \"timestamp\">\n >;\n\n const NoyaStateContext = AnyNoyaStateContext as React.Context<\n NoyaManager<S, M, E> | undefined\n >;\n\n const EphemeralUserDataManagerContext =\n AnyEphemeralUserDataManagerContext as React.Context<\n EphemeralUserDataManager<E> | undefined\n >;\n\n function NoyaStateProvider({\n children,\n initialState,\n ...options\n }: NoyaStateProviderProps<S, M, E, MenuT>) {\n const [, , { noyaManager, theme, viewType }] = useNoyaState<S, M, E, MenuT>(\n initialState,\n {\n schema,\n mergeHistoryEntries,\n outputTransforms,\n inputs,\n safeEval,\n ...(options as any),\n }\n );\n\n const contextValue = useMemo(\n () => ({\n noyaManager,\n theme,\n viewType,\n }),\n [noyaManager, theme, viewType]\n );\n\n return (\n <AnyNoyaStateContext.Provider value={contextValue}>\n <ConnectedUsersContext.Provider\n value={noyaManager.connectedUsersManager}\n >\n <EphemeralUserDataManagerContext.Provider\n value={noyaManager.ephemeralUserDataManager}\n >\n {options.fallback !== undefined ? (\n <FallbackUntilInitialized fallback={options.fallback}>\n {children}\n </FallbackUntilInitialized>\n ) : (\n children\n )}\n </EphemeralUserDataManagerContext.Provider>\n </ConnectedUsersContext.Provider>\n </AnyNoyaStateContext.Provider>\n );\n }\n\n function useValue(): S;\n function useValue<A>(\n selector: (value: S) => A,\n options?: Pick<ObservableOptions, \"isEqual\">\n ): A;\n function useValue<P extends PathKey[] | string>(path: P): GetAtPath<S, P>;\n function useValue(\n path?: PathKey[] | string | ((value: S) => any),\n options?: Pick<ObservableOptions, \"isEqual\">\n ) {\n const { noyaManager } = useAnyNoyaStateContext();\n\n let actualPath: PathKey[] | string =\n typeof path === \"function\" || !path ? \"\" : path;\n\n const mappedObservable = useMemo(() => {\n if (typeof path === \"function\") {\n return noyaManager.multiplayerStateManager.optimisticState$.map(path, {\n isEqual: options?.isEqual,\n });\n }\n return noyaManager.multiplayerStateManager.optimisticState$;\n }, [noyaManager, path, options?.isEqual]);\n\n const value = useObservable(mappedObservable, actualPath);\n\n return value;\n }\n\n function useSetValue(): (\n ...args:\n | [metadata: PartialM, value: SetStateAction<S>]\n | [value: SetStateAction<S>]\n ) => void;\n function useSetValue<P extends PathKey[] | string>(\n path: P\n ): (\n ...args:\n | [metadata: PartialM, value: SetStateAction<GetAtPath<S, P>>]\n | [value: SetStateAction<GetAtPath<S, P>>]\n ) => void;\n function useSetValue<P extends PathKey[] | string>(path?: P) {\n const { noyaManager } = useAnyNoyaStateContext();\n\n const setValue = useCallback(\n (\n ...args:\n | [metadata: PartialM, value: SetStateAction<GetAtPath<S, P>>]\n | [value: SetStateAction<GetAtPath<S, P>>]\n ): void => {\n const [metadata, value] = args.length === 2 ? args : [{}, args[0]];\n\n noyaManager.multiplayerStateManager.setStateAtPath(\n metadata,\n (path ?? \"\") as P,\n value as never\n );\n },\n [noyaManager, path]\n );\n\n return setValue;\n }\n\n function useValueState(): [\n S,\n (\n ...args:\n | [metadata: PartialM, value: SetStateAction<S>]\n | [value: SetStateAction<S>]\n ) => void,\n ];\n function useValueState<A>(\n selector: (value: S) => A,\n options?: ObservableOptions\n ): [\n A,\n (\n ...args:\n | [metadata: PartialM, value: SetStateAction<S>]\n | [value: SetStateAction<S>]\n ) => void,\n ];\n function useValueState<P extends PathKey[] | string>(\n path?: P\n ): [\n GetAtPath<S, P>,\n (\n ...args:\n | [metadata: PartialM, value: SetStateAction<GetAtPath<S, P>>]\n | [value: SetStateAction<GetAtPath<S, P>>]\n ) => void,\n ];\n function useValueState<P extends PathKey[] | string>(\n ...args: [P?] | [selector: (value: S) => any, options?: ObservableOptions]\n ) {\n const [selector, options, path] =\n args.length >= 1 && typeof args[0] === \"function\"\n ? [args[0], args[1], undefined]\n : [undefined, undefined, args[0] as P | undefined];\n\n const value = useValue((selector ?? path ?? \"\") as any, options);\n const setValue = useSetValue(path ?? \"\");\n return [value, setValue];\n }\n\n function useStateManager() {\n const { noyaManager } = useAnyNoyaStateContext();\n\n return noyaManager.multiplayerStateManager as MultiplayerStateManager<\n S,\n PartialM\n >;\n }\n\n function useEphemeralUserDataManager() {\n const ephemeralUserData = useContext(EphemeralUserDataManagerContext);\n\n if (!ephemeralUserData) {\n throw new Error(\n \"useEphemeralUserData must be used within a NoyaStateProvider\"\n );\n }\n\n return ephemeralUserData;\n }\n\n function useNoyaManager() {\n return useAnyNoyaStateContext().noyaManager as NoyaManager<\n S,\n PartialM,\n E,\n MenuT\n >;\n }\n\n function useLeftMenuItems() {\n const { menuManager } = useNoyaManager();\n\n return useObservable(menuManager.leftMenuItems$);\n }\n\n function useSetLeftMenuItems(leftMenuItems?: MenuItem<MenuT>[]) {\n const { menuManager } = useNoyaManager();\n\n useEffect(() => {\n if (leftMenuItems) {\n menuManager.setLeftMenuItems(leftMenuItems);\n }\n }, [menuManager, leftMenuItems]);\n }\n\n function useRightMenuItems() {\n const { menuManager } = useNoyaManager();\n\n return useObservable(menuManager.rightMenuItems$);\n }\n\n function useSetRightMenuItems(rightMenuItems?: MenuItem<MenuT>[]) {\n const { menuManager } = useNoyaManager();\n\n useEffect(() => {\n if (rightMenuItems) {\n menuManager.setRightMenuItems(rightMenuItems);\n }\n }, [menuManager, rightMenuItems]);\n }\n\n function useHandleMenuItem(callback: (type: MenuT) => void) {\n const { menuManager } = useNoyaManager();\n\n useEffect(() => {\n return menuManager.addListener(callback);\n }, [menuManager, callback]);\n }\n\n function useOnSelectMenuItemCallback(): (type: MenuT) => void {\n const { menuManager } = useNoyaManager();\n\n return useCallback((type: MenuT) => menuManager.emit(type), [menuManager]);\n }\n\n function useMenu(options: {\n leftMenuItems?: MenuItem<MenuT>[];\n rightMenuItems?: MenuItem<MenuT>[];\n onSelectMenuItem?: (type: MenuT) => void;\n }) {\n const { leftMenuItems, rightMenuItems, onSelectMenuItem } = options;\n\n useSetLeftMenuItems(leftMenuItems);\n useSetRightMenuItems(rightMenuItems);\n\n const noop = useCallback(() => {}, []);\n useHandleMenuItem(onSelectMenuItem ?? noop);\n }\n\n return {\n Context: NoyaStateContext,\n Provider: NoyaStateProvider,\n useValue,\n useSetValue,\n useValueState,\n useStateManager,\n useEphemeralUserDataManager,\n useLeftMenuItems,\n useSetLeftMenuItems,\n useRightMenuItems,\n useSetRightMenuItems,\n useHandleMenuItem,\n useOnSelectMenuItemCallback,\n useNoyaManager,\n useMenu,\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useSize } from \"../hooks/useSize\";\n\ntype Size = { width: number; height: number };\n\nconst style: React.CSSProperties = {\n display: \"flex\",\n flex: \"1 0 0\",\n flexDirection: \"column\",\n};\n\ninterface Props {\n children: (size: Size) => React.ReactNode;\n className?: string;\n}\n\nexport const AutoSizer = React.memo(function AutoSizer({\n children,\n className,\n}: Props) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize.width > 0 &&\n containerSize.height > 0 &&\n children(containerSize)}\n </div>\n );\n});\n\ninterface SingleDimensionAutoSizerProps {\n children: (size: number) => React.ReactNode;\n dimension: \"width\" | \"height\";\n className?: string;\n}\n\nexport const SingleDimensionAutoSizer = React.memo(\n function SingleDimensionAutoSizer({\n children,\n dimension,\n className,\n }: SingleDimensionAutoSizerProps) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef, dimension);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize[dimension] > 0 &&\n children(containerSize[dimension])}\n </div>\n );\n }\n);\n","// MIT License\n//\n// Copyright (c) 2020 Modulz\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// https://github.com/radix-ui/primitives/blob/f3de622e944785d01eb6041249ca1645f79ce102/packages/react/utils/src/useSize.tsx\n\n/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from \"react\";\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport function useSize(\n /** A reference to the element whose size to observe */\n refToObserve: React.RefObject<HTMLElement | SVGElement | null>,\n dimensions: \"both\" | \"width\" | \"height\" = \"both\"\n) {\n const [size, setSize] = React.useState<Size | undefined>(undefined);\n\n React.useEffect(() => {\n if (refToObserve.current) {\n const elementToObserve = refToObserve.current;\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) {\n return;\n }\n\n const entry = entries[0];\n let width: number;\n let height: number;\n\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry)\n ? borderSizeEntry[0]\n : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate a rect ourselves to get the correct border box.\n const rect = elementToObserve.getBoundingClientRect();\n width = rect.width;\n height = rect.height;\n }\n\n setSize((currentSize) => {\n if (\n currentSize &&\n (currentSize.width === width || dimensions === \"height\") &&\n (currentSize.height === height || dimensions === \"width\")\n ) {\n return currentSize;\n }\n\n return { width, height };\n });\n });\n\n resizeObserver.observe(elementToObserve, { box: \"border-box\" });\n\n return () => {\n setSize(undefined);\n resizeObserver.unobserve(elementToObserve);\n };\n }\n return;\n }, [refToObserve, dimensions]);\n\n return size;\n}\n","\"use client\";\n\nimport React, { DragEvent, ReactNode, useCallback, useRef } from \"react\";\nimport { useFileDropTarget } from \"../hooks/useFileDropTarget\";\nimport { memoGeneric } from \"../utils/reactGenerics\";\n\nexport type OffsetPoint = {\n offsetX: number;\n offsetY: number;\n};\n\nexport type TypedFile<T> = File & { type: T };\n\nexport function isSupportedFile<T extends string>(\n file: File,\n supportedFileTypes: T[]\n): file is TypedFile<T> {\n return (\n supportedFileTypes.includes(file.type as T) ||\n (file.type === \"\" && file.name.endsWith(\".sketch\"))\n );\n}\n\ntype Props<T extends string> = {\n children: ReactNode | ((isActive: boolean) => ReactNode);\n onDropFiles: (file: TypedFile<T>[], offsetPoint: OffsetPoint) => void;\n supportedFileTypes: T[];\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">;\n\nexport const FileDropTarget = memoGeneric(function FileDropTarget<\n T extends string,\n>({ children, onDropFiles, supportedFileTypes, ...props }: Props<T>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const handleFile = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n\n const offsetPoint = {\n offsetX: event.nativeEvent.offsetX,\n offsetY: event.nativeEvent.offsetY,\n };\n\n const unsupportedTypes = Array.from(event.dataTransfer.files).flatMap(\n (file) => {\n if (!isSupportedFile(file, supportedFileTypes)) {\n return [file.type];\n } else {\n return [];\n }\n }\n );\n\n if (unsupportedTypes.length > 0) {\n alert(\n `Files of type ${unsupportedTypes.join(\n \", \"\n )} aren't supported. The following types are supported: ${supportedFileTypes.join(\n \", \"\n )}`\n );\n }\n\n const files = Array.from(event.dataTransfer.files).flatMap((file) =>\n isSupportedFile(file, supportedFileTypes) ? [file] : []\n );\n\n onDropFiles(files, offsetPoint);\n },\n [onDropFiles, supportedFileTypes]\n );\n\n const { dropTargetProps, isDropTargetActive } = useFileDropTarget(\n ref,\n handleFile\n );\n\n return (\n <div ref={ref} {...dropTargetProps} {...props}>\n {typeof children === \"function\" ? children(isDropTargetActive) : children}\n </div>\n );\n});\n","\"use client\";\n\nimport { DragEvent, useCallback, useState } from \"react\";\n\nexport function useFileDropTarget(\n ref: React.RefObject<HTMLDivElement | null>,\n dropEvent?: (event: DragEvent) => void\n) {\n const [isDropTargetActive, setIsDropTargetActive] = useState(false);\n\n const handleDragOver = useCallback((event: DragEvent) => {\n event.preventDefault();\n }, []);\n\n const handleDragEnter = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(true);\n }\n },\n [ref]\n );\n\n const handleDragLeave = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(false);\n }\n },\n [ref]\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n dropEvent?.(event);\n setIsDropTargetActive(false);\n },\n [dropEvent]\n );\n\n if (!dropEvent) {\n return {\n dropTargetProps: {},\n isDropTargetActive,\n };\n }\n\n return {\n dropTargetProps: {\n onDragOver: handleDragOver,\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n isDropTargetActive,\n };\n}\n","import React, { forwardRef, memo } from \"react\";\n\nfunction _memoGeneric<A, B>(\n _Component: (props: A) => B\n): (props: A) => React.ReactElement<any> | null {\n throw new Error(\"Not implemented\");\n}\n\nfunction _forwardRefGeneric<T, P = {}>(\n _render: (props: P, ref: React.ForwardedRef<T>) => React.ReactElement<any> | null\n): (props: P & React.RefAttributes<T>) => React.ReactElement<any> | null {\n throw new Error(\"Not implemented\");\n}\n\nexport const memoGeneric = memo as typeof _memoGeneric;\nexport const forwardRefGeneric = forwardRef as typeof _forwardRefGeneric;\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport type UseControlledOrUncontrolledParameters<\n TState,\n TArgs extends any[] = [],\n> = {\n defaultValue: TState;\n value?: TState;\n onChange?: (value: TState, ...args: TArgs) => void;\n};\n\n// used for readonly controlled values\nconst noop = () => {};\n\nexport function useControlledOrUncontrolled<TState>(parameters: {\n defaultValue: TState;\n value?: TState;\n onChange?: React.Dispatch<React.SetStateAction<TState>>;\n}): [TState, React.Dispatch<React.SetStateAction<TState>>];\nexport function useControlledOrUncontrolled<TState, TArgs extends any[] = []>(\n parameters: UseControlledOrUncontrolledParameters<TState, TArgs>\n): [TState, (value: TState, ...args: TArgs) => void];\nexport function useControlledOrUncontrolled<TState, TArgs extends any[] = []>({\n defaultValue,\n value,\n onChange,\n}: UseControlledOrUncontrolledParameters<TState, TArgs>) {\n const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n\n const setValue = useCallback(\n (value: TState, ...args: TArgs) => {\n setInternalValue(value);\n onChange?.(value, ...args);\n },\n [onChange]\n );\n\n if (value !== undefined) {\n return [value, onChange ?? noop] as const;\n }\n\n return [internalValue, setValue] as const;\n}\n","\"use client\";\n\nimport { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useState } from \"react\";\n\n/**\n * Memoize an array using deep equality comparison (by converting to JSON).\n */\nexport function useDeepMemo<T>(value: T) {\n const [_value, setValue] = useState(value);\n\n if (!isDeepEqual(_value, value)) {\n setValue(value);\n }\n\n return _value;\n}\n","\"use client\";\n\nimport { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport const useDeepState: typeof useState = (\n ...args: Parameters<typeof useState>\n) => {\n const [state, _setState] = useState(...args);\n\n const setState = useCallback(function updater(updated: typeof state) {\n _setState((current) => {\n if (isDeepEqual(current, updated)) return current;\n return updated;\n });\n }, []);\n\n return useMemo(() => [state, setState], [state, setState]);\n};\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { PromiseState } from \"../utils/PromiseState\";\nimport { ResponseEncoding, fetchData } from \"../utils/fetchData\";\n\nexport function useFetch<T>(\n url: string,\n encoding: ResponseEncoding\n): PromiseState<T> {\n const [state, setState] = useState<PromiseState<T>>({ type: \"pending\" });\n\n useEffect(() => {\n let isStale = false;\n\n async function getInfo() {\n try {\n const data = await fetchData<T>(url, encoding as any);\n\n if (isStale) return;\n\n setState({ type: \"success\", value: data });\n } catch (error) {\n if (isStale) return;\n\n setState({ type: \"failure\", value: error as Error });\n }\n }\n\n getInfo();\n\n return () => {\n isStale = true;\n };\n }, [url, encoding]);\n\n return state;\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport function useIsMounted() {\n const isMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n}\n","import * as React from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n","\"use client\";\n\nimport { SetStateAction, useCallback, useLayoutEffect, useRef } from \"react\";\n\n/**\n * Returns an accessor function that returns the latest value passed to the hook.\n *\n * The value is only updated after the component has rendered, so it is safe to use in event handlers.\n * This is useful for preventing unnecessary re-renders when a value changes frequently,\n * while still providing access to the latest value in event handlers.\n */\nexport function useLateReference<T>(value: T): () => T {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n return useCallback(() => valueRef.current, []);\n}\n\nexport function useLateReferenceState<T>(\n value: T,\n setValue: (value: T) => void\n): [() => T, (value: SetStateAction<T>) => void] {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const getValue = useCallback(() => valueRef.current, []);\n\n const actualSetValue = useCallback(\n (value: SetStateAction<T>) => {\n if (value instanceof Function) {\n const newValue = value(valueRef.current);\n valueRef.current = newValue;\n setValue(newValue);\n } else {\n valueRef.current = value;\n setValue(value);\n }\n },\n [setValue]\n );\n\n return [getValue, actualSetValue] as const;\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\n\nexport function useLazyValue<T>(f: () => T): T {\n const didInitialize = useRef(false);\n const value = useRef<T | undefined>(undefined);\n\n if (!didInitialize.current) {\n didInitialize.current = true;\n\n value.current = f();\n }\n\n return value.current!;\n}\n","import { useCallback } from \"react\";\nimport { assignRef } from \"../utils/assignRef\";\n\nexport function useMergeRefs<T>(\n ref: React.ForwardedRef<T>,\n anotherRef: React.ForwardedRef<T>\n) {\n return useCallback(\n (value: T) => {\n assignRef(ref, value);\n assignRef(anotherRef, value);\n },\n [ref, anotherRef]\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useLazyValue } from \"./useLazyValue\";\n\nexport function useMutableState<T extends object>(\n valueOrInitializer: T | (() => T)\n) {\n const mutableValue = useLazyValue(() =>\n typeof valueOrInitializer === \"function\"\n ? valueOrInitializer()\n : valueOrInitializer\n );\n\n // We create a proxy wrapper in order to re-render on changes\n const [wrappedValue, setWrappedValue] = useState(\n () => new Proxy(mutableValue, {})\n );\n\n const updateValue = useCallback(\n (updater: (value: T) => void) => {\n updater(mutableValue);\n\n setWrappedValue(new Proxy(mutableValue, {}));\n },\n // The mutable value is a dependency to satisfy eslint,\n // but should never change identity\n [mutableValue]\n );\n\n return useMemo(\n () => [wrappedValue, updateValue] as const,\n [updateValue, wrappedValue]\n );\n}\n","\"use client\";\n\nimport {\n SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ClientStorage } from \"../utils/ClientStorage\";\n\nfunction getCurrentValue<T, K extends string = string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue?: T\n): T | null {\n return (storage.getItem(storageKey) as T | null) ?? defaultValue ?? null;\n}\n\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K\n): readonly [T | null, (newValue: SetStateAction<T | null>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): readonly [T, (newValue: SetStateAction<T>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(storage: ClientStorage<K>, storageKey: K, defaultValue?: T) {\n const [state, setState] = useState<T | null>(() =>\n getCurrentValue(storage, storageKey, defaultValue)\n );\n\n useEffect(() => {\n const newValue = getCurrentValue(storage, storageKey, defaultValue);\n setState(newValue);\n }, [defaultValue, storage, storageKey]);\n\n const setValue = useCallback(\n (action: SetStateAction<T | null>) => {\n const newValue =\n typeof action === \"function\"\n ? action(getCurrentValue(storage, storageKey, defaultValue))\n : action;\n storage.setItem(storageKey, newValue);\n setState(newValue);\n },\n [defaultValue, storage, storageKey]\n );\n\n // Listen for changes to localStorage from other tabs\n useEffect(() => {\n const dispose = storage.addListener(storageKey, (newValue) => {\n setState(newValue as T | null);\n });\n\n return () => dispose();\n }, [storage, storageKey]);\n\n return useMemo(() => [state, setValue] as const, [setValue, state]);\n}\n\nexport function usePersistentStateObject<T extends object, K extends string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): [T, (newValue: SetStateAction<T>) => void] {\n const [state, setState] = usePersistentStateString<string, K>(\n storage,\n storageKey,\n JSON.stringify(defaultValue)\n );\n\n const parsedState = useMemo(() => {\n try {\n return JSON.parse(state);\n } catch {\n return defaultValue;\n }\n }, [state, defaultValue]);\n\n return useMemo(\n () => [\n parsedState,\n (action) => {\n setState((prev) => {\n const parsedPrev = JSON.parse(prev);\n\n const newValue =\n typeof action === \"function\" ? action(parsedPrev) : action;\n\n return JSON.stringify(newValue);\n });\n },\n ],\n [parsedState, setState]\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function usePixelRatio() {\n const [pixelRatio, setPixelRatio] = useState(() => window.devicePixelRatio);\n\n useEffect(() => {\n const mediaQuery = matchMedia(`(resolution: ${pixelRatio}dppx)`);\n\n const handler = () => {\n setPixelRatio(window.devicePixelRatio);\n };\n\n mediaQuery.addEventListener(\"change\", handler, { once: true });\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handler);\n };\n }, [pixelRatio]);\n\n return pixelRatio;\n}\n","\"use client\";\n\nimport { isShallowEqual } from \"@noya-app/noya-utils\";\nimport { useRef } from \"react\";\n\n/**\n * Memoize an array using shallow comparison.\n */\nexport function useShallowArray<T>(array: T[]) {\n const ref = useRef(array);\n\n if (!isShallowEqual(ref.current, array)) {\n ref.current = array;\n }\n\n return ref.current;\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\nconst noop = () => {};\n\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T\n): T;\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback?: T\n): T | ((...args: Parameters<T>) => void);\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T\n): T {\n const callbackRef = useRef(callback || noop);\n\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback || noop;\n }, [callback]);\n\n return useCallback(\n (...args: Parameters<T>): ReturnType<T> => callbackRef.current(...args),\n [callbackRef]\n ) as T;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useLazyValue } from \"../hooks/useLazyValue\";\n\nconst preferDarkQuery = \"(prefers-color-scheme: dark)\";\n\ntype ColorScheme = \"light\" | \"dark\";\n\nexport function useSystemColorScheme() {\n const mediaQuery = useLazyValue(\n () => globalThis.matchMedia?.(preferDarkQuery) ?? \"light\"\n );\n\n const [colorScheme, setColorScheme] = useState<ColorScheme>(\n mediaQuery.matches ? \"dark\" : \"light\"\n );\n\n useEffect(() => {\n const listener = ({ matches }: MediaQueryListEvent) => {\n setColorScheme(matches ? \"dark\" : \"light\");\n };\n\n mediaQuery.addEventListener(\"change\", listener);\n\n return () => {\n mediaQuery.removeEventListener(\"change\", listener);\n };\n }, [mediaQuery]);\n\n return colorScheme;\n}\n","\"use client\";\n\nimport { decodeQueryParameters } from \"@noya-app/noya-utils\";\nimport { useEffect, useState } from \"react\";\n\nexport type UrlHashParameters = Record<string, string>;\n\nexport function getUrlHashParameters(): UrlHashParameters {\n try {\n return decodeQueryParameters(window.location.hash.slice(1));\n } catch (e) {\n // console.warn(e);\n return {};\n }\n}\n\nexport function useUrlHashParameters(): UrlHashParameters {\n const [parameters, setParameters] = useState<UrlHashParameters>(() =>\n getUrlHashParameters()\n );\n\n useEffect(() => {\n const handler = () => setParameters(getUrlHashParameters());\n\n window.addEventListener(\"hashchange\", handler);\n\n return () => {\n window.removeEventListener(\"hashchange\", handler);\n };\n }, []);\n\n return parameters;\n}\n\ntype ParameterTypeMap = {\n boolean: boolean;\n number: number;\n string: string;\n};\n\nexport function castHashParameter<K extends keyof ParameterTypeMap>(\n value: string = \"\",\n type: K\n): ParameterTypeMap[K] {\n switch (type) {\n case \"boolean\":\n return (value === \"true\") as ParameterTypeMap[K];\n case \"number\": {\n const result = Number(value);\n return (isNaN(result) ? 0 : result) as ParameterTypeMap[K];\n }\n case \"string\":\n return value as ParameterTypeMap[K];\n default:\n throw new Error(\"Invalid type\");\n }\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useWindowSize() {\n const [size, setSize] = useState(\n typeof window === \"undefined\"\n ? { width: 0, height: 0 }\n : {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n );\n\n useEffect(() => {\n const handleResize = () =>\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return size;\n}\n","import { Emitter } from \"@noya-app/emitter\";\n\nexport interface IClientStorage<K extends string = string> {\n getItem(storageKey: K): string | null;\n setItem(storageKey: K, value: string | null): void;\n addListener(\n storageKey: K,\n listener: (newValue: string | null) => void\n ): () => void;\n}\n\nexport class ClientStorage<K extends string = string>\n implements IClientStorage<K>\n{\n getItem(storageKey: K): string | null {\n if (typeof localStorage === \"undefined\") {\n return null;\n }\n\n return localStorage.getItem(storageKey);\n }\n\n setItem(storageKey: K, value: string | null): void {\n if (typeof localStorage === \"undefined\") {\n return;\n }\n\n if (value === null) {\n localStorage.removeItem(storageKey);\n } else {\n localStorage.setItem(storageKey, value);\n }\n\n this.emitter.emit(storageKey, value);\n }\n\n emitter = new Emitter<[K, string | null]>();\n\n _isListening = false;\n\n addListener(\n storageKey: K,\n listener: (newValue: string | null) => void\n ): () => void {\n // Set up a single listener for all storage events\n if (!this._isListening && typeof window !== \"undefined\") {\n this._isListening = true;\n\n window.addEventListener(\"storage\", (event: StorageEvent) => {\n this.emitter.emit(event.key as any, event.newValue);\n });\n }\n\n return this.emitter.addListener((key, value) => {\n if (key === storageKey) {\n listener(value);\n }\n });\n }\n}\n\nexport const clientStorage = new ClientStorage();\n","export function download(url: string, name?: string) {\n const a = document.createElement(\"a\");\n a.href = url;\n if (name) {\n a.download = name;\n }\n a.style.display = \"none\";\n document.body.appendChild(a);\n a.click();\n\n document.body.removeChild(a);\n}\n\nexport function downloadBlob(blob: Blob, name: string): void;\nexport function downloadBlob(blob: File): void;\nexport function downloadBlob(\n ...params: [blob: Blob, name: string] | [blob: File]\n): void {\n const exportUrl = URL.createObjectURL(params[0]);\n const name = params.length === 1 ? params[0].name : params[1];\n\n download(exportUrl, name);\n\n URL.revokeObjectURL(exportUrl);\n}\n\nexport async function downloadUrl(url: string, name: string) {\n const response = await fetch(url, { credentials: \"include\" });\n const blob = await response.blob();\n\n downloadBlob(blob, name);\n}\n","\"use client\";\n\nimport { findAllDefs } from \"@noya-app/noya-schemas\";\nimport {\n createOrCastValue,\n isEmbeddedApp,\n localStorageSync,\n parentFrameSync,\n Static,\n stubSync,\n SyncAdapter,\n TSchema,\n TypeGuard,\n webSocketSync,\n} from \"@noya-app/state-manager\";\nimport { useMemo, useState } from \"react\";\nimport { useMultiplayerState, UseMultiplayerStateOptions } from \"./hooks\";\nimport { StateInspectorOptions } from \"./inspector/StateInspector\";\n\nexport type AppViewType = \"editable\" | \"readOnly\" | \"preview\";\n\nexport type AppTheme = \"light\" | \"dark\";\n\nexport type AppData<State> = {\n multiplayerUrl?: string;\n theme: AppTheme;\n viewType: AppViewType;\n initialState: State;\n inspector: boolean | StateInspectorOptions;\n};\n\nexport function createDefaultAppData<State>(\n initialState: State\n): AppData<State> {\n return {\n theme: \"light\",\n viewType: \"editable\",\n initialState,\n inspector: false,\n };\n}\n\nexport type GetAppDataOptions = {\n window?: { location: { hash: string } };\n overrideExistingState?: boolean;\n};\n\nexport function enforceSchema<State>(\n initialState: State,\n schema?: TSchema\n): State {\n return schema\n ? (createOrCastValue({\n schema,\n value: initialState,\n defs: findAllDefs(schema),\n }) as State)\n : initialState;\n}\n\nexport function parseAppDataParameter(\n options?: GetAppDataOptions\n): AppData<unknown> | null {\n const window = options?.window ?? globalThis;\n const location = window.location;\n if (!location) return null;\n const urlHash = (location.hash || \"\").replace(/^#/, \"\");\n const params = new URLSearchParams(urlHash);\n const data = params.get(\"data\");\n if (!data) return null;\n try {\n return JSON.parse(data);\n } catch (e) {\n return null;\n }\n}\n\nexport function getAppData<State>(\n initialState: State | (() => State),\n schema?: TSchema,\n options?: GetAppDataOptions\n): AppData<State> {\n const resolvedInitialState =\n initialState instanceof Function ? initialState() : initialState;\n\n let appData =\n parseAppDataParameter(options) ??\n createDefaultAppData(resolvedInitialState);\n\n if (options?.overrideExistingState) {\n appData.initialState = resolvedInitialState;\n }\n\n appData.initialState = enforceSchema(appData.initialState, schema) as State;\n\n return appData as AppData<State>;\n}\n\nexport type UseNoyaStateOptions<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n> = UseMultiplayerStateOptions<S, M, E, MenuT> & {\n offlineStorageKey?: string;\n};\n\nexport type UseNoyaStateResult<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n> = [\n ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[0],\n ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[1],\n ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[2] & {\n theme: AppTheme;\n viewType: AppViewType;\n },\n];\n\n/**\n * Sync data locally or to a multiplayer server.\n *\n * There are 3 ways to use this hook:\n *\n * 1. Pass an initial state: `useNoyaState(initialState)`\n * 2. Pass an initial state and a schema: `useNoyaState(initialState, { schema })`\n * 3. Pass only a schema, and a conforming initial state is created automatically: `useNoyaState({ schema })`\n */\nexport function useNoyaState<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n O extends UseNoyaStateOptions<S, M, E, MenuT> = UseNoyaStateOptions<\n S,\n M,\n E,\n MenuT\n >,\n>(\n ...args:\n | [\n initialState: O[\"schema\"] extends TSchema\n ? Static<O[\"schema\"]> | (() => Static<O[\"schema\"]>)\n : S | (() => S),\n options?: O,\n ]\n | [options: O & { schema: TSchema }]\n): UseNoyaStateResult<\n O[\"schema\"] extends TSchema ? Static<O[\"schema\"]> : S,\n M,\n E,\n MenuT\n> {\n const [initialState, options] =\n typeof args[0] === \"object\" &&\n args[0] !== null &&\n \"schema\" in args[0] &&\n TypeGuard.IsSchema(args[0].schema)\n ? [null, args[0]]\n : [args[0], args[1]];\n\n // Keep these stable after initial render\n const [\n {\n multiplayerUrl,\n inspector,\n initialState: noyaAppInitialState,\n theme,\n viewType,\n },\n ] = useState(() => {\n return getAppData(initialState, options?.schema, {\n overrideExistingState: options?.overrideExistingState,\n });\n });\n\n const sync = useMemo((): SyncAdapter<S, M, E, MenuT> => {\n return isEmbeddedApp()\n ? parentFrameSync<S, M, E, MenuT>({ debug: options?.debug })\n : multiplayerUrl\n ? webSocketSync<S, M, E, MenuT>({\n url: multiplayerUrl,\n debug: options?.debug,\n })\n : options?.offlineStorageKey\n ? localStorageSync<S, M, E, MenuT>({ key: options.offlineStorageKey })\n : stubSync<S, M, E, MenuT>();\n }, [multiplayerUrl, options?.offlineStorageKey, options?.debug]);\n\n const result = useMultiplayerState(noyaAppInitialState as S, {\n ...options,\n inspector: options?.inspector ?? inspector,\n sync: options?.sync ?? sync,\n });\n\n const [, , extras] = result;\n\n const mergedExtras = useMemo(() => {\n return { ...extras, theme, viewType } as const;\n }, [extras, theme, viewType]);\n\n return [result[0], result[1], mergedExtras] as UseNoyaStateResult<\n O[\"schema\"] extends TSchema ? Static<O[\"schema\"]> : S,\n M,\n E,\n MenuT\n >;\n}\n\n// function typeTest() {\n// const [a, setA] = useNoyaState(7);\n// const [b, setB] = useNoyaState(7, {\n// schema: Type.Number(),\n// });\n// const [c, setC] = useNoyaState({\n// schema: Type.Number(),\n// });\n// }\n","\"use client\";\n\nimport { GetAtPath } from \"@noya-app/observable\";\nimport {\n ActionHandler,\n NoyaManager,\n NoyaManagerOptions,\n StateManager,\n StateManagerOptions,\n stubSync,\n SyncAdapter,\n} from \"@noya-app/state-manager\";\nimport {\n createElement,\n SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { ErrorOverlay } from \"./components/ErrorOverlay\";\nimport { StateInspectorOptions } from \"./inspector/StateInspector\";\nimport { useStateInspector } from \"./inspector/useStateInspector\";\nimport { useObservable } from \"./useObservable\";\n\nexport function useSyncStateManager<S, M>(stateManager: StateManager<S, M>): S;\nexport function useSyncStateManager<S, M, P extends string>(\n stateManager: StateManager<S, M>,\n path: P\n): GetAtPath<S, P>;\nexport function useSyncStateManager<S, M>(\n stateManager: StateManager<S, M>,\n path?: string\n) {\n const getSnapshot = useCallback(\n () =>\n typeof path === \"string\"\n ? stateManager.getState(path)\n : stateManager.getState(),\n [stateManager, path]\n );\n\n return useSyncExternalStore(\n stateManager.addListener,\n getSnapshot,\n getSnapshot\n );\n}\n\nexport function useManagedState<S, M = void>(\n createInitialState: () => S,\n options?: StateManagerOptions<S, M>\n) {\n const [stateManager] = useState(\n () => new StateManager<S, M>(createInitialState(), options)\n );\n\n const state = useSyncStateManager(stateManager);\n\n const setState = useCallback(\n (\n ...args: M extends {}\n ? [metadata: M, action: SetStateAction<S>]\n : [action: SetStateAction<S>]\n ) => {\n const [metadata, action] =\n args.length === 1 ? [undefined, args[0]] : args;\n\n if (metadata === undefined) {\n const performActionNoMetadata = stateManager.performAction as (\n handler: ActionHandler<S>\n ) => void;\n\n if (action instanceof Function) {\n performActionNoMetadata({\n run: action,\n undo: () => state,\n });\n } else {\n performActionNoMetadata({\n run: () => action,\n undo: () => state,\n });\n }\n } else {\n const performActionWithMetadata = stateManager.performAction as (\n metadata: M,\n handler: ActionHandler<S>\n ) => void;\n\n if (action instanceof Function) {\n performActionWithMetadata(metadata, {\n run: action,\n undo: () => state,\n });\n } else {\n performActionWithMetadata(metadata, {\n run: () => action,\n undo: () => state,\n });\n }\n }\n },\n [state, stateManager]\n );\n\n return [state, setState, stateManager] as const;\n}\n\nexport function useManagedHistory<S, M = void>(\n stateManager: StateManager<S, M>\n) {\n return useSyncExternalStore(\n stateManager.historyEmittor.addListener,\n stateManager.getHistorySnapshot,\n stateManager.getHistorySnapshot\n );\n}\n\nexport type UseMultiplayerStateOptions<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n> = NoyaManagerOptions<S, M> & {\n sync?: SyncAdapter<S, M, E, MenuT>;\n inspector?: boolean | StateInspectorOptions;\n};\n\nexport function useMultiplayerState<\n S,\n M extends object = object,\n E extends object = object,\n MenuT extends string = string,\n>(\n initialState: S | (() => S),\n options?: UseMultiplayerStateOptions<S, M, E, MenuT>\n) {\n const {\n sync = stubSync<\n unknown,\n object,\n object,\n string\n >() as unknown as SyncAdapter<S, M, E, MenuT>,\n inspector,\n ...rest\n } = options ?? {};\n\n const [noyaManager] = useState(\n () => new NoyaManager<S, M, E, MenuT>(initialState, rest)\n );\n\n const state = useObservable(\n noyaManager.multiplayerStateManager.optimisticState$\n );\n const assets = useObservable(noyaManager.assetManager.assets$);\n\n type ExtrasType = {\n noyaManager: typeof noyaManager;\n taskManager: typeof noyaManager.taskManager;\n connectionEventManager: typeof noyaManager.connectionEventManager;\n connectedUsersManager: typeof noyaManager.connectedUsersManager;\n ephemeralUserDataManager: typeof noyaManager.ephemeralUserDataManager;\n multiplayerStateManager: typeof noyaManager.multiplayerStateManager;\n assetManager: typeof noyaManager.assetManager;\n aiManager: typeof noyaManager.aiManager;\n rpcManager: typeof noyaManager.rpcManager;\n pipelineManager: typeof noyaManager.pipelineManager;\n secretManager: typeof noyaManager.secretManager;\n menuItemsManager: typeof noyaManager.menuManager;\n createAsset: typeof noyaManager.assetManager.create;\n deleteAsset: typeof noyaManager.assetManager.delete;\n assets: typeof assets;\n };\n\n const extras = useMemo<ExtrasType>(() => {\n return {\n noyaManager,\n taskManager: noyaManager.taskManager,\n connectionEventManager: noyaManager.connectionEventManager,\n connectedUsersManager: noyaManager.connectedUsersManager,\n ephemeralUserDataManager: noyaManager.ephemeralUserDataManager,\n multiplayerStateManager: noyaManager.multiplayerStateManager,\n assetManager: noyaManager.assetManager,\n aiManager: noyaManager.aiManager,\n rpcManager: noyaManager.rpcManager,\n pipelineManager: noyaManager.pipelineManager,\n secretManager: noyaManager.secretManager,\n menuItemsManager: noyaManager.menuManager,\n createAsset: noyaManager.assetManager.create,\n deleteAsset: noyaManager.assetManager.delete,\n assets,\n };\n }, [noyaManager, assets]);\n\n const syncRef = useRef(sync);\n\n useEffect(() => {\n if (syncRef.current) {\n return syncRef.current({ noyaManager });\n }\n }, [noyaManager]);\n\n useErrorOverlay<MenuT>(noyaManager);\n\n useStateInspector<S, M, E, MenuT>({\n noyaManager,\n disabled: !inspector,\n ...(typeof inspector === \"object\" && inspector),\n });\n\n return [state, noyaManager.multiplayerStateManager.setState, extras] as const;\n}\n\nfunction useErrorOverlay<MenuT extends string = string>(\n noyaManager: NoyaManager<any, any, any, MenuT>\n) {\n const unrecoverableError = useObservable(noyaManager.unrecoverableError);\n\n useEffect(() => {\n if (!unrecoverableError) return;\n const el = document.createElement(\"div\");\n el.id = \"noya-multiplayer-react-error-overlay\";\n document.body.appendChild(el);\n const root = createRoot(el);\n root.render(createElement(ErrorOverlay, { error: unrecoverableError }));\n return () => {\n root.unmount();\n el.remove();\n };\n });\n}\n","import { MultiplayerStateManagerError } from \"@noya-app/state-manager\";\nimport * as React from \"react\";\n\nexport const ErrorOverlay = React.memo(function ErrorOverlay({\n error,\n}: {\n error: MultiplayerStateManagerError;\n}) {\n return (\n <div\n style={{\n position: \"fixed\",\n top: \"20px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n maxWidth: \"80%\",\n width: \"fit-content\",\n padding: \"12px 20px\",\n background: \"white\",\n color: \"black\",\n zIndex: 10000,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n borderRadius: \"4px\",\n boxShadow: \"0 4px 6px rgba(0, 0, 0, 0.1)\",\n fontFamily:\n \"'__Inter_6b0edc', '__Inter_Fallback_6b0edc', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif\",\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"19px\",\n }}\n >\n {error.reason === \"schemaMigration\" ? (\n <>\n <p>\n An updated version of Noya is available. Please reload the page to\n continue.\n </p>\n </>\n ) : (\n <>\n <p>\n An error occurred:{\" \"}\n <code\n style={{\n background: \"rgba(255, 0, 0, 0.1)\",\n color: \"rgba(255, 0, 0, 0.5)\",\n padding: \"2px 4px\",\n borderRadius: \"4px\",\n }}\n >\n {error.reason}\n </code>\n . Please reload the page to continue.\n <br />\n <br />\n If this happens repeatedly, please get in touch and the Noya team\n can help.\n </p>\n </>\n )}\n <div\n style={{\n height: \"1px\",\n background: \"rgba(0, 0, 0, 0.1)\",\n margin: \"12px -20px\",\n }}\n />\n <button\n style={{\n background: \"black\",\n color: \"white\",\n padding: \"8px 16px\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n fontWeight: 700,\n lineHeight: \"19px\",\n }}\n onClick={() => {\n window.location.reload();\n }}\n >\n Reload\n </button>\n </div>\n );\n});\n","\"use client\";\n\nimport { NoyaManager } from \"@noya-app/state-manager\";\nimport React, { ComponentProps } from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { useIsomorphicLayoutEffect } from \"@noya-app/react-utils\";\nimport { Root } from \"react-dom/client\";\nimport { StateInspector } from \"./StateInspector\";\n\nfunction createShadowRootElement() {\n const host = document.createElement(\"div\");\n host.id = \"noya-multiplayer-react-inspector-host\";\n const shadowRoot = host.attachShadow({ mode: \"open\" });\n const container = document.createElement(\"div\");\n shadowRoot.appendChild(container);\n return { host, container };\n}\n\nexport function useStateInspector<\n S,\n M extends object,\n E extends object,\n MenuT extends string = string,\n>({\n noyaManager,\n disabled = false,\n colorScheme,\n anchor,\n}: {\n noyaManager: NoyaManager<S, M, E, MenuT>;\n disabled: boolean;\n} & Pick<ComponentProps<typeof StateInspector>, \"colorScheme\" | \"anchor\">) {\n const [root, setRoot] = React.useState<Root | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (disabled) return;\n\n const { host, container } = createShadowRootElement();\n const root = createRoot(container);\n\n document.body.appendChild(host);\n\n setRoot(root);\n\n return () => {\n document.body.removeChild(host);\n };\n }, [disabled]);\n\n useIsomorphicLayoutEffect(() => {\n if (!root) return;\n\n root.render(\n <StateInspector\n colorScheme={colorScheme}\n anchor={anchor}\n noyaManager={noyaManager}\n />\n );\n }, [noyaManager, anchor, colorScheme, root]);\n}\n","\"use client\";\n\nimport { Input, OutputTransform } from \"@noya-app/noya-schemas\";\nimport { downloadBlob, memoGeneric } from \"@noya-app/react-utils\";\nimport { NoyaManager } from \"@noya-app/state-manager\";\nimport React, {\n CSSProperties,\n ComponentPropsWithoutRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n} from \"react\";\nimport { ObjectInspector } from \"react-inspector\";\nimport { useManagedHistory } from \"../hooks\";\nimport { useObservable } from \"../useObservable\";\nimport { ColoredDot } from \"./ColoredDot\";\nimport {\n getStateInspectorBorderColor,\n getStateInspectorTheme,\n} from \"./inspectorTheme\";\nimport { EventsSection } from \"./sections/EventsSection\";\nimport { HistorySection } from \"./sections/HistorySection\";\nimport { exportAll, importAll } from \"./serialization\";\nimport { StateInspectorButton } from \"./StateInspectorButton\";\nimport {\n StateInspectorDisclosureRowInner,\n StateInspectorDisclosureSection,\n} from \"./StateInspectorDisclosureSection\";\nimport { StateInspectorRow } from \"./StateInspectorRow\";\nimport { StateInspectorToggleButton } from \"./StateInspectorToggleButton\";\nimport { useLocalStorageState } from \"./useLocalStorageState\";\nimport { ellipsis, uploadFile } from \"./utils\";\n\nexport type StateInspectorAnchor =\n | \"left\"\n | \"right\"\n | \"bottom left\"\n | \"bottom right\";\n\nexport type StateInspectorOptions = {\n colorScheme?: \"light\" | \"dark\";\n anchor?: StateInspectorAnchor;\n};\n\nexport const StateInspector = memoGeneric(function StateInspector<\n S,\n M extends object,\n E extends object,\n MenuT extends string = string,\n>({\n noyaManager,\n colorScheme = \"light\",\n anchor = \"right\",\n unstyled = false,\n ...props\n}: {\n noyaManager: NoyaManager<S, M, E, MenuT>;\n unstyled?: boolean;\n} & StateInspectorOptions &\n ComponentPropsWithoutRef<\"div\">) {\n const {\n multiplayerStateManager,\n assetManager,\n connectedUsersManager,\n secretManager,\n ephemeralUserDataManager,\n connectionEventManager,\n taskManager,\n ioManager,\n } = noyaManager;\n\n const [didMount, setDidMount] = React.useState(false);\n const tasks = useObservable(taskManager.tasks$);\n const inputs = useObservable(ioManager.inputs$);\n const outputTransforms = useObservable(ioManager.outputTransforms$);\n\n useLayoutEffect(() => {\n setDidMount(true);\n }, []);\n\n const eventsContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [showInspector, setShowInspector] = useLocalStorageState(\n \"noya-multiplayer-react-show-inspector\",\n true\n );\n const [showEvents, setShowEvents] = useLocalStorageState(\n \"noya-multiplayer-react-show-events\",\n false\n );\n const [showHistory, setShowHistory] = useLocalStorageState(\n \"noya-multiplayer-react-show-history\",\n false\n );\n const [showUsers, setShowUsers] = useLocalStorageState(\n \"noya-multiplayer-react-show-users\",\n true\n );\n const [showData, setShowData] = useLocalStorageState(\n \"noya-multiplayer-react-show-data\",\n true\n );\n const [showTasks, setShowTasks] = useLocalStorageState(\n \"noya-multiplayer-react-show-tasks\",\n false\n );\n const [showEphemeral, setShowEphemeral] = useLocalStorageState(\n \"noya-multiplayer-react-show-ephemeral\",\n false\n );\n const [showAssets, setShowAssets] = useLocalStorageState(\n \"noya-multiplayer-react-show-assets\",\n false\n );\n const [showSecrets, setShowSecrets] = useLocalStorageState(\n \"noya-multiplayer-react-show-secrets\",\n false\n );\n const [showInputs, setShowInputs] = useLocalStorageState(\n \"noya-multiplayer-react-show-inputs\",\n false\n );\n const [showOutputTransforms, setShowOutputTransforms] = useLocalStorageState(\n \"noya-multiplayer-react-show-output-transforms\",\n false\n );\n\n const connectionEvents = useObservable(connectionEventManager.events$);\n\n useEffect(() => {\n if (eventsContainerRef.current) {\n eventsContainerRef.current.scrollTop =\n eventsContainerRef.current.scrollHeight;\n }\n }, [connectionEvents]);\n\n const multipeerStateInitialized = useObservable(\n multiplayerStateManager.isInitialized$\n );\n const ephemeral = useObservable(ephemeralUserDataManager.data$);\n const historySnapshot = useManagedHistory(multiplayerStateManager.sm);\n const assets = useObservable(assetManager.assets$);\n const assetsInitialized = useObservable(assetManager.isInitialized$);\n const secrets = useObservable(secretManager.secrets$);\n const secretsInitialized = useObservable(secretManager.isInitialized$);\n const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);\n const userId = useObservable(connectedUsersManager.currentUserId$);\n const state = useObservable(multiplayerStateManager.optimisticState$);\n const inputsInitialized = useObservable(ioManager.inputsInitialized$);\n const outputTransformsInitialized = useObservable(\n ioManager.outputTransformsInitialized$\n );\n\n const theme = getStateInspectorTheme(colorScheme);\n const solidBorderColor = getStateInspectorBorderColor(colorScheme);\n\n const baseStyle: CSSProperties = {\n position: \"fixed\",\n top: 12,\n ...(anchor.includes(\"right\") ? { right: 12 } : { left: 12 }),\n bottom: 12,\n width: 400,\n background:\n colorScheme === \"light\" ? \"rgba(255,255,255,0.95)\" : \"rgba(0,0,0,0.95)\",\n backdropFilter: \"blur(48px)\",\n border: `1px solid ${solidBorderColor}`,\n // outlineOffset: -1,\n borderRadius: 4,\n display: \"flex\",\n flexDirection: \"column\",\n // gap: 12,\n color: theme.BASE_COLOR,\n overflow: \"hidden\",\n zIndex: 9999,\n lineHeight: \"13px\",\n };\n\n const handleExportAll = useCallback(async () => {\n const buffer = await exportAll(noyaManager);\n\n downloadBlob(new Blob([buffer]), \"state.zip\");\n }, [noyaManager]);\n\n const handleImportAll = useCallback(async () => {\n const file = await uploadFile();\n const buffer = await file.arrayBuffer();\n\n importAll(buffer, noyaManager, {\n shouldAllowSchemaChange: () => {\n return confirm(\n `The imported state uses a different schema than the schema this app expects. Do you want to continue?`\n );\n },\n });\n }, [noyaManager]);\n\n if (!didMount) return null;\n\n if (!showInspector) {\n return (\n <div\n {...props}\n style={{\n ...baseStyle,\n padding: \"4px 10px\",\n width: undefined,\n ...(anchor.includes(\"bottom\")\n ? { bottom: 12, top: undefined }\n : { bottom: undefined }),\n }}\n onClick={() => setShowInspector(true)}\n >\n <StateInspectorToggleButton\n showInspector={showInspector}\n setShowInspector={setShowInspector}\n theme={theme}\n anchor={anchor}\n />\n </div>\n );\n }\n\n return (\n <div\n {...props}\n style={{\n ...(!unstyled && baseStyle),\n ...props.style,\n }}\n >\n <StateInspectorDisclosureSection\n isFirst\n open={showUsers}\n setOpen={setShowUsers}\n title=\"Users\"\n colorScheme={colorScheme}\n style={{\n flex: \"0 0 auto\",\n maxHeight: \"200px\",\n }}\n right={\n <StateInspectorToggleButton\n showInspector={showInspector}\n setShowInspector={setShowInspector}\n theme={theme}\n anchor={anchor}\n />\n }\n >\n <StateInspectorDisclosureRowInner style={{ flex: \"0 0 auto\" }}>\n {connectedUsers?.map((user) => (\n <StateInspectorRow\n key={user.id}\n colorScheme={colorScheme}\n variant={user.id === userId ? \"up\" : undefined}\n >\n {user.image && (\n <img\n src={user.image}\n alt={user.name}\n style={{\n width: \"13px\",\n height: \"13px\",\n borderRadius: \"50%\",\n marginRight: \"4px\",\n display: \"inline-block\",\n position: \"relative\",\n background: solidBorderColor,\n verticalAlign: \"middle\",\n }}\n />\n )}\n {user.name} ({ellipsis(user.id.toString(), 8, \"middle\")})\n </StateInspectorRow>\n ))}\n {!connectedUsers && (\n <div\n style={{\n padding: \"12px\",\n fontSize: \"12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <span>No connected users</span>\n </div>\n )}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <StateInspectorDisclosureSection\n title={\n <TitleLabel>\n Data\n <ColoredDot\n type={multipeerStateInitialized ? \"success\" : \"error\"}\n />\n </TitleLabel>\n }\n colorScheme={colorScheme}\n setOpen={setShowData}\n open={showData}\n right={\n <span\n style={{\n display: \"flex\",\n gap: \"12px\",\n }}\n >\n <StateInspectorButton theme={theme} onClick={handleImportAll}>\n Import\n </StateInspectorButton>\n <StateInspectorButton theme={theme} onClick={handleExportAll}>\n Export\n </StateInspectorButton>\n <StateInspectorButton\n // disabled={!historySnapshot.canUndo}\n theme={theme}\n onClick={() => {\n noyaManager.forceInit();\n }}\n >\n Reset\n </StateInspectorButton>\n </span>\n }\n >\n <StateInspectorDisclosureRowInner>\n <StateInspectorRow colorScheme={colorScheme}>\n <ObjectInspector\n name={multiplayerStateManager.schema ? \"state\" : undefined}\n data={state}\n theme={theme}\n />\n </StateInspectorRow>\n {multiplayerStateManager.schema && (\n <StateInspectorRow colorScheme={colorScheme}>\n <ObjectInspector\n name=\"schema\"\n data={multiplayerStateManager.schema}\n theme={theme}\n />\n </StateInspectorRow>\n )}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <HistorySection\n showHistory={showHistory}\n setShowHistory={setShowHistory}\n colorScheme={colorScheme}\n historySnapshot={historySnapshot}\n multiplayerStateManager={multiplayerStateManager}\n />\n <StateInspectorDisclosureSection\n open={showAssets}\n setOpen={setShowAssets}\n title={\n <TitleLabel>\n Assets ({assets.length})\n <ColoredDot type={assetsInitialized ? \"success\" : \"error\"} />\n </TitleLabel>\n }\n colorScheme={colorScheme}\n right={\n <span style={{ display: \"flex\", gap: \"10px\" }}>\n <StateInspectorButton\n theme={theme}\n onClick={() => {\n console.info(\n \"[StateInspector] Reloading assets\",\n noyaManager.id\n );\n assetManager.fetch();\n }}\n >\n Reload\n </StateInspectorButton>\n <StateInspectorButton\n theme={theme}\n onClick={() => {\n // get file input\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = () => {\n const buffer = reader.result as ArrayBuffer;\n assetManager.create(new Uint8Array(buffer));\n };\n reader.readAsArrayBuffer(file);\n }\n };\n input.click();\n }}\n >\n Upload\n </StateInspectorButton>\n </span>\n }\n >\n <StateInspectorDisclosureRowInner>\n {assets.map((asset) => (\n <StateInspectorRow key={asset.id} colorScheme={colorScheme}>\n <ObjectInspector name={asset.id} data={asset} theme={theme} />\n <StateInspectorButton\n theme={theme}\n onClick={() => assetManager.delete(asset.id)}\n >\n Delete\n </StateInspectorButton>\n </StateInspectorRow>\n ))}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <StateInspectorDisclosureSection\n title={\n <TitleLabel>\n Secrets\n <ColoredDot type={secretsInitialized ? \"success\" : \"error\"} />\n </TitleLabel>\n }\n colorScheme={colorScheme}\n open={showSecrets}\n setOpen={setShowSecrets}\n right={\n <StateInspectorButton\n theme={theme}\n onClick={() => {\n const name = prompt(\"Enter secret name\");\n if (!name) return;\n const value = prompt(\"Enter secret value\");\n if (!value) return;\n secretManager.createSecret(null, name, value);\n }}\n >\n Create\n </StateInspectorButton>\n }\n >\n <StateInspectorDisclosureRowInner>\n {secrets.map((secret) => (\n <StateInspectorRow key={secret.id} colorScheme={colorScheme}>\n <ObjectInspector data={secret} theme={theme} />\n <StateInspectorButton\n theme={theme}\n onClick={() => secretManager.deleteSecret(secret.id)}\n >\n Delete\n </StateInspectorButton>\n </StateInspectorRow>\n ))}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>{\" \"}\n <StateInspectorDisclosureSection\n open={showInputs}\n setOpen={setShowInputs}\n title={\n <TitleLabel>\n Inputs\n <ColoredDot type={inputsInitialized ? \"success\" : \"error\"} />\n </TitleLabel>\n }\n colorScheme={colorScheme}\n >\n <StateInspectorDisclosureRowInner>\n {inputs?.map((input: Input) => (\n <StateInspectorRow key={input.id} colorScheme={colorScheme}>\n <ObjectInspector data={input} theme={theme} />\n </StateInspectorRow>\n ))}\n {!inputs?.length && (\n <div\n style={{\n padding: \"12px\",\n fontSize: \"12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <span>No inputs</span>\n </div>\n )}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <StateInspectorDisclosureSection\n open={showOutputTransforms}\n setOpen={setShowOutputTransforms}\n title={\n <TitleLabel>\n Output Transforms\n <ColoredDot\n type={outputTransformsInitialized ? \"success\" : \"error\"}\n />\n </TitleLabel>\n }\n colorScheme={colorScheme}\n >\n <StateInspectorDisclosureRowInner>\n {outputTransforms?.map((transform: OutputTransform) => (\n <StateInspectorRow key={transform.id} colorScheme={colorScheme}>\n <ObjectInspector data={transform} theme={theme} />\n </StateInspectorRow>\n ))}\n {!outputTransforms?.length && (\n <div\n style={{\n padding: \"12px\",\n fontSize: \"12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <span>No output transforms</span>\n </div>\n )}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <StateInspectorDisclosureSection\n title=\"Tasks\"\n colorScheme={colorScheme}\n open={showTasks}\n setOpen={setShowTasks}\n >\n <StateInspectorDisclosureRowInner>\n {tasks?.map((task) => (\n <StateInspectorRow\n key={task.id}\n colorScheme={colorScheme}\n style={{\n backgroundColor:\n task.status === \"done\"\n ? \"rgba(0,255,0,0.2)\"\n : task.status === \"error\"\n ? \"rgba(255,0,0,0.2)\"\n : undefined,\n }}\n >\n <ObjectInspector\n name={task.name}\n data={task.payload}\n theme={theme}\n />\n </StateInspectorRow>\n ))}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <StateInspectorDisclosureSection\n open={showEphemeral}\n setOpen={setShowEphemeral}\n title=\"Ephemeral User Data\"\n colorScheme={colorScheme}\n >\n <StateInspectorDisclosureRowInner>\n {Object.entries(ephemeral).map(([key, value]) => (\n <StateInspectorRow key={key} colorScheme={colorScheme}>\n <ObjectInspector\n name={key}\n data={value}\n theme={theme}\n expandLevel={10}\n />\n </StateInspectorRow>\n ))}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n <EventsSection<S>\n connectionEvents={connectionEvents}\n colorScheme={colorScheme}\n eventsContainerRef={eventsContainerRef}\n showEvents={showEvents}\n setShowEvents={setShowEvents}\n />\n </div>\n );\n});\n\nfunction TitleLabel({ children }: { children: React.ReactNode }) {\n return (\n <span style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n {children}\n </span>\n );\n}\n","'use strict';\n\nmodule.exports = function isObject(x) {\n\treturn typeof x === 'object' && x !== null;\n};\n","'use strict';\n\nmodule.exports = function (obj) {\n\n if (obj == null) {\n return false;\n }\n\n var o = Object(obj);\n\n return o === o.window;\n};\n","var isObject = require('is-object')\nvar isWindow = require('is-window')\n\nfunction isNode (val) {\n if (!isObject(val) || !isWindow(window) || typeof window.Node !== 'function') {\n return false\n }\n\n return typeof val.nodeType === 'number' &&\n typeof val.nodeName === 'string'\n}\n\nmodule.exports = isNode\n","export { theme as chromeDark } from './chromeDark';\nexport { theme as chromeLight } from './chromeLight';\n","export const theme = {\n BASE_FONT_FAMILY: 'Menlo, monospace',\n BASE_FONT_SIZE: '11px',\n BASE_LINE_HEIGHT: 1.2,\n\n BASE_BACKGROUND_COLOR: 'rgb(36, 36, 36)',\n BASE_COLOR: 'rgb(213, 213, 213)',\n\n OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,\n OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,\n OBJECT_NAME_COLOR: 'rgb(227, 110, 236)',\n OBJECT_VALUE_NULL_COLOR: 'rgb(127, 127, 127)',\n OBJECT_VALUE_UNDEFINED_COLOR: 'rgb(127, 127, 127)',\n OBJECT_VALUE_REGEXP_COLOR: 'rgb(233, 63, 59)',\n OBJECT_VALUE_STRING_COLOR: 'rgb(233, 63, 59)',\n OBJECT_VALUE_SYMBOL_COLOR: 'rgb(233, 63, 59)',\n OBJECT_VALUE_NUMBER_COLOR: 'hsl(252, 100%, 75%)',\n OBJECT_VALUE_BOOLEAN_COLOR: 'hsl(252, 100%, 75%)',\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'rgb(85, 106, 242)',\n\n HTML_TAG_COLOR: 'rgb(93, 176, 215)',\n HTML_TAGNAME_COLOR: 'rgb(93, 176, 215)',\n HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase',\n HTML_ATTRIBUTE_NAME_COLOR: 'rgb(155, 187, 220)',\n HTML_ATTRIBUTE_VALUE_COLOR: 'rgb(242, 151, 102)',\n HTML_COMMENT_COLOR: 'rgb(137, 137, 137)',\n HTML_DOCTYPE_COLOR: 'rgb(192, 192, 192)',\n\n ARROW_COLOR: 'rgb(145, 145, 145)',\n ARROW_MARGIN_RIGHT: 3,\n ARROW_FONT_SIZE: 12,\n ARROW_ANIMATION_DURATION: '0',\n\n TREENODE_FONT_FAMILY: 'Menlo, monospace',\n TREENODE_FONT_SIZE: '11px',\n TREENODE_LINE_HEIGHT: 1.2,\n TREENODE_PADDING_LEFT: 12,\n\n TABLE_BORDER_COLOR: 'rgb(85, 85, 85)',\n TABLE_TH_BACKGROUND_COLOR: 'rgb(44, 44, 44)',\n TABLE_TH_HOVER_COLOR: 'rgb(48, 48, 48)',\n TABLE_SORT_ICON_COLOR: 'black', //'rgb(48, 57, 66)',\n TABLE_DATA_BACKGROUND_IMAGE:\n 'linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 50%, rgba(51, 139, 255, 0.0980392) 50%, rgba(51, 139, 255, 0.0980392))',\n TABLE_DATA_BACKGROUND_SIZE: '128px 32px',\n};\n","export const theme = {\n BASE_FONT_FAMILY: 'Menlo, monospace',\n BASE_FONT_SIZE: '11px',\n BASE_LINE_HEIGHT: 1.2,\n\n BASE_BACKGROUND_COLOR: 'white',\n BASE_COLOR: 'black',\n\n OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,\n OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,\n OBJECT_NAME_COLOR: 'rgb(136, 19, 145)',\n OBJECT_VALUE_NULL_COLOR: 'rgb(128, 128, 128)',\n OBJECT_VALUE_UNDEFINED_COLOR: 'rgb(128, 128, 128)',\n OBJECT_VALUE_REGEXP_COLOR: 'rgb(196, 26, 22)',\n OBJECT_VALUE_STRING_COLOR: 'rgb(196, 26, 22)',\n OBJECT_VALUE_SYMBOL_COLOR: 'rgb(196, 26, 22)',\n OBJECT_VALUE_NUMBER_COLOR: 'rgb(28, 0, 207)',\n OBJECT_VALUE_BOOLEAN_COLOR: 'rgb(28, 0, 207)',\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'rgb(13, 34, 170)',\n\n HTML_TAG_COLOR: 'rgb(168, 148, 166)',\n HTML_TAGNAME_COLOR: 'rgb(136, 18, 128)',\n HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase',\n HTML_ATTRIBUTE_NAME_COLOR: 'rgb(153, 69, 0)',\n HTML_ATTRIBUTE_VALUE_COLOR: 'rgb(26, 26, 166)',\n HTML_COMMENT_COLOR: 'rgb(35, 110, 37)',\n HTML_DOCTYPE_COLOR: 'rgb(192, 192, 192)',\n\n ARROW_COLOR: '#6e6e6e',\n ARROW_MARGIN_RIGHT: 3,\n ARROW_FONT_SIZE: 12,\n ARROW_ANIMATION_DURATION: '0',\n\n TREENODE_FONT_FAMILY: 'Menlo, monospace',\n TREENODE_FONT_SIZE: '11px',\n TREENODE_LINE_HEIGHT: 1.2,\n TREENODE_PADDING_LEFT: 12,\n\n TABLE_BORDER_COLOR: '#aaa',\n TABLE_TH_BACKGROUND_COLOR: '#eee',\n TABLE_TH_HOVER_COLOR: 'hsla(0, 0%, 90%, 1)',\n TABLE_SORT_ICON_COLOR: '#6e6e6e',\n TABLE_DATA_BACKGROUND_IMAGE:\n 'linear-gradient(to bottom, white, white 50%, rgb(234, 243, 255) 50%, rgb(234, 243, 255))',\n TABLE_DATA_BACKGROUND_SIZE: '128px 32px',\n};\n","import React, { FC } from 'react';\nimport { TreeView } from '../tree-view/TreeView';\n\nimport { ObjectRootLabel } from './ObjectRootLabel';\nimport { ObjectLabel } from './ObjectLabel';\n\nimport { propertyIsEnumerable } from '../utils/objectPrototype';\nimport { getPropertyValue } from '../utils/propertyUtils';\n\nimport { themeAcceptor } from '../styles';\n\nconst createIterator = (showNonenumerable: any, sortObjectKeys: any) => {\n const objectIterator = function* (data: any) {\n const shouldIterate = (typeof data === 'object' && data !== null) || typeof data === 'function';\n if (!shouldIterate) return;\n\n const dataIsArray = Array.isArray(data);\n\n // iterable objects (except arrays)\n if (!dataIsArray && data[Symbol.iterator]) {\n let i = 0;\n for (const entry of data) {\n if (Array.isArray(entry) && entry.length === 2) {\n const [k, v] = entry;\n yield {\n name: k,\n data: v,\n };\n } else {\n yield {\n name: i.toString(),\n data: entry,\n };\n }\n i++;\n }\n } else {\n const keys = Object.getOwnPropertyNames(data);\n if (sortObjectKeys === true && !dataIsArray) {\n // Array keys should not be sorted in alphabetical order\n keys.sort();\n } else if (typeof sortObjectKeys === 'function') {\n keys.sort(sortObjectKeys);\n }\n\n for (const propertyName of keys) {\n if (propertyIsEnumerable.call(data, propertyName)) {\n const propertyValue = getPropertyValue(data, propertyName);\n yield {\n name: propertyName || `\"\"`,\n data: propertyValue,\n };\n } else if (showNonenumerable) {\n // To work around the error (happens some time when propertyName === 'caller' || propertyName === 'arguments')\n // 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context\n // http://stackoverflow.com/questions/31921189/caller-and-arguments-are-restricted-function-properties-and-cannot-be-access\n let propertyValue;\n try {\n propertyValue = getPropertyValue(data, propertyName);\n } catch (e) {\n // console.warn(e)\n }\n\n if (propertyValue !== undefined) {\n yield {\n name: propertyName,\n data: propertyValue,\n isNonenumerable: true,\n };\n }\n }\n }\n\n // [[Prototype]] of the object: `Object.getPrototypeOf(data)`\n // the property name is shown as \"__proto__\"\n if (showNonenumerable && data !== Object.prototype /* already added */) {\n yield {\n name: '__proto__',\n data: Object.getPrototypeOf(data),\n isNonenumerable: true,\n };\n }\n }\n };\n\n return objectIterator;\n};\n\nconst defaultNodeRenderer = ({ depth, name, data, isNonenumerable }: any) =>\n depth === 0 ? (\n <ObjectRootLabel name={name} data={data} />\n ) : (\n <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} />\n );\n\n/**\n * Tree-view for objects\n */\nconst ObjectInspector: FC<any> = ({ showNonenumerable = false, sortObjectKeys, nodeRenderer, ...treeViewProps }) => {\n const dataIterator = createIterator(showNonenumerable, sortObjectKeys);\n const renderer = nodeRenderer ? nodeRenderer : defaultNodeRenderer;\n\n return <TreeView nodeRenderer={renderer} dataIterator={dataIterator} {...treeViewProps} />;\n};\n\n// ObjectInspector.propTypes = {\n// /** An integer specifying to which level the tree should be initially expanded. */\n// expandLevel: PropTypes.number,\n// /** An array containing all the paths that should be expanded when the component is initialized, or a string of just one path */\n// expandPaths: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n\n// name: PropTypes.string,\n// /** Not required prop because we also allow undefined value */\n// data: PropTypes.any,\n\n// /** Show non-enumerable properties */\n// showNonenumerable: PropTypes.bool,\n// /** Sort object keys with optional compare function. */\n// sortObjectKeys: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n// /** Provide a custom nodeRenderer */\n// nodeRenderer: PropTypes.func,\n// };\n\nconst themedObjectInspector = themeAcceptor(ObjectInspector);\n\nexport { themedObjectInspector as ObjectInspector };\n","import React, { useContext, useCallback, useLayoutEffect, useState, memo } from 'react';\nimport { ExpandedPathsContext } from './ExpandedPathsContext';\nimport { TreeNode } from './TreeNode';\nimport { DEFAULT_ROOT_PATH, hasChildNodes, getExpandedPaths } from './pathUtils';\n\nimport { useStyles } from '../styles';\n\nconst ConnectedTreeNode = memo<any>((props) => {\n const { data, dataIterator, path, depth, nodeRenderer } = props;\n const [expandedPaths, setExpandedPaths] = useContext(ExpandedPathsContext);\n const nodeHasChildNodes = hasChildNodes(data, dataIterator);\n const expanded = !!expandedPaths[path];\n\n const handleClick = useCallback(\n () =>\n nodeHasChildNodes &&\n setExpandedPaths((prevExpandedPaths) => ({\n ...prevExpandedPaths,\n [path]: !expanded,\n })),\n [nodeHasChildNodes, setExpandedPaths, path, expanded]\n );\n\n return (\n <TreeNode\n expanded={expanded}\n onClick={handleClick}\n // show arrow anyway even if not expanded and not rendering children\n shouldShowArrow={nodeHasChildNodes}\n // show placeholder only for non root nodes\n shouldShowPlaceholder={depth > 0}\n // Render a node from name and data (or possibly other props like isNonenumerable)\n nodeRenderer={nodeRenderer}\n {...props}>\n {\n // only render if the node is expanded\n expanded\n ? [...dataIterator(data)].map(({ name, data, ...renderNodeProps }) => {\n return (\n <ConnectedTreeNode\n name={name}\n data={data}\n depth={depth + 1}\n path={`${path}.${name}`}\n key={name}\n dataIterator={dataIterator}\n nodeRenderer={nodeRenderer}\n {...renderNodeProps}\n />\n );\n })\n : null\n }\n </TreeNode>\n );\n});\n\n// ConnectedTreeNode.propTypes = {\n// name: PropTypes.string,\n// data: PropTypes.any,\n// dataIterator: PropTypes.func,\n// depth: PropTypes.number,\n// expanded: PropTypes.bool,\n// nodeRenderer: PropTypes.func,\n// };\n\nexport const TreeView = memo<any>(({ name, data, dataIterator, nodeRenderer, expandPaths, expandLevel }) => {\n const styles = useStyles('TreeView');\n const stateAndSetter = useState({});\n const [, setExpandedPaths] = stateAndSetter;\n\n useLayoutEffect(\n () =>\n setExpandedPaths((prevExpandedPaths) =>\n getExpandedPaths(data, dataIterator, expandPaths, expandLevel, prevExpandedPaths)\n ),\n [data, dataIterator, expandPaths, expandLevel]\n );\n\n return (\n <ExpandedPathsContext.Provider value={stateAndSetter}>\n <ol role=\"tree\" style={styles.treeViewOutline}>\n <ConnectedTreeNode\n name={name}\n data={data}\n dataIterator={dataIterator}\n depth={0}\n path={DEFAULT_ROOT_PATH}\n nodeRenderer={nodeRenderer}\n />\n </ol>\n </ExpandedPathsContext.Provider>\n );\n});\n\n// TreeView.propTypes = {\n// name: PropTypes.string,\n// data: PropTypes.any,\n// dataIterator: PropTypes.func,\n// nodeRenderer: PropTypes.func,\n// expandPaths: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n// expandLevel: PropTypes.number,\n// };\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { createContext } from 'react';\n\nexport const ExpandedPathsContext = createContext<[any, (...args: any[]) => any]>([{}, () => {}]);\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { Children, FC, memo } from 'react';\nimport { useStyles } from '../styles';\n\nconst Arrow: FC<any> = ({ expanded, styles }) => (\n <span\n style={{\n ...styles.base,\n ...(expanded ? styles.expanded : styles.collapsed),\n }}>\n ▶\n </span>\n);\n\nexport const TreeNode: FC<any> = memo((props) => {\n props = {\n expanded: true,\n nodeRenderer: ({ name }: any) => <span>{name}</span>,\n onClick: () => {},\n shouldShowArrow: false,\n shouldShowPlaceholder: true,\n ...props,\n };\n const { expanded, onClick, children, nodeRenderer, title, shouldShowArrow, shouldShowPlaceholder } = props;\n\n const styles = useStyles('TreeNode');\n const NodeRenderer = nodeRenderer;\n\n return (\n <li aria-expanded={expanded} role=\"treeitem\" style={styles.treeNodeBase} title={title}>\n <div style={styles.treeNodePreviewContainer} onClick={onClick}>\n {shouldShowArrow || Children.count(children) > 0 ? (\n <Arrow expanded={expanded} styles={styles.treeNodeArrow} />\n ) : (\n shouldShowPlaceholder && <span style={styles.treeNodePlaceholder}> </span>\n )}\n <NodeRenderer {...props} />\n </div>\n\n <ol role=\"group\" style={styles.treeNodeChildNodesContainer}>\n {expanded ? children : undefined}\n </ol>\n </li>\n );\n});\n\n// TreeNode.propTypes = {\n// name: PropTypes.string,\n// data: PropTypes.any,\n// expanded: PropTypes.bool,\n// shouldShowArrow: PropTypes.bool,\n// shouldShowPlaceholder: PropTypes.bool,\n// nodeRenderer: PropTypes.func,\n// onClick: PropTypes.func,\n// };\n","import React, { createContext, useContext, useMemo } from 'react';\n\nimport * as themes from './themes';\nimport { createTheme } from './base';\n\nconst DEFAULT_THEME_NAME = 'chromeLight';\n\nconst ThemeContext = createContext(createTheme(themes[DEFAULT_THEME_NAME]));\n\n/**\n * Hook to get the component styles for the current theme.\n * @param {string} baseStylesKey - Name of the component to be styled\n */\nexport const useStyles = (baseStylesKey: any) => {\n const themeStyles = useContext(ThemeContext);\n //@ts-ignore\n return themeStyles[baseStylesKey];\n};\n\n/**\n * HOC to create a component that accepts a \"theme\" prop and uses it to set\n * the current theme. This is intended to be used by the top-level inspector\n * components.\n * @param {Object} WrappedComponent - React component to be wrapped\n */\nexport const themeAcceptor = (WrappedComponent: any) => {\n const ThemeAcceptor = ({ theme = DEFAULT_THEME_NAME, ...restProps }) => {\n const themeStyles = useMemo(() => {\n switch (Object.prototype.toString.call(theme)) {\n case '[object String]':\n //@ts-ignore\n return createTheme(themes[theme]);\n case '[object Object]':\n return createTheme(theme);\n default:\n return createTheme(themes[DEFAULT_THEME_NAME]);\n }\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={themeStyles}>\n <WrappedComponent {...restProps} />\n </ThemeContext.Provider>\n );\n };\n\n // ThemeAcceptor.propTypes = {\n // theme: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n // };\n\n return ThemeAcceptor;\n};\n","export const unselectable = {\n WebkitTouchCallout: 'none',\n WebkitUserSelect: 'none',\n KhtmlUserSelect: 'none',\n MozUserSelect: 'none',\n msUserSelect: 'none',\n OUserSelect: 'none',\n userSelect: 'none',\n};\n","import { unselectable } from './unselectable';\n\nexport const createTheme = (theme: any) => ({\n DOMNodePreview: {\n htmlOpenTag: {\n base: {\n color: theme.HTML_TAG_COLOR,\n },\n tagName: {\n color: theme.HTML_TAGNAME_COLOR,\n textTransform: theme.HTML_TAGNAME_TEXT_TRANSFORM,\n },\n htmlAttributeName: {\n color: theme.HTML_ATTRIBUTE_NAME_COLOR,\n },\n htmlAttributeValue: {\n color: theme.HTML_ATTRIBUTE_VALUE_COLOR,\n },\n },\n htmlCloseTag: {\n base: {\n color: theme.HTML_TAG_COLOR,\n },\n offsetLeft: {\n /* hack: offset placeholder */\n marginLeft: -theme.TREENODE_PADDING_LEFT,\n },\n tagName: {\n color: theme.HTML_TAGNAME_COLOR,\n textTransform: theme.HTML_TAGNAME_TEXT_TRANSFORM,\n },\n },\n htmlComment: {\n color: theme.HTML_COMMENT_COLOR,\n },\n htmlDoctype: {\n color: theme.HTML_DOCTYPE_COLOR,\n },\n },\n\n ObjectPreview: {\n objectDescription: {\n fontStyle: 'italic',\n },\n preview: {\n fontStyle: 'italic',\n },\n arrayMaxProperties: theme.OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES,\n objectMaxProperties: theme.OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES,\n },\n\n ObjectName: {\n base: {\n color: theme.OBJECT_NAME_COLOR,\n },\n dimmed: {\n opacity: 0.6,\n },\n },\n\n ObjectValue: {\n objectValueNull: {\n color: theme.OBJECT_VALUE_NULL_COLOR,\n },\n objectValueUndefined: {\n color: theme.OBJECT_VALUE_UNDEFINED_COLOR,\n },\n objectValueRegExp: {\n color: theme.OBJECT_VALUE_REGEXP_COLOR,\n },\n objectValueString: {\n color: theme.OBJECT_VALUE_STRING_COLOR,\n },\n objectValueSymbol: {\n color: theme.OBJECT_VALUE_SYMBOL_COLOR,\n },\n objectValueNumber: {\n color: theme.OBJECT_VALUE_NUMBER_COLOR,\n },\n objectValueBoolean: {\n color: theme.OBJECT_VALUE_BOOLEAN_COLOR,\n },\n objectValueFunctionPrefix: {\n color: theme.OBJECT_VALUE_FUNCTION_PREFIX_COLOR,\n fontStyle: 'italic',\n },\n objectValueFunctionName: {\n fontStyle: 'italic',\n },\n },\n\n TreeView: {\n treeViewOutline: {\n padding: 0,\n margin: 0,\n listStyleType: 'none',\n },\n },\n\n TreeNode: {\n treeNodeBase: {\n color: theme.BASE_COLOR,\n backgroundColor: theme.BASE_BACKGROUND_COLOR,\n\n lineHeight: theme.TREENODE_LINE_HEIGHT,\n cursor: 'default',\n\n boxSizing: 'border-box',\n listStyle: 'none',\n\n fontFamily: theme.TREENODE_FONT_FAMILY,\n fontSize: theme.TREENODE_FONT_SIZE,\n },\n treeNodePreviewContainer: {},\n treeNodePlaceholder: {\n whiteSpace: 'pre',\n\n fontSize: theme.ARROW_FONT_SIZE,\n marginRight: theme.ARROW_MARGIN_RIGHT,\n ...unselectable,\n },\n treeNodeArrow: {\n base: {\n color: theme.ARROW_COLOR,\n display: 'inline-block',\n // lineHeight: '14px',\n fontSize: theme.ARROW_FONT_SIZE,\n marginRight: theme.ARROW_MARGIN_RIGHT,\n ...(parseFloat(theme.ARROW_ANIMATION_DURATION) > 0\n ? {\n transition: `transform ${theme.ARROW_ANIMATION_DURATION} ease 0s`,\n }\n : {}),\n ...unselectable,\n },\n expanded: {\n WebkitTransform: 'rotateZ(90deg)',\n MozTransform: 'rotateZ(90deg)',\n transform: 'rotateZ(90deg)',\n },\n collapsed: {\n WebkitTransform: 'rotateZ(0deg)',\n MozTransform: 'rotateZ(0deg)',\n transform: 'rotateZ(0deg)',\n },\n },\n treeNodeChildNodesContainer: {\n margin: 0, // reset user-agent style\n paddingLeft: theme.TREENODE_PADDING_LEFT,\n },\n },\n\n TableInspector: {\n base: {\n color: theme.BASE_COLOR,\n\n position: 'relative',\n border: `1px solid ${theme.TABLE_BORDER_COLOR}`,\n fontFamily: theme.BASE_FONT_FAMILY,\n fontSize: theme.BASE_FONT_SIZE,\n lineHeight: '120%',\n boxSizing: 'border-box',\n cursor: 'default',\n },\n },\n\n TableInspectorHeaderContainer: {\n base: {\n top: 0,\n height: '17px',\n left: 0,\n right: 0,\n overflowX: 'hidden',\n },\n table: {\n tableLayout: 'fixed',\n borderSpacing: 0,\n borderCollapse: 'separate',\n height: '100%',\n width: '100%',\n margin: 0,\n },\n },\n\n TableInspectorDataContainer: {\n tr: {\n display: 'table-row',\n },\n td: {\n boxSizing: 'border-box',\n border: 'none', // prevent overrides\n height: '16px', // /* 0.5 * table.background-size height */\n verticalAlign: 'top',\n padding: '1px 4px',\n WebkitUserSelect: 'text',\n\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n lineHeight: '14px',\n },\n div: {\n position: 'static',\n top: '17px',\n bottom: 0,\n overflowY: 'overlay',\n transform: 'translateZ(0)',\n\n left: 0,\n right: 0,\n overflowX: 'hidden',\n },\n table: {\n positon: 'static',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n borderTop: '0 none transparent',\n margin: 0, // prevent user agent stylesheet overrides\n\n backgroundImage: theme.TABLE_DATA_BACKGROUND_IMAGE,\n backgroundSize: theme.TABLE_DATA_BACKGROUND_SIZE,\n tableLayout: 'fixed',\n\n // table\n borderSpacing: 0,\n borderCollapse: 'separate',\n // height: '100%',\n width: '100%',\n\n fontSize: theme.BASE_FONT_SIZE,\n lineHeight: '120%',\n },\n },\n\n TableInspectorTH: {\n base: {\n position: 'relative', // anchor for sort icon container\n height: 'auto',\n textAlign: 'left',\n backgroundColor: theme.TABLE_TH_BACKGROUND_COLOR,\n borderBottom: `1px solid ${theme.TABLE_BORDER_COLOR}`,\n fontWeight: 'normal',\n verticalAlign: 'middle',\n padding: '0 4px',\n\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n lineHeight: '14px',\n\n ':hover': {\n backgroundColor: theme.TABLE_TH_HOVER_COLOR,\n },\n },\n div: {\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n\n // prevent user agent stylesheet overrides\n fontSize: theme.BASE_FONT_SIZE,\n lineHeight: '120%',\n },\n },\n\n TableInspectorLeftBorder: {\n none: {\n borderLeft: 'none',\n },\n solid: {\n borderLeft: `1px solid ${theme.TABLE_BORDER_COLOR}`,\n },\n },\n\n TableInspectorSortIcon: {\n display: 'block',\n marginRight: 3, // 4,\n width: 8,\n height: 7,\n\n marginTop: -7,\n color: theme.TABLE_SORT_ICON_COLOR,\n fontSize: 12,\n // lineHeight: 14\n ...unselectable,\n },\n});\n","export const DEFAULT_ROOT_PATH = '$';\n\nconst WILDCARD = '*';\n\nexport function hasChildNodes(data, dataIterator) {\n return !dataIterator(data).next().done;\n}\n\nexport const wildcardPathsFromLevel = (level) => {\n // i is depth\n return Array.from({ length: level }, (_, i) =>\n [DEFAULT_ROOT_PATH].concat(Array.from({ length: i }, () => '*')).join('.')\n );\n};\n\nexport const getExpandedPaths = (data, dataIterator, expandPaths, expandLevel, prevExpandedPaths) => {\n const wildcardPaths = []\n .concat(wildcardPathsFromLevel(expandLevel))\n .concat(expandPaths)\n .filter((path) => typeof path === 'string'); // could be undefined\n\n const expandedPaths = [];\n wildcardPaths.forEach((wildcardPath) => {\n const keyPaths = wildcardPath.split('.');\n const populatePaths = (curData, curPath, depth) => {\n if (depth === keyPaths.length) {\n expandedPaths.push(curPath);\n return;\n }\n const key = keyPaths[depth];\n if (depth === 0) {\n if (hasChildNodes(curData, dataIterator) && (key === DEFAULT_ROOT_PATH || key === WILDCARD)) {\n populatePaths(curData, DEFAULT_ROOT_PATH, depth + 1);\n }\n } else {\n if (key === WILDCARD) {\n for (const { name, data } of dataIterator(curData)) {\n if (hasChildNodes(data, dataIterator)) {\n populatePaths(data, `${curPath}.${name}`, depth + 1);\n }\n }\n } else {\n const value = curData[key];\n if (hasChildNodes(value, dataIterator)) {\n populatePaths(value, `${curPath}.${key}`, depth + 1);\n }\n }\n }\n };\n\n populatePaths(data, '', 0);\n });\n\n return expandedPaths.reduce(\n (obj, path) => {\n obj[path] = true;\n return obj;\n },\n { ...prevExpandedPaths }\n );\n};\n","import React, { FC } from 'react';\nimport { ObjectName } from '../object/ObjectName';\nimport { ObjectPreview } from './ObjectPreview';\n\nexport const ObjectRootLabel: FC<any> = ({ name, data }) => {\n if (typeof name === 'string') {\n return (\n <span>\n <ObjectName name={name} />\n <span>: </span>\n <ObjectPreview data={data} />\n </span>\n );\n } else {\n return <ObjectPreview data={data} />;\n }\n};\n","import React, { FC } from 'react';\nimport { useStyles } from '../styles';\n\n/**\n * A view for object property names.\n *\n * If the property name is enumerable (in Object.keys(object)),\n * the property name will be rendered normally.\n *\n * If the property name is not enumerable (`Object.prototype.propertyIsEnumerable()`),\n * the property name will be dimmed to show the difference.\n */\nexport const ObjectName: FC<any> = ({ name, dimmed = false, styles = {} }) => {\n const themeStyles = useStyles('ObjectName');\n const appliedStyles = {\n ...themeStyles.base,\n ...(dimmed ? themeStyles['dimmed'] : {}),\n ...styles,\n };\n\n return <span style={appliedStyles}>{name}</span>;\n};\n\n// ObjectName.propTypes = {\n// /** Property name */\n// name: PropTypes.string,\n// /** Should property name be dimmed */\n// dimmed: PropTypes.bool,\n// };\n","import React, { FC, ReactChild } from 'react';\n\nimport { ObjectValue } from '../object/ObjectValue';\nimport { ObjectName } from '../object/ObjectName';\n\nimport { useStyles } from '../styles';\n\nimport { hasOwnProperty } from '../utils/objectPrototype';\nimport { getPropertyValue } from '../utils/propertyUtils';\n\n/* intersperse arr with separator */\nfunction intersperse(arr: any[], sep: string) {\n if (arr.length === 0) {\n return [];\n }\n\n return arr.slice(1).reduce((xs, x) => xs.concat([sep, x]), [arr[0]]);\n}\n\n/**\n * A preview of the object\n */\nexport const ObjectPreview: FC<any> = ({ data }) => {\n const styles = useStyles('ObjectPreview');\n const object = data;\n\n if (typeof object !== 'object' || object === null || object instanceof Date || object instanceof RegExp) {\n return <ObjectValue object={object} />;\n }\n\n if (Array.isArray(object)) {\n const maxProperties = styles.arrayMaxProperties;\n const previewArray = object\n .slice(0, maxProperties)\n .map((element, index) => <ObjectValue key={index} object={element} />);\n if (object.length > maxProperties) {\n previewArray.push(<span key=\"ellipsis\">…</span>);\n }\n const arrayLength = object.length;\n return (\n <React.Fragment>\n <span style={styles.objectDescription}>{arrayLength === 0 ? `` : `(${arrayLength})\\xa0`}</span>\n <span style={styles.preview}>[{intersperse(previewArray, ', ')}]</span>\n </React.Fragment>\n );\n } else {\n const maxProperties = styles.objectMaxProperties;\n const propertyNodes: ReactChild[] = [];\n for (const propertyName in object) {\n if (hasOwnProperty.call(object, propertyName)) {\n let ellipsis;\n if (propertyNodes.length === maxProperties - 1 && Object.keys(object).length > maxProperties) {\n ellipsis = <span key={'ellipsis'}>…</span>;\n }\n\n const propertyValue = getPropertyValue(object, propertyName);\n propertyNodes.push(\n <span key={propertyName}>\n <ObjectName name={propertyName || `\"\"`} />\n : \n <ObjectValue object={propertyValue} />\n {ellipsis}\n </span>\n );\n if (ellipsis) break;\n }\n }\n\n const objectConstructorName = object.constructor ? object.constructor.name : 'Object';\n\n return (\n <React.Fragment>\n <span style={styles.objectDescription}>\n {objectConstructorName === 'Object' ? '' : `${objectConstructorName} `}\n </span>\n <span style={styles.preview}>\n {'{'}\n {intersperse(propertyNodes, ', ')}\n {'}'}\n </span>\n </React.Fragment>\n );\n }\n};\n","import React, { FC } from 'react';\n\nimport { useStyles } from '../styles';\n\n/**\n * A short description of the object values.\n * Can be used to render tree node in ObjectInspector\n * or render objects in TableInspector.\n */\nexport const ObjectValue: FC<any> = ({ object, styles }) => {\n const themeStyles = useStyles('ObjectValue');\n\n const mkStyle = (key: any) => ({ ...themeStyles[key], ...styles });\n\n switch (typeof object) {\n case 'bigint':\n return <span style={mkStyle('objectValueNumber')}>{String(object)}n</span>;\n case 'number':\n return <span style={mkStyle('objectValueNumber')}>{String(object)}</span>;\n case 'string':\n return <span style={mkStyle('objectValueString')}>\"{object}\"</span>;\n case 'boolean':\n return <span style={mkStyle('objectValueBoolean')}>{String(object)}</span>;\n case 'undefined':\n return <span style={mkStyle('objectValueUndefined')}>undefined</span>;\n case 'object':\n if (object === null) {\n return <span style={mkStyle('objectValueNull')}>null</span>;\n }\n if (object instanceof Date) {\n return <span>{object.toString()}</span>;\n }\n if (object instanceof RegExp) {\n return <span style={mkStyle('objectValueRegExp')}>{object.toString()}</span>;\n }\n if (Array.isArray(object)) {\n return <span>{`Array(${object.length})`}</span>;\n }\n if (!object.constructor) {\n return <span>Object</span>;\n }\n if (typeof object.constructor.isBuffer === 'function' && object.constructor.isBuffer(object)) {\n return <span>{`Buffer[${object.length}]`}</span>;\n }\n\n return <span>{object.constructor.name}</span>;\n case 'function':\n return (\n <span>\n <span style={mkStyle('objectValueFunctionPrefix')}>ƒ </span>\n <span style={mkStyle('objectValueFunctionName')}>{object.name}()</span>\n </span>\n );\n case 'symbol':\n return <span style={mkStyle('objectValueSymbol')}>{object.toString()}</span>;\n default:\n return <span />;\n }\n};\n\n// ObjectValue.propTypes = {\n// // the object to describe\n// object: PropTypes.any,\n// };\n","export const hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const propertyIsEnumerable = Object.prototype.propertyIsEnumerable;\n","export function getPropertyValue(object, propertyName) {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(object, propertyName);\n if (propertyDescriptor.get) {\n try {\n return propertyDescriptor.get();\n } catch {\n return propertyDescriptor.get;\n }\n }\n\n return object[propertyName];\n}\n","import React, { FC } from 'react';\nimport { ObjectName } from '../object/ObjectName';\nimport { ObjectValue } from '../object/ObjectValue';\nimport { ObjectPreview } from './ObjectPreview';\n\n/**\n * if isNonenumerable is specified, render the name dimmed\n */\nexport const ObjectLabel: FC<any> = ({ name, data, isNonenumerable = false }) => {\n const object = data;\n\n return (\n <span>\n {typeof name === 'string' ? <ObjectName name={name} dimmed={isNonenumerable} /> : <ObjectPreview data={name} />}\n <span>: </span>\n <ObjectValue object={object} />\n </span>\n );\n};\n\n// ObjectLabel.propTypes = {\n// /** Non enumerable object property will be dimmed */\n// isNonenumerable: PropTypes.bool,\n// };\n","/**\n * Specs:\n * https://developer.chrome.com/devtools/docs/commandline-api#tabledata-columns\n * https://developer.mozilla.org/en-US/docs/Web/API/Console/table\n */\n\nimport React, { FC, useCallback, useState } from 'react';\n\nimport { getHeaders } from './getHeaders';\nimport { DataContainer } from './DataContainer';\nimport { HeaderContainer } from './HeaderContainer';\n\nimport { themeAcceptor, useStyles } from '../styles';\n\nconst TableInspector: FC<any> = ({\n // The JS object you would like to inspect, either an array or an object\n data,\n // An array of the names of the columns you'd like to display in the table\n columns,\n}) => {\n const styles = useStyles('TableInspector');\n\n const [{ sorted, sortIndexColumn, sortColumn, sortAscending }, setState] = useState({\n // has user ever clicked the <th> tag to sort?\n sorted: false,\n // is index column sorted?\n sortIndexColumn: false,\n // which column is sorted?\n sortColumn: undefined,\n // is sorting ascending or descending?\n sortAscending: false,\n });\n\n const handleIndexTHClick = useCallback(() => {\n setState(({ sortIndexColumn, sortAscending }) => ({\n sorted: true,\n sortIndexColumn: true,\n sortColumn: undefined,\n // when changed to a new column, default to asending\n sortAscending: sortIndexColumn ? !sortAscending : true,\n }));\n }, []);\n\n const handleTHClick = useCallback((col) => {\n setState(({ sortColumn, sortAscending }) => ({\n sorted: true,\n sortIndexColumn: false,\n // update sort column\n sortColumn: col,\n // when changed to a new column, default to asending\n sortAscending: col === sortColumn ? !sortAscending : true,\n }));\n }, []);\n\n if (typeof data !== 'object' || data === null) {\n return <div />;\n }\n\n let { rowHeaders, colHeaders } = getHeaders(data);\n\n // columns to be displayed are specified\n // NOTE: there's some space for optimization here\n if (columns !== undefined) {\n colHeaders = columns;\n }\n\n let rowsData = rowHeaders.map((rowHeader) => data[rowHeader]);\n\n let columnDataWithRowIndexes; /* row indexes are [0..nRows-1] */\n // TODO: refactor\n if (sortColumn !== undefined) {\n // the column to be sorted (rowsData, column) => [[columnData, rowIndex]]\n columnDataWithRowIndexes = rowsData.map((rowData, index: number) => {\n // normalize rowData\n if (typeof rowData === 'object' && rowData !== null /*&& rowData.hasOwnProperty(sortColumn)*/) {\n const columnData = rowData[sortColumn];\n return [columnData, index];\n }\n return [undefined, index];\n });\n } else {\n if (sortIndexColumn) {\n columnDataWithRowIndexes = rowHeaders.map((rowData, index: number) => {\n const columnData = rowHeaders[index];\n return [columnData, index];\n });\n }\n }\n if (columnDataWithRowIndexes !== undefined) {\n // apply a mapper before sorting (because we need to access inside a container)\n const comparator = (mapper, ascending) => {\n return (a, b) => {\n const v1 = mapper(a); // the datum\n const v2 = mapper(b);\n const type1 = typeof v1;\n const type2 = typeof v2;\n // use '<' operator to compare same type of values or compare type precedence order #\n const lt = (v1, v2) => {\n if (v1 < v2) {\n return -1;\n } else if (v1 > v2) {\n return 1;\n } else {\n return 0;\n }\n };\n let result;\n if (type1 === type2) {\n result = lt(v1, v2);\n } else {\n // order of different types\n const order = {\n string: 0,\n number: 1,\n object: 2,\n symbol: 3,\n boolean: 4,\n undefined: 5,\n function: 6,\n };\n result = lt(order[type1], order[type2]);\n }\n // reverse result if descending\n if (!ascending) result = -result;\n return result;\n };\n };\n const sortedRowIndexes = columnDataWithRowIndexes\n .sort(comparator((item) => item[0], sortAscending))\n .map((item) => item[1]); // sorted row indexes\n rowHeaders = sortedRowIndexes.map((i) => rowHeaders[i]);\n rowsData = sortedRowIndexes.map((i) => rowsData[i]);\n }\n\n return (\n <div style={styles.base}>\n <HeaderContainer\n columns={colHeaders}\n /* for sorting */\n sorted={sorted}\n sortIndexColumn={sortIndexColumn}\n sortColumn={sortColumn}\n sortAscending={sortAscending}\n onTHClick={handleTHClick}\n onIndexTHClick={handleIndexTHClick}\n />\n <DataContainer rows={rowHeaders} columns={colHeaders} rowsData={rowsData} />\n </div>\n );\n};\n\n// TableInspector.propTypes = {\n// /**\n// * the Javascript object you would like to inspect, either an array or an object\n// */\n// data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n// /**\n// * An array of the names of the columns you'd like to display in the table\n// */\n// columns: PropTypes.array,\n// };\n\nconst themedTableInspector = themeAcceptor(TableInspector);\n\nexport { themedTableInspector as TableInspector };\n","export function getHeaders(data): any {\n if (typeof data === 'object') {\n let rowHeaders: any[] = [];\n // is an array\n if (Array.isArray(data)) {\n const nRows = data.length;\n rowHeaders = [...Array(nRows).keys()];\n } else if (data !== null) {\n // is an object\n // keys are row indexes\n rowHeaders = Object.keys(data);\n }\n\n // Time: O(nRows * nCols)\n const colHeaders = rowHeaders.reduce((colHeaders, rowHeader) => {\n const row = data[rowHeader];\n if (typeof row === 'object' && row !== null) {\n /* O(nCols) Could optimize `includes` here */\n const cols = Object.keys(row);\n cols.reduce((xs, x) => {\n if (!xs.includes(x)) {\n /* xs is the colHeaders to be filled by searching the row's indexes */\n xs.push(x);\n }\n return xs;\n }, colHeaders);\n }\n return colHeaders;\n }, []);\n return {\n rowHeaders: rowHeaders,\n colHeaders: colHeaders,\n };\n }\n return undefined;\n}\n","import React from 'react';\nimport { ObjectValue } from '../object/ObjectValue';\n\nimport { hasOwnProperty } from '../utils/objectPrototype';\n\nimport { useStyles } from '../styles';\n\nexport const DataContainer = ({ rows, columns, rowsData }) => {\n const styles = useStyles('TableInspectorDataContainer');\n const borderStyles = useStyles('TableInspectorLeftBorder');\n\n return (\n <div style={styles.div}>\n <table style={styles.table}>\n <colgroup />\n <tbody>\n {rows.map((row, i) => (\n <tr key={row} style={styles.tr}>\n <td style={{ ...styles.td, ...borderStyles.none }}>{row}</td>\n\n {columns.map((column) => {\n const rowData = rowsData[i];\n // rowData could be\n // object -> index by key\n // array -> index by array index\n // null -> pass\n // boolean -> pass\n // string -> pass (hasOwnProperty returns true for [0..len-1])\n // number -> pass\n // function -> pass\n // symbol\n // undefined -> pass\n if (typeof rowData === 'object' && rowData !== null && hasOwnProperty.call(rowData, column)) {\n return (\n <td key={column} style={{ ...styles.td, ...borderStyles.solid }}>\n <ObjectValue object={rowData[column]} />\n </td>\n );\n } else {\n return <td key={column} style={{ ...styles.td, ...borderStyles.solid }} />;\n }\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n","import React from 'react';\nimport { useStyles } from '../styles';\nimport { TH } from './TH';\n\nexport const HeaderContainer = ({\n indexColumnText = '(index)',\n columns = [],\n sorted,\n sortIndexColumn,\n sortColumn,\n sortAscending,\n onTHClick,\n onIndexTHClick,\n}) => {\n const styles = useStyles('TableInspectorHeaderContainer');\n const borderStyles = useStyles('TableInspectorLeftBorder');\n return (\n <div style={styles.base}>\n <table style={styles.table}>\n <tbody>\n <tr>\n <TH\n borderStyle={borderStyles.none}\n sorted={sorted && sortIndexColumn}\n sortAscending={sortAscending}\n onClick={onIndexTHClick}>\n {indexColumnText}\n </TH>\n {columns.map((column) => (\n <TH\n borderStyle={borderStyles.solid}\n key={column}\n sorted={sorted && sortColumn === column}\n sortAscending={sortAscending}\n onClick={onTHClick.bind(null, column)}>\n {column}\n </TH>\n ))}\n </tr>\n </tbody>\n </table>\n </div>\n );\n};\n","import React, { useCallback, useState } from 'react';\n\nimport { useStyles } from '../styles';\n\nconst SortIconContainer = (props) => (\n <div\n style={{\n position: 'absolute',\n top: 1,\n right: 0,\n bottom: 1,\n display: 'flex',\n alignItems: 'center',\n }}>\n {props.children}\n </div>\n);\n\nconst SortIcon = ({ sortAscending }) => {\n const styles = useStyles('TableInspectorSortIcon');\n const glyph = sortAscending ? '▲' : '▼';\n return <div style={styles}>{glyph}</div>;\n};\n\nexport const TH = ({\n sortAscending = false,\n sorted = false,\n onClick = undefined,\n borderStyle = {},\n children,\n ...thProps\n}) => {\n const styles = useStyles('TableInspectorTH');\n const [hovered, setHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => setHovered(true), []);\n const handleMouseLeave = useCallback(() => setHovered(false), []);\n\n return (\n <th\n {...thProps}\n style={{\n ...styles.base,\n ...borderStyle,\n ...(hovered ? styles.base[':hover'] : {}),\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={onClick}>\n <div style={styles.div}>{children}</div>\n {sorted && (\n <SortIconContainer>\n <SortIcon sortAscending={sortAscending} />\n </SortIconContainer>\n )}\n </th>\n );\n};\n","import React, { FC } from 'react';\n\nimport { DOMNodePreview } from './DOMNodePreview';\nimport { TreeView } from '../tree-view/TreeView';\n\nimport { shouldInline } from './shouldInline';\nimport { themeAcceptor } from '../styles';\n\nconst domIterator = function* (data: any) {\n if (data && data.childNodes) {\n const textInlined = shouldInline(data);\n\n if (textInlined) {\n return;\n }\n\n for (let i = 0; i < data.childNodes.length; i++) {\n const node = data.childNodes[i];\n\n if (node.nodeType === Node.TEXT_NODE && node.textContent.trim().length === 0) continue;\n\n yield {\n name: `${node.tagName}[${i}]`,\n data: node,\n };\n }\n\n // at least 1 child node\n if (data.tagName) {\n yield {\n name: 'CLOSE_TAG',\n data: {\n tagName: data.tagName,\n },\n isCloseTag: true,\n };\n }\n }\n};\n\nconst DOMInspector: FC<any> = (props) => {\n return <TreeView nodeRenderer={DOMNodePreview} dataIterator={domIterator} {...props} />;\n};\n\n// DOMInspector.propTypes = {\n// // The DOM Node to inspect\n// data: PropTypes.object.isRequired,\n// };\n\nconst themedDOMInspector = themeAcceptor(DOMInspector);\n\nexport { themedDOMInspector as DOMInspector };\n","import React, { FC, ReactChild } from 'react';\n\nimport { useStyles } from '../styles';\nimport { shouldInline } from './shouldInline';\n\nconst OpenTag: FC<any> = ({ tagName, attributes, styles }) => {\n return (\n <span style={styles.base}>\n {'<'}\n <span style={styles.tagName}>{tagName}</span>\n\n {(() => {\n if (attributes) {\n const attributeNodes: ReactChild[] = [];\n for (let i = 0; i < attributes.length; i++) {\n const attribute = attributes[i];\n attributeNodes.push(\n <span key={i}>\n {' '}\n <span style={styles.htmlAttributeName}>{attribute.name}</span>\n {'=\"'}\n <span style={styles.htmlAttributeValue}>{attribute.value}</span>\n {'\"'}\n </span>\n );\n }\n return attributeNodes;\n }\n })()}\n\n {'>'}\n </span>\n );\n};\n\n// isChildNode style={{ marginLeft: -12 /* hack: offset placeholder */ }}\nconst CloseTag = ({ tagName, isChildNode = false, styles }) => (\n <span style={Object.assign({}, styles.base, isChildNode && styles.offsetLeft)}>\n {'</'}\n <span style={styles.tagName}>{tagName}</span>\n {'>'}\n </span>\n);\n\nconst nameByNodeType = {\n 1: 'ELEMENT_NODE',\n 3: 'TEXT_NODE',\n 7: 'PROCESSING_INSTRUCTION_NODE',\n 8: 'COMMENT_NODE',\n 9: 'DOCUMENT_NODE',\n 10: 'DOCUMENT_TYPE_NODE', // http://stackoverflow.com/questions/6088972/get-doctype-of-an-html-as-string-with-javascript\n 11: 'DOCUMENT_FRAGMENT_NODE',\n};\n\nexport const DOMNodePreview: FC<any> = ({ isCloseTag, data, expanded }) => {\n const styles = useStyles('DOMNodePreview');\n\n if (isCloseTag) {\n return <CloseTag styles={styles.htmlCloseTag} isChildNode tagName={data.tagName} />;\n }\n\n switch (data.nodeType) {\n case Node.ELEMENT_NODE:\n return (\n <span>\n <OpenTag tagName={data.tagName} attributes={data.attributes} styles={styles.htmlOpenTag} />\n\n {shouldInline(data) ? data.textContent : !expanded && '…'}\n\n {!expanded && <CloseTag tagName={data.tagName} styles={styles.htmlCloseTag} />}\n </span>\n );\n case Node.TEXT_NODE:\n return <span>{data.textContent}</span>;\n case Node.CDATA_SECTION_NODE:\n return <span>{'<![CDATA[' + data.textContent + ']]>'}</span>;\n case Node.COMMENT_NODE:\n return (\n <span style={styles.htmlComment}>\n {'<!--'}\n {data.textContent}\n {'-->'}\n </span>\n );\n case Node.PROCESSING_INSTRUCTION_NODE:\n return <span>{data.nodeName}</span>;\n case Node.DOCUMENT_TYPE_NODE:\n return (\n <span style={styles.htmlDoctype}>\n {'<!DOCTYPE '}\n {data.name}\n {data.publicId ? ` PUBLIC \"${data.publicId}\"` : ''}\n {!data.publicId && data.systemId ? ' SYSTEM' : ''}\n {data.systemId ? ` \"${data.systemId}\"` : ''}\n {'>'}\n </span>\n );\n case Node.DOCUMENT_NODE:\n return <span>{data.nodeName}</span>;\n case Node.DOCUMENT_FRAGMENT_NODE:\n return <span>{data.nodeName}</span>;\n default:\n return <span>{nameByNodeType[data.nodeType]}</span>;\n }\n};\n\n// DOMNodePreview.propTypes = {\n// /** If true, just render a close tag */\n// isCloseTag: PropTypes.bool,\n// /** */\n// name: PropTypes.string,\n// /** The DOM Node */\n// data: PropTypes.object.isRequired,\n// /** Whether the DOM node has been expanded. */\n// expanded: PropTypes.bool.isRequired,\n// };\n","const TEXT_NODE_MAX_INLINE_CHARS = 80;\n\nexport const shouldInline = (data) =>\n data.childNodes.length === 0 ||\n (data.childNodes.length === 1 &&\n data.childNodes[0].nodeType === Node.TEXT_NODE &&\n data.textContent.length < TEXT_NODE_MAX_INLINE_CHARS);\n","export { chromeLight, chromeDark } from './styles/themes';\n\nimport { ObjectInspector } from './object-inspector/ObjectInspector';\nimport { TableInspector } from './table-inspector/TableInspector';\nimport { DOMInspector } from './dom-inspector/DOMInspector';\n\nimport { ObjectLabel } from './object-inspector/ObjectLabel';\nimport { ObjectPreview } from './object-inspector/ObjectPreview';\nimport { ObjectRootLabel } from './object-inspector/ObjectRootLabel';\n\nimport { ObjectValue } from './object/ObjectValue';\nimport { ObjectName } from './object/ObjectName';\n\nexport { TableInspector, ObjectInspector, ObjectLabel, ObjectPreview, ObjectRootLabel, ObjectValue, ObjectName };\n\nimport React, { ComponentProps, FC } from 'react';\nimport isDOM from 'is-dom';\n\nexport const Inspector: FC<TableInspectorProps | ObjectInspectorProps> = ({ table = false, data, ...rest }) => {\n if (table) {\n return <TableInspector data={data} {...rest} />;\n }\n\n if (isDOM(data)) return <DOMInspector data={data} {...rest} />;\n\n return <ObjectInspector data={data} {...rest} />;\n};\n\ninterface TableInspectorProps extends ComponentProps<typeof TableInspector> {\n table: true;\n}\ninterface ObjectInspectorProps extends ComponentProps<typeof ObjectInspector> {\n table: false;\n}\n","\"use client\";\n\nimport {\n GetAtPath,\n Observable,\n ObservableOptions,\n PathKey,\n} from \"@noya-app/observable\";\nimport { useMemo, useSyncExternalStore } from \"react\";\n\n// Overloads for when observable is definitely defined\nexport function useObservable<T>(observable: Observable<T>): T;\nexport function useObservable<T, A>(\n observable: Observable<T>,\n selector: (value: T) => A,\n options?: Pick<ObservableOptions, \"isEqual\">\n): A;\nexport function useObservable<T, P extends PathKey[] | string>(\n observable: Observable<T>,\n path: P\n): GetAtPath<T, P>;\n\n// Overloads for when observable might be undefined\nexport function useObservable<T>(\n observable: Observable<T> | undefined\n): T | undefined;\nexport function useObservable<T, A>(\n observable: Observable<T> | undefined,\n selector: (value: T) => A,\n options?: Pick<ObservableOptions, \"isEqual\">\n): A | undefined;\nexport function useObservable<T, P extends PathKey[] | string>(\n observable: Observable<T> | undefined,\n path: P\n): GetAtPath<T, P> | undefined;\n\n// Implementation\nexport function useObservable<T, P extends PathKey[]>(\n observable: Observable<T> | undefined,\n pathOrSelector?: P | ((value: T) => any),\n options?: Pick<ObservableOptions, \"isEqual\">\n) {\n const { get, listen } = useMemo(() => {\n if (!observable) {\n return {\n get: () => undefined,\n listen: () => () => {},\n };\n }\n\n if (typeof pathOrSelector === \"function\") {\n const mappedObservable = observable.map(pathOrSelector, {\n isEqual: options?.isEqual,\n });\n return {\n get: mappedObservable.get,\n listen: mappedObservable.subscribe,\n };\n }\n\n const listen = pathOrSelector\n ? (callback: (value: GetAtPath<T, P>) => void) =>\n observable.subscribe(pathOrSelector, callback)\n : observable.subscribe;\n\n const get: () => void = pathOrSelector\n ? () => observable.get(pathOrSelector)\n : observable.get;\n\n return { get, listen };\n }, [observable, pathOrSelector, options?.isEqual]);\n\n return useSyncExternalStore(listen, get, get);\n}\n","import React from \"react\";\n\nexport function ColoredDot({ type }: { type: \"success\" | \"error\" }) {\n return (\n <span\n style={{\n display: \"inline-block\",\n width: 6,\n height: 6,\n background:\n type === \"success\" ? \"rgba(0,200,0,0.8)\" : \"rgba(200,0,0,0.8)\",\n borderRadius: \"50%\",\n verticalAlign: \"middle\",\n }}\n />\n );\n}\n","import { chromeDark, chromeLight } from \"react-inspector\";\n\nexport const lightInspectorTheme = {\n ...chromeLight,\n BASE_BACKGROUND_COLOR: \"transparent\",\n OBJECT_NAME_COLOR: \"rgba(0,0,0,0.7)\",\n} as any;\n\nexport const darkInspectorTheme = {\n ...chromeDark,\n BASE_BACKGROUND_COLOR: \"transparent\",\n OBJECT_NAME_COLOR: \"rgba(255,255,255,0.7)\",\n} as any;\n\nexport const getStateInspectorTheme = (colorScheme: \"light\" | \"dark\") => {\n return colorScheme === \"light\" ? lightInspectorTheme : darkInspectorTheme;\n};\n\nexport const getStateInspectorBorderColor = (colorScheme: \"light\" | \"dark\") => {\n return colorScheme === \"light\" ? \"rgb(223 223 223)\" : \"rgb(29 29 29)\";\n};\n","import { ConnectionEvent } from \"@noya-app/state-manager\";\nimport React from \"react\";\nimport { ObjectInspector, ObjectLabel } from \"react-inspector\";\nimport { getStateInspectorTheme } from \"../inspectorTheme\";\nimport { ObjectRootLabel } from \"../ObjectRootLabel\";\nimport {\n StateInspectorDisclosureRowInner,\n StateInspectorDisclosureSection,\n} from \"../StateInspectorDisclosureSection\";\nimport { StateInspectorRow } from \"../StateInspectorRow\";\n\nexport function EventsSection<S>({\n showEvents,\n setShowEvents,\n colorScheme,\n eventsContainerRef,\n connectionEvents,\n}: {\n showEvents: boolean;\n setShowEvents: (value: boolean) => void;\n colorScheme: \"light\" | \"dark\";\n eventsContainerRef: React.RefObject<HTMLDivElement | null>;\n connectionEvents: ConnectionEvent<S>[];\n}) {\n const theme = getStateInspectorTheme(colorScheme);\n\n return (\n <StateInspectorDisclosureSection\n open={showEvents}\n setOpen={setShowEvents}\n title=\"Events\"\n colorScheme={colorScheme}\n >\n <StateInspectorDisclosureRowInner ref={eventsContainerRef}>\n {connectionEvents?.map((event, index) =>\n event.type === \"stateChange\" ? (\n <StateInspectorRow key={index} colorScheme={colorScheme}>\n connection:{\" \"}\n <span style={{ fontStyle: \"italic\" }}>\n {event.state.toLowerCase()}\n </span>\n </StateInspectorRow>\n ) : (\n <StateInspectorRow\n key={index}\n colorScheme={colorScheme}\n variant={event.type === \"send\" ? \"up\" : \"down\"}\n style={{\n padding: \"0px 12px 1px\",\n }}\n >\n <ObjectInspector\n data={event.type === \"error\" ? event.error : event.message}\n theme={theme}\n nodeRenderer={({ depth, name, data, isNonenumerable }: any) => {\n const direction = event.type === \"send\" ? \"up\" : \"down\";\n\n return depth === 0 ? (\n <ObjectRootLabel direction={direction} data={data} />\n ) : (\n <ObjectLabel\n direction={direction}\n name={name}\n data={data}\n isNonenumerable={isNonenumerable}\n />\n );\n }}\n />\n </StateInspectorRow>\n )\n )}\n {!connectionEvents && (\n <div\n style={{\n padding: \"12px\",\n fontSize: \"12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n }}\n >\n <span>No recorded events</span>\n </div>\n )}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n );\n}\n","import React, { FC } from \"react\";\nimport { ObjectName, ObjectPreview } from \"react-inspector\";\n\ntype MessageDirection = \"up\" | \"down\";\n\nexport const ObjectRootLabel: FC<{\n name?: string;\n data: any;\n direction?: MessageDirection;\n}> = ({ name, data, direction }) => {\n if (typeof name === \"string\") {\n return (\n <span>\n <ObjectName name={name} />\n <span>: </span>\n <ObjectPreview data={data} />\n </span>\n );\n }\n if (direction === \"up\" || direction === \"down\") {\n const arrow = direction === \"up\" ? \"↑\" : \"↓\";\n\n return (\n <span>\n <span\n style={{\n background:\n direction === \"up\" ? \"rgba(0,255,0,0.2)\" : \"rgba(255,0,0,0.2)\",\n // color: \"white\",\n width: 12,\n height: 12,\n borderRadius: 2,\n display: \"inline-flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n marginRight: 4,\n lineHeight: \"12px\",\n }}\n >\n {arrow}\n </span>\n <ObjectPreview data={data} />\n </span>\n );\n } else {\n return <ObjectPreview data={data} />;\n }\n};\n","\"use client\";\n\nimport React, {\n CSSProperties,\n DetailedHTMLProps,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n} from \"react\";\nimport { darkInspectorTheme, lightInspectorTheme } from \"./inspectorTheme\";\nimport { StateInspectorArrow } from \"./StateInspectorArrow\";\n\nexport function StateInspectorDisclosureSection({\n open,\n setOpen,\n title,\n right,\n children,\n colorScheme,\n isFirst,\n style,\n}: {\n open: boolean;\n setOpen?: (value: boolean) => void;\n title: React.ReactNode;\n right?: React.ReactNode;\n children: React.ReactNode;\n colorScheme: \"light\" | \"dark\";\n isFirst?: boolean;\n style?: CSSProperties;\n}) {\n const theme =\n colorScheme === \"light\" ? lightInspectorTheme : darkInspectorTheme;\n\n const borderColor =\n colorScheme === \"light\" ? \"rgba(0,0,0,0.1)\" : \"rgba(255,255,255,0.1)\";\n\n return (\n <div\n style={{\n flex: open ? \"1 1 0\" : \"0\",\n display: \"flex\",\n flexDirection: \"column\",\n ...style,\n }}\n >\n <div\n onClick={() => setOpen?.(!open)}\n style={{\n cursor: \"default\",\n fontSize: \"12px\",\n padding: \"4px 10px\",\n display: \"flex\",\n alignItems: \"center\",\n ...(!isFirst && { borderTop: `1px solid ${borderColor}` }),\n ...(open && { borderBottom: `1px solid ${borderColor}` }),\n }}\n >\n {setOpen && (\n <StateInspectorArrow\n expanded={open}\n style={{\n fontSize: theme.ARROW_FONT_SIZE,\n marginRight: theme.ARROW_MARGIN_RIGHT + 1,\n color: theme.ARROW_COLOR,\n }}\n />\n )}\n <span style={{ flex: \"1 1 0\", userSelect: \"none\" }}>{title}</span>\n {right}\n </div>\n {open && children}\n </div>\n );\n}\n\nexport const StateInspectorDisclosureRowInner = forwardRef(\n function StateInspectorDisclosureRowInner(\n props: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n ) {\n return (\n <div\n style={{\n flex: \"1 1 0\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n ...props.style,\n }}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n);\n","import React, { CSSProperties } from \"react\";\n\n// Rotates ▶️ or ▼ based on expanded state\nexport function StateInspectorArrow({\n expanded,\n onClick,\n style,\n}: {\n expanded: boolean;\n onClick?: () => void;\n style?: CSSProperties;\n}) {\n return (\n <span\n role=\"button\"\n onClick={onClick}\n style={{\n display: \"inline-block\",\n textAlign: \"center\",\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n fontFamily: \"Menlo, monospace\",\n ...style,\n }}\n >\n {\"▼\"}\n </span>\n );\n}\n","\"use client\";\n\nimport React, { CSSProperties } from \"react\";\n\nexport function StateInspectorRow({\n children,\n colorScheme,\n selected,\n style,\n variant,\n}: {\n children: React.ReactNode;\n colorScheme: \"light\" | \"dark\";\n selected?: boolean;\n style?: CSSProperties;\n variant?: \"up\" | \"down\";\n}) {\n const solidBorderColor =\n colorScheme === \"light\" ? \"rgb(223 223 223)\" : \"rgb(29 29 29)\";\n\n return (\n <div\n style={{\n borderBottom: `1px solid ${solidBorderColor}`,\n fontSize: \"12px\",\n fontFamily: \"Menlo, monospace\",\n padding: \"2px 12px 1px\",\n display: \"flex\",\n alignItems: \"center\",\n background:\n variant === \"up\"\n ? \"rgba(0,255,0,0.1)\"\n : variant === \"down\"\n ? \"transparent\"\n : selected\n ? \"rgb(59 130 246 / 15%)\"\n : undefined,\n // background:\n // colorScheme === \"light\"\n // ? \"rgba(0,0,0,0.05)\"\n // : \"rgba(255,255,255,0.05)\",\n ...style,\n }}\n >\n <span\n style={{\n fontFamily: \"Menlo, monospace\",\n fontSize: \"11px\",\n borderRadius: 4,\n display: \"inline-block\",\n }}\n >\n {children}\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n HistorySnapshot,\n MultiplayerPatchMetadata,\n MultiplayerStateManager,\n} from \"@noya-app/state-manager\";\nimport React, { useEffect, useRef } from \"react\";\nimport { ObjectInspector } from \"react-inspector\";\nimport { StateInspectorButton } from \"../StateInspectorButton\";\nimport {\n StateInspectorDisclosureRowInner,\n StateInspectorDisclosureSection,\n} from \"../StateInspectorDisclosureSection\";\nimport {\n getStateInspectorBorderColor,\n getStateInspectorTheme,\n} from \"../inspectorTheme\";\nimport { pathToString } from \"../utils\";\n\nconst HISTORY_ELEMENT_PREFIX = \"noya-multiplayer-history-\";\n\nexport function HistorySection<S, M extends object>({\n showHistory,\n setShowHistory,\n colorScheme,\n historySnapshot,\n multiplayerStateManager,\n}: {\n showHistory: boolean;\n setShowHistory: (value: boolean) => void;\n colorScheme: \"light\" | \"dark\";\n historySnapshot: HistorySnapshot<S, Partial<M> & MultiplayerPatchMetadata>;\n multiplayerStateManager: MultiplayerStateManager<S, M>;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const theme = getStateInspectorTheme(colorScheme);\n const solidBorderColor = getStateInspectorBorderColor(colorScheme);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.scrollTop = ref.current.scrollHeight;\n }\n }, [historySnapshot]);\n\n // If history index changes, scroll to the new history entry into view\n useEffect(() => {\n if (!ref.current) return;\n\n const historyEntry = ref.current.querySelector(\n `#${HISTORY_ELEMENT_PREFIX}${historySnapshot.historyIndex}`\n );\n\n if (historyEntry) {\n historyEntry.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n }\n }, [historySnapshot.historyIndex]);\n\n return (\n <StateInspectorDisclosureSection\n open={showHistory}\n setOpen={setShowHistory}\n title=\"History\"\n colorScheme={colorScheme}\n right={\n <span\n style={{\n display: \"flex\",\n gap: \"4px\",\n }}\n >\n <StateInspectorButton\n disabled={!historySnapshot.canUndo}\n theme={theme}\n onClick={() => {\n multiplayerStateManager.undo();\n }}\n >\n <span style={{ width: \"12px\", height: \"12px\" }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fill=\"currentColor\"\n d=\"M12 5H7V2L1 6l6 4V7h5c2.2 0 4 1.8 4 4s-1.8 4-4 4H7v2h5c3.3 0 6-2.7 6-6s-2.7-6-6-6\"\n />\n </svg>\n </span>\n </StateInspectorButton>\n <StateInspectorButton\n disabled={!historySnapshot.canRedo}\n theme={theme}\n onClick={() => {\n multiplayerStateManager.redo();\n }}\n >\n <span style={{ width: \"12px\", height: \"12px\" }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fill=\"currentColor\"\n d=\"M8 5h5V2l6 4l-6 4V7H8c-2.2 0-4 1.8-4 4s1.8 4 4 4h5v2H8c-3.3 0-6-2.7-6-6s2.7-6 6-6\"\n />\n </svg>\n </span>\n </StateInspectorButton>\n </span>\n }\n >\n <StateInspectorDisclosureRowInner ref={ref}>\n <div\n id={`${HISTORY_ELEMENT_PREFIX}0`}\n style={{\n borderBottom: `1px solid ${solidBorderColor}`,\n fontSize: \"12px\",\n fontFamily: \"Menlo, monospace\",\n padding: \"2px 12px 1px\",\n display: \"flex\",\n alignItems: \"center\",\n background:\n historySnapshot.historyIndex === 0\n ? \"rgb(59 130 246 / 15%)\"\n : undefined,\n }}\n >\n <span\n style={{\n fontFamily: \"Menlo, monospace\",\n fontSize: \"11px\",\n borderRadius: 4,\n display: \"inline-block\",\n }}\n >\n Initial state\n </span>\n </div>\n {historySnapshot.history.map((entry, index) => {\n const metadata = entry.metadata;\n const { id, name, timestamp, ...rest } = metadata;\n\n return (\n <div\n id={`${HISTORY_ELEMENT_PREFIX}${index + 1}`}\n key={index}\n style={{\n padding: \"0px 12px 1px\",\n borderBottom: `1px solid ${solidBorderColor}`,\n background:\n index + 1 === historySnapshot.historyIndex\n ? \"rgb(59 130 246 / 15%)\"\n : undefined,\n }}\n >\n {typeof name === \"string\" && (\n <pre\n style={{\n fontSize: \"11px\",\n display: \"flex\",\n flexWrap: \"wrap\",\n margin: 0,\n }}\n >\n {entry.metadata.name}\n {Object.keys(rest).length > 0 && (\n <ObjectInspector data={rest} theme={theme} />\n )}\n </pre>\n )}\n {entry.redoPatches?.map((patch, j) => (\n <pre\n key={j}\n style={{\n fontSize: \"11px\",\n display: \"flex\",\n flexWrap: \"wrap\",\n margin: 0,\n }}\n >\n {patch.op === \"add\" && (\n <>\n <span style={{ fontStyle: \"italic\" }}>\n {pathToString(patch.path)}\n </span>\n {\" = \"}\n <ObjectInspector data={patch.value} theme={theme} />\n </>\n )}\n {patch.op === \"replace\" && (\n <>\n <span style={{ fontStyle: \"italic\" }}>\n {pathToString(patch.path)}\n </span>\n {\" = \"}\n <ObjectInspector data={patch.value} theme={theme} />\n </>\n )}\n {patch.op === \"remove\" && (\n <>\n <span style={{ color: theme.OBJECT_VALUE_STRING_COLOR }}>\n delete{\" \"}\n </span>\n <span style={{ fontStyle: \"italic\" }}>\n {pathToString(patch.path)}\n </span>\n </>\n )}\n {patch.op === \"move\" && (\n <>\n <span style={{ fontStyle: \"italic\" }}>\n {pathToString(patch.from!)}\n </span>\n {\" -> \"}\n <span style={{ fontStyle: \"italic\" }}>\n {pathToString(patch.path)}\n </span>\n </>\n )}\n </pre>\n ))}\n </div>\n );\n })}\n </StateInspectorDisclosureRowInner>\n </StateInspectorDisclosureSection>\n );\n}\n","import React, { CSSProperties } from \"react\";\nimport { lightInspectorTheme } from \"./inspectorTheme\";\n\nexport function StateInspectorButton({\n children,\n onClick,\n style,\n theme,\n disabled,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n style?: CSSProperties;\n theme: typeof lightInspectorTheme;\n disabled?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={(event) => {\n event.stopPropagation();\n onClick();\n }}\n style={{\n flex: \"0\",\n appearance: \"none\",\n background: \"none\",\n color: theme.BASE_COLOR,\n opacity: disabled ? 0.25 : 1,\n border: \"none\",\n fontSize: \"12px\",\n whiteSpace: \"nowrap\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0\",\n cursor: \"pointer\",\n ...style,\n }}\n >\n {children}\n </button>\n );\n}\n","import { ExtendedPathKey } from \"@noya-app/state-manager\";\n\nexport function pathToString(extendedPath: ExtendedPathKey[]) {\n return extendedPath\n .map((key) =>\n typeof key === \"object\"\n ? `:${ellipsis(key.id.toString(), 8, \"middle\")}`\n : key\n )\n .map((key, index) =>\n index === 0 || (typeof key === \"string\" && key.startsWith(\":\"))\n ? key\n : `.${key}`\n )\n .join(\"\");\n}\n\nexport type EllipsisPosition = \"start\" | \"middle\" | \"end\";\n\nexport function ellipsis(\n str: string,\n maxLength: number,\n position: EllipsisPosition = \"end\"\n) {\n if (str.length <= maxLength) return str;\n\n switch (position) {\n case \"start\":\n return `…${str.slice(str.length - maxLength)}`;\n case \"middle\": {\n const halfLength = Math.floor(maxLength / 2);\n return `${str.slice(0, halfLength)}…${str.slice(str.length - halfLength)}`;\n }\n case \"end\":\n return `${str.slice(0, maxLength)}…`;\n }\n}\n\nexport function uploadFile() {\n return new Promise<Blob>((resolve, reject) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = () => {\n const file = input.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = () => {\n const buffer = reader.result as ArrayBuffer;\n const blob = new Blob([buffer]);\n resolve(blob);\n };\n reader.onerror = () => {\n reject(new Error(\"Failed to read file\"));\n };\n reader.readAsArrayBuffer(file);\n }\n };\n input.click();\n });\n}\n","const CRC_TABLE: Uint32Array = (() => {\n const t = new Uint32Array(256);\n for (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[i] = c >>> 0;\n }\n return t;\n})();\n\nexport function crc32(u8: Uint8Array): number {\n let c = 0xffffffff;\n for (let i = 0; i < u8.length; i++)\n c = CRC_TABLE[(c ^ u8[i]) & 0xff] ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n","// -------------------------\n// Declarative header schemas + (en|de)coders\n// -------------------------\ntype ScalarType = \"u8\" | \"u16\" | \"u32\";\n\ntype LenFn = (ctx: Record<string, any>) => number;\n\n// Typed schema helpers\ntype NumberField<Name extends string, Kind extends ScalarType> = {\n name: Name;\n type: Kind;\n};\n\ntype BytesField<Name extends string> = {\n name: Name;\n type: \"bytes\";\n length: number | LenFn;\n};\n\ntype SchemaFieldConst<Name extends string = string> =\n | NumberField<Name, ScalarType>\n | BytesField<Name>;\n\ntype FieldValue<F> = F extends { type: \"bytes\" } ? Uint8Array : number;\n\ntype StructFromSchema<S extends readonly SchemaFieldConst<string>[]> = {\n [F in S[number] as F[\"name\"] & string]: FieldValue<F>;\n};\n\nexport const defineSchema = <\n const S extends readonly SchemaFieldConst<string>[],\n>(\n s: S\n) => s;\nexport const defineSchemas = <\n const M extends Record<string, readonly SchemaFieldConst<string>[]>,\n>(\n m: M\n) => m;\n\nexport type SchemaStructs<\n M extends Record<string, readonly SchemaFieldConst<string>[]>,\n> = {\n [K in keyof M]: StructFromSchema<M[K]>;\n};\n\nexport function sizeofFieldSpec(\n f: SchemaFieldConst<string>,\n ctx: Record<string, any>\n): number {\n if (f.type === \"bytes\")\n return typeof f.length === \"function\" ? (f.length as LenFn)(ctx) : f.length;\n return f.type === \"u8\" ? 1 : f.type === \"u16\" ? 2 : 4;\n}\n\nexport function writeStruct<S extends readonly SchemaFieldConst<string>[]>(\n schema: S,\n values: StructFromSchema<S>\n): Uint8Array {\n // compute total size (bytes fields may depend on previously set values)\n let total = 0;\n const ctx: Record<string, any> = { ...(values as any) };\n for (const f of schema) total += sizeofFieldSpec(f, ctx);\n\n const out = new Uint8Array(total);\n const view = new DataView(out.buffer);\n let o = 0;\n const vals = values as unknown as Record<string, any>;\n for (const f of schema) {\n if (f.type === \"bytes\") {\n const b: Uint8Array = vals[f.name];\n out.set(b, o);\n o += b.length;\n continue;\n }\n const n = Number(vals[f.name]) >>> 0;\n if (f.type === \"u8\") {\n view.setUint8(o, n);\n o += 1;\n } else if (f.type === \"u16\") {\n view.setUint16(o, n, true);\n o += 2;\n } else {\n view.setUint32(o, n, true);\n o += 4;\n }\n }\n return out;\n}\n\nexport function readStruct<S extends readonly SchemaFieldConst<string>[]>(\n view: DataView,\n offset: number,\n schema: S\n): { value: StructFromSchema<S>; offset: number } {\n const ctx: Record<string, any> = {};\n let o = offset;\n for (const f of schema) {\n if (f.type === \"bytes\") {\n const len =\n typeof f.length === \"function\" ? (f.length as LenFn)(ctx) : f.length;\n const u8 = new Uint8Array(view.buffer, view.byteOffset + o, len);\n ctx[f.name] = new Uint8Array(u8); // copy for safety\n o += len;\n } else if (f.type === \"u8\") {\n ctx[f.name] = view.getUint8(o);\n o += 1;\n } else if (f.type === \"u16\") {\n ctx[f.name] = view.getUint16(o, true);\n o += 2;\n } else {\n ctx[f.name] = view.getUint32(o, true);\n o += 4;\n }\n }\n return { value: ctx as StructFromSchema<S>, offset: o };\n}\n","/* eslint-disable @shopify/prefer-early-return */\n\n// TinyZip.ts — ultra-lightweight ZIP writer (no deps)\n// - UTF-8 file names, Store only (no compression)\n// - Optional top-level root folder so unzip creates a single directory\n// - No Zip64 (files and total size must be < 4 GiB)\n\nimport { crc32 } from \"./crc32\";\nimport { defineSchema, defineSchemas, readStruct, writeStruct } from \"./struct\";\n\nexport interface AddFileOptions {\n date?: Date;\n}\n\nexport interface TinyZipOptions {\n /** Place all entries under this top-level folder; creates the dir entry automatically. */\n root?: string;\n}\n\ninterface CentralEntry {\n nameBytes: Uint8Array;\n crc: number;\n compSize: number;\n uncompSize: number;\n method: number;\n time: number;\n dosDate: number;\n localHeaderOffset: number;\n externalAttrs: number; // DOS attrs low byte (0x10 = directory)\n}\n\n// -------------------------\n// Top-level helpers (no state)\n// -------------------------\nconst te = new TextEncoder();\n\nfunction utf8(s: string): Uint8Array {\n return te.encode(s);\n}\n\nfunction dosDateTime(d: Date = new Date()): {\n time: number;\n date: number;\n} {\n const time =\n (d.getHours() << 11) |\n (d.getMinutes() << 5) |\n Math.floor(d.getSeconds() / 2);\n const date =\n ((d.getFullYear() - 1980) << 9) | ((d.getMonth() + 1) << 5) | d.getDate();\n return { time, date };\n}\n\n// ZIP constants\nconst SIG = {\n LocalFile: 0x04034b50,\n CentralFile: 0x02014b50,\n EOCD: 0x06054b50,\n} as const;\n\nconst SCHEMA = defineSchemas({\n LocalFile: defineSchema([\n { name: \"signature\", type: \"u32\" },\n { name: \"versionNeeded\", type: \"u16\" },\n { name: \"flags\", type: \"u16\" },\n { name: \"method\", type: \"u16\" },\n { name: \"time\", type: \"u16\" },\n { name: \"date\", type: \"u16\" },\n { name: \"crc32\", type: \"u32\" },\n { name: \"compSize\", type: \"u32\" },\n { name: \"uncompSize\", type: \"u32\" },\n { name: \"nameLen\", type: \"u16\" },\n { name: \"extraLen\", type: \"u16\" },\n { name: \"name\", type: \"bytes\", length: (c) => c.nameLen },\n { name: \"extra\", type: \"bytes\", length: (c) => c.extraLen },\n ]),\n CentralFile: defineSchema([\n { name: \"signature\", type: \"u32\" },\n { name: \"versionMadeBy\", type: \"u16\" },\n { name: \"versionNeeded\", type: \"u16\" },\n { name: \"flags\", type: \"u16\" },\n { name: \"method\", type: \"u16\" },\n { name: \"time\", type: \"u16\" },\n { name: \"date\", type: \"u16\" },\n { name: \"crc32\", type: \"u32\" },\n { name: \"compSize\", type: \"u32\" },\n { name: \"uncompSize\", type: \"u32\" },\n { name: \"nameLen\", type: \"u16\" },\n { name: \"extraLen\", type: \"u16\" },\n { name: \"commentLen\", type: \"u16\" },\n { name: \"diskStart\", type: \"u16\" },\n { name: \"intAttrs\", type: \"u16\" },\n { name: \"extAttrs\", type: \"u32\" },\n { name: \"localHeaderOffset\", type: \"u32\" },\n { name: \"name\", type: \"bytes\", length: (c) => c.nameLen },\n { name: \"extra\", type: \"bytes\", length: (c) => c.extraLen },\n { name: \"comment\", type: \"bytes\", length: (c) => c.commentLen },\n ]),\n EOCD: defineSchema([\n { name: \"signature\", type: \"u32\" },\n { name: \"diskNum\", type: \"u16\" },\n { name: \"cdStartDisk\", type: \"u16\" },\n { name: \"cdRecordsOnDisk\", type: \"u16\" },\n { name: \"cdRecordsTotal\", type: \"u16\" },\n { name: \"cdSize\", type: \"u32\" },\n { name: \"cdOffset\", type: \"u32\" },\n { name: \"commentLen\", type: \"u16\" },\n { name: \"comment\", type: \"bytes\", length: (c) => c.commentLen },\n ]),\n});\n\nfunction ensureSig(v: number, expect: number, where: string) {\n if (v !== expect)\n throw new Error(`Invalid signature for ${where}: 0x${v.toString(16)}`);\n}\n\n// -------------------------\n// TinyZip (writer)\n// -------------------------\nexport class TinyZip {\n private _chunks: Uint8Array[] = [];\n private _offset = 0;\n private _files: CentralEntry[] = [];\n\n private _rootPrefix = \"\"; // e.g. \"my-archive/\" or \"\"\n private _rootDirAdded = false;\n\n constructor(opts: TinyZipOptions = {}) {\n if (opts.root) {\n const r = opts.root.replace(/^\\/+|\\/+$/g, \"\");\n if (r) this._rootPrefix = r + \"/\";\n }\n }\n\n private _push(...arrs: Uint8Array[]) {\n for (const a of arrs) {\n this._chunks.push(a);\n this._offset += a.length;\n }\n }\n private _withRoot(name: string): string {\n return this._rootPrefix && !name.startsWith(this._rootPrefix)\n ? this._rootPrefix + name.replace(/^\\/+/, \"\")\n : name;\n }\n\n private _ensureRootDir(date: Date = new Date()) {\n if (!this._rootPrefix || this._rootDirAdded) return;\n this._rootDirAdded = true;\n\n const dirName = this._rootPrefix; // already ends with '/'\n const nameBytes = utf8(dirName);\n const { time, date: dosDate } = dosDateTime(date);\n\n const localHeader = writeStruct(SCHEMA.LocalFile, {\n signature: SIG.LocalFile,\n versionNeeded: 20,\n flags: 0x0800,\n method: 0,\n time,\n date: dosDate,\n crc32: 0,\n compSize: 0,\n uncompSize: 0,\n nameLen: nameBytes.length,\n extraLen: 0,\n name: nameBytes,\n extra: new Uint8Array(0),\n });\n\n const localHeaderOffset = this._offset;\n this._push(localHeader);\n this._files.push({\n nameBytes,\n crc: 0,\n compSize: 0,\n uncompSize: 0,\n method: 0,\n time,\n dosDate,\n localHeaderOffset,\n externalAttrs: 0x10,\n });\n }\n\n /** Add a file to the zip. \"name\" uses forward slashes for paths (e.g., \"dir/file.txt\"). */\n addFile(\n name: string,\n data: string | Uint8Array | ArrayBuffer,\n opts: AddFileOptions = {}\n ): void {\n const { date = new Date() } = opts;\n this._ensureRootDir(date);\n\n const u8 = toU8(data);\n\n const fullName = this._withRoot(name);\n const nameBytes = utf8(fullName);\n const { time, date: dosDate } = dosDateTime(date);\n const crc = crc32(u8);\n\n const compSize = u8.length >>> 0;\n const uncompSize = u8.length >>> 0;\n const localHeaderOffset = this._offset;\n\n const localHeader = writeStruct(SCHEMA.LocalFile, {\n signature: SIG.LocalFile,\n versionNeeded: 20,\n flags: 0x0800,\n method: 0,\n time,\n date: dosDate,\n crc32: crc,\n compSize,\n uncompSize,\n nameLen: nameBytes.length,\n extraLen: 0,\n name: nameBytes,\n extra: new Uint8Array(0),\n });\n\n this._push(localHeader, u8);\n\n this._files.push({\n nameBytes,\n crc,\n compSize,\n uncompSize,\n method: 0,\n time,\n dosDate,\n localHeaderOffset,\n externalAttrs: 0,\n });\n }\n\n // Create an explicit directory entry (name should end with \"/\").\n addDirectory(name: string, opts: { date?: Date } = {}): void {\n const { date = new Date() } = opts;\n this._ensureRootDir(date);\n\n const dirNameRaw = name.endsWith(\"/\") ? name : name + \"/\";\n const fullName = this._withRoot(dirNameRaw);\n const nameBytes = utf8(fullName);\n const { time, date: dosDate } = dosDateTime(date);\n\n const localHeader = writeStruct(SCHEMA.LocalFile, {\n signature: SIG.LocalFile,\n versionNeeded: 20,\n flags: 0x0800,\n method: 0,\n time,\n date: dosDate,\n crc32: 0,\n compSize: 0,\n uncompSize: 0,\n nameLen: nameBytes.length,\n extraLen: 0,\n name: nameBytes,\n extra: new Uint8Array(0),\n });\n\n const localHeaderOffset = this._offset;\n this._push(localHeader);\n\n this._files.push({\n nameBytes,\n crc: 0,\n compSize: 0,\n uncompSize: 0,\n method: 0,\n time,\n dosDate,\n localHeaderOffset,\n externalAttrs: 0x10,\n });\n }\n\n finish(): Uint8Array {\n const cdStart = this._offset;\n\n for (const f of this._files) {\n const central = writeStruct(SCHEMA.CentralFile, {\n signature: SIG.CentralFile,\n versionMadeBy: 20,\n versionNeeded: 20,\n flags: 0x0800,\n method: f.method,\n time: f.time,\n date: f.dosDate,\n crc32: f.crc,\n compSize: f.compSize,\n uncompSize: f.uncompSize,\n nameLen: f.nameBytes.length,\n extraLen: 0,\n commentLen: 0,\n diskStart: 0,\n intAttrs: 0,\n extAttrs: f.externalAttrs,\n localHeaderOffset: f.localHeaderOffset,\n name: f.nameBytes,\n extra: new Uint8Array(0),\n comment: new Uint8Array(0),\n });\n this._push(central);\n }\n\n const cdSize = this._offset - cdStart;\n\n const eocd = writeStruct(SCHEMA.EOCD, {\n signature: SIG.EOCD,\n diskNum: 0,\n cdStartDisk: 0,\n cdRecordsOnDisk: this._files.length,\n cdRecordsTotal: this._files.length,\n cdSize,\n cdOffset: cdStart,\n commentLen: 0,\n comment: new Uint8Array(0),\n });\n\n this._push(eocd);\n\n const merged = new Uint8Array(this._offset);\n let offset = 0;\n for (const chunk of this._chunks) {\n merged.set(chunk, offset);\n offset += chunk.length;\n }\n return merged;\n }\n\n static create(\n files: Record<string, string | Uint8Array | ArrayBuffer>,\n opts: TinyZipOptions = {}\n ): Uint8Array {\n const zip = new TinyZip(opts);\n for (const [name, data] of Object.entries(files)) {\n if (name.endsWith(\"/\")) zip.addDirectory(name);\n else zip.addFile(name, data);\n }\n return zip.finish();\n }\n\n static parse(input: ArrayBuffer | Uint8Array): ParsedEntry[] {\n const u8 = toU8(input);\n const view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);\n\n // EOCD\n const eocdOff = findEOCDOffset(u8);\n const { value: eocd } = readStruct(view, eocdOff, SCHEMA.EOCD);\n ensureSig(eocd.signature, SIG.EOCD, \"EOCD\");\n if (eocd.commentLen !== 0) throw new Error(\"Unsupported: EOCD comment\");\n if (eocd.diskNum !== 0 || eocd.cdStartDisk !== 0)\n throw new Error(\"Unsupported: multi-disk\");\n\n // Central directory walk\n const entries: {\n name: string;\n isDirectory: boolean;\n crc32: number;\n size: number;\n compSize: number;\n time: number;\n dosDate: number;\n localHeaderOffset: number;\n }[] = [];\n let cdPtr = eocd.cdOffset;\n for (let i = 0; i < eocd.cdRecordsTotal; i++) {\n const { value: cdf, offset: next } = readStruct(\n view,\n cdPtr,\n SCHEMA.CentralFile\n );\n ensureSig(cdf.signature, SIG.CentralFile, \"Central Directory\");\n const name = new TextDecoder().decode(cdf.name);\n const isDir = (cdf.extAttrs & 0x10) !== 0 || name.endsWith(\"/\");\n if (cdf.extraLen !== 0 || cdf.commentLen !== 0)\n throw new Error(\"Unsupported: extra/comment in central dir\");\n entries.push({\n name,\n isDirectory: isDir,\n crc32: cdf.crc32 >>> 0,\n size: cdf.uncompSize >>> 0,\n compSize: cdf.compSize >>> 0,\n time: cdf.time >>> 0,\n dosDate: cdf.date >>> 0,\n localHeaderOffset: cdf.localHeaderOffset >>> 0,\n });\n cdPtr = next;\n }\n\n // Resolve data from local file headers\n const results: ParsedEntry[] = [];\n for (const e of entries) {\n const { value: lfh, offset: afterHeader } = readStruct(\n view,\n e.localHeaderOffset,\n SCHEMA.LocalFile\n );\n ensureSig(lfh.signature, SIG.LocalFile, \"Local File\");\n if (lfh.flags !== 0x0800)\n throw new Error(\"Unsupported: flags (expect UTF-8 only)\");\n if (lfh.method !== 0)\n throw new Error(\"Unsupported: compression (expect store only)\");\n if (lfh.extraLen !== 0)\n throw new Error(\"Unsupported: extra fields in local header\");\n\n const dataStart = afterHeader;\n const dataEnd = dataStart + lfh.compSize;\n const data = e.isDirectory\n ? new Uint8Array(0)\n : new Uint8Array(u8.subarray(dataStart, dataEnd));\n\n results.push({ ...e, data });\n }\n\n return results;\n }\n\n // Quick utility: return a map of file data (directories omitted)\n static extract(input: ArrayBuffer | Uint8Array): Record<string, Uint8Array> {\n const entries = this.parse(input);\n const out: Record<string, Uint8Array> = {};\n for (const e of entries) if (!e.isDirectory) out[e.name] = e.data;\n return out;\n }\n}\n\n// -------------------------\n// Reader for TinyZip archives (our subset only)\n// -------------------------\nexport interface ParsedEntry {\n name: string;\n isDirectory: boolean;\n crc32: number;\n size: number; // uncompressed\n compSize: number; // same as size for store\n time: number;\n dosDate: number;\n localHeaderOffset: number;\n data: Uint8Array; // empty for directories\n}\n\nfunction toU8(input: string | ArrayBuffer | Uint8Array): Uint8Array {\n if (typeof input === \"string\") return utf8(input);\n if (input instanceof Uint8Array) return input;\n return new Uint8Array(input);\n}\n\nfunction findEOCDOffset(u8: Uint8Array): number {\n const view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);\n const minSize = 22; // EOCD without comment\n if (u8.length >= minSize) {\n const at = u8.length - minSize;\n if (view.getUint32(at, true) === SIG.EOCD) return at;\n }\n // Fallback: scan last 1 KiB for signature\n const start = Math.max(0, u8.length - 1024);\n for (let i = u8.length - 4; i >= start; i--) {\n if (view.getUint32(i, true) === SIG.EOCD) return i;\n }\n throw new Error(\"EOCD not found\");\n}\n","import { Asset, decodeSchema, encodeSchema } from \"@noya-app/noya-schemas\";\nimport { createHash, NoyaManager, TSchema } from \"@noya-app/state-manager\";\nimport { TinyZip } from \"./zip/TinyZip\";\n\nexport async function fetchAssetMap(\n assets: Asset[]\n): Promise<Record<string, Uint8Array>> {\n const res = await Promise.all(\n assets.map(async (asset) => {\n const url = asset.url;\n const response = await fetch(url);\n const data = await response.arrayBuffer();\n return [asset.id, data];\n })\n );\n\n return Object.fromEntries(res);\n}\n\nexport async function exportAll(noyaManager: NoyaManager<any, any, any, any>) {\n const { multiplayerStateManager, assetManager } = noyaManager;\n\n const assetMap = await fetchAssetMap(assetManager.assets$.get());\n\n return encodeAll({\n state: multiplayerStateManager.optimisticState$.get(),\n schema: multiplayerStateManager.schema,\n assets: assetManager.assets$.get(),\n assetMap,\n });\n}\n\nexport function encodeAll({\n state,\n schema,\n assets,\n assetMap,\n}: {\n state: unknown;\n schema?: TSchema;\n assets: Asset[];\n assetMap: Record<string, Uint8Array>;\n}) {\n const zip = new TinyZip();\n\n zip.addFile(\"state.json\", JSON.stringify(state, null, 2));\n\n if (schema) {\n const encodedSchema = encodeSchema(schema);\n\n zip.addFile(\"schema.json\", JSON.stringify(encodedSchema, null, 2));\n }\n\n if (assets.length) {\n zip.addFile(\"assets.json\", JSON.stringify(assets, null, 2));\n }\n\n for (const [id, data] of Object.entries(assetMap)) {\n zip.addFile(`assets/${id}`, data);\n }\n\n return zip.finish();\n}\n\nexport async function importAll(\n buffer: Uint8Array | ArrayBuffer,\n noyaManager: NoyaManager<any, any, any, any>,\n {\n shouldAllowSchemaChange,\n }: {\n shouldAllowSchemaChange?: ({\n oldSchema,\n newSchema,\n }: {\n oldSchema: TSchema;\n newSchema: TSchema;\n }) => boolean;\n } = {}\n) {\n let { state, schema, assets, assetMap } = await decodeAll(buffer);\n\n if (shouldAllowSchemaChange && noyaManager.options.schema && schema) {\n const oldSchemaHash = createHash(noyaManager.options.schema);\n const newSchemaHash = createHash(schema);\n\n if (oldSchemaHash !== newSchemaHash) {\n const shouldAllow = shouldAllowSchemaChange({\n oldSchema: noyaManager.options.schema,\n newSchema: schema,\n });\n\n if (!shouldAllow) {\n throw new Error(\"Schema change not allowed\");\n }\n }\n }\n\n if (assets.length) {\n // Delete all existing assets\n await Promise.all(\n noyaManager.assetManager.assets$\n .get()\n .map((asset) => noyaManager.assetManager.delete(asset.id))\n );\n\n // Add new assets\n const idPairs = await Promise.all(\n assets.map(async (asset): Promise<[string, string]> => {\n const newAsset = await noyaManager.assetManager.create({\n data: assetMap[asset.id],\n contentType: asset.contentType,\n });\n\n return [asset.id, newAsset.id];\n })\n );\n\n const replacementMap = Object.fromEntries(idPairs);\n\n state = replaceDeep(state, replacementMap);\n }\n\n // if (schema) {\n // noyaManager.options.schema = schema;\n // }\n\n noyaManager.initialState = state;\n noyaManager.forceInit();\n}\n\nexport function decodeAll(buffer: Uint8Array | ArrayBuffer): {\n state: unknown;\n schema?: TSchema;\n assets: Asset[];\n assetMap: Record<string, Uint8Array>;\n} {\n const zip = TinyZip.extract(buffer);\n\n const stateFile = zip[\"state.json\"];\n const schemaFile = zip[\"schema.json\"];\n const assetsFile = zip[\"assets.json\"];\n\n if (!stateFile) {\n throw new Error(\"State file not found\");\n }\n\n const state = JSON.parse(new TextDecoder().decode(stateFile));\n\n let schema: TSchema | undefined;\n\n if (schemaFile) {\n const encodedSchema = JSON.parse(new TextDecoder().decode(schemaFile));\n schema = decodeSchema(encodedSchema);\n }\n\n let assets: Asset[] = [];\n\n let assetMap: Record<string, Uint8Array> = {};\n\n if (assetsFile) {\n assets = JSON.parse(new TextDecoder().decode(assetsFile));\n\n for (const asset of assets) {\n const data = zip[`assets/${asset.id}`];\n\n if (!data) {\n throw new Error(`Asset ${asset.id} not found`);\n }\n\n assetMap[asset.id] = data;\n }\n }\n\n return { state, schema, assets, assetMap };\n}\n\nexport function replaceDeep<T>(\n obj: T,\n replacementMap: Record<string, string>\n): T {\n switch (typeof obj) {\n case \"object\":\n if (obj === null) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => replaceDeep(item, replacementMap)) as any;\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n key,\n replaceDeep(value, replacementMap),\n ])\n ) as any;\n case \"string\":\n return (replacementMap[obj] ?? obj) as any;\n default:\n return obj;\n }\n}\n","import React from \"react\";\nimport { StateInspectorAnchor } from \"./StateInspector\";\nimport { lightInspectorTheme } from \"./inspectorTheme\";\n\nexport function StateInspectorToggleButton({\n showInspector,\n setShowInspector,\n theme,\n anchor,\n}: {\n showInspector: boolean;\n setShowInspector: (value: boolean) => void;\n theme: typeof lightInspectorTheme;\n anchor: StateInspectorAnchor;\n}) {\n const isRightAnchor = anchor === \"right\";\n\n const rightIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"size-6\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5\"\n />\n </svg>\n );\n\n const leftIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"size-6\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5\"\n />\n </svg>\n );\n\n return (\n <span\n role=\"button\"\n style={{\n flex: \"0\",\n appearance: \"none\",\n color: theme.BASE_COLOR,\n border: \"none\",\n fontSize: \"12px\",\n whiteSpace: \"nowrap\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"2px 0\",\n }}\n onClick={(event) => {\n event.stopPropagation();\n\n setShowInspector(!showInspector);\n }}\n >\n {showInspector ? (\n \"Hide Inspector\"\n ) : (\n <span style={{ width: \"12px\", height: \"12px\" }}>\n {isRightAnchor ? rightIcon : leftIcon}\n </span>\n )}\n </span>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nconst localStorage = typeof window !== \"undefined\" ? window.localStorage : null;\n\nexport function useLocalStorageState<S>(\n key: string,\n defaultValue: S\n): [S, (value: S) => void] {\n const [state, setState] = React.useState<S>(() => {\n const value = localStorage?.getItem(key);\n let result = defaultValue;\n if (value) {\n try {\n result = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing localStorage value\", error);\n }\n }\n return result;\n });\n\n const setLocalStorageState = (value: S) => {\n localStorage?.setItem(key, JSON.stringify(value));\n setState(value);\n };\n\n return [state, setLocalStorageState];\n}\n","\"use client\";\n\nimport { Observable } from \"@noya-app/observable\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport {\n ConnectedUsersManager,\n EphemeralUserDataManager,\n MultiplayerUser,\n} from \"@noya-app/state-manager\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { useObservable } from \"../useObservable\";\ntype Point = { x: number; y: number };\n\nexport type UserPointerData = { pointer?: Point };\n\nexport type RenderUserPointerProps = {\n userId: string;\n name?: string;\n visible: boolean;\n point: Point;\n};\n\nexport type RenderUserPointer = {\n renderUserPointer: (options: RenderUserPointerProps) => React.ReactNode;\n};\n\ntype InternalUserPointerProps<E extends UserPointerData> = {\n user: MultiplayerUser;\n ephemeralUserDataManager: EphemeralUserDataManager<E>;\n hideAfter?: number;\n} & RenderUserPointer;\n\nfunction shouldShow(hideAfter: number, updatedAt: number) {\n return !!updatedAt && Date.now() - updatedAt < hideAfter;\n}\n\nconst UserPointerInternal = memoGeneric(function UserPointerInternal<\n E extends UserPointerData,\n>({\n user,\n ephemeralUserDataManager,\n hideAfter = 5000,\n renderUserPointer,\n}: InternalUserPointerProps<E>) {\n const observable = useMemo(() => {\n const metadata$ = ephemeralUserDataManager.metadata$\n .observePath([user.id] as const)\n .throttle(50);\n const data$ = ephemeralUserDataManager.data$\n .observePath([user.id] as const)\n .throttle(50);\n\n return Observable.combine([metadata$, data$], ([metadata, data]) => {\n return { metadata, data };\n });\n }, [ephemeralUserDataManager, user.id]);\n\n const { metadata, data } = useObservable(observable);\n\n const [, setForceUpdate] = useState(0);\n\n const updatedAt = metadata?.updatedAt ?? 0;\n const show = shouldShow(hideAfter, updatedAt);\n\n useEffect(() => {\n if (!show) return;\n\n const timeoutId = setTimeout(() => {\n setForceUpdate((prev) => prev + 1);\n }, hideAfter);\n\n return () => clearTimeout(timeoutId);\n }, [hideAfter, show, updatedAt]);\n\n if (!data?.pointer) return null;\n\n return renderUserPointer({\n userId: user.id,\n name: user.name,\n point: data.pointer,\n visible: show,\n });\n});\n\nexport type UserPointersOverlayProps<E extends UserPointerData> = {\n connectedUsersManager: ConnectedUsersManager;\n ephemeralUserDataManager: EphemeralUserDataManager<E>;\n} & RenderUserPointer;\n\nexport const UserPointersOverlay = memoGeneric(function UserPointers<\n E extends UserPointerData,\n>({\n connectedUsersManager,\n ephemeralUserDataManager,\n renderUserPointer,\n}: UserPointersOverlayProps<E>) {\n const currentUserId = useObservable(ephemeralUserDataManager.currentUserId$);\n const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);\n\n return (\n <>\n {connectedUsers.map((user) => {\n if (user.id === currentUserId) return null;\n\n return (\n <UserPointerInternal\n key={user.id}\n user={user}\n ephemeralUserDataManager={\n ephemeralUserDataManager as unknown as EphemeralUserDataManager<UserPointerData>\n }\n renderUserPointer={renderUserPointer}\n />\n );\n })}\n </>\n );\n});\n"],"mappings":"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","names":["exports","get","exports","exports","exports","BoxDrawing","exports","LinePrefix","exports","exports","node","indexPath","context","exports","exports","exports","exports","exports","map","node","exports","exports","index","node","exports","exports","exports","exports","exports","exports","defineTree","exports","exports","exports","exports","exports","module","longtext","shorttext","diff","import_react","import_noya_api","import_noya_api","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsAny","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Set","type_exports","Clear","Delete","Entries","Get","Has","Set","map","Array","Function","range","pattern","Boolean","BigInt","Number","String","Boolean","Number","BigInt","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","Function","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","map","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromRest","FromIntersect","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Function","Symbol","BigInt","FromRest","schema","FromProperties","FromIntersect","FromUnion","FromTuple","FromArray","FromPromise","IsFunction","IsArray","IsObject","IsAsyncIterator","IsIterator","ExtendsResult","FromArray","Visit","FromAsyncIterator","FromConstructor","FromFunction","FromIntersect","FromIterator","FromLiteral","current","Number","Function","FromObject","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","T","FromUnion","FromProperty","FromProperties","IsObject","Object","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromRest","FromProperties","IsObject","Object","FromProperties","FromMappedResult","FromProperties","FromMappedResult","FromIntersect","T","FromUnion","FromProperties","IsObject","Object","FromPropertyKey","FromPropertyKeys","FromMappedKey","Object","IsNumber","IsRegExp","IsString","RegExp","FromRest","FromProperties","IsObject","Object","FromProperties","FromMappedResult","type_exports","Array","BigInt","Boolean","Date","Function","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","IsObject","IsDate","IsUint8Array","IsObject","IsArray","IsUndefined","IsNull","IsBoolean","IsNumber","IsBigInt","IsString","IsSymbol","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","TypeSystem","Type","type_exports","ByteMarker","ArrayType","Visit","DateType","ObjectType","Uint8ArrayType","IsArray","IsBoolean","IsBigInt","IsDate","IsNull","IsNumber","IsString","IsSymbol","IsUint8Array","IsUndefined","ValueErrorType","Object","String","Delete","import_noya_utils","import_noya_utils","import_observable","import_observable","import_observable","base","index","set","generatePatches","ensureShallowCopy","current","value","proxyDraft","create","base","draft","mutate","mark","result","key","Array","String","Number","Insert","Update","Delete","Edit","applyPatchToString","apply","apply","import_noya_utils","HistoryEntries","import_observable","jwt","import_observable","import_noya_utils","import_observable","import_observable","import_noya_utils","import_observable","import_observable","import_noya_utils","import_observable","import_observable","import_noya_utils","import_observable","import_observable","import_observable","import_react","navigator","import_tree_visit","import_react","import_observable","React","AutoSizer","SingleDimensionAutoSizer","import_react","import_react","import_react","FileDropTarget","React","import_react","import_noya_utils","import_react","import_noya_utils","import_react","import_react","import_react","React","import_react","import_react","import_react","import_react","import_react","import_react","import_noya_utils","import_react","import_react","import_react","import_noya_utils","import_react","import_react","import_react","import_react","import_react","import_client","React","ErrorOverlay","import_react","import_react","import_react","__commonJS","exports","module","__export","createContext2","React","React2","memo2","useContext2","React3","React4","React5","React6","ellipsis","React7","React8","React9","React10","React11","useState2","useCallback2","React12","useState3","useCallback3","React13","React14","React15","__toESM","import_react","useObservable","get","listen","import_react","React","import_react","import_react","ObjectRootLabel","React","import_react","import_react","style","React","style","theme","React","StateInspectorDisclosureRowInner","import_react","style","React","theme","React","ObjectRootLabel","import_react","import_react","style","theme","React","theme","React","import_react","theme","React","import_react","localStorage","React","StateInspector","React","useObservable","theme","import_observable","import_react","UserPointerInternal","metadata","data","useObservable","React","import_react","useObservable"]}
|