create-joist-app 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/create-app.d.ts +18 -0
- package/build/create-app.d.ts.map +1 -0
- package/build/create-app.js +73 -0
- package/build/create-app.js.map +1 -0
- package/build/create-app.test.d.ts +2 -0
- package/build/create-app.test.d.ts.map +1 -0
- package/build/create-app.test.js +176 -0
- package/build/create-app.test.js.map +1 -0
- package/build/create-db-dockerfile.d.ts +2 -0
- package/build/create-db-dockerfile.d.ts.map +1 -0
- package/build/create-db-dockerfile.js +43 -0
- package/build/create-db-dockerfile.js.map +1 -0
- package/build/create-docker-compose.d.ts +3 -0
- package/build/create-docker-compose.d.ts.map +1 -0
- package/build/create-docker-compose.js +35 -0
- package/build/create-docker-compose.js.map +1 -0
- package/build/create-env.d.ts +3 -0
- package/build/create-env.d.ts.map +1 -0
- package/build/create-env.js +16 -0
- package/build/create-env.js.map +1 -0
- package/build/helpers/copy.d.ts +3 -0
- package/build/helpers/copy.d.ts.map +1 -0
- package/build/helpers/copy.js +33 -0
- package/build/helpers/copy.js.map +1 -0
- package/build/helpers/get-package-manager.d.ts +3 -0
- package/build/helpers/get-package-manager.d.ts.map +1 -0
- package/build/helpers/get-package-manager.js +17 -0
- package/build/helpers/get-package-manager.js.map +1 -0
- package/build/helpers/install.d.ts +3 -0
- package/build/helpers/install.d.ts.map +1 -0
- package/build/helpers/install.js +29 -0
- package/build/helpers/install.js.map +1 -0
- package/build/helpers/is-folder-empty.d.ts +2 -0
- package/build/helpers/is-folder-empty.d.ts.map +1 -0
- package/build/helpers/is-folder-empty.js +14 -0
- package/build/helpers/is-folder-empty.js.map +1 -0
- package/build/helpers/is-folder-empty.test.d.ts +2 -0
- package/build/helpers/is-folder-empty.test.d.ts.map +1 -0
- package/build/helpers/is-folder-empty.test.js +38 -0
- package/build/helpers/is-folder-empty.test.js.map +1 -0
- package/build/helpers/is-writeable.d.ts +2 -0
- package/build/helpers/is-writeable.d.ts.map +1 -0
- package/build/helpers/is-writeable.js +17 -0
- package/build/helpers/is-writeable.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +213 -0
- package/build/index.js.map +1 -0
- package/build/replace-sentinels.d.ts +2 -0
- package/build/replace-sentinels.d.ts.map +1 -0
- package/build/replace-sentinels.js +59 -0
- package/build/replace-sentinels.js.map +1 -0
- package/build/update-package-json.d.ts +2 -0
- package/build/update-package-json.d.ts.map +1 -0
- package/build/update-package-json.js +25 -0
- package/build/update-package-json.js.map +1 -0
- package/package.json +55 -0
- package/templates/basic/README.md +70 -0
- package/templates/basic/gitignore +28 -0
- package/templates/basic/jest.config.js +14 -0
- package/templates/basic/joist-config.json +7 -0
- package/templates/basic/migrations/1580658856631_initial.ts +22 -0
- package/templates/basic/package.json +28 -0
- package/templates/basic/src/context.ts +14 -0
- package/templates/basic/src/entities/Author.test.ts +17 -0
- package/templates/basic/src/entities/Author.ts +7 -0
- package/templates/basic/src/entities/Book.ts +3 -0
- package/templates/basic/src/entities/entities.ts +14 -0
- package/templates/basic/src/entities/factories/index.ts +2 -0
- package/templates/basic/src/entities/factories/newAuthor.ts +6 -0
- package/templates/basic/src/entities/factories/newBook.ts +6 -0
- package/templates/basic/src/entities/index.ts +3 -0
- package/templates/basic/src/setupTestEnv.ts +5 -0
- package/templates/basic/src/setupTests.ts +29 -0
- package/templates/basic/tsconfig.json +23 -0
- package/templates/graphql/README.md +84 -0
- package/templates/graphql/codegen.yml +11 -0
- package/templates/graphql/gitignore +28 -0
- package/templates/graphql/graphql-codegen-joist.js +5 -0
- package/templates/graphql/graphql-codegen.js +26 -0
- package/templates/graphql/jest.config.js +14 -0
- package/templates/graphql/joist-config.json +8 -0
- package/templates/graphql/migrations/1580658856631_initial.ts +38 -0
- package/templates/graphql/package.json +41 -0
- package/templates/graphql/schema/.history.json +9 -0
- package/templates/graphql/schema/author.graphql +20 -0
- package/templates/graphql/schema/book.graphql +19 -0
- package/templates/graphql/schema/enums.graphql +0 -0
- package/templates/graphql/schema/root.graphql +0 -0
- package/templates/graphql/src/.history.json +12 -0
- package/templates/graphql/src/context.ts +14 -0
- package/templates/graphql/src/entities/Author.test.ts +36 -0
- package/templates/graphql/src/entities/Author.ts +7 -0
- package/templates/graphql/src/entities/Book.ts +3 -0
- package/templates/graphql/src/entities/entities.ts +14 -0
- package/templates/graphql/src/entities/factories/index.ts +2 -0
- package/templates/graphql/src/entities/factories/newAuthor.ts +6 -0
- package/templates/graphql/src/entities/factories/newBook.ts +6 -0
- package/templates/graphql/src/entities/index.ts +3 -0
- package/templates/graphql/src/jest.d.ts +9 -0
- package/templates/graphql/src/resolvers/author/authorResolvers.test.ts +17 -0
- package/templates/graphql/src/resolvers/author/authorResolvers.ts +5 -0
- package/templates/graphql/src/resolvers/author/saveAuthorMutation.test.ts +13 -0
- package/templates/graphql/src/resolvers/author/saveAuthorMutation.ts +9 -0
- package/templates/graphql/src/resolvers/book/bookResolvers.test.ts +17 -0
- package/templates/graphql/src/resolvers/book/bookResolvers.ts +5 -0
- package/templates/graphql/src/resolvers/book/saveBookMutation.test.ts +16 -0
- package/templates/graphql/src/resolvers/book/saveBookMutation.ts +9 -0
- package/templates/graphql/src/resolvers/enumResolvers.ts +5 -0
- package/templates/graphql/src/resolvers/index.ts +15 -0
- package/templates/graphql/src/resolvers/mutations/index.ts +7 -0
- package/templates/graphql/src/resolvers/objects/index.ts +6 -0
- package/templates/graphql/src/resolvers/testUtils.ts +10 -0
- package/templates/graphql/src/resolvers/utils.ts +1 -0
- package/templates/graphql/src/server.ts +37 -0
- package/templates/graphql/src/setupIt.ts +17 -0
- package/templates/graphql/src/setupTestEnv.ts +5 -0
- package/templates/graphql/src/setupTests.ts +37 -0
- package/templates/graphql/tsconfig.json +23 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PackageManager } from "./helpers/get-package-manager";
|
|
2
|
+
export interface DbConfig {
|
|
3
|
+
host: string;
|
|
4
|
+
port: string;
|
|
5
|
+
user: string;
|
|
6
|
+
password: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CreateAppOptions {
|
|
10
|
+
projectPath: string;
|
|
11
|
+
projectName: string;
|
|
12
|
+
template: "basic" | "graphql";
|
|
13
|
+
packageManager: PackageManager;
|
|
14
|
+
skipInstall: boolean;
|
|
15
|
+
dbConfig: DbConfig;
|
|
16
|
+
}
|
|
17
|
+
export declare function createApp(options: CreateAppOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=create-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAUD,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DxE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createApp = createApp;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
10
|
+
const create_db_dockerfile_1 = require("./create-db-dockerfile");
|
|
11
|
+
const create_docker_compose_1 = require("./create-docker-compose");
|
|
12
|
+
const create_env_1 = require("./create-env");
|
|
13
|
+
const copy_1 = require("./helpers/copy");
|
|
14
|
+
const install_1 = require("./helpers/install");
|
|
15
|
+
const replace_sentinels_1 = require("./replace-sentinels");
|
|
16
|
+
const update_package_json_1 = require("./update-package-json");
|
|
17
|
+
const templateNameMap = {
|
|
18
|
+
basic: "basic-template",
|
|
19
|
+
graphql: "graphql-template",
|
|
20
|
+
};
|
|
21
|
+
/** Directories/files to skip when copying templates to a new project. */
|
|
22
|
+
const SKIP_ENTRIES = new Set(["node_modules", "build", "codegen", ".env", ".tsbuildinfo"]);
|
|
23
|
+
async function createApp(options) {
|
|
24
|
+
const { projectPath, projectName, template, packageManager, skipInstall, dbConfig } = options;
|
|
25
|
+
// Determine template directory - check for published templates/ first, then packages/
|
|
26
|
+
const templatePkgName = templateNameMap[template];
|
|
27
|
+
let templateDir = path_1.default.join(__dirname, "..", "templates", template);
|
|
28
|
+
if (!fs_1.default.existsSync(templateDir)) {
|
|
29
|
+
// Dev mode: templates live in sibling packages
|
|
30
|
+
templateDir = path_1.default.join(__dirname, "..", "..", templatePkgName);
|
|
31
|
+
}
|
|
32
|
+
if (!fs_1.default.existsSync(templateDir)) {
|
|
33
|
+
throw new Error(`Template "${template}" not found`);
|
|
34
|
+
}
|
|
35
|
+
console.log(`Using template: ${picocolors_1.default.cyan(template)}`);
|
|
36
|
+
console.log(`Using package manager: ${picocolors_1.default.cyan(packageManager)}`);
|
|
37
|
+
console.log();
|
|
38
|
+
// Copy template files (skipping dev-only dirs)
|
|
39
|
+
console.log("Copying template files...");
|
|
40
|
+
(0, copy_1.copyDirectory)(templateDir, projectPath, SKIP_ENTRIES);
|
|
41
|
+
// Rename .gitignore handling: the template package has .gitignore,
|
|
42
|
+
// but npm publish strips it; also check for "gitignore" fallback
|
|
43
|
+
const gitignorePath = path_1.default.join(projectPath, "gitignore");
|
|
44
|
+
const dotGitignorePath = path_1.default.join(projectPath, ".gitignore");
|
|
45
|
+
if (fs_1.default.existsSync(gitignorePath) && !fs_1.default.existsSync(dotGitignorePath)) {
|
|
46
|
+
fs_1.default.renameSync(gitignorePath, dotGitignorePath);
|
|
47
|
+
}
|
|
48
|
+
// Generate .env file with user's DB config
|
|
49
|
+
(0, create_env_1.createEnv)(projectPath, { template, dbConfig });
|
|
50
|
+
// Generate docker-compose.yml with user's DB config
|
|
51
|
+
(0, create_docker_compose_1.createDockerCompose)(projectPath, dbConfig);
|
|
52
|
+
// Generate db.dockerfile
|
|
53
|
+
(0, create_db_dockerfile_1.createDbDockerfile)(projectPath);
|
|
54
|
+
// Replace the template package name with the user's project name in all text files.
|
|
55
|
+
// DB values are NOT replaced via sentinel matching (too fragile — "joist" appears in
|
|
56
|
+
// package names). Instead, .env, docker-compose.yml, db.dockerfile, and package.json
|
|
57
|
+
// scripts are all generated/updated inline above and below.
|
|
58
|
+
(0, replace_sentinels_1.replaceSentinelValues)(projectPath, { [templatePkgName]: projectName });
|
|
59
|
+
// Update package.json with project name and add scaffolding scripts
|
|
60
|
+
(0, update_package_json_1.updatePackageJson)(projectPath, projectName);
|
|
61
|
+
// Add package manager specific files
|
|
62
|
+
if (packageManager === "yarn") {
|
|
63
|
+
fs_1.default.writeFileSync(path_1.default.join(projectPath, ".yarnrc.yml"), "nodeLinker: node-modules\n");
|
|
64
|
+
}
|
|
65
|
+
// Install dependencies
|
|
66
|
+
if (!skipInstall) {
|
|
67
|
+
console.log();
|
|
68
|
+
console.log("Installing dependencies...");
|
|
69
|
+
console.log();
|
|
70
|
+
await (0, install_1.install)(packageManager, projectPath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=create-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.test.d.ts","sourceRoot":"","sources":["../src/create-app.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const create_app_1 = require("./create-app");
|
|
10
|
+
describe("createApp", () => {
|
|
11
|
+
let tempDir;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tempDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), "create-joist-app-test-"));
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
17
|
+
});
|
|
18
|
+
describe("basic template", () => {
|
|
19
|
+
it("creates all expected files", async () => {
|
|
20
|
+
const projectPath = path_1.default.join(tempDir, "test-project");
|
|
21
|
+
fs_1.default.mkdirSync(projectPath);
|
|
22
|
+
await (0, create_app_1.createApp)({
|
|
23
|
+
projectPath,
|
|
24
|
+
projectName: "test-project",
|
|
25
|
+
template: "basic",
|
|
26
|
+
packageManager: "yarn",
|
|
27
|
+
skipInstall: true,
|
|
28
|
+
dbConfig: {
|
|
29
|
+
host: "localhost",
|
|
30
|
+
port: "5432",
|
|
31
|
+
user: "test_user",
|
|
32
|
+
password: "test_password",
|
|
33
|
+
name: "test_db",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
// Check essential files exist
|
|
37
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "package.json"))).toBe(true);
|
|
38
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "tsconfig.json"))).toBe(true);
|
|
39
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "jest.config.js"))).toBe(true);
|
|
40
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "joist-config.json"))).toBe(true);
|
|
41
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "docker-compose.yml"))).toBe(true);
|
|
42
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, ".env"))).toBe(true);
|
|
43
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, ".gitignore"))).toBe(true);
|
|
44
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, ".yarnrc.yml"))).toBe(true);
|
|
45
|
+
// Check source files
|
|
46
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/context.ts"))).toBe(true);
|
|
47
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/entities/Author.ts"))).toBe(true);
|
|
48
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/entities/Book.ts"))).toBe(true);
|
|
49
|
+
// Check migrations
|
|
50
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "migrations"))).toBe(true);
|
|
51
|
+
const migrations = fs_1.default.readdirSync(path_1.default.join(projectPath, "migrations"));
|
|
52
|
+
expect(migrations.length).toBeGreaterThan(0);
|
|
53
|
+
});
|
|
54
|
+
it("substitutes template variables", async () => {
|
|
55
|
+
const projectPath = path_1.default.join(tempDir, "my-app");
|
|
56
|
+
fs_1.default.mkdirSync(projectPath);
|
|
57
|
+
await (0, create_app_1.createApp)({
|
|
58
|
+
projectPath,
|
|
59
|
+
projectName: "my-app",
|
|
60
|
+
template: "basic",
|
|
61
|
+
packageManager: "yarn",
|
|
62
|
+
skipInstall: true,
|
|
63
|
+
dbConfig: {
|
|
64
|
+
host: "localhost",
|
|
65
|
+
port: "5432",
|
|
66
|
+
user: "my_app_user",
|
|
67
|
+
password: "secret",
|
|
68
|
+
name: "my_app_db",
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// Check package.json has project name
|
|
72
|
+
const pkgJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(projectPath, "package.json"), "utf-8"));
|
|
73
|
+
expect(pkgJson.name).toBe("my-app");
|
|
74
|
+
// Check .env has correct database URL
|
|
75
|
+
const envContent = fs_1.default.readFileSync(path_1.default.join(projectPath, ".env"), "utf-8");
|
|
76
|
+
expect(envContent).toContain("my_app_user");
|
|
77
|
+
expect(envContent).toContain("my_app_db");
|
|
78
|
+
expect(envContent).toContain("secret");
|
|
79
|
+
// Check docker-compose has correct user
|
|
80
|
+
const dockerCompose = fs_1.default.readFileSync(path_1.default.join(projectPath, "docker-compose.yml"), "utf-8");
|
|
81
|
+
expect(dockerCompose).toContain("my_app_user");
|
|
82
|
+
expect(dockerCompose).toContain("my_app_db");
|
|
83
|
+
});
|
|
84
|
+
it("does not create .yarnrc.yml for npm", async () => {
|
|
85
|
+
const projectPath = path_1.default.join(tempDir, "npm-project");
|
|
86
|
+
fs_1.default.mkdirSync(projectPath);
|
|
87
|
+
await (0, create_app_1.createApp)({
|
|
88
|
+
projectPath,
|
|
89
|
+
projectName: "npm-project",
|
|
90
|
+
template: "basic",
|
|
91
|
+
packageManager: "npm",
|
|
92
|
+
skipInstall: true,
|
|
93
|
+
dbConfig: {
|
|
94
|
+
host: "localhost",
|
|
95
|
+
port: "5432",
|
|
96
|
+
user: "test_user",
|
|
97
|
+
password: "test_password",
|
|
98
|
+
name: "test_db",
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, ".yarnrc.yml"))).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe("graphql template", () => {
|
|
105
|
+
it("creates all expected files", async () => {
|
|
106
|
+
const projectPath = path_1.default.join(tempDir, "graphql-project");
|
|
107
|
+
fs_1.default.mkdirSync(projectPath);
|
|
108
|
+
await (0, create_app_1.createApp)({
|
|
109
|
+
projectPath,
|
|
110
|
+
projectName: "graphql-project",
|
|
111
|
+
template: "graphql",
|
|
112
|
+
packageManager: "yarn",
|
|
113
|
+
skipInstall: true,
|
|
114
|
+
dbConfig: {
|
|
115
|
+
host: "localhost",
|
|
116
|
+
port: "5432",
|
|
117
|
+
user: "test_user",
|
|
118
|
+
password: "test_password",
|
|
119
|
+
name: "test_db",
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
// Check basic files
|
|
123
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "package.json"))).toBe(true);
|
|
124
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "joist-config.json"))).toBe(true);
|
|
125
|
+
// Check GraphQL-specific files
|
|
126
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "codegen.yml"))).toBe(true);
|
|
127
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/schema.graphql"))).toBe(true);
|
|
128
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/server.ts"))).toBe(true);
|
|
129
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/resolvers/index.ts"))).toBe(true);
|
|
130
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/resolvers/authorResolvers.ts"))).toBe(true);
|
|
131
|
+
expect(fs_1.default.existsSync(path_1.default.join(projectPath, "src/resolvers/bookResolvers.ts"))).toBe(true);
|
|
132
|
+
});
|
|
133
|
+
it("includes graphql codegen plugin in joist-config", async () => {
|
|
134
|
+
const projectPath = path_1.default.join(tempDir, "graphql-project");
|
|
135
|
+
fs_1.default.mkdirSync(projectPath);
|
|
136
|
+
await (0, create_app_1.createApp)({
|
|
137
|
+
projectPath,
|
|
138
|
+
projectName: "graphql-project",
|
|
139
|
+
template: "graphql",
|
|
140
|
+
packageManager: "yarn",
|
|
141
|
+
skipInstall: true,
|
|
142
|
+
dbConfig: {
|
|
143
|
+
host: "localhost",
|
|
144
|
+
port: "5432",
|
|
145
|
+
user: "test_user",
|
|
146
|
+
password: "test_password",
|
|
147
|
+
name: "test_db",
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
const joistConfig = JSON.parse(fs_1.default.readFileSync(path_1.default.join(projectPath, "joist-config.json"), "utf-8"));
|
|
151
|
+
expect(joistConfig.codegenPlugins).toContain("joist-graphql-codegen");
|
|
152
|
+
});
|
|
153
|
+
it("includes apollo server dependency", async () => {
|
|
154
|
+
const projectPath = path_1.default.join(tempDir, "graphql-project");
|
|
155
|
+
fs_1.default.mkdirSync(projectPath);
|
|
156
|
+
await (0, create_app_1.createApp)({
|
|
157
|
+
projectPath,
|
|
158
|
+
projectName: "graphql-project",
|
|
159
|
+
template: "graphql",
|
|
160
|
+
packageManager: "yarn",
|
|
161
|
+
skipInstall: true,
|
|
162
|
+
dbConfig: {
|
|
163
|
+
host: "localhost",
|
|
164
|
+
port: "5432",
|
|
165
|
+
user: "test_user",
|
|
166
|
+
password: "test_password",
|
|
167
|
+
name: "test_db",
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
const pkgJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(projectPath, "package.json"), "utf-8"));
|
|
171
|
+
expect(pkgJson.dependencies["@apollo/server"]).toBeDefined();
|
|
172
|
+
expect(pkgJson.dependencies["graphql"]).toBeDefined();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=create-app.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.test.js","sourceRoot":"","sources":["../src/create-app.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-db-dockerfile.d.ts","sourceRoot":"","sources":["../src/create-db-dockerfile.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAiC5D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDbDockerfile = createDbDockerfile;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
function createDbDockerfile(projectPath) {
|
|
10
|
+
const dbDockerfile = `FROM postgres:16
|
|
11
|
+
|
|
12
|
+
# Script to reset the database
|
|
13
|
+
COPY <<EOF /docker-entrypoint-initdb.d/reset.sh
|
|
14
|
+
#!/bin/bash
|
|
15
|
+
set -e
|
|
16
|
+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname postgres <<-EOSQL
|
|
17
|
+
DROP DATABASE IF EXISTS "$POSTGRES_DB";
|
|
18
|
+
CREATE DATABASE "$POSTGRES_DB";
|
|
19
|
+
EOSQL
|
|
20
|
+
EOF
|
|
21
|
+
RUN chmod +x /docker-entrypoint-initdb.d/reset.sh
|
|
22
|
+
|
|
23
|
+
# Copy reset script to accessible location
|
|
24
|
+
COPY <<EOF /reset.sh
|
|
25
|
+
#!/bin/bash
|
|
26
|
+
set -e
|
|
27
|
+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname postgres <<-EOSQL
|
|
28
|
+
DROP DATABASE IF EXISTS "$POSTGRES_DB";
|
|
29
|
+
CREATE DATABASE "$POSTGRES_DB";
|
|
30
|
+
EOSQL
|
|
31
|
+
EOF
|
|
32
|
+
RUN chmod +x /reset.sh
|
|
33
|
+
|
|
34
|
+
# Console script for easy database access
|
|
35
|
+
COPY <<EOF /console.sh
|
|
36
|
+
#!/bin/bash
|
|
37
|
+
psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"
|
|
38
|
+
EOF
|
|
39
|
+
RUN chmod +x /console.sh
|
|
40
|
+
`;
|
|
41
|
+
fs_1.default.writeFileSync(path_1.default.join(projectPath, "db.dockerfile"), dbDockerfile);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=create-db-dockerfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-db-dockerfile.js","sourceRoot":"","sources":["../src/create-db-dockerfile.ts"],"names":[],"mappings":";;;;;AAGA,gDAiCC;AApCD,4CAAoB;AACpB,gDAAwB;AAExB,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BtB,CAAC;IACA,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-docker-compose.d.ts","sourceRoot":"","sources":["../src/create-docker-compose.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAyBjF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDockerCompose = createDockerCompose;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
function createDockerCompose(projectPath, dbConfig) {
|
|
10
|
+
const dockerCompose = `services:
|
|
11
|
+
db:
|
|
12
|
+
build:
|
|
13
|
+
context: .
|
|
14
|
+
dockerfile: db.dockerfile
|
|
15
|
+
ports:
|
|
16
|
+
- "${dbConfig.port}:5432"
|
|
17
|
+
environment:
|
|
18
|
+
POSTGRES_USER: ${dbConfig.user}
|
|
19
|
+
POSTGRES_PASSWORD: ${dbConfig.password}
|
|
20
|
+
POSTGRES_DB: ${dbConfig.name}
|
|
21
|
+
command: ["postgres", "-c", "fsync=off", "-c", "log_statement=all"]
|
|
22
|
+
volumes:
|
|
23
|
+
- db_data:/var/lib/postgresql/data
|
|
24
|
+
healthcheck:
|
|
25
|
+
test: ["CMD-SHELL", "pg_isready -U ${dbConfig.user} -d ${dbConfig.name}"]
|
|
26
|
+
interval: 5s
|
|
27
|
+
timeout: 5s
|
|
28
|
+
retries: 5
|
|
29
|
+
|
|
30
|
+
volumes:
|
|
31
|
+
db_data:
|
|
32
|
+
`;
|
|
33
|
+
fs_1.default.writeFileSync(path_1.default.join(projectPath, "docker-compose.yml"), dockerCompose);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=create-docker-compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-docker-compose.js","sourceRoot":"","sources":["../src/create-docker-compose.ts"],"names":[],"mappings":";;;;;AAIA,kDAyBC;AA7BD,4CAAoB;AACpB,gDAAwB;AAGxB,SAAgB,mBAAmB,CAAC,WAAmB,EAAE,QAAkB;IACzE,MAAM,aAAa,GAAG;;;;;;WAMb,QAAQ,CAAC,IAAI;;uBAED,QAAQ,CAAC,IAAI;2BACT,QAAQ,CAAC,QAAQ;qBACvB,QAAQ,CAAC,IAAI;;;;;2CAKS,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,IAAI;;;;;;;CAO3E,CAAC;IACA,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAE,aAAa,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-env.d.ts","sourceRoot":"","sources":["../src/create-env.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG,IAAI,CAO7G"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEnv = createEnv;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
function createEnv(projectPath, options) {
|
|
10
|
+
const { template, dbConfig } = options;
|
|
11
|
+
const envContent = template === "graphql"
|
|
12
|
+
? `DATABASE_URL=postgres://${dbConfig.user}:${dbConfig.password}@${dbConfig.host}:${dbConfig.port}/${dbConfig.name}\nPORT=4000\n`
|
|
13
|
+
: `DATABASE_URL=postgres://${dbConfig.user}:${dbConfig.password}@${dbConfig.host}:${dbConfig.port}/${dbConfig.name}\n`;
|
|
14
|
+
fs_1.default.writeFileSync(path_1.default.join(projectPath, ".env"), envContent);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=create-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-env.js","sourceRoot":"","sources":["../src/create-env.ts"],"names":[],"mappings":";;;;;AAIA,8BAOC;AAXD,4CAAoB;AACpB,gDAAwB;AAGxB,SAAgB,SAAS,CAAC,WAAmB,EAAE,OAAwD;IACrG,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,UAAU,GACd,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,2BAA2B,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,eAAe;QACjI,CAAC,CAAC,2BAA2B,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC3H,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/helpers/copy.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAiBjF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMxD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.copyDirectory = copyDirectory;
|
|
7
|
+
exports.copyFile = copyFile;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
function copyDirectory(src, dest, skip) {
|
|
11
|
+
fs_1.default.mkdirSync(dest, { recursive: true });
|
|
12
|
+
const entries = fs_1.default.readdirSync(src, { withFileTypes: true });
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
if (skip?.has(entry.name))
|
|
15
|
+
continue;
|
|
16
|
+
const srcPath = path_1.default.join(src, entry.name);
|
|
17
|
+
const destPath = path_1.default.join(dest, entry.name);
|
|
18
|
+
if (entry.isDirectory()) {
|
|
19
|
+
copyDirectory(srcPath, destPath, skip);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
fs_1.default.copyFileSync(srcPath, destPath);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function copyFile(src, dest) {
|
|
27
|
+
const destDir = path_1.default.dirname(dest);
|
|
28
|
+
if (!fs_1.default.existsSync(destDir)) {
|
|
29
|
+
fs_1.default.mkdirSync(destDir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
fs_1.default.copyFileSync(src, dest);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/helpers/copy.ts"],"names":[],"mappings":";;;;;AAGA,sCAiBC;AAED,4BAMC;AA5BD,4CAAoB;AACpB,gDAAwB;AAExB,SAAgB,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,IAAkB;IACzE,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAEpC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,IAAY;IAChD,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,YAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-package-manager.d.ts","sourceRoot":"","sources":["../../src/helpers/get-package-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,wBAAgB,iBAAiB,IAAI,cAAc,CAgBlD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPackageManager = getPackageManager;
|
|
4
|
+
function getPackageManager() {
|
|
5
|
+
const userAgent = process.env.npm_config_user_agent || "";
|
|
6
|
+
if (userAgent.startsWith("yarn")) {
|
|
7
|
+
return "yarn";
|
|
8
|
+
}
|
|
9
|
+
if (userAgent.startsWith("pnpm")) {
|
|
10
|
+
return "pnpm";
|
|
11
|
+
}
|
|
12
|
+
if (userAgent.startsWith("bun")) {
|
|
13
|
+
return "bun";
|
|
14
|
+
}
|
|
15
|
+
return "npm";
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-package-manager.js","sourceRoot":"","sources":["../../src/helpers/get-package-manager.ts"],"names":[],"mappings":";;AAEA,8CAgBC;AAhBD,SAAgB,iBAAiB;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAE1D,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/helpers/install.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAsB,OAAO,CAC3B,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.install = install;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
async function install(packageManager, cwd) {
|
|
6
|
+
const args = ["install"];
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = (0, child_process_1.spawn)(packageManager, args, {
|
|
9
|
+
cwd,
|
|
10
|
+
stdio: "inherit",
|
|
11
|
+
env: {
|
|
12
|
+
...process.env,
|
|
13
|
+
ADBLOCK: "1",
|
|
14
|
+
DISABLE_OPENCOLLECTIVE: "1",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
child.on("close", (code) => {
|
|
18
|
+
if (code !== 0) {
|
|
19
|
+
reject(new Error(`${packageManager} install failed with exit code ${code}`));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
resolve();
|
|
23
|
+
});
|
|
24
|
+
child.on("error", (err) => {
|
|
25
|
+
reject(err);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/helpers/install.ts"],"names":[],"mappings":";;AAGA,0BA6BC;AAhCD,iDAAsC;AAG/B,KAAK,UAAU,OAAO,CAC3B,cAA8B,EAC9B,GAAW;IAEX,MAAM,IAAI,GAAa,CAAC,SAAS,CAAC,CAAC;IAEnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,cAAc,EAAE,IAAI,EAAE;YACxC,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,OAAO,EAAE,GAAG;gBACZ,sBAAsB,EAAE,GAAG;aAC5B;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,cAAc,kCAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-folder-empty.d.ts","sourceRoot":"","sources":["../../src/helpers/is-folder-empty.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAItD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isFolderEmpty = isFolderEmpty;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const ALLOWED_FILES = [".DS_Store", ".git", ".gitattributes", ".gitignore", "Thumbs.db"];
|
|
9
|
+
function isFolderEmpty(dirPath) {
|
|
10
|
+
const files = fs_1.default.readdirSync(dirPath);
|
|
11
|
+
const relevantFiles = files.filter((file) => !ALLOWED_FILES.includes(file));
|
|
12
|
+
return relevantFiles.length === 0;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=is-folder-empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-folder-empty.js","sourceRoot":"","sources":["../../src/helpers/is-folder-empty.ts"],"names":[],"mappings":";;;;;AAIA,sCAIC;AARD,4CAAoB;AAEpB,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAEzF,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-folder-empty.test.d.ts","sourceRoot":"","sources":["../../src/helpers/is-folder-empty.test.ts"],"names":[],"mappings":""}
|