@decohere/create 0.0.1-dev.126 → 0.0.1-dev.16
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/commonjs/src/cli.js +10 -2
- package/commonjs/src/scaffold.js +89 -0
- package/commonjs/src/templates.js +305 -0
- package/es6/src/cli.js +10 -2
- package/es6/src/scaffold.js +79 -0
- package/es6/src/templates.js +245 -0
- package/package.json +11 -23
- package/types/src/scaffold.d.ts +6 -0
- package/types/src/templates.d.ts +20 -0
- package/LICENSE +0 -15
- package/README.md +0 -254
- package/commonjs/src/index.js +0 -26
- package/commonjs/src/resolve-launch.js +0 -100
- package/commonjs/src/runner.js +0 -105
- package/commonjs/src/version.js +0 -48
- package/es6/src/index.js +0 -2
- package/es6/src/resolve-launch.js +0 -87
- package/es6/src/runner.js +0 -98
- package/es6/src/version.js +0 -30
- package/pack-builder-tgz.mjs +0 -177
- package/types/src/index.d.ts +0 -3
- package/types/src/resolve-launch.d.ts +0 -20
- package/types/src/runner.d.ts +0 -5
- package/types/src/version.d.ts +0 -2
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
export function ROOT_PACKAGE_JSON(name) {
|
|
2
|
+
return JSON.stringify({
|
|
3
|
+
name,
|
|
4
|
+
version: "0.0.1",
|
|
5
|
+
type: "module",
|
|
6
|
+
scripts: {
|
|
7
|
+
build: "forge build",
|
|
8
|
+
"build:watch": "forge build --watch",
|
|
9
|
+
dev: "flux serve"
|
|
10
|
+
},
|
|
11
|
+
devDependencies: {
|
|
12
|
+
"@decohere/terminal": "0.0.1-dev.14",
|
|
13
|
+
typescript: "^6.0.3"
|
|
14
|
+
}
|
|
15
|
+
}, null, 2);
|
|
16
|
+
}
|
|
17
|
+
export function WEB_API_ROOT_PACKAGE_JSON(name, opts) {
|
|
18
|
+
const deps = {
|
|
19
|
+
"@decohere/cortex": "0.0.1-dev.15",
|
|
20
|
+
"@decohere/protocol": "0.0.1-dev.15",
|
|
21
|
+
"@decohere/scribe": "0.0.1-dev.15",
|
|
22
|
+
"@decohere/scribe-pino": "0.0.1-dev.15",
|
|
23
|
+
"pino-pretty": "^13.0.0"
|
|
24
|
+
};
|
|
25
|
+
if (opts?.database === "typeorm") {
|
|
26
|
+
deps["@decohere/codex"] = "0.0.1-dev.15";
|
|
27
|
+
deps["@decohere/codex-typeorm"] = "0.0.1-dev.15";
|
|
28
|
+
}
|
|
29
|
+
return JSON.stringify({
|
|
30
|
+
name: `${name}.api`,
|
|
31
|
+
version: "0.0.1",
|
|
32
|
+
type: "module",
|
|
33
|
+
scripts: {
|
|
34
|
+
build: "forge build",
|
|
35
|
+
"build:watch": "forge build --watch",
|
|
36
|
+
dev: "flux serve"
|
|
37
|
+
},
|
|
38
|
+
dependencies: deps,
|
|
39
|
+
devDependencies: {
|
|
40
|
+
"@decohere/terminal": "0.0.1-dev.15",
|
|
41
|
+
typescript: "^6.0.3"
|
|
42
|
+
}
|
|
43
|
+
}, null, 2);
|
|
44
|
+
}
|
|
45
|
+
export function APP_PACKAGE_JSON(name) {
|
|
46
|
+
return JSON.stringify({
|
|
47
|
+
name: `@${name}/app`,
|
|
48
|
+
version: "0.0.1",
|
|
49
|
+
type: "module",
|
|
50
|
+
main: "src/main.ts"
|
|
51
|
+
}, null, 2);
|
|
52
|
+
}
|
|
53
|
+
export const TSCONFIG = JSON.stringify({
|
|
54
|
+
compilerOptions: {
|
|
55
|
+
target: "ES2022",
|
|
56
|
+
module: "NodeNext",
|
|
57
|
+
moduleResolution: "NodeNext",
|
|
58
|
+
strict: true,
|
|
59
|
+
skipLibCheck: true
|
|
60
|
+
},
|
|
61
|
+
include: [
|
|
62
|
+
"projects"
|
|
63
|
+
]
|
|
64
|
+
}, null, 2);
|
|
65
|
+
export const MAIN_TS = `console.log("Hello from Decohere!");
|
|
66
|
+
`;
|
|
67
|
+
export const WEB_API_TSCONFIG = JSON.stringify({
|
|
68
|
+
compilerOptions: {
|
|
69
|
+
target: "ES2022",
|
|
70
|
+
module: "NodeNext",
|
|
71
|
+
moduleResolution: "NodeNext",
|
|
72
|
+
strict: true,
|
|
73
|
+
skipLibCheck: true,
|
|
74
|
+
experimentalDecorators: true,
|
|
75
|
+
emitDecoratorMetadata: true
|
|
76
|
+
},
|
|
77
|
+
include: [
|
|
78
|
+
"projects"
|
|
79
|
+
]
|
|
80
|
+
}, null, 2);
|
|
81
|
+
export function WEB_API_APP_PACKAGE_JSON(name) {
|
|
82
|
+
return JSON.stringify({
|
|
83
|
+
name: `@${name}/api`,
|
|
84
|
+
version: "0.0.1",
|
|
85
|
+
type: "module",
|
|
86
|
+
main: "src/main.ts",
|
|
87
|
+
dependencies: {
|
|
88
|
+
"@decohere/cortex": "0.0.1-dev.15"
|
|
89
|
+
}
|
|
90
|
+
}, null, 2);
|
|
91
|
+
}
|
|
92
|
+
export function WEB_API_MAIN_TS(name, opts) {
|
|
93
|
+
const dbImport = opts?.database === "typeorm" ? `import "@decohere/codex-typeorm";
|
|
94
|
+
import { SampleEntity } from "./entities/sample.entity.js";
|
|
95
|
+
import { SampleEntityRepository } from "./repositories/sample.repository.js";
|
|
96
|
+
` : "";
|
|
97
|
+
const dbChain = opts?.database === "typeorm" ? `\n\t.withTypeOrm({ entities: [SampleEntity], repositories: [SampleEntityRepository] })` : "";
|
|
98
|
+
return `import "@decohere/scribe-pino";
|
|
99
|
+
import "@decohere/cortex/http";
|
|
100
|
+
import "@decohere/protocol";
|
|
101
|
+
${dbImport}import { Builder } from "@decohere/cortex";
|
|
102
|
+
import { FastifyProvider } from "@decohere/cortex/providers";
|
|
103
|
+
import { scribe } from "@decohere/scribe";
|
|
104
|
+
import { YamlDataSource } from "@decohere/protocol";
|
|
105
|
+
import { HelloController } from "./controllers/hello.controller.js";
|
|
106
|
+
import { SampleService } from "./sample.service.js";
|
|
107
|
+
|
|
108
|
+
scribe.extend.withPinoPretty();
|
|
109
|
+
|
|
110
|
+
const app = await Builder.create({ applicationName: "${name}.api" })
|
|
111
|
+
\t.withHttpProvider(FastifyProvider)
|
|
112
|
+
\t.withConfiguration(YamlDataSource)
|
|
113
|
+
\t.withServices((cb) => {
|
|
114
|
+
\t\tcb.registerSingleton(SampleService);
|
|
115
|
+
\t})${dbChain}
|
|
116
|
+
\t.withControllers(HelloController)
|
|
117
|
+
\t.build();
|
|
118
|
+
|
|
119
|
+
await app.start({ port: 3000 });
|
|
120
|
+
|
|
121
|
+
export default app;
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
export const HELLO_CONTROLLER_TS = `import { Controller, Delete, Field, Get, Param, Post, Put, Query } from "@decohere/cortex";
|
|
125
|
+
import { SampleService } from "../sample.service.js";
|
|
126
|
+
|
|
127
|
+
class HelloBody {
|
|
128
|
+
@Field("body", "message")
|
|
129
|
+
public message!: string;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@Controller({ prefix: "/hello" })
|
|
133
|
+
export class HelloController {
|
|
134
|
+
public constructor(private readonly sample: SampleService) {}
|
|
135
|
+
|
|
136
|
+
@Get()
|
|
137
|
+
public async getAll(@Query("filter") filter: string) {
|
|
138
|
+
const greeting = await this.sample.getGreeting();
|
|
139
|
+
return { filter, message: greeting };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@Get("/:id")
|
|
143
|
+
public getOne(@Param("id") id: string) {
|
|
144
|
+
return { id, message: \`Hello \${id}!\` };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@Post("/")
|
|
148
|
+
public create(body: HelloBody) {
|
|
149
|
+
return { message: body.message };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@Put("/:id")
|
|
153
|
+
public update(@Param("id") id: string, body: HelloBody) {
|
|
154
|
+
return { id, message: body.message };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@Delete("/:id")
|
|
158
|
+
public remove(@Param("id") id: string) {
|
|
159
|
+
return { id, deleted: true };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
`;
|
|
163
|
+
export const SAMPLE_CONFIG_TS = `export class SampleConfig {
|
|
164
|
+
public greeting: string = "";
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
export const SAMPLE_SERVICE_TS = `import { inject, injectable } from "@decohere/crucible/decorators";
|
|
168
|
+
import { ConfigurationServiceToken } from "@decohere/nexus/configuration";
|
|
169
|
+
import type { IConfigurationService } from "@decohere/nexus/configuration";
|
|
170
|
+
import { SampleConfig } from "./sample.config.js";
|
|
171
|
+
|
|
172
|
+
@injectable()
|
|
173
|
+
export class SampleService {
|
|
174
|
+
public constructor(
|
|
175
|
+
@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,
|
|
176
|
+
) {}
|
|
177
|
+
|
|
178
|
+
public async getGreeting(): Promise<string> {
|
|
179
|
+
const config = await this.config.get(SampleConfig);
|
|
180
|
+
return config.greeting;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
`;
|
|
184
|
+
export function CONFIG_YAML(name, opts) {
|
|
185
|
+
const dbSection = opts?.database === "typeorm" ? `database:
|
|
186
|
+
dataSources:
|
|
187
|
+
- name: default
|
|
188
|
+
provider: postgres
|
|
189
|
+
host: localhost
|
|
190
|
+
port: 5432
|
|
191
|
+
database: ${name}_dev
|
|
192
|
+
username: postgres
|
|
193
|
+
password: postgres
|
|
194
|
+
synchronize: true
|
|
195
|
+
seed: false
|
|
196
|
+
adminUser: postgres
|
|
197
|
+
adminPassword: postgres
|
|
198
|
+
` : "";
|
|
199
|
+
return `sample:
|
|
200
|
+
greeting: Hello from configuration!
|
|
201
|
+
${dbSection}`;
|
|
202
|
+
}
|
|
203
|
+
export const CONFIG_DEV_YAML = `sample:
|
|
204
|
+
greeting: Hello from dev configuration!
|
|
205
|
+
`;
|
|
206
|
+
export const CONFIG_PROD_YAML = `database:
|
|
207
|
+
dataSources:
|
|
208
|
+
- name: default
|
|
209
|
+
provider: postgres
|
|
210
|
+
host: \${DB_HOST}
|
|
211
|
+
port: \${DB_PORT}
|
|
212
|
+
database: \${DB_NAME}
|
|
213
|
+
username: \${DB_USER}
|
|
214
|
+
password: \${DB_PASSWORD}
|
|
215
|
+
synchronize: false
|
|
216
|
+
seed: false
|
|
217
|
+
adminUser: \${DB_ADMIN_USER}
|
|
218
|
+
adminPassword: \${DB_ADMIN_PASSWORD}
|
|
219
|
+
`;
|
|
220
|
+
export const SAMPLE_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
|
221
|
+
import type { Entity as IEntity } from "@decohere/codex";
|
|
222
|
+
|
|
223
|
+
@Entity()
|
|
224
|
+
export class SampleEntity implements IEntity {
|
|
225
|
+
\t@PrimaryGeneratedColumn()
|
|
226
|
+
\tpublic id!: number;
|
|
227
|
+
|
|
228
|
+
\t@Column()
|
|
229
|
+
\tpublic name!: string;
|
|
230
|
+
}
|
|
231
|
+
`;
|
|
232
|
+
export const SAMPLE_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
233
|
+
import { injectUnitOfWork } from "@decohere/codex";
|
|
234
|
+
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
|
|
235
|
+
import { SampleEntity } from "../entities/sample.entity.js";
|
|
236
|
+
|
|
237
|
+
@injectable()
|
|
238
|
+
export class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {
|
|
239
|
+
\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {
|
|
240
|
+
\t\tsuper(unitOfWork, SampleEntity);
|
|
241
|
+
\t}
|
|
242
|
+
}
|
|
243
|
+
`;
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBST09UX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZSxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE0XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhYmFzZVByb3ZpZGVyID0gXCJ0eXBlb3JtXCI7XG5cbmV4cG9ydCB0eXBlIFdlYkFwaU9wdGlvbnMgPSB7XG5cdGRhdGFiYXNlPzogRGF0YWJhc2VQcm92aWRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX1JPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZywgb3B0cz86IFdlYkFwaU9wdGlvbnMpOiBzdHJpbmcge1xuXHRjb25zdCBkZXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBcIjAuMC4xLWRldi4xNVwiLFxuXHRcdFwiQGRlY29oZXJlL3Byb3RvY29sXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcInBpbm8tcHJldHR5XCI6IFwiXjEzLjAuMFwiLFxuXHR9O1xuXHRpZiAob3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiKSB7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleFwiXSA9IFwiMC4wLjEtZGV2LjE1XCI7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCJdID0gXCIwLjAuMS1kZXYuMTVcIjtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYCR7bmFtZX0uYXBpYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGVwZW5kZW5jaWVzOiBkZXBzLFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVBQX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgVFNDT05GSUcgPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdGNvbXBpbGVyT3B0aW9uczoge1xuXHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRtb2R1bGVSZXNvbHV0aW9uOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBNQUlOX1RTID0gYGNvbnNvbGUubG9nKFwiSGVsbG8gZnJvbSBEZWNvaGVyZSFcIik7XG5gO1xuXG5leHBvcnQgY29uc3QgV0VCX0FQSV9UU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRlbWl0RGVjb3JhdG9yTWV0YWRhdGE6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuXHRcdHtcblx0XHRcdG5hbWU6IGBAJHtuYW1lfS9hcGlgLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdGRlcGVuZGVuY2llczoge1xuXHRcdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX01BSU5fVFMobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiSW1wb3J0ID1cblx0XHRvcHRzPy5kYXRhYmFzZSA9PT0gXCJ0eXBlb3JtXCJcblx0XHRcdD8gYGltcG9ydCBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdGllcy9zYW1wbGUuZW50aXR5LmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHlSZXBvc2l0b3J5IH0gZnJvbSBcIi4vcmVwb3NpdG9yaWVzL3NhbXBsZS5yZXBvc2l0b3J5LmpzXCI7XG5gXG5cdFx0XHQ6IFwiXCI7XG5cdGNvbnN0IGRiQ2hhaW4gPVxuXHRcdG9wdHM/LmRhdGFiYXNlID09PSBcInR5cGVvcm1cIlxuXHRcdFx0PyBgXFxuXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFtTYW1wbGVFbnRpdHldLCByZXBvc2l0b3JpZXM6IFtTYW1wbGVFbnRpdHlSZXBvc2l0b3J5XSB9KWBcblx0XHRcdDogXCJcIjtcblx0cmV0dXJuIGBpbXBvcnQgXCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjtcbmltcG9ydCBcIkBkZWNvaGVyZS9jb3J0ZXgvaHR0cFwiO1xuaW1wb3J0IFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG4ke2RiSW1wb3J0fWltcG9ydCB7IEJ1aWxkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgRmFzdGlmeVByb3ZpZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXgvcHJvdmlkZXJzXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgWWFtbERhdGFTb3VyY2UgfSBmcm9tIFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBIZWxsb0NvbnRyb2xsZXIgfSBmcm9tIFwiLi9jb250cm9sbGVycy9oZWxsby5jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2FtcGxlLnNlcnZpY2UuanNcIjtcblxuc2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1xuXG5jb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke25hbWV9LmFwaVwiIH0pXG5cXHQud2l0aEh0dHBQcm92aWRlcihGYXN0aWZ5UHJvdmlkZXIpXG5cXHQud2l0aENvbmZpZ3VyYXRpb24oWWFtbERhdGFTb3VyY2UpXG5cXHQud2l0aFNlcnZpY2VzKChjYikgPT4ge1xuXFx0XFx0Y2IucmVnaXN0ZXJTaW5nbGV0b24oU2FtcGxlU2VydmljZSk7XG5cXHR9KSR7ZGJDaGFpbn1cblxcdC53aXRoQ29udHJvbGxlcnMoSGVsbG9Db250cm9sbGVyKVxuXFx0LmJ1aWxkKCk7XG5cbmF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFwcDtcbmA7XG59XG5cbmV4cG9ydCBjb25zdCBIRUxMT19DT05UUk9MTEVSX1RTID0gYGltcG9ydCB7IENvbnRyb2xsZXIsIERlbGV0ZSwgRmllbGQsIEdldCwgUGFyYW0sIFBvc3QsIFB1dCwgUXVlcnkgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuLi9zYW1wbGUuc2VydmljZS5qc1wiO1xuXG5jbGFzcyBIZWxsb0JvZHkge1xuXHRARmllbGQoXCJib2R5XCIsIFwibWVzc2FnZVwiKVxuXHRwdWJsaWMgbWVzc2FnZSE6IHN0cmluZztcbn1cblxuQENvbnRyb2xsZXIoeyBwcmVmaXg6IFwiL2hlbGxvXCIgfSlcbmV4cG9ydCBjbGFzcyBIZWxsb0NvbnRyb2xsZXIge1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzYW1wbGU6IFNhbXBsZVNlcnZpY2UpIHt9XG5cblx0QEdldCgpXG5cdHB1YmxpYyBhc3luYyBnZXRBbGwoQFF1ZXJ5KFwiZmlsdGVyXCIpIGZpbHRlcjogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZ3JlZXRpbmcgPSBhd2FpdCB0aGlzLnNhbXBsZS5nZXRHcmVldGluZygpO1xuXHRcdHJldHVybiB7IGZpbHRlciwgbWVzc2FnZTogZ3JlZXRpbmcgfTtcblx0fVxuXG5cdEBHZXQoXCIvOmlkXCIpXG5cdHB1YmxpYyBnZXRPbmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBcXGBIZWxsbyBcXCR7aWR9IVxcYCB9O1xuXHR9XG5cblx0QFBvc3QoXCIvXCIpXG5cdHB1YmxpYyBjcmVhdGUoYm9keTogSGVsbG9Cb2R5KSB7XG5cdFx0cmV0dXJuIHsgbWVzc2FnZTogYm9keS5tZXNzYWdlIH07XG5cdH1cblxuXHRAUHV0KFwiLzppZFwiKVxuXHRwdWJsaWMgdXBkYXRlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcsIGJvZHk6IEhlbGxvQm9keSkge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcblx0fVxuXG5cdEBEZWxldGUoXCIvOmlkXCIpXG5cdHB1YmxpYyByZW1vdmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBkZWxldGVkOiB0cnVlIH07XG5cdH1cbn1cbmA7XG5cbmV4cG9ydCBjb25zdCBTQU1QTEVfQ09ORklHX1RTID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xuXHRwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZyA9IFwiXCI7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1NFUlZJQ0VfVFMgPSBgaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVRva2VuIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IElDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnIH0gZnJvbSBcIi4vc2FtcGxlLmNvbmZpZy5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZSB7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRAaW5qZWN0KENvbmZpZ3VyYXRpb25TZXJ2aWNlVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29uZmlndXJhdGlvblNlcnZpY2UsXG5cdCkge31cblxuXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXQoU2FtcGxlQ29uZmlnKTtcblx0XHRyZXR1cm4gY29uZmlnLmdyZWV0aW5nO1xuXHR9XG59XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gQ09ORklHX1lBTUwobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiU2VjdGlvbiA9XG5cdFx0b3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiXG5cdFx0XHQ/IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBuYW1lOiBkZWZhdWx0XG4gICAgICBwcm92aWRlcjogcG9zdGdyZXNcbiAgICAgIGhvc3Q6IGxvY2FsaG9zdFxuICAgICAgcG9ydDogNTQzMlxuICAgICAgZGF0YWJhc2U6ICR7bmFtZX1fZGV2XG4gICAgICB1c2VybmFtZTogcG9zdGdyZXNcbiAgICAgIHBhc3N3b3JkOiBwb3N0Z3Jlc1xuICAgICAgc3luY2hyb25pemU6IHRydWVcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IHBvc3RncmVzXG4gICAgICBhZG1pblBhc3N3b3JkOiBwb3N0Z3Jlc1xuYFxuXHRcdFx0OiBcIlwiO1xuXHRyZXR1cm4gYHNhbXBsZTpcbiAgZ3JlZXRpbmc6IEhlbGxvIGZyb20gY29uZmlndXJhdGlvbiFcbiR7ZGJTZWN0aW9ufWA7XG59XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfREVWX1lBTUwgPSBgc2FtcGxlOlxuICBncmVldGluZzogSGVsbG8gZnJvbSBkZXYgY29uZmlndXJhdGlvbiFcbmA7XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUFJPRF9ZQU1MID0gYGRhdGFiYXNlOlxuICBkYXRhU291cmNlczpcbiAgICAtIG5hbWU6IGRlZmF1bHRcbiAgICAgIHByb3ZpZGVyOiBwb3N0Z3Jlc1xuICAgICAgaG9zdDogXFwke0RCX0hPU1R9XG4gICAgICBwb3J0OiBcXCR7REJfUE9SVH1cbiAgICAgIGRhdGFiYXNlOiBcXCR7REJfTkFNRX1cbiAgICAgIHVzZXJuYW1lOiBcXCR7REJfVVNFUn1cbiAgICAgIHBhc3N3b3JkOiBcXCR7REJfUEFTU1dPUkR9XG4gICAgICBzeW5jaHJvbml6ZTogZmFsc2VcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IFxcJHtEQl9BRE1JTl9VU0VSfVxuICAgICAgYWRtaW5QYXNzd29yZDogXFwke0RCX0FETUlOX1BBU1NXT1JEfVxuYDtcblxuZXhwb3J0IGNvbnN0IFNBTVBMRV9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIG5hbWUhOiBzdHJpbmc7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1JFUE9TSVRPUllfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaW5qZWN0VW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcbmltcG9ydCB7IFR5cGVPcm1SZXBvc2l0b3J5LCBUeXBlT3JtVW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXgtdHlwZW9ybVwiO1xuaW1wb3J0IHsgU2FtcGxlRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3NhbXBsZS5lbnRpdHkuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNhbXBsZUVudGl0eVJlcG9zaXRvcnkgZXh0ZW5kcyBUeXBlT3JtUmVwb3NpdG9yeTxTYW1wbGVFbnRpdHk+IHtcblxcdHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0VW5pdE9mV29yaygpIHVuaXRPZldvcms6IFR5cGVPcm1Vbml0T2ZXb3JrKSB7XG5cXHRcXHRzdXBlcih1bml0T2ZXb3JrLCBTYW1wbGVFbnRpdHkpO1xuXFx0fVxufVxuYDtcbiJdLCJuYW1lcyI6WyJST09UX1BBQ0tBR0VfSlNPTiIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwidmVyc2lvbiIsInR5cGUiLCJzY3JpcHRzIiwiYnVpbGQiLCJkZXYiLCJkZXZEZXBlbmRlbmNpZXMiLCJ0eXBlc2NyaXB0IiwiV0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTiIsIm9wdHMiLCJkZXBzIiwiZGF0YWJhc2UiLCJkZXBlbmRlbmNpZXMiLCJBUFBfUEFDS0FHRV9KU09OIiwibWFpbiIsIlRTQ09ORklHIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiLCJNQUlOX1RTIiwiV0VCX0FQSV9UU0NPTkZJRyIsImV4cGVyaW1lbnRhbERlY29yYXRvcnMiLCJlbWl0RGVjb3JhdG9yTWV0YWRhdGEiLCJXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04iLCJXRUJfQVBJX01BSU5fVFMiLCJkYkltcG9ydCIsImRiQ2hhaW4iLCJIRUxMT19DT05UUk9MTEVSX1RTIiwiU0FNUExFX0NPTkZJR19UUyIsIlNBTVBMRV9TRVJWSUNFX1RTIiwiQ09ORklHX1lBTUwiLCJkYlNlY3Rpb24iLCJDT05GSUdfREVWX1lBTUwiLCJDT05GSUdfUFJPRF9ZQU1MIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLGtCQUFrQkMsSUFBWTtJQUM3QyxPQUFPQyxLQUFLQyxTQUFTLENBQ3BCO1FBQ0NGO1FBQ0FHLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxTQUFTO1lBQ1JDLE9BQU87WUFDUCxlQUFlO1lBQ2ZDLEtBQUs7UUFDTjtRQUNBQyxpQkFBaUI7WUFDaEIsc0JBQXNCO1lBQ3RCQyxZQUFZO1FBQ2I7SUFDRCxHQUNBLE1BQ0E7QUFFRjtBQVFBLE9BQU8sU0FBU0MsMEJBQTBCVixJQUFZLEVBQUVXLElBQW9CO0lBQzNFLE1BQU1DLE9BQStCO1FBQ3BDLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLHlCQUF5QjtRQUN6QixlQUFlO0lBQ2hCO0lBQ0EsSUFBSUQsTUFBTUUsYUFBYSxXQUFXO1FBQ2pDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7UUFDMUJBLElBQUksQ0FBQyww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
|
package/package.json
CHANGED
|
@@ -1,40 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/create",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.1-dev.16",
|
|
4
|
+
"description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"decohere",
|
|
7
7
|
"create",
|
|
8
8
|
"scaffold",
|
|
9
|
-
"cli"
|
|
9
|
+
"cli",
|
|
10
|
+
"forge",
|
|
11
|
+
"flux",
|
|
12
|
+
"typescript"
|
|
10
13
|
],
|
|
11
|
-
"homepage": "https://github.com/typesmiths/decohere/tree/main/projects/create#readme",
|
|
12
|
-
"bugs": {
|
|
13
|
-
"url": "https://github.com/typesmiths/decohere/issues"
|
|
14
|
-
},
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "git+https://github.com/typesmiths/decohere.git",
|
|
18
|
-
"directory": "projects/create"
|
|
19
|
-
},
|
|
20
14
|
"license": "ISC",
|
|
21
15
|
"author": "Typesmiths",
|
|
22
16
|
"type": "module",
|
|
23
|
-
"exports": {
|
|
24
|
-
".": {
|
|
25
|
-
"types": "./types/src/index.d.ts",
|
|
26
|
-
"import": "./es6/src/index.js"
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
17
|
"bin": {
|
|
30
18
|
"create-decohere": "./es6/src/cli.js"
|
|
31
19
|
},
|
|
32
20
|
"scripts": {
|
|
33
21
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
34
22
|
},
|
|
35
|
-
"dependencies": {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@decohere/nexus": "0.0.1-dev.16",
|
|
25
|
+
"commander": "^13.1.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {}
|
|
40
28
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function ROOT_PACKAGE_JSON(name: string): string;
|
|
2
|
+
export type DatabaseProvider = "typeorm";
|
|
3
|
+
export type WebApiOptions = {
|
|
4
|
+
database?: DatabaseProvider;
|
|
5
|
+
};
|
|
6
|
+
export declare function WEB_API_ROOT_PACKAGE_JSON(name: string, opts?: WebApiOptions): string;
|
|
7
|
+
export declare function APP_PACKAGE_JSON(name: string): string;
|
|
8
|
+
export declare const TSCONFIG: string;
|
|
9
|
+
export declare const MAIN_TS = "console.log(\"Hello from Decohere!\");\n";
|
|
10
|
+
export declare const WEB_API_TSCONFIG: string;
|
|
11
|
+
export declare function WEB_API_APP_PACKAGE_JSON(name: string): string;
|
|
12
|
+
export declare function WEB_API_MAIN_TS(name: string, opts?: WebApiOptions): string;
|
|
13
|
+
export declare const HELLO_CONTROLLER_TS = "import { Controller, Delete, Field, Get, Param, Post, Put, Query } from \"@decohere/cortex\";\nimport { SampleService } from \"../sample.service.js\";\n\nclass HelloBody {\n\t@Field(\"body\", \"message\")\n\tpublic message!: string;\n}\n\n@Controller({ prefix: \"/hello\" })\nexport class HelloController {\n\tpublic constructor(private readonly sample: SampleService) {}\n\n\t@Get()\n\tpublic async getAll(@Query(\"filter\") filter: string) {\n\t\tconst greeting = await this.sample.getGreeting();\n\t\treturn { filter, message: greeting };\n\t}\n\n\t@Get(\"/:id\")\n\tpublic getOne(@Param(\"id\") id: string) {\n\t\treturn { id, message: `Hello ${id}!` };\n\t}\n\n\t@Post(\"/\")\n\tpublic create(body: HelloBody) {\n\t\treturn { message: body.message };\n\t}\n\n\t@Put(\"/:id\")\n\tpublic update(@Param(\"id\") id: string, body: HelloBody) {\n\t\treturn { id, message: body.message };\n\t}\n\n\t@Delete(\"/:id\")\n\tpublic remove(@Param(\"id\") id: string) {\n\t\treturn { id, deleted: true };\n\t}\n}\n";
|
|
14
|
+
export declare const SAMPLE_CONFIG_TS = "export class SampleConfig {\n\tpublic greeting: string = \"\";\n}\n";
|
|
15
|
+
export declare const SAMPLE_SERVICE_TS = "import { inject, injectable } from \"@decohere/crucible/decorators\";\nimport { ConfigurationServiceToken } from \"@decohere/nexus/configuration\";\nimport type { IConfigurationService } from \"@decohere/nexus/configuration\";\nimport { SampleConfig } from \"./sample.config.js\";\n\n@injectable()\nexport class SampleService {\n\tpublic constructor(\n\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,\n\t) {}\n\n\tpublic async getGreeting(): Promise<string> {\n\t\tconst config = await this.config.get(SampleConfig);\n\t\treturn config.greeting;\n\t}\n}\n";
|
|
16
|
+
export declare function CONFIG_YAML(name: string, opts?: WebApiOptions): string;
|
|
17
|
+
export declare const CONFIG_DEV_YAML = "sample:\n greeting: Hello from dev configuration!\n";
|
|
18
|
+
export declare const CONFIG_PROD_YAML = "database:\n dataSources:\n - name: default\n provider: postgres\n host: ${DB_HOST}\n port: ${DB_PORT}\n database: ${DB_NAME}\n username: ${DB_USER}\n password: ${DB_PASSWORD}\n synchronize: false\n seed: false\n adminUser: ${DB_ADMIN_USER}\n adminPassword: ${DB_ADMIN_PASSWORD}\n";
|
|
19
|
+
export declare const SAMPLE_ENTITY_TS = "import { Column, Entity, PrimaryGeneratedColumn } from \"typeorm\";\nimport type { Entity as IEntity } from \"@decohere/codex\";\n\n@Entity()\nexport class SampleEntity implements IEntity {\n\t@PrimaryGeneratedColumn()\n\tpublic id!: number;\n\n\t@Column()\n\tpublic name!: string;\n}\n";
|
|
20
|
+
export declare const SAMPLE_REPOSITORY_TS = "import { injectable } from \"@decohere/crucible/decorators\";\nimport { injectUnitOfWork } from \"@decohere/codex\";\nimport { TypeOrmRepository, TypeOrmUnitOfWork } from \"@decohere/codex-typeorm\";\nimport { SampleEntity } from \"../entities/sample.entity.js\";\n\n@injectable()\nexport class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {\n\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {\n\t\tsuper(unitOfWork, SampleEntity);\n\t}\n}\n";
|
package/LICENSE
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
ISC License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025-2026 Typesmiths
|
|
4
|
-
|
|
5
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
copyright notice and this permission notice appear in all copies.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
# @decohere/create
|
|
2
|
-
|
|
3
|
-
Scaffold a new Decohere project — built with Forge, served with Flux.
|
|
4
|
-
|
|
5
|
-
Docker is required on the host. `@decohere/create` only pulls `ghcr.io/typesmiths/decohere/create` and runs `@decohere/scaffold` inside it (including the Auth0 CLI). It does not install the scaffolder libraries on the host.
|
|
6
|
-
|
|
7
|
-
## Usage
|
|
8
|
-
|
|
9
|
-
`npm create` already says “create”, so the first token is the kind (`webapi`), not `create` again. The launcher forwards `decohere create webapi …` into the builder image.
|
|
10
|
-
|
|
11
|
-
This run prompts for database, auth, Postman, and whether to install:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm create @decohere@dev webapi -d my-app
|
|
15
|
-
# or
|
|
16
|
-
npx @decohere/create@dev webapi -d my-app
|
|
17
|
-
# or, once `@decohere/cli` is installed:
|
|
18
|
-
decohere create webapi -d my-app
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
To skip prompts, pass every answer up front (`-y` means “install deps, don’t ask”):
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm create @decohere@dev -- webapi -d my-app --database postgres/typeorm --auth none --postman local -y
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Target directory is `webapi`'s optional argument or `-d` (default `.`). `npm create` treats `-d` as its own loglevel flag and forwards `my-app` as a positional — that form is supported. Extra create flags still need `--` after `npm create`.
|
|
28
|
-
|
|
29
|
-
The first token after the package must be a command (`webapi`); a bare directory name is an unknown command.
|
|
30
|
-
|
|
31
|
-
The scaffolded Dev Container asks **y/N** (TTY only) before npm auth and optional codebase RAG MCP (semantic search). Decline or run without a TTY to skip. Credentials are written under the project `.cursor/` directory (gitignored).
|
|
32
|
-
|
|
33
|
-
## Commands
|
|
34
|
-
|
|
35
|
-
### `webapi`
|
|
36
|
-
|
|
37
|
-
Scaffolds a full web API using `@decohere/http` (HTTP), `@decohere/crucible` (DI), `@decohere/config` (configuration) and Scribe (logging), plus a Dev Container workspace.
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
npx @decohere/create webapi -d my-app
|
|
41
|
-
npx @decohere/create webapi -d my-app --name billing
|
|
42
|
-
npx @decohere/create webapi -d my-app --name api --name billing
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Generated structure (default `--name api`):
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
my-app/
|
|
49
|
-
package.json # build / start / start:<name> / dev
|
|
50
|
-
.github/
|
|
51
|
-
actions/setup-node-pnpm/
|
|
52
|
-
workflows/
|
|
53
|
-
ci.yml # lint ∥ test (+ build and package on default branch)
|
|
54
|
-
publish.yml # forge publish (skips private); no docker push by default
|
|
55
|
-
tsconfig.json
|
|
56
|
-
biome.json
|
|
57
|
-
.env
|
|
58
|
-
config/
|
|
59
|
-
config.yaml
|
|
60
|
-
config.dev.yaml
|
|
61
|
-
.devcontainer/
|
|
62
|
-
projects/
|
|
63
|
-
api/ # or projects/<name> when --name is set
|
|
64
|
-
package.json # private: true (app, not an npm package)
|
|
65
|
-
Dockerfile # copies .package/ (written by `forge package`)
|
|
66
|
-
.dockerignore
|
|
67
|
-
src/
|
|
68
|
-
main.ts
|
|
69
|
-
sample.config.ts
|
|
70
|
-
sample.service.ts
|
|
71
|
-
controllers/
|
|
72
|
-
hello.controller.ts
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Every API gets its own `projects/<name>/Dockerfile`; that folder is the Docker build context. The Dockerfile copies `.package/`, which `forge package` writes (see below).
|
|
76
|
-
|
|
77
|
-
The app Dev Container is a thin `FROM ghcr.io/typesmiths/decohere/devcontainer:<version>` (pinned to the scaffolder version). Shared layers (bash history, pnpm, `gh`, js-debug bootloader fix) update via `docker pull` / Dev Container rebuild — Compose mounts and lifecycle scripts stay in the app repo. Rebuild with pull after upgrading `@decohere/create`.
|
|
78
|
-
|
|
79
|
-
#### Scripts
|
|
80
|
-
|
|
81
|
-
| Script | Command | When |
|
|
82
|
-
|---|---|---|
|
|
83
|
-
| `build` | `forge build --configuration release` | CI, Nixpacks |
|
|
84
|
-
| `package` / `package:<name>` | release build, then `forge package` (all APIs, or that one) | Before `docker build` |
|
|
85
|
-
| `start` | `node dist/release/projects/<first>/es6/src/main.js` | Production default API (`pnpm start`) |
|
|
86
|
-
| `start:<name>` | same path for that API | Deploy that API (`pnpm run start:billing`) |
|
|
87
|
-
| `dev` | `flux serve --env-file-if-exists .env` (plus `--project @<app>/<first>` when named) | Local HMR for the first API; loads `.env` if present |
|
|
88
|
-
| `dev:<name>` | `PORT=<3000+n> flux serve --env-file-if-exists .env --project @<app>/<name>` | Local HMR for that API |
|
|
89
|
-
| `lint:check` / `typecheck` / `test` | biome / forge typecheck / vitest | CI |
|
|
90
|
-
|
|
91
|
-
#### Multiple APIs / add later
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
decohere add api billing
|
|
95
|
-
# empty machine / npm create still maps `webapi add`:
|
|
96
|
-
npx @decohere/create webapi add billing -d my-app
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Adds `projects/billing`, `start:billing` / `package:billing` / `dev:billing`, and `projects/billing/Dockerfile`. Does not rewrite the first API or workspace files like `biome.json`.
|
|
100
|
-
|
|
101
|
-
Each API is a separate deploy: package it (`pnpm run package:billing`) and build the image from its folder (`docker build projects/billing`), or set the start command to `pnpm run start:billing`. Workspace `config/` is shared; each API still has its own named datasource and `{PREFIX}_DB_*` env (host/port default to the Compose Postgres).
|
|
102
|
-
|
|
103
|
-
### `auth0`
|
|
104
|
-
|
|
105
|
-
The Auth0 CLI lives in the create image. Host tokens are stored in `~/.config/auth0` (always bind-mounted). Use this after a project exists, when a token expires, or when the Postman SPA needs to be created/updated.
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# Device/URL login — open the printed URL in your browser
|
|
109
|
-
npx @decohere/create auth0 login
|
|
110
|
-
|
|
111
|
-
# Update the Auth0 API + Postman SPA for this workspace (run from the project, or pass -d)
|
|
112
|
-
npx @decohere/create auth0 configure
|
|
113
|
-
npx @decohere/create auth0 configure -d my-app
|
|
114
|
-
|
|
115
|
-
# Same commands once `@decohere/cli` is installed:
|
|
116
|
-
decohere auth0 login
|
|
117
|
-
decohere auth0 configure
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
`configure` does **not** rewrite application source. It scans `projects/*/src` for `@Authorize("action", "Subject")`, adds those permissions to the Auth0 API (keeping any already on the API), assigns them to `AUTH0_ADMIN_USER_SUB` when set, and updates Postman token `scope`.
|
|
121
|
-
|
|
122
|
-
#### Keep Auth0 in sync with controllers
|
|
123
|
-
|
|
124
|
-
`@Authorize("read", "Invoice")` becomes Auth0 API permission `read:Invoice`. After adding a controller:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
npx @decohere/create auth0 configure
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Then in Postman, Authorization → Get New Access Token so the token includes the new permissions.
|
|
131
|
-
|
|
132
|
-
#### Deploy (Railway / Fly / Nixpacks)
|
|
133
|
-
|
|
134
|
-
The production image does not install or build anything: it copies `.package/`, the folder `forge package` writes inside the API project (the API's compiled code, the workspace libraries it imports, and a plain `node_modules` of the third-party packages it uses, with no symlinks). Run `pnpm run package` (or `package:<name>`) first, then `docker build projects/<name>`.
|
|
135
|
-
|
|
136
|
-
1. **CI builds the image (preferred):** run `pnpm run package`, then `pnpm exec forge docker --configuration release --push`. Private `@decohere/*` packages need npm auth only in that package step, never in the image build.
|
|
137
|
-
2. **Hosts that build from a git clone** (Railway, Fly) do not have `.package/`, because it is build output. Build the image in CI and deploy it, or run the package step before `docker build`.
|
|
138
|
-
3. **Nixpacks (no Dockerfile):** conventional `build` / `start` scripts — install → build → start.
|
|
139
|
-
|
|
140
|
-
Commit `pnpm-lock.yaml` after the first install.
|
|
141
|
-
|
|
142
|
-
**Registry push (optional):** CI does not run `forge docker --push` by default. For Cloud Run / K8s, add `pnpm run package` and that step to `publish.yml` after configuring GHCR.
|
|
143
|
-
|
|
144
|
-
**Conventions:** `"private": true` → skip npm publish; presence of a Dockerfile → dockerizable; non-private packages under `projects/` → `forge publish`.
|
|
145
|
-
|
|
146
|
-
#### Database (`--database`)
|
|
147
|
-
|
|
148
|
-
| Value | Effect |
|
|
149
|
-
|---|---|
|
|
150
|
-
| `none` | No database |
|
|
151
|
-
| `postgres/typeorm` | One Compose Postgres **instance**; each API owns a named database + `{PREFIX}_DB_*` env |
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
npx @decohere/create webapi -d my-app --database postgres/typeorm
|
|
155
|
-
npx @decohere/create webapi -d my-app --name api --name billing --database postgres/typeorm
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
`config.yaml` lists one datasource per API (`name: billing` → `withTypeOrm({ name: "billing" })`). Locally they share host `postgres` port `5432`. Point `BILLING_DB_HOST` / `BILLING_DB_PORT` at another server to split later. `webapi add billing --database postgres/typeorm` appends a datasource; TypeORM bootstrap `CREATE DATABASE`s it on first run.
|
|
159
|
-
|
|
160
|
-
#### Health probes
|
|
161
|
-
|
|
162
|
-
Scaffolded APIs call `.withHealth()` so these routes are available **without auth**:
|
|
163
|
-
|
|
164
|
-
| Route | Purpose | Status |
|
|
165
|
-
|---|---|---|
|
|
166
|
-
| `GET /health` | Liveness — process is up | Always `200` `{ "status": "ok" }` |
|
|
167
|
-
| `GET /ready` | Readiness — dependencies OK | `200` when checks pass; `503` when a check fails |
|
|
168
|
-
|
|
169
|
-
With `--database postgres/typeorm`, readiness runs `SELECT 1` against each TypeORM datasource. Use `/ready` for load balancers and orchestrators.
|
|
170
|
-
|
|
171
|
-
#### Auth (`--auth`)
|
|
172
|
-
|
|
173
|
-
| Value | Effect |
|
|
174
|
-
|---|---|
|
|
175
|
-
| `none` | No auth |
|
|
176
|
-
| `auth0` | Auth0 JWT protection; with Postgres also scaffolds a local User profile |
|
|
177
|
-
|
|
178
|
-
```bash
|
|
179
|
-
npx @decohere/create webapi -d my-app --auth auth0
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
With Auth0 + Postgres, customize authorization in `projects/<api>/src/auth/ability.factory.ts`:
|
|
183
|
-
override `defineAbilitiesFor` for product CASL rules, and `mapPrincipal` for IdP claim mapping
|
|
184
|
-
(including the `AUTH0_ADMIN_USER_SUB` admin bootstrap). `@decohere/http`'s default already maps
|
|
185
|
-
`admin` → `manage`/`all` and `action:Subject` scopes.
|
|
186
|
-
|
|
187
|
-
#### Postman (`--postman`)
|
|
188
|
-
|
|
189
|
-
| Value | Effect |
|
|
190
|
-
|---|---|
|
|
191
|
-
| `none` | Skip Postman |
|
|
192
|
-
| `local` | Local View collection + environment under `postman/` |
|
|
193
|
-
| `api` | Create collection/environment in a Postman cloud workspace |
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
npx @decohere/create webapi -d my-app --postman local
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
## Options
|
|
200
|
-
|
|
201
|
-
| Option | Scope | Description |
|
|
202
|
-
|---|---|---|
|
|
203
|
-
| `[directory]` / `-d <directory>` | `webapi` / global | Target directory (positional wins; default `.`) |
|
|
204
|
-
| `--name <slug>` | `webapi` | API directory under `projects/` (repeatable; default `api`) |
|
|
205
|
-
| `add api <name>` | `decohere add api` / `npx @decohere/create webapi add` | Add an API to an existing Decohere workspace |
|
|
206
|
-
| `auth0 login` | `decohere auth0` / `npx @decohere/create auth0` | Device/URL login; persist tokens in `~/.config/auth0` |
|
|
207
|
-
| `auth0 configure` | `decohere auth0` / `npx @decohere/create auth0` | Update Auth0 API + Postman SPA for an existing workspace |
|
|
208
|
-
| `--database <provider>` | `webapi` / `add` | `none` \| `postgres/typeorm` |
|
|
209
|
-
| `--auth <provider>` | `webapi` / `add` | `none` \| `auth0` |
|
|
210
|
-
| `--postman <provider>` | `webapi` / `add` | `none` \| `local` \| `api` |
|
|
211
|
-
| `-y, --yes` | `webapi` / `add` | Install dependencies without prompting |
|
|
212
|
-
| `--install <mode>` | `webapi` / `add` | `ask` (default) \| `yes` \| `no` |
|
|
213
|
-
|
|
214
|
-
## Next steps
|
|
215
|
-
|
|
216
|
-
After scaffolding:
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
cd my-app
|
|
220
|
-
code . # open in VS Code / Dev Container
|
|
221
|
-
pnpm build # forge release build
|
|
222
|
-
pnpm start # run compiled API (production)
|
|
223
|
-
pnpm dev # Flux HMR (development)
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Troubleshooting
|
|
227
|
-
|
|
228
|
-
### GHCR pull fails with `403 Forbidden`
|
|
229
|
-
|
|
230
|
-
If scaffolding fails with an error like:
|
|
231
|
-
|
|
232
|
-
```text
|
|
233
|
-
failed to resolve reference "ghcr.io/typesmiths/decohere/create:<version>": ... 403 Forbidden
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
your GitHub token likely does not include the `read:packages` scope.
|
|
237
|
-
|
|
238
|
-
1. Create or use a token with at least `read:packages`.
|
|
239
|
-
2. If the package is private/internal, also include `repo`.
|
|
240
|
-
3. Re-login to GHCR and retry.
|
|
241
|
-
|
|
242
|
-
```bash
|
|
243
|
-
export GH_TOKEN=YOUR_PAT_WITH_READ_PACKAGES
|
|
244
|
-
echo "$GH_TOKEN" | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
|
|
245
|
-
docker pull ghcr.io/typesmiths/decohere/create:<version>
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
You can verify scopes with:
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
gh auth status -t
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
If you still get `403` after adding `read:packages`, ask an org admin to grant your user/team access to the `typesmiths/decohere/create` package.
|
package/commonjs/src/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get containerArgvFromHost () {
|
|
13
|
-
return _resolvelaunch.containerArgvFromHost;
|
|
14
|
-
},
|
|
15
|
-
get resolveLaunch () {
|
|
16
|
-
return _resolvelaunch.resolveLaunch;
|
|
17
|
-
},
|
|
18
|
-
get runInBuilder () {
|
|
19
|
-
return _runner.runInBuilder;
|
|
20
|
-
},
|
|
21
|
-
get toProductArgv () {
|
|
22
|
-
return _resolvelaunch.toProductArgv;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
const _resolvelaunch = require("./resolve-launch.js");
|
|
26
|
-
const _runner = require("./runner.js");
|