Misc Playground/Docs fixes

This commit is contained in:
Jim Hamill
2025-07-15 04:07:59 +00:00
parent 39e2d4b991
commit f71100b28c
13 changed files with 87 additions and 83 deletions
+2
View File
@@ -123,6 +123,7 @@ export default withMermaid({
// TODO: Re-enable once we release documentation
// { text: 'Documentation', link: '/quick-start' },
{ text: 'Tools', link: '/tools/primitives' },
{ text: 'Playground', link: '/playground' },
],
sidebar: {
@@ -134,6 +135,7 @@ export default withMermaid({
{ text: 'Quick Start', link: '/quick-start' },
{ text: 'Architecture', link: '/architecture' },
{ text: 'Best Practices', link: '/api-examples' },
{ text: 'Contributing', link: '/contributing' },
],
},
{
@@ -373,7 +373,7 @@ defineExpose({
display: flex;
flex-direction: column;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
margin-bottom: 1em;
overflow-y: hidden;
}
.editor-container {
@@ -385,20 +385,6 @@ defineExpose({
overflow: hidden; /* Contain overflow */
}
.editor-container .ace_editor {
background: transparent !important;
font-family: var(--vp-font-family-mono);
line-height: var(--vp-code-line-height);
font-size: var(--vp-code-font-size);
flex: 1 1 auto; /* Allow editor to grow */
overflow: auto; /* Enable scrolling */
min-height: 3em;
}
.editor-container .ace_editor .ace_gutter {
background: transparent !important;
}
.editor-buttons {
position: absolute;
padding:10px;
@@ -3,7 +3,13 @@
<head>
<meta charset="utf-8" />
<title>Code Sandbox</title>
<script>
<script type="module">
// NOTE: We want to be able to console.log, etc, structures that contain bigint and also Uint8Array.
// Thus, JSON.stringify isn't sufficient (it cannot do bigint and Uint8Array output is cumbersome).
// So we import our encodeExtendedJson function and use that in place of JSON.stringify.
// TODO: We want to find a nicer way to include the latest version.
import { encodeExtendedJson } from 'https://cdn.jsdelivr.net/npm/@xocash/primitives@0.0.2-development.210/+esm';
// Override console methods to capture and post messages to parent
const originalConsole = window.console;
@@ -17,7 +23,9 @@
type: 'log',
content: args
.map((arg) =>
typeof arg === 'object' ? JSON.stringify(arg) : String(arg),
typeof arg === 'object'
? encodeExtendedJson(arg, 2)
: String(arg),
)
.join(' '),
},
@@ -33,7 +41,9 @@
type: 'info',
content: args
.map((arg) =>
typeof arg === 'object' ? JSON.stringify(arg) : String(arg),
typeof arg === 'object'
? encodeExtendedJson(arg, 2)
: String(arg),
)
.join(' '),
},
@@ -49,7 +59,9 @@
type: 'warn',
content: args
.map((arg) =>
typeof arg === 'object' ? JSON.stringify(arg) : String(arg),
typeof arg === 'object'
? encodeExtendedJson(arg, 2)
: String(arg),
)
.join(' '),
},
@@ -65,7 +77,9 @@
type: 'error',
content: args
.map((arg) =>
typeof arg === 'object' ? JSON.stringify(arg) : String(arg),
typeof arg === 'object'
? encodeExtendedJson(arg, 2)
: String(arg),
)
.join(' '),
},
@@ -106,7 +120,7 @@
<script type="module">
// Execute user code directly at top level to support ES6 imports
// Error handling is managed by global error handlers above
__userCode__;
__userCode__;
</script>
</body>
</html>
+2
View File
@@ -0,0 +1,2 @@
<!-- packages/docs/contributing.md -->
<!--@include: ../../../CONTRIBUTING.md-->
+3
View File
@@ -10,6 +10,9 @@ hero:
- theme: brand
text: Tools
link: /tools/primitives
- theme: brand
text: Playground
link: /playground
---
<!--
+2 -3
View File
@@ -17,14 +17,13 @@ import Playground from '@theme/components/Playground.vue'
import { BlockchainElectrum } from '@xocash/stack';
// Instantiate and start the Electrum Blockchain Adapter.
const blockchain = new BlockchainElectrum();
await blockchain.start();
const blockchain = await BlockchainElectrum.from();
// Fetch a transaction.
const tx = await blockchain.fetchTransaction('a23bbd321067fd039da53f007b26f62591e58e6554b0488d83534c032dbca38b');
// Log it to the console.
console.log('Transaction Hex', tx.toHex());
console.log('Transaction:', tx);
```
</Playground>
+13
View File
@@ -1,5 +1,10 @@
// NOTE: This file is used to build type bundles for use with the XO Stack playground.
// The XO Stack Playground uses Monaco Editor - which requires that types are all bundled in a single file.
// (Technically, we can load many individual files, but resolution is incredibly slow and complex)
import dts from 'rollup-plugin-dts';
import { defineConfig } from 'rollup';
import pkg from './package.json' with { type: 'json' };
export default defineConfig({
input: 'dist/index.d.ts',
@@ -7,5 +12,13 @@ export default defineConfig({
file: 'dist/types-bundled.d.ts',
format: 'es',
},
// Omit all dependencies and peer dependencies from the final type bundle.
// TODO: We may actually want to include these, but are unable to get it to work currently.
// The advantage would be that we can produce bundles that also contain dependent types.
// For example: LibAuth.
external: [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
],
plugins: [dts()],
});
-14
View File
@@ -1,14 +0,0 @@
{
"compilationOptions": {
"followSymlinks": true
},
"entries": [
{
"filePath": "./src/index.ts",
"outFile": "./dist/types-bundled.d.ts",
"libraries": {
"inlinedLibraries": ["@xocash/primitives"]
}
}
]
}
+1 -1
View File
@@ -34,6 +34,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"@bitauth/libauth": "^3.0.0",
"@electrum-cash/network": "^4.1.1",
"@electrum-cash/protocol": "2.1.0-development.8075178089",
"@generalprotocols/oracle-client": "^0.0.1",
@@ -45,7 +46,6 @@
},
"devDependencies": {
"@types/better-sqlite3": "^7.6.12",
"dts-bundle-generator": "^9.5.1",
"rollup": "^4.45.0",
"rollup-plugin-dts": "^6.2.1"
}
+13
View File
@@ -1,5 +1,10 @@
// NOTE: This file is used to build type bundles for use with the XO Stack playground.
// The XO Stack Playground uses Monaco Editor - which requires that types are all bundled in a single file.
// (Technically, we can load many individual files, but resolution is incredibly slow and complex)
import dts from 'rollup-plugin-dts';
import { defineConfig } from 'rollup';
import pkg from './package.json' with { type: 'json' };
export default defineConfig({
input: 'dist/index.d.ts',
@@ -7,5 +12,13 @@ export default defineConfig({
file: 'dist/types-bundled.d.ts',
format: 'es',
},
// Omit all dependencies and peer dependencies from the final type bundle.
// TODO: We may actually want to include these, but are unable to get it to work currently.
// The advantage would be that we can produce bundles that also contain dependent types.
// For example: LibAuth, Electrum-Network, etc.
external: [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
],
plugins: [dts()],
});
@@ -48,13 +48,9 @@ export type BlockchainElectrumEvents = {
};
export type BlockchainElectrumOpts = {
servers: Array<string>;
application: string;
};
export type BlockchainElectrumParams = {
store?: BaseStore;
opts?: Partial<BlockchainElectrumOpts>;
servers?: Array<string>;
application?: string;
};
export class BlockchainElectrum extends BaseBlockchain<
@@ -82,24 +78,20 @@ export class BlockchainElectrum extends BaseBlockchain<
// Options
store: BaseStore;
opts: BlockchainElectrumOpts;
servers: Array<string>;
application: string;
constructor(public readonly params: BlockchainElectrumParams = {}) {
constructor(public readonly opts: BlockchainElectrumOpts = {}) {
super();
// Set the store, or use the memory store by default.
this.store = params.store ?? new StoreInMemory();
// Combine provided options with default options.
this.opts = {
servers: [
'bch.imaginary.cash',
'cashnode.bch.ninja',
'electrum.imaginary.cash',
],
application: 'XOApp',
...params.opts,
};
this.store = opts.store ?? new StoreInMemory();
this.servers = opts.servers ?? [
'bch.imaginary.cash',
'cashnode.bch.ninja',
'electrum.imaginary.cash',
];
this.application = opts.application ?? 'XOApp';
}
/**
@@ -109,9 +101,9 @@ export class BlockchainElectrum extends BaseBlockchain<
*/
static async from<T extends typeof BlockchainElectrum>(
this: T,
params: BlockchainElectrumParams = {},
opts: BlockchainElectrumOpts = {},
) {
const blockchain = new this(params);
const blockchain = new this(opts);
await blockchain.start();
@@ -125,10 +117,10 @@ export class BlockchainElectrum extends BaseBlockchain<
// Iterate over each server in our list of servers.
// NOTE: We are still using an Electrum Client due to the above bug.
// But, if we cannot connect to the first server, we will try the second (and third if given, etc) as a fallback.
for (const electrumServer of this.opts.servers) {
for (const electrumServer of this.servers) {
// Initialize an Electrum client using the given server.
const electrum = await initializeElectrumClient(
this.opts.application,
this.application,
electrumServer,
);