diff --git a/.prettierignore b/.prettierignore index 591c42fd..d9beae6b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,4 @@ **/src/**/*.js **/test **/package.json +packages/shenanigans-manager/setup/ diff --git a/docs/Development.md b/docs/Development.md index adf2d8cd..3ff82e05 100644 --- a/docs/Development.md +++ b/docs/Development.md @@ -41,11 +41,11 @@ The following common commands from [`package.json`](../package.json) can be run ### Code Directories -Once built, there will be three directories in this package containing code, in order of build process: +Once built, there will be up to three directories in this package containing code, in order of build process: 1. `src/`: The "source of truth" containing TypeScript source files. 2. `lib/`: JavaScript source files, declaration files, and source maps generated by TypeScript from `src/`. -3. **[TODO]** `dist/`: Bundled, minified versions of JavaScript files generated by WebPack from `lib/`. +3. `dist/`: Bundled, minified versions of JavaScript files generated by WebPack from `lib/` -- if `package.json` contains a `"dist": true` under `"shenanigans"`. ### `shenanigans-manager` diff --git a/packages/devicelayr/README.md b/packages/devicelayr/README.md index 97bac9ed..32c6af67 100644 --- a/packages/devicelayr/README.md +++ b/packages/devicelayr/README.md @@ -7,7 +7,7 @@ [![NPM version](https://badge.fury.io/js/devicelayr.svg)](http://badge.fury.io/js/devicelayr) [![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -GamePad API bindings for InputWritr pipes. +Pipes GamePad API device actions to InputWritr pipes. diff --git a/packages/inputwritr/README.md b/packages/inputwritr/README.md index e8870940..1bdf95f8 100644 --- a/packages/inputwritr/README.md +++ b/packages/inputwritr/README.md @@ -7,7 +7,7 @@ [![NPM version](https://badge.fury.io/js/inputwritr.svg)](http://badge.fury.io/js/inputwritr) [![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Configurable wrapper, recorder, and playback manager around user inputs. +Pipes input events to action callbacks. diff --git a/packages/pixeldrawr/README.md b/packages/pixeldrawr/README.md index 6ff4590b..7a169492 100644 --- a/packages/pixeldrawr/README.md +++ b/packages/pixeldrawr/README.md @@ -7,7 +7,7 @@ [![NPM version](https://badge.fury.io/js/pixeldrawr.svg)](http://badge.fury.io/js/pixeldrawr) [![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Front-end to PixelRendr to automate drawing mass amounts of sprites to a primary canvas. +Real-time scene drawer for PixelRendr sprites. diff --git a/packages/shenanigans-manager/README.md b/packages/shenanigans-manager/README.md index e05bfafe..e4b030e8 100644 --- a/packages/shenanigans-manager/README.md +++ b/packages/shenanigans-manager/README.md @@ -35,5 +35,6 @@ It may contain the following keys, out of which only `name` is required: - `name`: PascalCase name of the package, such as `"EightBittr"`. - `dist`: Whether the package should also include a `dist` command that generates a Webpack-bundled `dist/` directory. +- `external`: Whether the package is a standalone repository outside of the EightBittr monorepo. See `IShenanigansSchema` in [`src/typings.ts`](./src/typings.ts) for details. diff --git a/packages/shenanigans-manager/setup/bootstrap/README.md b/packages/shenanigans-manager/setup/bootstrap/README.md new file mode 100644 index 00000000..30a62c94 --- /dev/null +++ b/packages/shenanigans-manager/setup/bootstrap/README.md @@ -0,0 +1,13 @@ + + + +## Usage + +Documentation coming soontm! + + + + + + + diff --git a/packages/shenanigans-manager/setup/bootstrap/src/I{{ shenanigans.name }}.ts b/packages/shenanigans-manager/setup/bootstrap/src/I{{ shenanigans.name }}.ts new file mode 100644 index 00000000..5463e4fc --- /dev/null +++ b/packages/shenanigans-manager/setup/bootstrap/src/I{{ shenanigans.name }}.ts @@ -0,0 +1,13 @@ +/** + * Settings to initialize a new {{ shenanigans.name }}. + */ +export interface I{{ shenanigans.name }}Settings { + // TODO: Implement me! +} + +/** + * {{ description }} + */ +export interface I{{ shenanigans.name }} { + // TODO: Implement me! +} diff --git a/packages/shenanigans-manager/setup/bootstrap/src/index.ts b/packages/shenanigans-manager/setup/bootstrap/src/index.ts new file mode 100644 index 00000000..b6655732 --- /dev/null +++ b/packages/shenanigans-manager/setup/bootstrap/src/index.ts @@ -0,0 +1,2 @@ +export * from "./I{{ shenanigans.name }}"; +export * from "./{{ shenanigans.name }}"; diff --git a/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.test.ts b/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.test.ts new file mode 100644 index 00000000..4851509d --- /dev/null +++ b/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.test.ts @@ -0,0 +1,5 @@ +describe("{{ shenanigans.name }}", () => { + it("_", () => { + // TODO: Implement me! + }); +}); diff --git a/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.ts b/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.ts new file mode 100644 index 00000000..46426c41 --- /dev/null +++ b/packages/shenanigans-manager/setup/bootstrap/src/{{ shenanigans.name }}.ts @@ -0,0 +1,18 @@ +import { + I{{ shenanigans.name }}, + I{{ shenanigans.name }}Settings, +} from "./I{{ shenanigans.name }}"; + +/** + * {{ description }} + */ +export class {{ shenanigans.name }} implements I{{ shenanigans.name }} { + /** + * Initializes a new instance of the {{ shenanigans.name }} class. + * + * @param settings Settings to be used for initialization. + */ + public constructor(settings: I{{ shenanigans.name }}Settings) { + throw new Error("TODO: Implement me!") + } +} diff --git a/packages/shenanigans-manager/setup/default/webpack.config.js b/packages/shenanigans-manager/setup/default/webpack.config.js deleted file mode 100644 index 820b9cfa..00000000 --- a/packages/shenanigans-manager/setup/default/webpack.config.js +++ /dev/null @@ -1,52 +0,0 @@ -const glob = require("glob"); -const path = require("path"); - -const package = require("./package.json"); - -const getEntriesAndSources = () => { - return package.shenanigans.entries === undefined - ? [ - { - entry: `./src/index.js`, - name: package.shenanigans.name, - }, - ] - : package.shenanigans.entries; -}; - -const getExternals = (shenanigans) => { - const output = {}; - - if (shenanigans.externals === undefined) { - return output; - } - - for (const external of shenanigans.externals) { - output[external.name] = external.name; - } - - return output; -}; - -const externals = getExternals(package.shenanigans); -const entriesAndSources = getEntriesAndSources(); - -const entry = {}; - -for (const pair of entriesAndSources) { - entry[pair.name] = pair.entry; -} - -module.exports = { - entry, - externals, - mode: "production", - output: { - filename: "[name].js", - libraryTarget: "amd", - path: path.join(__dirname, "dist"), - }, - performance: { - hints: false, - }, -}; diff --git a/packages/shenanigans-manager/setup/external/.eslintignore b/packages/shenanigans-manager/setup/external/.eslintignore new file mode 100644 index 00000000..393b5e8a --- /dev/null +++ b/packages/shenanigans-manager/setup/external/.eslintignore @@ -0,0 +1,5 @@ +**/*.d.ts +**/*.js +**/*.json +**/dist +**/node_modules diff --git a/packages/shenanigans-manager/setup/external/.eslintrc.json b/packages/shenanigans-manager/setup/external/.eslintrc.json new file mode 100644 index 00000000..ecc392c4 --- /dev/null +++ b/packages/shenanigans-manager/setup/external/.eslintrc.json @@ -0,0 +1,14 @@ +{ + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "prettier", + "prettier/@typescript-eslint" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": ["./packages/*/tsconfig.json"] + }, + "plugins": ["@typescript-eslint"], +} diff --git a/packages/shenanigans-manager/setup/external/.gitignore b/packages/shenanigans-manager/setup/external/.gitignore new file mode 100644 index 00000000..7111e2be --- /dev/null +++ b/packages/shenanigans-manager/setup/external/.gitignore @@ -0,0 +1,8 @@ +*.d.ts +*.js +*.log +*.map +*.tsbuildinfo +node_modules/ +lib/ +test/ diff --git a/packages/shenanigans-manager/setup/external/.prettierignore b/packages/shenanigans-manager/setup/external/.prettierignore new file mode 100644 index 00000000..591c42fd --- /dev/null +++ b/packages/shenanigans-manager/setup/external/.prettierignore @@ -0,0 +1,7 @@ +**/*.d.ts +**/dist +**/lib +**/node_modules +**/src/**/*.js +**/test +**/package.json diff --git a/packages/shenanigans-manager/setup/external/.prettierrc b/packages/shenanigans-manager/setup/external/.prettierrc new file mode 100644 index 00000000..4ede1cfc --- /dev/null +++ b/packages/shenanigans-manager/setup/external/.prettierrc @@ -0,0 +1,4 @@ +{ + "printWidth": 98, + "tabWidth": 4 +} diff --git a/packages/shenanigans-manager/setup/external/tsconfig.json b/packages/shenanigans-manager/setup/external/tsconfig.json new file mode 100644 index 00000000..bf356df0 --- /dev/null +++ b/packages/shenanigans-manager/setup/external/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "jsx": "react", + "lib": ["dom", "es2015"], + "module": "amd", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "./lib", + "pretty": true, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "strictFunctionTypes": false, + "strictPropertyInitialization": false, + "target": "es2015" + }, + "exclude": ["**/*.d.ts", "**/lib"], + "include": ["./src/**/*.ts", "./src/**/*.tsx"] +} diff --git a/packages/shenanigans-manager/setup/default/tsconfig.json b/packages/shenanigans-manager/setup/internal/tsconfig.json similarity index 100% rename from packages/shenanigans-manager/setup/default/tsconfig.json rename to packages/shenanigans-manager/setup/internal/tsconfig.json diff --git a/packages/shenanigans-manager/setup/package-external.json b/packages/shenanigans-manager/setup/package-external.json new file mode 100644 index 00000000..8bde939f --- /dev/null +++ b/packages/shenanigans-manager/setup/package-external.json @@ -0,0 +1,5 @@ +{ + "scripts": { + "compile": "tsc" + } +} diff --git a/packages/shenanigans-manager/setup/package-internal.json b/packages/shenanigans-manager/setup/package-internal.json new file mode 100644 index 00000000..e52cc6a8 --- /dev/null +++ b/packages/shenanigans-manager/setup/package-internal.json @@ -0,0 +1,5 @@ +{ + "scripts": { + "compile": "tsc -b" + } +} diff --git a/packages/shenanigans-manager/setup/package-maps.json b/packages/shenanigans-manager/setup/package-maps.json deleted file mode 100644 index 55c34dc1..00000000 --- a/packages/shenanigans-manager/setup/package-maps.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "scripts": { - "setup:copy": "npm run setup:copy:maps", - "setup:copy:maps": "run-for-every-file --src \"node_modules/shenanigans-manager/setup/maps/\" --file \"**/*\" --run \"mustache package.json {{src-file}} ./src/{{file}}\" --dest \".\"" - } -} diff --git a/packages/shenanigans-manager/setup/package.json b/packages/shenanigans-manager/setup/package.json index c73b79f1..bb3e2541 100644 --- a/packages/shenanigans-manager/setup/package.json +++ b/packages/shenanigans-manager/setup/package.json @@ -4,7 +4,6 @@ "shenanigans-manager": "^0.3.0" }, "scripts": { - "compile": "tsc -b", "hydrate": "node ../shenanigans-manager/bin/shenanigans-manager hydrate", "link": "yarn link", "publish:ci": "node ../shenanigans-manager/bin/shenanigans-manager publish-if-updated", diff --git a/packages/shenanigans-manager/setup/readme/Development.md b/packages/shenanigans-manager/setup/readme/Development.md index 5b63d29e..5258f11c 100644 --- a/packages/shenanigans-manager/setup/readme/Development.md +++ b/packages/shenanigans-manager/setup/readme/Development.md @@ -1,7 +1,23 @@ ## Development +{{ #shenanigans.external }} +After [forking the repo from GitHub](https://help.github.com/articles/fork-a-repo): + +``` +git clone https://github.com//{{ shenanigans.name }} +cd {{ shenanigans.name }} +yarn +yarn run hydrate +yarn run compile +``` + +* `yarn run hydrate` creates a few auto-generated setup files locally. +* `yarn run compile` builds source code with TypeScript +{{ /shenanigans.external }} +{{ ^shenanigans.external }} This repository is a portion of the [EightBittr monorepo](https://raw.githubusercontent.com/FullScreenShenanigans/EightBittr). See its [docs/Development.md](../../docs/Development.md) for details on how to get started. 💖 +{{ /shenanigans.external }} ### Running Tests diff --git a/packages/shenanigans-manager/setup/readme/Top.md b/packages/shenanigans-manager/setup/readme/Top.md index d83c30b6..a04e3801 100644 --- a/packages/shenanigans-manager/setup/readme/Top.md +++ b/packages/shenanigans-manager/setup/readme/Top.md @@ -3,6 +3,8 @@ [![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-brightgreen.svg)](https://prettier.io) ![TypeScript: Strict](https://img.shields.io/badge/typescript-strict-brightgreen.svg) [![NPM version](https://badge.fury.io/js/{{name}}.svg)](http://badge.fury.io/js/{{name}}) +{{ ^shenanigans.external }} [![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +{{ /shenanigans.external }} {{description}} diff --git a/packages/shenanigans-manager/src/commands/bootstrapPackage.ts b/packages/shenanigans-manager/src/commands/bootstrapPackage.ts new file mode 100644 index 00000000..cd844c42 --- /dev/null +++ b/packages/shenanigans-manager/src/commands/bootstrapPackage.ts @@ -0,0 +1,79 @@ +import * as fs from "mz/fs"; +import * as path from "path"; + +import { defaultPathArgs, ensureArgsExist, IRepositoryCommandArgs } from "../command"; +import { IRuntime } from "../runtime"; +import { Hydrate } from "./hydrate"; + +/** + * Args for a bootstrap-package command. + */ +export interface IBootstrapPackageCommandArgs extends IRepositoryCommandArgs { + /** + * Package description of the package. + */ + description: string; + + /** + * Whether to include the shenanigans dist setting. + */ + dist?: boolean; + + /** + * PascalCase name of the package. + */ + name: string; + + /** + * Whether the package is a standalone repository ('external') or part of the monorepo ('internal'). + */ + mode: "external" | "internal"; +} + +/** + * Creates a new package. + */ +export const BootstrapPackage = async ( + runtime: IRuntime, + args: IBootstrapPackageCommandArgs +): Promise => { + defaultPathArgs(args, "directory", "repository"); + ensureArgsExist(args, "description", "mode", "name"); + + const repo = args.mode === "external" ? args.name : "EightBittr"; + + await fs.writeFile( + path.join(args.directory, args.repository, "package.json"), + JSON.stringify( + { + author: { + email: "me@joshuakgoldberg.com", + name: "Josh Goldberg", + }, + bugs: { + url: `https://github.com/FullScreenShenanigans/${repo}/issues`, + }, + description: args.description, + license: "MIT", + name: args.name.toLowerCase(), + package: { + type: "git", + url: `ssh://git@github.com:FullScreenShenanigans/${repo}.git`, + }, + shenanigans: { + ...(args.dist && { dist: true }), + ...(args.mode === "external" && { external: true }), + name: args.name, + }, + version: "0.0.1", + }, + null, + 4 + ) + ); + + await Hydrate(runtime, { + ...args, + bootstrap: args.mode, + }); +}; diff --git a/packages/shenanigans-manager/src/commands/ensureDirsExist.ts b/packages/shenanigans-manager/src/commands/ensureDirsExist.ts index 03240752..2a96bc5b 100644 --- a/packages/shenanigans-manager/src/commands/ensureDirsExist.ts +++ b/packages/shenanigans-manager/src/commands/ensureDirsExist.ts @@ -4,7 +4,7 @@ import * as path from "path"; import { defaultPathArgs, IRepositoryCommandArgs } from "../command"; import { IRuntime } from "../runtime"; -const defaultDirectories = ["dist", "src", "test"]; +const defaultDirectories = ["lib", "src", "test"]; /** * Ensures directories needed for setup exist. @@ -12,13 +12,11 @@ const defaultDirectories = ["dist", "src", "test"]; export const EnsureDirsExist = async (_runtime: IRuntime, args: IRepositoryCommandArgs) => { defaultPathArgs(args, "directory", "repository"); - const promises: Promise[] = []; + await Promise.all( + defaultDirectories.map(async (directory) => { + const directoryPath = path.join(args.directory, args.repository, directory); - for (const directory of defaultDirectories) { - const directoryPath = path.join(args.directory, args.repository, directory); - - promises.push(mkdirp(directoryPath)); - } - - await Promise.all(promises); + await mkdirp(directoryPath); + }) + ); }; diff --git a/packages/shenanigans-manager/src/commands/help.ts b/packages/shenanigans-manager/src/commands/help.ts index b1d3735b..4c7ece29 100644 --- a/packages/shenanigans-manager/src/commands/help.ts +++ b/packages/shenanigans-manager/src/commands/help.ts @@ -31,8 +31,4 @@ export const Help = async (runtime: IRuntime) => { for (const file of commands) { runtime.logger.log(` ${nameTransformer.toDashedCase(file)}`); } - - runtime.logger.log( - ["Run with", chalk.bold("--all"), "to execute a command in all repositories."].join(" ") - ); }; diff --git a/packages/shenanigans-manager/src/commands/hydrate.ts b/packages/shenanigans-manager/src/commands/hydrate.ts index 34392e50..916a5a27 100644 --- a/packages/shenanigans-manager/src/commands/hydrate.ts +++ b/packages/shenanigans-manager/src/commands/hydrate.ts @@ -1,13 +1,12 @@ -import { IRepositoryCommandArgs } from "../command"; import { IRuntime } from "../runtime"; -import { HydrateFiles } from "./hydrateFiles"; +import { HydrateFiles, IHydrateFilesCommandArgs } from "./hydrateFiles"; import { HydrateReadme } from "./hydrateReadme"; import { HydratePackageJson } from "./hydratePackageJson"; /** * Calls a repository's hydration commands. */ -export const Hydrate = async (runtime: IRuntime, args: IRepositoryCommandArgs) => { +export const Hydrate = async (runtime: IRuntime, args: IHydrateFilesCommandArgs) => { await HydrateFiles(runtime, args); await HydratePackageJson(runtime, args); await HydrateReadme(runtime, args); diff --git a/packages/shenanigans-manager/src/commands/hydrateFiles.ts b/packages/shenanigans-manager/src/commands/hydrateFiles.ts index a40e86c6..21139396 100644 --- a/packages/shenanigans-manager/src/commands/hydrateFiles.ts +++ b/packages/shenanigans-manager/src/commands/hydrateFiles.ts @@ -1,32 +1,58 @@ -import chalk from "chalk"; +import { fs } from "mz"; import * as path from "path"; import { defaultPathArgs, IRepositoryCommandArgs } from "../command"; import { IRuntime } from "../runtime"; import { getShenanigansPackageContents, globAsync, setupDir } from "../utils"; +import { EnsureDirsExist } from "./ensureDirsExist"; import { Mustache } from "./mustache"; +/** + * Args for a hydrate-files command. + */ +export interface IHydrateFilesCommandArgs extends IRepositoryCommandArgs { + /** + * Whether to also create basic source files for a new package. + */ + bootstrap?: "external" | "internal"; +} + /** * Updates a repository's scaffolding files. */ -export const HydrateFiles = async (runtime: IRuntime, args: IRepositoryCommandArgs) => { +export const HydrateFiles = async (runtime: IRuntime, args: IHydrateFilesCommandArgs) => { defaultPathArgs(args, "directory", "repository"); - const hydrateFiles = async (directory: string) => { + const hydrateFiles = async (directory: string, rootDirectory = directory) => { const files = await globAsync(path.join(setupDir, directory, "*")); await Promise.all( files.map(async (setupFile) => { - runtime.logger.log(chalk.grey(`Hydrating ${setupFile}`)); + if (fs.statSync(setupFile).isDirectory()) { + return await hydrateFiles(setupFile.slice(setupDir.length), rootDirectory); + } + + const outputLocal = `./${setupFile.slice( + setupFile.indexOf(directory) + rootDirectory.length + 1 + )}`; + const outputAbsolute = path.join(args.directory, args.repository, outputLocal); await Mustache(runtime, { ...args, input: setupFile, - output: `./${setupFile.slice(setupFile.lastIndexOf("/") + 1)}`, + output: outputAbsolute, }); }) ); }; + await EnsureDirsExist(runtime, args); + await hydrateFiles("default"); + + if (args.bootstrap) { + await hydrateFiles("bootstrap"); + await hydrateFiles(args.bootstrap); + } + const { shenanigans } = await getShenanigansPackageContents(args); if (shenanigans.dist) { diff --git a/packages/shenanigans-manager/src/commands/hydratePackageJson.ts b/packages/shenanigans-manager/src/commands/hydratePackageJson.ts index 673826d6..dcfd2fac 100644 --- a/packages/shenanigans-manager/src/commands/hydratePackageJson.ts +++ b/packages/shenanigans-manager/src/commands/hydratePackageJson.ts @@ -5,7 +5,7 @@ import * as path from "path"; import { defaultPathArgs, IRepositoryCommandArgs } from "../command"; import { IRuntime } from "../runtime"; -import { parseFileJson } from "../utils"; +import { parseFileJson, setupDir } from "../utils"; const mergeOnPackageTemplate = ( target: IShenanigansPackage, @@ -21,34 +21,31 @@ const mergeOnPackageTemplate = ( }; } - if (source.scripts !== undefined) { - for (const i in source.scripts) { - if (i in target.scripts) { - target.scripts[i] += ` && ${source.scripts[i]}`; - } else { - target.scripts[i] = source.scripts[i]; - } - } - } + Object.assign(target.scripts, source.scripts); }; const getPackageTemplate = async ( basePackageContents: IShenanigansPackage ): Promise => { const packageTemplate = await parseFileJson( - path.join(__dirname, "../../setup/package.json") + path.join(setupDir, "package.json") ); - const shenanigans = basePackageContents.shenanigans || {}; + const { shenanigans } = basePackageContents; - if (shenanigans.dist) { + if (shenanigans?.dist) { mergeOnPackageTemplate( packageTemplate, - await parseFileJson( - path.join(__dirname, "../../setup/package-dist.json") - ) + await parseFileJson(path.join(setupDir, "package-dist.json")) ); } + mergeOnPackageTemplate( + packageTemplate, + await parseFileJson( + path.join(setupDir, `package-${shenanigans.external ? "external" : "internal"}.json`) + ) + ); + return packageTemplate; }; diff --git a/packages/shenanigans-manager/src/commands/mustache.ts b/packages/shenanigans-manager/src/commands/mustache.ts index 0d7c6700..aafe4080 100644 --- a/packages/shenanigans-manager/src/commands/mustache.ts +++ b/packages/shenanigans-manager/src/commands/mustache.ts @@ -1,3 +1,4 @@ +import chalk from "chalk"; import * as mustache from "mustache"; import * as fs from "mz/fs"; import * as path from "path"; @@ -24,7 +25,7 @@ export interface IMustacheCommandArgs extends IRepositoryCommandArgs { /** * Copies a file with mustache logic from a repository's package.json. */ -export const Mustache = async (_runtime: IRuntime, args: IMustacheCommandArgs): Promise => { +export const Mustache = async (runtime: IRuntime, args: IMustacheCommandArgs): Promise => { defaultPathArgs(args, "directory", "repository"); ensureArgsExist(args, "input", "output"); @@ -53,6 +54,8 @@ export const Mustache = async (_runtime: IRuntime, args: IMustacheCommandArgs): const inputContents = (await fs.readFile(args.input)).toString(); const outputContents = mustache.render(inputContents, model); + const outputFileName = mustache.render(args.output, model); - await fs.writeFile(args.output, outputContents); + runtime.logger.log(chalk.grey(`Hydrating ${outputFileName}`)); + await fs.writeFile(outputFileName, outputContents); }; diff --git a/packages/shenanigans-manager/src/typings.ts b/packages/shenanigans-manager/src/typings.ts index 593ebc54..3a368a77 100644 --- a/packages/shenanigans-manager/src/typings.ts +++ b/packages/shenanigans-manager/src/typings.ts @@ -38,6 +38,11 @@ interface IShenanigansPackage { * Settings for a shenanigans project. */ interface IShenanigansSchema { + /** + * Whether this is a shenanigans project outside of the EightBittr monorepo. + */ + external?: boolean; + /** * Whether to include a webpack-bundled dist/ directory. */ diff --git a/packages/shenanigans-manager/src/utils.ts b/packages/shenanigans-manager/src/utils.ts index 97014137..91860eee 100644 --- a/packages/shenanigans-manager/src/utils.ts +++ b/packages/shenanigans-manager/src/utils.ts @@ -48,7 +48,7 @@ export const parseFileJson = async (file: string): Promise export const globAsync = async (source: string) => new Promise((resolve, reject) => { - glob(source, (error: Error | null, matches: string[]) => { + glob(source, { dot: true }, (error: Error | null, matches: string[]) => { if (error !== null) { reject(error); return; diff --git a/packages/touchpassr/README.md b/packages/touchpassr/README.md index ec304fc0..658cf4ad 100644 --- a/packages/touchpassr/README.md +++ b/packages/touchpassr/README.md @@ -7,7 +7,7 @@ [![NPM version](https://badge.fury.io/js/touchpassr.svg)](http://badge.fury.io/js/touchpassr) [![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -GUI layer on top of InputWritr for touch events. +Creates touchscreen GUIs that pipe inputs to InputWritr pipes. diff --git a/tsconfig.base.json b/tsconfig.base.json index c423bf6f..14d90d63 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -23,7 +23,7 @@ "strict": true, "strictFunctionTypes": false, "strictPropertyInitialization": false, - "target": "es5" + "target": "es2015" }, "exclude": ["**/*.d.ts"] }