From 76b23a80a1d6f57ed10ca5307f94588b116840e3 Mon Sep 17 00:00:00 2001 From: Sergey Rubanov Date: Mon, 25 Sep 2023 22:51:28 +0200 Subject: [PATCH] feat: use Vite as a template generator --- common/src/icon.png | Bin 174383 -> 0 bytes index.js | 453 ++++++-------------- templates/react-ts/README.md | 0 templates/react-ts/build.js | 83 ---- templates/react-ts/src/App.tsx | 7 - templates/react-ts/src/index.css | 120 ------ templates/react-ts/src/index.html | 23 - templates/react-ts/src/index.tsx | 18 - templates/react-ts/test/index.ts | 7 - templates/react-ts/tsconfig.json | 30 -- templates/react/README.md | 0 templates/react/build.js | 80 ---- templates/react/src/index.css | 120 ------ templates/react/src/index.html | 20 - templates/react/src/index.jsx | 16 - templates/react/test/index.js | 7 - templates/svelte/.vscode/extensions.json | 3 - templates/svelte/README.md | 0 templates/svelte/build.js | 65 --- templates/svelte/src/App.svelte | 32 -- templates/svelte/src/app.css | 81 ---- templates/svelte/src/assets/svelte.svg | 1 - templates/svelte/src/index.html | 21 - templates/svelte/src/lib/Counter.svelte | 10 - templates/svelte/src/main.js | 8 - templates/svelte/src/svelte.svg | 1 - templates/svelte/src/vite-env.d.ts | 2 - templates/tonic/README.md | 0 templates/tonic/build.js | 80 ---- templates/tonic/src/index.css | 120 ------ templates/tonic/src/index.html | 21 - templates/tonic/src/index.js | 20 - templates/tonic/test/index.js | 7 - templates/vanilla/README.md | 0 templates/vanilla/build.js | 80 ---- templates/vanilla/src/index.css | 40 -- templates/vanilla/src/index.html | 23 - templates/vanilla/src/index.js | 15 - templates/vanilla/test/index.js | 13 - templates/vue/.vscode/extensions.json | 3 - templates/vue/README.md | 0 templates/vue/build.js | 65 --- templates/vue/src/App.vue | 23 - templates/vue/src/assets/vue.svg | 1 - templates/vue/src/components/HelloWorld.vue | 23 - templates/vue/src/index.html | 21 - templates/vue/src/main.js | 5 - templates/vue/src/style.css | 90 ---- test.js | 56 --- 49 files changed, 136 insertions(+), 1778 deletions(-) delete mode 100644 common/src/icon.png delete mode 100644 templates/react-ts/README.md delete mode 100644 templates/react-ts/build.js delete mode 100644 templates/react-ts/src/App.tsx delete mode 100644 templates/react-ts/src/index.css delete mode 100644 templates/react-ts/src/index.html delete mode 100644 templates/react-ts/src/index.tsx delete mode 100644 templates/react-ts/test/index.ts delete mode 100644 templates/react-ts/tsconfig.json delete mode 100644 templates/react/README.md delete mode 100644 templates/react/build.js delete mode 100644 templates/react/src/index.css delete mode 100644 templates/react/src/index.html delete mode 100644 templates/react/src/index.jsx delete mode 100644 templates/react/test/index.js delete mode 100644 templates/svelte/.vscode/extensions.json delete mode 100644 templates/svelte/README.md delete mode 100644 templates/svelte/build.js delete mode 100644 templates/svelte/src/App.svelte delete mode 100644 templates/svelte/src/app.css delete mode 100644 templates/svelte/src/assets/svelte.svg delete mode 100644 templates/svelte/src/index.html delete mode 100644 templates/svelte/src/lib/Counter.svelte delete mode 100644 templates/svelte/src/main.js delete mode 100644 templates/svelte/src/svelte.svg delete mode 100644 templates/svelte/src/vite-env.d.ts delete mode 100644 templates/tonic/README.md delete mode 100644 templates/tonic/build.js delete mode 100644 templates/tonic/src/index.css delete mode 100644 templates/tonic/src/index.html delete mode 100644 templates/tonic/src/index.js delete mode 100644 templates/tonic/test/index.js delete mode 100644 templates/vanilla/README.md delete mode 100644 templates/vanilla/build.js delete mode 100644 templates/vanilla/src/index.css delete mode 100644 templates/vanilla/src/index.html delete mode 100644 templates/vanilla/src/index.js delete mode 100644 templates/vanilla/test/index.js delete mode 100644 templates/vue/.vscode/extensions.json delete mode 100644 templates/vue/README.md delete mode 100644 templates/vue/build.js delete mode 100644 templates/vue/src/App.vue delete mode 100644 templates/vue/src/assets/vue.svg delete mode 100644 templates/vue/src/components/HelloWorld.vue delete mode 100644 templates/vue/src/index.html delete mode 100644 templates/vue/src/main.js delete mode 100644 templates/vue/src/style.css delete mode 100644 test.js diff --git a/common/src/icon.png b/common/src/icon.png deleted file mode 100644 index dc2f73dda8200f97ee307b3c926897bf1406002e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174383 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 z 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%0A?ECRhSuOuh(b8lS{t7diQFs| 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 z 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 HbbkLoG!NWl diff --git a/index.js b/index.js index f3de379..2cbc319 100755 --- a/index.js +++ b/index.js @@ -1,343 +1,162 @@ #!/usr/bin/env node -import fs from 'node:fs/promises' -import util from 'node:util' -import path from 'node:path' -import { exec as ecp, spawn } from 'node:child_process' -import os from 'node:os' - -const exec = util.promisify(ecp) -const __dirname = path.dirname(import.meta.url).replace(`file://${os.platform() === 'win32' ? '/' : ''}`, '') -const DEFAULT_TEMPLATE = 'vanilla' - -async function copyFileOrFolder (source, target) { - const stats = await fs.stat(source) - - if (stats.isFile()) { - await fs.mkdir(path.dirname(target), { recursive: true }) - await fs.copyFile(source, target) - } else if (stats.isDirectory()) { - await fs.mkdir(target, { recursive: true }) - - const files = await fs.readdir(source) - - for (const file of files) { - const sourceFile = path.join(source, file) - const targetFile = path.join(target, file) - - await copyFileOrFolder(sourceFile, targetFile) - } - } -} - -const cp = async (a, b) => copyFileOrFolder( - path.resolve(a), - path.join(b, path.basename(a)) -) - -async function help (templateNames) { - console.log(`usage: npm create socket-app [${templateNames.join(' | ')}]`) +import { execSync, spawn } from 'node:child_process' +import { resolve } from 'node:path' +import { readFileSync, writeFileSync, existsSync } from 'node:fs' + +const NPM = 'npm' + +const CSP = ` +` + +function getPackageManager (userAgent) { + if (typeof userAgent !== 'string') return NPM + const [packageManager] = userAgent.split(' ') + const [packageManagerName] = packageManager.split('/') + return packageManagerName ?? NPM } -async function install () { +function getViteCreateCommand ({ packageManager, projectName = '', restViteOptions }) { + const rest = restViteOptions.length === 0 + ? '' + : ` ${packageManager === NPM ? '--' : ''} ${restViteOptions.join(' ')}` + return `${packageManager} create vite@latest ${projectName}${rest}` } -const DEFAULT_DEPS = [ -] +const [projectName, ...restViteOptions] = process.argv.slice(2) +const packageManager = getPackageManager(process.env.npm_config_user_agent) +const viteCreateCommand = getViteCreateCommand({ + packageManager, + projectName, + restViteOptions +}) -const DEFAULT_DEV_DEPS = [ -] +process.stdout.write(`\nCreating a vite project with command:\n${viteCreateCommand}\n\n`) -const templates = {} +const viteProcess = spawn(viteCreateCommand, [], { + shell: true, + stdio: 'inherit', + encoding: 'utf-8' +}) -templates.vanilla = { - devDeps: ['esbuild'] -} -templates.tonic = { - deps: ['@socketsupply/tonic'], - devDeps: ['esbuild'] -} -templates.react = { - deps: ['react', 'react-dom'], - devDeps: ['esbuild'] -} -templates.vue = { - deps: ['vue'], - devDeps: ['vite', '@vitejs/plugin-vue'] -} -templates.svelte = { - deps: ['svelte'], - devDeps: ['vite', '@sveltejs/vite-plugin-svelte'] -} -templates['react-ts'] = { - deps: ['react', 'react-dom', 'typescript', '@types/react', '@types/react-dom', '@types/node'], - devDeps: ['esbuild'] -} - -async function main (argv) { - const templateName = argv[0] ?? DEFAULT_TEMPLATE - - const templateNames = await fs.readdir(path.join(__dirname, 'templates')) - - if (argv.find(s => s.includes('-h'))) { - return help(templateNames) - } +viteProcess.on('close', (code) => { + const cwd = resolve(process.cwd(), projectName) - if (templateName && templateNames.findIndex(s => s === templateName) === -1) { - console.error(`Unable to find template "${templateName}"`) - return help(templateNames) - } - - // - // Check if the ssc command is installed, if not install it. - // - try { - await exec('ssc') - } catch (err) { - if (err.code === 127) await install() - } - - // - // If the current directory is not empty, refuse to initialize it. - // Empty excludes the following list of files from the directory. - // - const accepted = [ - '.DS_Store', - '.git', - '.gitattributes', - '.gitignore', - '.gitlab-ci.yml', - '.hg', - '.hgcheck', - '.hgignore', - '.idea', - '.npmignore', - '.travis.yml', - 'docs', - 'LICENSE', - 'README.md', - 'mkdocs.yml', - 'Thumbs.db' - ] - - try { - const entries = (await fs.readdir(process.cwd())) - .filter(file => !accepted.includes(file)) - - if (entries.length) { - process.stdout.write('\nThe current directory is not empty\n') - process.exit(1) - } - } catch (err) { - process.stderr.write(`\nUnable to read the current directory: ${err.stack ?? err.message}\n`) - process.exit(1) - } - - // - // Create a package.json that has the module and a basic build setup. - // try { - process.stdout.write('Initializing npm package...') - await exec('npm init -y') - } catch (err) { - process.stderr.write(`Unable to run npm init: ${err.stack ?? err.message}\n`) - process.exit(1) - } - process.stdout.write('Ok.\n') - - // - // Install an opinionated base of modules for building a simple app. - // - const devDeps = [ - ...DEFAULT_DEV_DEPS, - ...templates[templateName]?.devDeps ?? [] - ] - - if (devDeps.length > 0) { - try { - process.stdout.write('Installing developer dependencies...') - await exec(`npm install -D ${devDeps.join(' ')}`) - } catch (err) { - process.stderr.write(`\nUnable to run npm install: ${err.stack ?? err.message}\n`) - process.exit(1) - } - - process.stdout.write('Ok.\n') - } - - const deps = [ - ...DEFAULT_DEPS, - ...templates[templateName]?.deps ?? [] - ] - - // remove eventually - let isSocket05orGreater = true - - try { - const { stdout } = await exec('ssc --version') - - try { - const sscVersion = stdout.trim().split(' ')[0] - // split by dot - .split('.') - // convert to numbers - .map(s => parseInt(s)) - - isSocket05orGreater = sscVersion[0] >= 1 || sscVersion[1] >= 5 - } catch (err) {} - } catch (err) { - process.stdout.write('Installing \'@socketsupply/socket\' locally (ssc not in PATH)\n') - deps.push('@socketsupply/socket') - } - - try { - process.stdout.write('Installing dependencies...') - await exec(`npm install ${deps.join(' ')} --save`) - } catch (err) { - process.stderr.write(`\nUnable to run npm install: ${err.stack ?? err.message}\n`) - process.exit(1) - } - process.stdout.write('Ok.\n') - - process.stdout.write('Adding package scripts...') - let pkg - - try { - pkg = JSON.parse(await fs.readFile('package.json')) - } catch (err) { - process.stderr.write(`\nUnable to read package.json: ${err.stack ?? err.message}\n`) - process.exit(1) - } - - pkg.type = 'module' - pkg.scripts['init-project'] = `ssc init${isSocket05orGreater ? ' --config' : ''}` - pkg.scripts.start = 'ssc build -r -o' - pkg.scripts.build = 'ssc build -o' - pkg.scripts.test = 'ssc build -r -o --test=./test/index.js --headless' - - try { - fs.writeFile('package.json', JSON.stringify(pkg, 2, 2)) - } catch (err) { - process.stderr.write(`\nUnable to write package.json: ${err.stack ?? err.message}\n`) - process.exit(1) + execSync('ssc --version', { + stdio: 'ignore' + }) + } catch { + process.stdout.write('Installing \'@socketsupply/socket\' locally (ssc not in PATH)\n\n') + execSync('npm install @socketsupply/socket --save-dev') } - process.stdout.write('Ok.\n') - - // - // Initialize the current directory as a socket app. - // try { - process.stdout.write('Creating socket files...') - // Use spawn so we can pass stdio, fte is interactive - const initProcess = spawn( - `npm${os.platform() === 'win32' ? '.cmd' : ''}`, - ['run', 'init-project'], - { - stdio: [process.stdin, process.stdout, process.stderr] - }) - await new Promise((resolve, reject) => { - initProcess.on('close', resolve).on('error', reject) + execSync('npm install', { + cwd, + stdio: 'inherit' }) - } catch (err) { - process.stderr.write(`\nUnable to create socket files: ${err.stack ?? err.message}\n`) - } - process.stdout.write('Ok.\n') - - // - // Initialize tsconfig.json when react_ts - // - if (templateName === 'react-ts') { - try { - process.stdout.write('Creating tsconfig...') - await exec( - 'npx tsc --init --declaration --allowJs --emitDeclarationOnly --jsx react-jsx --lib "dom","dom.iterable","esnext" --outDir dist' - ) - } catch (err) { - process.stderr.write( - `\nFailed to create tsconfig: ${err.stack ?? err.message}\n` - ) - process.exit(1) - } - - process.stdout.write('Ok.\n') - - try { - process.stdout.write('Setting up TS configuration...') - await fs.writeFile( - 'globals.d.ts', - "declare module 'socket:os'; \ndeclare module 'socket:test'; \ndeclare module 'socket:console'; \ndeclare module 'socket:process';" - ) - } catch (err) { - process.stderr.write( - `Failed to create global.d.ts: ${ - err.stack ?? err.message - }.Please report this issue here: https://github.com/socketsupply/create-socket-app/issues\n` + } catch (error) { + // create-vite operation was cancelled + if (error.code === 'ENOENT') process.exit(0) + } + + process.stdout.write('\nAdding the socket.ini file to the project\n') + + execSync(`ssc init --name=${projectName}`, { + cwd, + stdio: 'inherit' + }) + + process.stdout.write('\nPatching socket.ini for the create-vite\n') + + const socketIniPath = resolve(cwd, 'socket.ini') + const socketIni = readFileSync(socketIniPath, 'utf-8') + const modifiedSocketIni = socketIni + .replace( + 'copy = "src"', + 'copy = "dist"' + ) + .replace( + '; script = "npm run build"', + 'script = "npm run build"' + ) + writeFileSync(socketIniPath, modifiedSocketIni, 'utf8') + + process.stdout.write('\nPatching index.html for the create-vite\n') + + const indexHTMLPath = resolve(cwd, 'index.html') + const indexHTML = readFileSync(indexHTMLPath, 'utf-8') + const modifiedData = indexHTML.replace('', '\n' + CSP + '\n') + writeFileSync(indexHTMLPath, modifiedData, 'utf8') + + // So TypeScript doesn't complain about about String#startsWith in the vite.config.ts + if (existsSync(resolve(cwd, 'tsconfig.node.json'))) { + process.stdout.write('\nPatching tsconfig.node.json\n') + + const tsconfigNodeJSONPath = resolve(cwd, 'tsconfig.node.json') + const tsconfigNodeJSON = readFileSync(tsconfigNodeJSONPath, 'utf-8') + + if (!tsconfigNodeJSON.includes('"lib": ["ESNext"],')) { + const modifiedTsconfigNodeJSON = tsconfigNodeJSON.replace( + '"compilerOptions": {', + '"compilerOptions": {\n "lib": ["ESNext"],' ) + writeFileSync(tsconfigNodeJSONPath, modifiedTsconfigNodeJSON, 'utf8') } - - process.stdout.write('Ok.\n') } - let config - process.stdout.write('Updating project configuration...') + let isViteConfigExists = false + ['js', 'ts'].forEach((ext) => { + // patching the vite.config.js to make socket:* modules external + if (existsSync(resolve(cwd, `vite.config.${ext}`))) { + process.stdout.write('\nPatching vite.config.' + ext + '\n') - try { - config = await fs.readFile('socket.ini', 'utf8') - } catch (err) { - process.stderr.write(`\nUnable to read socket.ini: ${err.stack ?? err.message}\n`) - process.exit(1) - } + const viteConfigPath = resolve(cwd, 'vite.config.js') + const viteConfig = readFileSync(viteConfigPath, 'utf-8') - config = config.split('\n').map((line, i) => { - if (line.includes('name = ')) { - return line.replace(line, `name = "${pkg.name}"`) - } - if (line.includes('copy = ') && !line.startsWith(';')) { - return line.replace(line, `; ${line}`) + // make socket:* modules external for build + if (!viteConfig.includes('external(id)')) { + const modifiedViteConfig = viteConfig.replace( + 'defineConfig({', + 'defineConfig({\n build: {\n rollupOptions: {\n external(id) {\n return id.startsWith(\'socket:\')\n }\n }\n },' + ) + writeFileSync(viteConfigPath, modifiedViteConfig, 'utf8') + } } - if (line.includes('script = ')) { - return line.replace(line, 'script = "node build.js"') + isViteConfigExists = true + }) + + if (!isViteConfigExists) { + process.stdout.write('\nCreating vite.config.js\n') + + const viteConfigPath = resolve(cwd, 'vite.config.js') + const viteConfig = ` +import { defineConfig } from 'vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + build: { + rollupOptions: { + external(id) { + return id.startsWith('socket:') + } } - // Socket 0.5 compatibility - if (isSocket05orGreater && line.includes('forward_arguments = ')) { - return line.replace(line, 'forward_arguments = true') - } - return line - }).join('\n') - - try { - await fs.writeFile('socket.ini', config) - } catch (err) { - process.stderr.write(`\nUnable to write socket.ini: ${err.stack ?? err.message}\n`) - process.exit(1) - } - process.stdout.write('Ok.\n') - - process.stdout.write('Copying project boilerplate...') - - const dirsToCopy = [ - 'common', - `templates/${templateName}` - ] - - let filesToCopy - try { - const filesInGroups = await Promise.all(dirsToCopy.map(dir => fs.readdir(path.join(__dirname, dir)))) - filesToCopy = filesInGroups.map((group, i) => group.map(file => path.join(__dirname, dirsToCopy[i], file))).flat() - } catch (err) { - process.stderr.write(`\nUnable to read template files: ${err.stack ?? err.message}\n`) + }, +}) +` + writeFileSync(viteConfigPath, viteConfig, 'utf8') } - try { - await Promise.all(filesToCopy.map(dir => cp(dir, process.cwd()))) - } catch (err) { - process.stderr.write(`\nUnable to copy files: ${err.stack ?? err.message}\n`) - process.exit(1) - } - process.stdout.write('Ok.') - - process.stdout.write('\n\nType \'npm start\' to launch the app\n') -} -main(process.argv.slice(2)) + process.stdout.write(`\nDone!\n\nBuild and run your app with:\nssc build -r ${projectName}`) +}) diff --git a/templates/react-ts/README.md b/templates/react-ts/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/react-ts/build.js b/templates/react-ts/build.js deleted file mode 100644 index 2a76a80..0000000 --- a/templates/react-ts/build.js +++ /dev/null @@ -1,83 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import fs from 'node:fs' -import path from 'node:path' - -import esbuild from 'esbuild' - -const cp = async (a, b) => - fs.promises.cp(path.resolve(a), path.join(b, path.basename(a)), { - recursive: true, - force: true - }) - -async function main () { - const prod = process.argv.find((s) => s.includes('--prod')) - - const params = { - entryPoints: ['src/index.tsx'], - format: 'esm', - bundle: true, - minify: !!prod, - sourcemap: !prod, - external: ['socket:*'] - } - - const watch = process.argv.find((s) => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - if (watch) { - esbuild.serve({ servedir: path.resolve(watch.split('=')[1]) }, params) - } - - // - // - // - if (!watch) { - await esbuild.build({ - ...params, - outfile: path.join(target, 'index.js') - }) - } - if (process.argv.find((s) => s.includes('--test'))) { - await esbuild.build({ - ...params, - entryPoints: ['test/index.ts'], - outdir: path.join(target, 'test') - }) - } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile( - path.join(target, 'package.json'), - '{ "type": "module", "private": true }' - ) - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } - - // - // Copy some files into the new project - // - await Promise.all([ - cp('src/index.html', target), - cp('src/index.css', target), - cp('src/icon.png', target) - ]) -} - -main() diff --git a/templates/react-ts/src/App.tsx b/templates/react-ts/src/App.tsx deleted file mode 100644 index 26106ec..0000000 --- a/templates/react-ts/src/App.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import os from 'socket:os'; -import React from 'react'; - -const App = () => { - return

Hello, {os.platform()}!

; -}; -export default App; diff --git a/templates/react-ts/src/index.css b/templates/react-ts/src/index.css deleted file mode 100644 index bf36a50..0000000 --- a/templates/react-ts/src/index.css +++ /dev/null @@ -1,120 +0,0 @@ -/* Minimal Reset */ -html { - box-sizing: border-box; - font-size: 16px; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -body, h1, h2, h3, h4, h5, h6, p, ol, ul { - margin: 0; - padding: 0; - font-weight: normal; -} - -ol, ul { - list-style: none; -} - -img { - max-width: 100%; - height: auto; -} - -/* Tonic theme */ - -body { - --tonic-body: 'Inter', sans-serif; - --tonic-header: 'Inter Black', sans-serif; - --tonic-subheader: 'Inter Medium', sans-serif; - --tonic-monospace: 'FiraMono', monospace; -} - -@media (prefers-color-scheme: light) { - body, *[theme="light"] { - --tonic-background: rgba(245, 245, 245, 1); - --tonic-background-dark: rgba(238, 238, 238, 1); - --tonic-window: rgba(255, 255, 255, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(54, 57, 61, 1); - --tonic-secondary: rgba(160, 160, 160, 1); - --tonic-light: rgba(153, 157, 160, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-shadow: rgba(150, 150, 150, 0.25); - --tonic-dark: rgba(54, 57, 61, 1); - --tonic-disabled: rgba(152, 161, 175, 1); - --tonic-button-text: rgba(54, 57, 61, 1); - --tonic-button-shadow: rgba(0, 0, 0, 33%); - --tonic-button-background: rgba(245, 245, 245, 1); - --tonic-button-background-hover: rgba(230, 230, 230, 1); - --tonic-button-background-focus: rgba(237, 237, 237, 1); - --tonic-input-text: rgba(54, 57, 61, 1); - --tonic-input-text-hover: rgba(228, 228, 228, 1); - --tonic-input-border: rgba(201, 201, 201, 1); - --tonic-input-border-hover: rgba(54, 57, 61, 1); - --tonic-input-background: rgba(248, 248, 248, 1); - --tonic-input-background-focus: rgba(238, 238, 238, 1); - --tonic-border: rgba(224, 224, 224, 1); - --tonic-border-accent: rgba(206, 206, 206, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-danger: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warning: rgba(249, 169, 103, 1); - --tonic-info: rgba(153, 157, 160, 1); - --tonic-overlay: rgba(255, 255, 255, 0.75); - } -} - -@media (prefers-color-scheme: dark) { - body, *[theme="dark"] { - --tonic-background: rgba(0, 0, 0, 1); - --tonic-background-dark: rgba(26, 26, 26, 1); - --tonic-window: rgba(32, 32, 32, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(242, 242, 242, 1); - --tonic-secondary: rgba(195, 195, 195, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-dark: rgba(41, 41, 41, 1); - --tonic-shadow: rgba(0, 0, 0, 0.3); - --tonic-disabled: rgba(170, 170, 170, 1); - --tonic-button-text: rgba(255, 255, 255, 1); - --tonic-button-shadow: rgba(0, 0, 0, 1); - --tonic-button-background: rgba(74, 74, 74, 1); - --tonic-button-background-hover: rgba(94, 94, 94, 1); - --tonic-button-background-focus: rgba(84, 84, 84, 1); - --tonic-input-text: rgba(255, 255, 255, 1); - --tonic-input-text-hover: rgba(255, 255, 255, 1); - --tonic-input-background: rgba(12, 12, 12, 1); - --tonic-input-background-focus: rgba(18, 18, 18, 1); - --tonic-input-border: rgba(80, 80, 80, 1); - --tonic-input-border-hover: rgba(105, 105, 105, 1); - --tonic-border: rgba(72, 72, 72, 1); - --tonic-border-accent: rgba(90, 90, 90, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-caution: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warn: rgba(249, 169, 103, 1); - --tonic-overlay: rgba(0, 0, 0, 0.40); - } -} - -/* Placeholder Styles */ -body { - height: 100vh; - font: -apple-system-body; - background-color: var(--tonic-window); - color: var(--tonic-primary); -} - -h1 { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font: -apple-system-title0; - font-size: 2.5em; -} diff --git a/templates/react-ts/src/index.html b/templates/react-ts/src/index.html deleted file mode 100644 index 8325fb3..0000000 --- a/templates/react-ts/src/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - Hello, World - - -
- - - diff --git a/templates/react-ts/src/index.tsx b/templates/react-ts/src/index.tsx deleted file mode 100644 index 57c211e..0000000 --- a/templates/react-ts/src/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import process from 'socket:process'; - -if (process.env.DEBUG) { - console.log('started in debug mode'); -} - -// components -import App from './App'; - -const root = createRoot(document.getElementById('root') as HTMLElement); - -root.render( - - - -); diff --git a/templates/react-ts/test/index.ts b/templates/react-ts/test/index.ts deleted file mode 100644 index 3571e82..0000000 --- a/templates/react-ts/test/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { test } from 'socket:test'; -import os from 'socket:os'; - -test('test', async (t: any) => { - const label1 = document.querySelector('h1')?.textContent; - t.equal(label1, `Hello, ${os.platform()}`, 'label on start is correct'); -}); diff --git a/templates/react-ts/tsconfig.json b/templates/react-ts/tsconfig.json deleted file mode 100644 index 3cd5cfa..0000000 --- a/templates/react-ts/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "include": [ - "src/*", - "src/**/*", - "tests/*", - "tests/**/*" - ], - "compilerOptions": { - "moduleResolution": "node", - "types": ["@socketsupply/socket"], - "target": "es2022", - "module": "es2022", - "lib": ["es2022", "es6", "dom"], - - "removeComments": false, - - "checkJs": true, - "allowJs": true, - "noEmit": true, - "allowSyntheticDefaultImports": true, - "jsx": "react", - - "strict": true, - - "declaration": true, - "declarationMap": true, - - "baseUrl": "." - } -} diff --git a/templates/react/README.md b/templates/react/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/react/build.js b/templates/react/build.js deleted file mode 100644 index 023aa2d..0000000 --- a/templates/react/build.js +++ /dev/null @@ -1,80 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import fs from 'node:fs' -import path from 'node:path' - -import esbuild from 'esbuild' - -const cp = async (a, b) => fs.promises.cp( - path.resolve(a), - path.join(b, path.basename(a)), - { recursive: true, force: true } -) - -async function main () { - const prod = process.argv.find(s => s.includes('--prod')) - - const params = { - entryPoints: ['src/index.jsx'], - format: 'esm', - bundle: true, - minify: !!prod, - sourcemap: !prod, - external: ['socket:*'] - } - - const watch = process.argv.find(s => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - if (watch) { - esbuild.serve({ servedir: path.resolve(watch.split('=')[1]) }, params) - } - - // - // - // - if (!watch) { - await esbuild.build({ - ...params, - outfile: path.join(target, 'index.js') - }) - } - if (process.argv.find(s => s.includes('--test'))) { - await esbuild.build({ - ...params, - entryPoints: ['test/index.js'], - outdir: path.join(target, 'test') - }) - } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile(path.join(target, 'package.json'), '{ "type": "module", "private": true }') - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } - - // - // Copy some files into the new project - // - await Promise.all([ - cp('src/index.html', target), - cp('src/index.css', target), - cp('src/icon.png', target) - ]) -} - -main() diff --git a/templates/react/src/index.css b/templates/react/src/index.css deleted file mode 100644 index bf36a50..0000000 --- a/templates/react/src/index.css +++ /dev/null @@ -1,120 +0,0 @@ -/* Minimal Reset */ -html { - box-sizing: border-box; - font-size: 16px; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -body, h1, h2, h3, h4, h5, h6, p, ol, ul { - margin: 0; - padding: 0; - font-weight: normal; -} - -ol, ul { - list-style: none; -} - -img { - max-width: 100%; - height: auto; -} - -/* Tonic theme */ - -body { - --tonic-body: 'Inter', sans-serif; - --tonic-header: 'Inter Black', sans-serif; - --tonic-subheader: 'Inter Medium', sans-serif; - --tonic-monospace: 'FiraMono', monospace; -} - -@media (prefers-color-scheme: light) { - body, *[theme="light"] { - --tonic-background: rgba(245, 245, 245, 1); - --tonic-background-dark: rgba(238, 238, 238, 1); - --tonic-window: rgba(255, 255, 255, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(54, 57, 61, 1); - --tonic-secondary: rgba(160, 160, 160, 1); - --tonic-light: rgba(153, 157, 160, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-shadow: rgba(150, 150, 150, 0.25); - --tonic-dark: rgba(54, 57, 61, 1); - --tonic-disabled: rgba(152, 161, 175, 1); - --tonic-button-text: rgba(54, 57, 61, 1); - --tonic-button-shadow: rgba(0, 0, 0, 33%); - --tonic-button-background: rgba(245, 245, 245, 1); - --tonic-button-background-hover: rgba(230, 230, 230, 1); - --tonic-button-background-focus: rgba(237, 237, 237, 1); - --tonic-input-text: rgba(54, 57, 61, 1); - --tonic-input-text-hover: rgba(228, 228, 228, 1); - --tonic-input-border: rgba(201, 201, 201, 1); - --tonic-input-border-hover: rgba(54, 57, 61, 1); - --tonic-input-background: rgba(248, 248, 248, 1); - --tonic-input-background-focus: rgba(238, 238, 238, 1); - --tonic-border: rgba(224, 224, 224, 1); - --tonic-border-accent: rgba(206, 206, 206, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-danger: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warning: rgba(249, 169, 103, 1); - --tonic-info: rgba(153, 157, 160, 1); - --tonic-overlay: rgba(255, 255, 255, 0.75); - } -} - -@media (prefers-color-scheme: dark) { - body, *[theme="dark"] { - --tonic-background: rgba(0, 0, 0, 1); - --tonic-background-dark: rgba(26, 26, 26, 1); - --tonic-window: rgba(32, 32, 32, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(242, 242, 242, 1); - --tonic-secondary: rgba(195, 195, 195, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-dark: rgba(41, 41, 41, 1); - --tonic-shadow: rgba(0, 0, 0, 0.3); - --tonic-disabled: rgba(170, 170, 170, 1); - --tonic-button-text: rgba(255, 255, 255, 1); - --tonic-button-shadow: rgba(0, 0, 0, 1); - --tonic-button-background: rgba(74, 74, 74, 1); - --tonic-button-background-hover: rgba(94, 94, 94, 1); - --tonic-button-background-focus: rgba(84, 84, 84, 1); - --tonic-input-text: rgba(255, 255, 255, 1); - --tonic-input-text-hover: rgba(255, 255, 255, 1); - --tonic-input-background: rgba(12, 12, 12, 1); - --tonic-input-background-focus: rgba(18, 18, 18, 1); - --tonic-input-border: rgba(80, 80, 80, 1); - --tonic-input-border-hover: rgba(105, 105, 105, 1); - --tonic-border: rgba(72, 72, 72, 1); - --tonic-border-accent: rgba(90, 90, 90, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-caution: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warn: rgba(249, 169, 103, 1); - --tonic-overlay: rgba(0, 0, 0, 0.40); - } -} - -/* Placeholder Styles */ -body { - height: 100vh; - font: -apple-system-body; - background-color: var(--tonic-window); - color: var(--tonic-primary); -} - -h1 { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font: -apple-system-title0; - font-size: 2.5em; -} diff --git a/templates/react/src/index.html b/templates/react/src/index.html deleted file mode 100644 index 23c9c77..0000000 --- a/templates/react/src/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - Hello, World - - -
- - - diff --git a/templates/react/src/index.jsx b/templates/react/src/index.jsx deleted file mode 100644 index ccf61ff..0000000 --- a/templates/react/src/index.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import process from 'socket:process' -import os from 'socket:os' - -import { createRoot } from 'react-dom/client' -import React from 'react' - -if (process.env.DEBUG) { - console.log('started in debug mode') -} - -function AppContainer () { - return

Hello, {os.platform()}!

-} - -const root = createRoot(document.getElementById('root')) -root.render() diff --git a/templates/react/test/index.js b/templates/react/test/index.js deleted file mode 100644 index 0fd4f1a..0000000 --- a/templates/react/test/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import { test } from 'socket:test' -import os from 'socket:os' - -test('test', async t => { - const label1 = document.querySelector('h1').textContent - t.equal(label1, `Hello, ${os.platform()}`, 'label on start is correct') -}) diff --git a/templates/svelte/.vscode/extensions.json b/templates/svelte/.vscode/extensions.json deleted file mode 100644 index bdef820..0000000 --- a/templates/svelte/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["svelte.svelte-vscode"] -} diff --git a/templates/svelte/README.md b/templates/svelte/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/svelte/build.js b/templates/svelte/build.js deleted file mode 100644 index 7366735..0000000 --- a/templates/svelte/build.js +++ /dev/null @@ -1,65 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import path from 'node:path' -import fs from 'node:fs' -import { build } from 'vite' -import { svelte } from '@sveltejs/vite-plugin-svelte' - -async function main () { - const prod = process.argv.find(s => s.includes('--prod')) - - const watch = process.argv.find(s => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - // TODO: Implement watch mode - - // - // - // - if (!watch) { - await build({ - root: path.resolve('./src'), - mode: prod ? 'production' : 'development', - base: './', - plugins: [svelte()], - build: { - outDir: target, - emptyOutDir: false, - sourcemap: !prod, - minify: prod ? 'esbuild' : false, - rollupOptions: { - external: [/socket:.*/] - } - // modulePreload: { - // polyfill: false - // }, - } - }) - } - // TODO: Implement test mode - // if (process.argv.find(s => s.includes('--test'))) { - // ... - // } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile(path.join(target, 'package.json'), '{ "type": "module", private": true }') - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } -} - -main() diff --git a/templates/svelte/src/App.svelte b/templates/svelte/src/App.svelte deleted file mode 100644 index c869bad..0000000 --- a/templates/svelte/src/App.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - -
-
- -
-

Vite + Svelte (on {toProperCase(os.platform())})

- -
- -
-
- - diff --git a/templates/svelte/src/app.css b/templates/svelte/src/app.css deleted file mode 100644 index bcc7233..0000000 --- a/templates/svelte/src/app.css +++ /dev/null @@ -1,81 +0,0 @@ -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -.card { - padding: 2em; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/templates/svelte/src/assets/svelte.svg b/templates/svelte/src/assets/svelte.svg deleted file mode 100644 index c5e0848..0000000 --- a/templates/svelte/src/assets/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/svelte/src/index.html b/templates/svelte/src/index.html deleted file mode 100644 index 10556fe..0000000 --- a/templates/svelte/src/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - Vite + Svelte - - -
- - - diff --git a/templates/svelte/src/lib/Counter.svelte b/templates/svelte/src/lib/Counter.svelte deleted file mode 100644 index e45f903..0000000 --- a/templates/svelte/src/lib/Counter.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/templates/svelte/src/main.js b/templates/svelte/src/main.js deleted file mode 100644 index 5c1f795..0000000 --- a/templates/svelte/src/main.js +++ /dev/null @@ -1,8 +0,0 @@ -import './app.css' -import App from './App.svelte' - -const app = new App({ - target: document.getElementById('app') -}) - -export default app diff --git a/templates/svelte/src/svelte.svg b/templates/svelte/src/svelte.svg deleted file mode 100644 index c5e0848..0000000 --- a/templates/svelte/src/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/svelte/src/vite-env.d.ts b/templates/svelte/src/vite-env.d.ts deleted file mode 100644 index 4078e74..0000000 --- a/templates/svelte/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/templates/tonic/README.md b/templates/tonic/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/tonic/build.js b/templates/tonic/build.js deleted file mode 100644 index ebc6d4f..0000000 --- a/templates/tonic/build.js +++ /dev/null @@ -1,80 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import fs from 'node:fs' -import path from 'node:path' - -import esbuild from 'esbuild' - -const cp = async (a, b) => fs.promises.cp( - path.resolve(a), - path.join(b, path.basename(a)), - { recursive: true, force: true } -) - -async function main () { - const prod = process.argv.find(s => s.includes('--prod')) - - const params = { - entryPoints: ['src/index.js'], - format: 'esm', - bundle: true, - minify: !!prod, - sourcemap: !prod, - external: ['socket:*'] - } - - const watch = process.argv.find(s => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - if (watch) { - esbuild.serve({ servedir: path.resolve(watch.split('=')[1]) }, params) - } - - // - // - // - if (!watch) { - await esbuild.build({ - ...params, - outdir: target - }) - } - if (process.argv.find(s => s.includes('--test'))) { - await esbuild.build({ - ...params, - entryPoints: ['test/index.js'], - outdir: path.join(target, 'test') - }) - } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile(path.join(target, 'package.json'), '{ "private": true }') - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } - - // - // Copy some files into the new project - // - await Promise.all([ - cp('src/index.html', target), - cp('src/index.css', target), - cp('src/icon.png', target) - ]) -} - -main() diff --git a/templates/tonic/src/index.css b/templates/tonic/src/index.css deleted file mode 100644 index bf36a50..0000000 --- a/templates/tonic/src/index.css +++ /dev/null @@ -1,120 +0,0 @@ -/* Minimal Reset */ -html { - box-sizing: border-box; - font-size: 16px; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -body, h1, h2, h3, h4, h5, h6, p, ol, ul { - margin: 0; - padding: 0; - font-weight: normal; -} - -ol, ul { - list-style: none; -} - -img { - max-width: 100%; - height: auto; -} - -/* Tonic theme */ - -body { - --tonic-body: 'Inter', sans-serif; - --tonic-header: 'Inter Black', sans-serif; - --tonic-subheader: 'Inter Medium', sans-serif; - --tonic-monospace: 'FiraMono', monospace; -} - -@media (prefers-color-scheme: light) { - body, *[theme="light"] { - --tonic-background: rgba(245, 245, 245, 1); - --tonic-background-dark: rgba(238, 238, 238, 1); - --tonic-window: rgba(255, 255, 255, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(54, 57, 61, 1); - --tonic-secondary: rgba(160, 160, 160, 1); - --tonic-light: rgba(153, 157, 160, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-shadow: rgba(150, 150, 150, 0.25); - --tonic-dark: rgba(54, 57, 61, 1); - --tonic-disabled: rgba(152, 161, 175, 1); - --tonic-button-text: rgba(54, 57, 61, 1); - --tonic-button-shadow: rgba(0, 0, 0, 33%); - --tonic-button-background: rgba(245, 245, 245, 1); - --tonic-button-background-hover: rgba(230, 230, 230, 1); - --tonic-button-background-focus: rgba(237, 237, 237, 1); - --tonic-input-text: rgba(54, 57, 61, 1); - --tonic-input-text-hover: rgba(228, 228, 228, 1); - --tonic-input-border: rgba(201, 201, 201, 1); - --tonic-input-border-hover: rgba(54, 57, 61, 1); - --tonic-input-background: rgba(248, 248, 248, 1); - --tonic-input-background-focus: rgba(238, 238, 238, 1); - --tonic-border: rgba(224, 224, 224, 1); - --tonic-border-accent: rgba(206, 206, 206, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-danger: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warning: rgba(249, 169, 103, 1); - --tonic-info: rgba(153, 157, 160, 1); - --tonic-overlay: rgba(255, 255, 255, 0.75); - } -} - -@media (prefers-color-scheme: dark) { - body, *[theme="dark"] { - --tonic-background: rgba(0, 0, 0, 1); - --tonic-background-dark: rgba(26, 26, 26, 1); - --tonic-window: rgba(32, 32, 32, 1); - --tonic-accent: rgba(56, 185, 255, 1); - --tonic-primary: rgba(242, 242, 242, 1); - --tonic-secondary: rgba(195, 195, 195, 1); - --tonic-medium: rgba(153, 157, 160, 1); - --tonic-dark: rgba(41, 41, 41, 1); - --tonic-shadow: rgba(0, 0, 0, 0.3); - --tonic-disabled: rgba(170, 170, 170, 1); - --tonic-button-text: rgba(255, 255, 255, 1); - --tonic-button-shadow: rgba(0, 0, 0, 1); - --tonic-button-background: rgba(74, 74, 74, 1); - --tonic-button-background-hover: rgba(94, 94, 94, 1); - --tonic-button-background-focus: rgba(84, 84, 84, 1); - --tonic-input-text: rgba(255, 255, 255, 1); - --tonic-input-text-hover: rgba(255, 255, 255, 1); - --tonic-input-background: rgba(12, 12, 12, 1); - --tonic-input-background-focus: rgba(18, 18, 18, 1); - --tonic-input-border: rgba(80, 80, 80, 1); - --tonic-input-border-hover: rgba(105, 105, 105, 1); - --tonic-border: rgba(72, 72, 72, 1); - --tonic-border-accent: rgba(90, 90, 90, 1); - --tonic-error: rgba(240, 102, 83, 1); - --tonic-notification: rgba(240, 102, 83, 1); - --tonic-caution: rgba(240, 102, 83, 1); - --tonic-success: rgba(133, 178, 116, 1); - --tonic-warn: rgba(249, 169, 103, 1); - --tonic-overlay: rgba(0, 0, 0, 0.40); - } -} - -/* Placeholder Styles */ -body { - height: 100vh; - font: -apple-system-body; - background-color: var(--tonic-window); - color: var(--tonic-primary); -} - -h1 { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font: -apple-system-title0; - font-size: 2.5em; -} diff --git a/templates/tonic/src/index.html b/templates/tonic/src/index.html deleted file mode 100644 index a57731f..0000000 --- a/templates/tonic/src/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - Hello, World - - - - - - - diff --git a/templates/tonic/src/index.js b/templates/tonic/src/index.js deleted file mode 100644 index 84bc426..0000000 --- a/templates/tonic/src/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import Tonic from '@socketsupply/tonic' - -import process from 'socket:process' -import os from 'socket:os' - -if (process.env.DEBUG) { - console.log('started in debug mode') -} - -class AppContainer extends Tonic { - render () { - const platform = os.platform() - - return this.html` -

Hello, ${platform}!

- ` - } -} - -Tonic.add(AppContainer, 'app-container') diff --git a/templates/tonic/test/index.js b/templates/tonic/test/index.js deleted file mode 100644 index 0fd4f1a..0000000 --- a/templates/tonic/test/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import { test } from 'socket:test' -import os from 'socket:os' - -test('test', async t => { - const label1 = document.querySelector('h1').textContent - t.equal(label1, `Hello, ${os.platform()}`, 'label on start is correct') -}) diff --git a/templates/vanilla/README.md b/templates/vanilla/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/vanilla/build.js b/templates/vanilla/build.js deleted file mode 100644 index ebc6d4f..0000000 --- a/templates/vanilla/build.js +++ /dev/null @@ -1,80 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import fs from 'node:fs' -import path from 'node:path' - -import esbuild from 'esbuild' - -const cp = async (a, b) => fs.promises.cp( - path.resolve(a), - path.join(b, path.basename(a)), - { recursive: true, force: true } -) - -async function main () { - const prod = process.argv.find(s => s.includes('--prod')) - - const params = { - entryPoints: ['src/index.js'], - format: 'esm', - bundle: true, - minify: !!prod, - sourcemap: !prod, - external: ['socket:*'] - } - - const watch = process.argv.find(s => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - if (watch) { - esbuild.serve({ servedir: path.resolve(watch.split('=')[1]) }, params) - } - - // - // - // - if (!watch) { - await esbuild.build({ - ...params, - outdir: target - }) - } - if (process.argv.find(s => s.includes('--test'))) { - await esbuild.build({ - ...params, - entryPoints: ['test/index.js'], - outdir: path.join(target, 'test') - }) - } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile(path.join(target, 'package.json'), '{ "private": true }') - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } - - // - // Copy some files into the new project - // - await Promise.all([ - cp('src/index.html', target), - cp('src/index.css', target), - cp('src/icon.png', target) - ]) -} - -main() diff --git a/templates/vanilla/src/index.css b/templates/vanilla/src/index.css deleted file mode 100644 index cd80401..0000000 --- a/templates/vanilla/src/index.css +++ /dev/null @@ -1,40 +0,0 @@ -/* Minimal Reset */ -html { - box-sizing: border-box; - font-size: 16px; - font: -apple-system-body; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -body, h1, h2, h3, h4, h5, h6, p, ol, ul { - margin: 0; - padding: 0; - font-weight: normal; -} - -ol, ul { - list-style: none; -} - -img { - max-width: 100%; - height: auto; -} - -/* Placeholder Styles */ -body { - height: 100vh; -} - -.centered { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font: -apple-system-title0; - font-size: 2.5em; - text-align: center; -} diff --git a/templates/vanilla/src/index.html b/templates/vanilla/src/index.html deleted file mode 100644 index f9043cd..0000000 --- a/templates/vanilla/src/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - Hello, World - - -
-

Hello, World

-

Socket Runtime

-
- - - diff --git a/templates/vanilla/src/index.js b/templates/vanilla/src/index.js deleted file mode 100644 index db015a9..0000000 --- a/templates/vanilla/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import process from 'socket:process' -import os from 'socket:os' - -if (process.env.DEBUG) { - console.log('started in debug mode') -} - -window.addEventListener('DOMContentLoaded', () => { - const platform = os.platform() - - setTimeout(() => { - const h1 = document.querySelector('h1') - h1.textContent = `Hello, ${platform}!` - }, 2048) -}) diff --git a/templates/vanilla/test/index.js b/templates/vanilla/test/index.js deleted file mode 100644 index bac2980..0000000 --- a/templates/vanilla/test/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { test } from 'socket:test' -import os from 'socket:os' - -test('test', async t => { - const label1 = document.querySelector('h1').textContent - t.equal(label1, 'Hello, World', 'label on start is correct') - - // sleep 3 seconds - await new Promise(resolve => setTimeout(resolve, 3000)) - - const label2 = document.querySelector('h1').textContent - t.equal(label2, `Hello, ${os.platform()}!`, 'label after 3 seconds is correct') -}) diff --git a/templates/vue/.vscode/extensions.json b/templates/vue/.vscode/extensions.json deleted file mode 100644 index c0a6e5a..0000000 --- a/templates/vue/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] -} diff --git a/templates/vue/README.md b/templates/vue/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/templates/vue/build.js b/templates/vue/build.js deleted file mode 100644 index 6d15bb2..0000000 --- a/templates/vue/build.js +++ /dev/null @@ -1,65 +0,0 @@ -// -// This is an example build script for Socket Runtime -// When you run 'ssc build', this script (node build.js) will be run -// -import path from 'node:path' -import fs from 'node:fs' -import { build } from 'vite' -import vue from '@vitejs/plugin-vue' - -async function main () { - const prod = process.argv.find(s => s.includes('--prod')) - - const watch = process.argv.find(s => s.includes('--watch=')) - - // - // The second argument to this program will be the target-OS specifc - // directory for where to copy your build artifacts - // - const target = path.resolve(process.argv[2]) - - // - // If the watch command is specified, let esbuild start its server - // - // TODO: Implement watch mode - - // - // - // - if (!watch) { - await build({ - root: path.resolve('./src'), - mode: prod ? 'production' : 'development', - base: './', - plugins: [vue()], - build: { - outDir: target, - emptyOutDir: false, - sourcemap: !prod, - minify: prod ? 'esbuild' : false, - rollupOptions: { - external: [/socket:.*/] - } - // modulePreload: { - // polyfill: false - // }, - } - }) - } - // TODO: Implement test mode - // if (process.argv.find(s => s.includes('--test'))) { - // ... - // } - - // - // Not writing a package json to your project could be a security risk - // - await fs.promises.writeFile(path.join(target, 'package.json'), '{ "private": true }') - - if (!target) { - console.log('Did not receive the build target path as an argument!') - process.exit(1) - } -} - -main() diff --git a/templates/vue/src/App.vue b/templates/vue/src/App.vue deleted file mode 100644 index 7247053..0000000 --- a/templates/vue/src/App.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/templates/vue/src/assets/vue.svg b/templates/vue/src/assets/vue.svg deleted file mode 100644 index 770e9d3..0000000 --- a/templates/vue/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/vue/src/components/HelloWorld.vue b/templates/vue/src/components/HelloWorld.vue deleted file mode 100644 index ebd56d9..0000000 --- a/templates/vue/src/components/HelloWorld.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/templates/vue/src/index.html b/templates/vue/src/index.html deleted file mode 100644 index 3fa9110..0000000 --- a/templates/vue/src/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - Vite + Vue - - -
- - - diff --git a/templates/vue/src/main.js b/templates/vue/src/main.js deleted file mode 100644 index 2425c0f..0000000 --- a/templates/vue/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' - -createApp(App).mount('#app') diff --git a/templates/vue/src/style.css b/templates/vue/src/style.css deleted file mode 100644 index a566a34..0000000 --- a/templates/vue/src/style.css +++ /dev/null @@ -1,90 +0,0 @@ -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -.card { - padding: 2em; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/test.js b/test.js deleted file mode 100644 index 0c62b98..0000000 --- a/test.js +++ /dev/null @@ -1,56 +0,0 @@ -import test from 'node:test' -import assert from 'node:assert' -import tmp from 'p-temporary-directory' -import path from 'node:path' -import cp from 'node:child_process' -import os from 'node:os' -import desm from 'desm' - -const __dirname = desm(import.meta.url) - -const cliPath = path.join(__dirname, 'index.js') - -test('test all the templates', async (t) => { - let dir, cleanup - t.beforeEach(async () => { - [dir, cleanup] = await tmp() - }) - - t.afterEach(async () => { - await cleanup() - }) - - const templates = ['tonic', 'react', 'react-ts', 'vanilla', 'vue', 'svelte'] - - for (const template of templates) { - await t.test(`${template} template`, async (t) => { - await assert.doesNotReject(async () => { - return new Promise((resolve, reject) => { - const child = os.platform() === 'win32' - ? cp.spawn('node', [cliPath, template], { cwd: dir }) - : cp.spawn(cliPath, [template], { cwd: dir }) - - child.stdout.on('data', (data) => { - console.log(`stdout: ${data}`) - }) - - child.stderr.on('data', (data) => { - console.error(`stderr: ${data}`) - }) - - child.on('error', (error) => { - reject(error) - }) - - child.on('close', (code) => { - if (code !== 0) { - reject(new Error(`child process exited with code ${code}`)) - } else { - resolve() - } - }) - }) - }) - }) - } -})