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 @@
[](http://badge.fury.io/js/devicelayr)
[](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 @@
[](http://badge.fury.io/js/inputwritr)
[](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 @@
[](http://badge.fury.io/js/pixeldrawr)
[](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 @@
[](https://prettier.io)

[](http://badge.fury.io/js/{{name}})
+{{ ^shenanigans.external }}
[](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 @@
[](http://badge.fury.io/js/touchpassr)
[](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"]
}