From 672a5613d864b9825d7bd55e47b5f85e1366272f Mon Sep 17 00:00:00 2001 From: "pengfei.zhou" Date: Wed, 4 Dec 2019 14:16:57 +0800 Subject: [PATCH] move files from main project --- contents/$.ts | 40 +++++ contents/_gitignore | 3 + contents/_launch.json | 24 +++ contents/_package.json | 22 +++ contents/_rollup.config.js | 19 +++ contents/_tasks.json | 28 ++++ contents/_tsconfig.json | 61 ++++++++ index.js | 27 ++++ package-lock.json | 308 +++++++++++++++++++++++++++++++++++++ package.json | 34 ++++ scripts/command.js | 53 +++++++ scripts/init.js | 28 ++++ scripts/server.js | 65 ++++++++ scripts/watcher.js | 78 ++++++++++ 14 files changed, 790 insertions(+) create mode 100644 contents/$.ts create mode 100644 contents/_gitignore create mode 100644 contents/_launch.json create mode 100644 contents/_package.json create mode 100644 contents/_rollup.config.js create mode 100644 contents/_tasks.json create mode 100644 contents/_tsconfig.json create mode 100755 index.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/command.js create mode 100644 scripts/init.js create mode 100644 scripts/server.js create mode 100644 scripts/watcher.js diff --git a/contents/$.ts b/contents/$.ts new file mode 100644 index 00000000..0d63958d --- /dev/null +++ b/contents/$.ts @@ -0,0 +1,40 @@ +import { Panel, Group, vlayout, layoutConfig, Gravity, IVLayout, text, Text, Color } from "doric"; + +@Entry +class __$__ extends Panel { + build(rootView: Group): void { + let number: Text + let count = 0 + vlayout([ + number = text({ + textSize: 40, + text: '0', + }), + text({ + text: "Click to count", + textSize: 20, + bgColor: Color.parse('#70a1ff'), + textColor: Color.WHITE, + onClick: () => { + number.text = `${++count}` + }, + layoutConfig: layoutConfig().exactly(), + width: 100, + height: 50, + }), + ]) + .apply({ + layoutConfig: layoutConfig().exactly().a(Gravity.Center), + width: 200, + height: 200, + space: 20, + border: { + color: Color.BLUE, + width: 1, + }, + gravity: Gravity.Center, + } as IVLayout) + .in(rootView) + } + +} \ No newline at end of file diff --git a/contents/_gitignore b/contents/_gitignore new file mode 100644 index 00000000..692a327e --- /dev/null +++ b/contents/_gitignore @@ -0,0 +1,3 @@ +node_modules/ +build/ +bundle/ \ No newline at end of file diff --git a/contents/_launch.json b/contents/_launch.json new file mode 100644 index 00000000..39c84064 --- /dev/null +++ b/contents/_launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug TS", + "program": "${workspaceFolder}/${relativeFile}", + "preLaunchTask": "Doric Build", + "sourceMaps": true, + "serverReadyAction": { + "pattern": "listening on port ([0-9]+)", + "uriFormat": "http://localhost:%s", + "action": "openExternally" + }, + "outFiles": [ + "${workspaceFolder}/bundle/**/*.js" + ] + } + ] +} \ No newline at end of file diff --git a/contents/_package.json b/contents/_package.json new file mode 100644 index 00000000..d8812de4 --- /dev/null +++ b/contents/_package.json @@ -0,0 +1,22 @@ +{ + "name": "__$__", + "version": "0.1.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc -p .&& rollup -c", + "dev": "tsc -w -p . & rollup -c -w", + "clean": "rm -rf build && rm -rf bundle" + }, + "license": "Apache-2.0", + "dependencies": { + "doric": "0.1.0", + "reflect-metadata": "^0.1.13", + "rollup": "^1.17.0", + "rollup-plugin-commonjs": "^10.0.1", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-watch": "^4.3.1", + "tslib": "^1.10.0", + "typescript": "^3.5.3" + } +} \ No newline at end of file diff --git a/contents/_rollup.config.js b/contents/_rollup.config.js new file mode 100644 index 00000000..e267034d --- /dev/null +++ b/contents/_rollup.config.js @@ -0,0 +1,19 @@ +import resolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs' +import bundles from './build/index' + +export default bundles.map(bundle => { + return { + input: `build/${bundle}.js`, + output: { + format: "cjs", + file: `bundle/${bundle}.js`, + sourcemap: true, + }, + plugins: [ + resolve({ jsnext: true, main: true }), + commonjs() + ], + external: ['reflect-metadata', 'doric'], + } +}) \ No newline at end of file diff --git a/contents/_tasks.json b/contents/_tasks.json new file mode 100644 index 00000000..d51f6710 --- /dev/null +++ b/contents/_tasks.json @@ -0,0 +1,28 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Doric Build", + "type": "shell", + "command": "doric build", + "group": "build", + "problemMatcher": [] + }, + { + "label": "Doric Clean", + "type": "shell", + "command": "doric clean", + "group": "build", + "problemMatcher": [] + }, + { + "label": "Doric Dev", + "type": "shell", + "command": "doric dev", + "group": "build", + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/contents/_tsconfig.json b/contents/_tsconfig.json new file mode 100644 index 00000000..8a7c268d --- /dev/null +++ b/contents/_tsconfig.json @@ -0,0 +1,61 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "es2015", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "build/", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + /* Experimental Options */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */ + }, + "include": [ + "**/*.ts", + ] +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100755 index 00000000..5787e282 --- /dev/null +++ b/index.js @@ -0,0 +1,27 @@ +#!/usr/bin/env node + +var program = require('commander'); + +program + .command('create ') + .option('-n, --native', 'Native') + .action(function (name, cmd) { + console.log('create ' + name + (cmd.native ? ' native' : 'js')) + require('./scripts/init')(name) + }) +program + .command('dev') + .action(function () { + require('./scripts/watcher') + }) +program + .command('build') + .action(function () { + require('./scripts/command').build() + }) +program + .command('clean') + .action(function () { + require('./scripts/command').clean() + }) +program.parse(process.argv) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..69b3c775 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,308 @@ +{ + "name": "doric-cli", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "@types/node": { + "version": "12.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.11.tgz", + "integrity": "sha512-O+x6uIpa6oMNTkPuHDa9MhMMehlxLAd5QcOvKRjAFsBVpeFWTOPnXbDvILvFgFFZfQ1xh1EZi1FbXxUix+zpsQ==" + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "child_process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", + "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=" + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "commander": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "optional": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "keypress": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", + "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "nodejs-websocket": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/nodejs-websocket/-/nodejs-websocket-1.7.2.tgz", + "integrity": "sha512-PFX6ypJcCNDs7obRellR0DGTebfUhw1SXGKe2zpB+Ng1DQJhdzbzx1ob+AvJCLzy2TJF4r8cCDqMQqei1CZdPQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" + }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "requires": { + "picomatch": "^2.0.4" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "rollup": { + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.2.tgz", + "integrity": "sha512-sD3iyd0zlvgK1S3MmICi6F/Y+R/QWY5XxzsTGN4pAd+nCasDUizmAhgq2hdh1t2eLux974NHU2TW41fhuGPv+Q==", + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "source-map-merger": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map-merger/-/source-map-merger-0.2.0.tgz", + "integrity": "sha1-vJ2EQ1uYLA/WaywliFH4wGYgRCc=", + "requires": { + "source-map": "^0.4.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "typescript": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..0c9d6256 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "doric-cli", + "version": "0.1.0", + "description": "Doric command line tools", + "main": "index.js", + "bin": { + "doric": "index.js" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/penfeizhou/doric.git" + }, + "author": "pengfei.zhou", + "license": "ISC", + "bugs": { + "url": "https://github.com/penfeizhou/doric/issues" + }, + "homepage": "https://github.com/penfeizhou/doric#readme", + "dependencies": { + "child_process": "^1.0.2", + "chokidar": "^3.3.0", + "commander": "^4.0.1", + "keypress": "^0.2.1", + "nodejs-websocket": "^1.7.2", + "qrcode-terminal": "^0.12.0", + "rollup": "^1.27.2", + "shelljs": "^0.8.3", + "source-map-merger": "^0.2.0", + "typescript": "^3.7.2" + } +} \ No newline at end of file diff --git a/scripts/command.js b/scripts/command.js new file mode 100644 index 00000000..2da4018e --- /dev/null +++ b/scripts/command.js @@ -0,0 +1,53 @@ +require('shelljs/global') +const fs = require("fs") +const path = require("path") +const SourceMapMerger = require("source-map-merger"); + +function fromDir(startPath, filter) { + if (!fs.existsSync(startPath)) { + console.log("no dir ", startPath); + return; + } + + const files = fs.readdirSync(startPath); + for (let i = 0; i < files.length; i++) { + const filename = path.join(startPath, files[i]); + const stat = fs.lstatSync(filename); + if (stat.isDirectory()) { + fromDir(filename, filter); + } + else if (filename.indexOf(filter) >= 0) { + try { + doMerge(startPath, files[i]) + } catch (e) { + console.log(e) + } + }; + }; +}; +function doMerge(startPath, fileName) { + const filePath = fileName ? path.join(startPath, fileName) : startPath + const mergedMap = SourceMapMerger.createMergedSourceMapFromFiles([ + filePath.replace(/bundle\//, 'build/'), + filePath, + ], true); + fs.writeFileSync(filePath, mergedMap) + return mergedMap +} +function mergeMappings() { + fromDir("bundle", ".map") +} + +module.exports = { + build: () => { + exec('npm run build') + console.log('Deal mapping') + mergeMappings() + }, + clean: () => { + exec('npm run clean') + }, + mergeMappings, + doMerge, +} + diff --git a/scripts/init.js b/scripts/init.js new file mode 100644 index 00000000..2c8b2bbd --- /dev/null +++ b/scripts/init.js @@ -0,0 +1,28 @@ +var fs = require('fs'); +require('shelljs/global') + +module.exports = function (name) { + if (fs.existsSync(name)) { + console.warn(`Dir:${process.cwd()}/${name} already exists`) + return; + } + fs.mkdir(name, function (err) { + if (err) { + return console.error(err); + } + console.log(`create dir ${name} success`); + fs.writeFileSync(`${name}/package.json`, fs.readFileSync(`${__dirname}/../contents/_package.json`).toString().replace(/__\$__/g, name)) + fs.writeFileSync(`${name}/tsconfig.json`, fs.readFileSync(`${__dirname}/../contents/_tsconfig.json`)) + fs.writeFileSync(`${name}/rollup.config.js`, fs.readFileSync(`${__dirname}/../contents/_rollup.config.js`)) + fs.writeFileSync(`${name}/.gitignore`, fs.readFileSync(`${__dirname}/../contents/_gitignore`)) + fs.mkdirSync(`${name}/.vscode`) + fs.writeFileSync(`${name}/.vscode/launch.json`, fs.readFileSync(`${__dirname}/../contents/_launch.json`).toString().replace(/__\$__/g, name)) + fs.writeFileSync(`${name}/.vscode/tasks.json`, fs.readFileSync(`${__dirname}/../contents/_tasks.json`).toString().replace(/__\$__/g, name)) + fs.mkdirSync(`${name}/src`) + fs.writeFileSync(`${name}/src/${name}.ts`, fs.readFileSync(`${__dirname}/../contents/$.ts`).toString().replace(/__\$__/g, name)) + fs.writeFileSync(`${name}/index.ts`, `export default ['src/${name}']`) + exec(`cd ${name} && npm install && npm run build`, () => { + console.log(`Create Doric Project ${name} Success`) + }) + }) +} \ No newline at end of file diff --git a/scripts/server.js b/scripts/server.js new file mode 100644 index 00000000..b89b09e7 --- /dev/null +++ b/scripts/server.js @@ -0,0 +1,65 @@ +const ws = require('nodejs-websocket') +const { exec, spawn } = require('child_process') +const fs = require('fs') + +var clientConnection = null +var debuggerConnection = null + +const createServer = () => { + let server = ws.createServer(connection => { + console.log('connected', connection.headers.host) + + if (connection.headers.host.startsWith("localhost")) { + console.log("debugger " + connection.key + " attached to dev kit") + debuggerConnection = connection + + clientConnection.sendText(JSON.stringify({ + cmd: 'SWITCH_TO_DEBUG' + }), function() { + + }) + } else { + console.log("client " + connection.key + " attached to dev kit") + } + + connection.on('text', function (result) { + console.log('text', result) + let resultObject = JSON.parse(result) + switch(resultObject.cmd) { + case 'DEBUG': + clientConnection = connection + + let contextId = resultObject.data.contextId + let projectHome = resultObject.data.projectHome + + fs.writeFileSync(projectHome + '/build/context', contextId, 'utf8') + + let source = resultObject.data.source + console.log(connection.key + " request debug, project home: " + projectHome) + + spawn('code', [projectHome, projectHome + "/src/" + source]) + setTimeout(() => { + exec('osascript -e \'tell application "System Events"\ntell application "Visual Studio Code" to activate\nkey code 96\nend tell\'', (err, stdout, stderr) => { + if (err) { + console.log(`stdout: ${err}`) + } + }) + }, 3000) + + break + } + }) + connection.on('connect', function (code) { + console.log('connect', code) + }) + connection.on('close', function (code) { + console.log('close: code = ' + code, connection.key) + }) + connection.on('error', function (code) { + console.log('error', code) + }) + }) + return server +} + +module.exports = createServer() \ No newline at end of file diff --git a/scripts/watcher.js b/scripts/watcher.js new file mode 100644 index 00000000..f1900464 --- /dev/null +++ b/scripts/watcher.js @@ -0,0 +1,78 @@ +const chokidar = require('chokidar') +const ws = require('./server') +const fs = require("fs") +const doMerge = require("./command").doMerge + +require('shelljs/global') + +exec('npm run dev >/dev/null 2>&1', { async: true }) +console.warn('Waiting ...') +setTimeout(() => { + console.warn('Start watching') + ws.listen(7777) + chokidar.watch(process.cwd() + "/bundle", { + ignored: /(^|[\/\\])\../, + }).on('change', (path) => { + fs.readFile(path, 'utf-8', (error, data) => { + if (!path.endsWith('.map')) { + console.log('File change:', path) + try { + const sourceMap = doMerge(path + ".map") + ws.connections.forEach(e => { + e.sendText(JSON.stringify({ + cmd: 'RELOAD', + script: data, + source: path.match(/[^/\\]*$/)[0], + sourceMap, + })) + }) + } catch (e) { + console.error(e) + } + } + }) + }); +}, 3000); +const os = require('os'); + +function getIPAdress() { + const ret = [] + var interfaces = os.networkInterfaces(); + for (var devName in interfaces) { + var iface = interfaces[devName]; + for (var i = 0; i < iface.length; i++) { + var alias = iface[i]; + if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) { + ret.push(alias.address); + } + } + } + return ret +} + + +const qrcode = require('qrcode-terminal'); + +const ips = getIPAdress() +ips.forEach(e => { + console.log(`IP:${e}`) + qrcode.generate(e, { small: false }); +}) + +const keypress = require('keypress'); + +keypress(process.stdin); +process.stdin.on('keypress', function (ch, key) { + if (key && key.ctrl && key.name == 'r') { + ips.forEach(e => { + console.log(`IP:${e}`) + qrcode.generate(e, { small: false }); + }) + } + if (key && key.ctrl && key.name == 'c') { + process.stdin.pause(); + process.exit(0); + } +}); +process.stdin.setRawMode(true); +process.stdin.resume(); \ No newline at end of file