create-platformatic 1.9.0 → 1.11.0
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/package.json +5 -4
- package/src/composer/create-composer-cli.mjs +5 -0
- package/src/create-package-json.mjs +2 -1
- package/src/create-plugins.mjs +5 -1
- package/src/db/create-db-cli.mjs +4 -0
- package/src/get-tsconfig.mjs +1 -0
- package/src/index.mjs +3 -6
- package/src/runtime/create-runtime-cli.mjs +20 -12
- package/src/service/create-service-cli.mjs +4 -0
- package/src/utils.mjs +41 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-platformatic",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Create platformatic-db interactive tool",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"license": "Apache-2.0",
|
|
16
16
|
"author": "Marco Piraccini <marco.piraccini@gmail.com>",
|
|
17
17
|
"dependencies": {
|
|
18
|
+
"@types/node": "^20.8.10",
|
|
18
19
|
"boring-name-generator": "^1.0.3",
|
|
19
20
|
"chalk": "^5.3.0",
|
|
20
21
|
"columnify": "^1.6.0",
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
"strip-ansi": "^7.1.0",
|
|
36
37
|
"undici": "^5.25.4",
|
|
37
38
|
"which": "^3.0.1",
|
|
38
|
-
"@platformatic/config": "1.
|
|
39
|
+
"@platformatic/config": "1.11.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
42
|
"ajv": "^8.12.0",
|
|
@@ -48,8 +49,8 @@
|
|
|
48
49
|
"tap": "^16.3.9",
|
|
49
50
|
"typescript": "~5.2.2",
|
|
50
51
|
"yaml": "^2.3.2",
|
|
51
|
-
"@platformatic/db": "1.
|
|
52
|
-
"@platformatic/service": "1.
|
|
52
|
+
"@platformatic/db": "1.11.0",
|
|
53
|
+
"@platformatic/service": "1.11.0"
|
|
53
54
|
},
|
|
54
55
|
"scripts": {
|
|
55
56
|
"test:cli": "tap --no-coverage test/cli/*test.mjs -t120",
|
|
@@ -135,6 +135,11 @@ const createPlatformaticComposer = async (_args, opts) => {
|
|
|
135
135
|
await execa(pkgManager, ['install'], { cwd: projectDir })
|
|
136
136
|
spinner.succeed()
|
|
137
137
|
}
|
|
138
|
+
|
|
139
|
+
// returns metadata that can be used to make some further actions
|
|
140
|
+
return {
|
|
141
|
+
typescript: useTypescript
|
|
142
|
+
}
|
|
138
143
|
}
|
|
139
144
|
|
|
140
145
|
export default createPlatformaticComposer
|
|
@@ -47,11 +47,12 @@ const packageJsonTemplate = async (addTSBuild, fastifyVersion, platVersion) => {
|
|
|
47
47
|
* @param {object} scripts Package.json scripts list
|
|
48
48
|
* @param {object} dependencies Package.json dependencies list
|
|
49
49
|
*/
|
|
50
|
-
export const createPackageJson = async (platVersion, fastifyVersion, logger, dir, addTSBuild = false, scripts = {}, dependencies = {}) => {
|
|
50
|
+
export const createPackageJson = async (platVersion, fastifyVersion, logger, dir, addTSBuild = false, scripts = {}, dependencies = {}, devDependencies = {}) => {
|
|
51
51
|
const packageJsonFileName = join(dir, 'package.json')
|
|
52
52
|
const pkg = await packageJsonTemplate(addTSBuild, fastifyVersion, platVersion)
|
|
53
53
|
Object.assign(pkg.scripts, scripts)
|
|
54
54
|
Object.assign(pkg.dependencies, dependencies)
|
|
55
|
+
Object.assign(pkg.devDependencies, devDependencies)
|
|
55
56
|
await writeFile(packageJsonFileName, JSON.stringify(pkg, null, 2))
|
|
56
57
|
logger.debug(`${packageJsonFileName} successfully created.`)
|
|
57
58
|
}
|
package/src/create-plugins.mjs
CHANGED
|
@@ -116,9 +116,13 @@ function testHelperTS (mod, customizations = { pre: '', post: '', config: '', re
|
|
|
116
116
|
import { join } from 'node:path'
|
|
117
117
|
import { readFile } from 'node:fs/promises'
|
|
118
118
|
import { buildServer } from '@platformatic/${mod}'
|
|
119
|
+
import { test } from 'node:test'
|
|
119
120
|
${customizations.requires}
|
|
120
121
|
|
|
121
|
-
|
|
122
|
+
type testfn = Parameters<typeof test>[0]
|
|
123
|
+
type TestContext = Parameters<Exclude<testfn, undefined>>[0]
|
|
124
|
+
|
|
125
|
+
export async function getServer (t: TestContext) {
|
|
122
126
|
${customizations.pre}
|
|
123
127
|
// We go up two folder because this files executes in the dist folder
|
|
124
128
|
const config = JSON.parse(await readFile(join(__dirname, '..', '..', 'platformatic.${mod}.json'), 'utf8'))
|
package/src/db/create-db-cli.mjs
CHANGED
package/src/get-tsconfig.mjs
CHANGED
package/src/index.mjs
CHANGED
|
@@ -31,14 +31,11 @@ export async function chooseKind (argv, opts = {}) {
|
|
|
31
31
|
|
|
32
32
|
switch (options.type) {
|
|
33
33
|
case 'db':
|
|
34
|
-
await createPlatformaticDB(argv, opts)
|
|
35
|
-
break
|
|
34
|
+
return await createPlatformaticDB(argv, opts)
|
|
36
35
|
case 'service':
|
|
37
|
-
await createPlatformaticService(argv, opts)
|
|
38
|
-
break
|
|
36
|
+
return await createPlatformaticService(argv, opts)
|
|
39
37
|
case 'composer':
|
|
40
|
-
await createPlatformaticComposer(argv, opts)
|
|
41
|
-
break
|
|
38
|
+
return await createPlatformaticComposer(argv, opts)
|
|
42
39
|
case 'runtime':
|
|
43
40
|
await createPlatformaticRuntime(argv, opts)
|
|
44
41
|
break
|
|
@@ -72,20 +72,15 @@ export async function createPlatformaticRuntime (_args) {
|
|
|
72
72
|
|
|
73
73
|
const fastifyVersion = await getDependencyVersion('fastify')
|
|
74
74
|
|
|
75
|
-
// Create the package.json, notes that we don't have the option for TS (yet) so we don't generate
|
|
76
|
-
// the package.json with the TS build
|
|
77
|
-
await createPackageJson(version, fastifyVersion, logger, projectDir, false)
|
|
78
|
-
await createGitignore(logger, projectDir)
|
|
79
|
-
await createReadme(logger, projectDir, 'runtime')
|
|
80
|
-
|
|
81
75
|
logger.info('Let\'s create a first service!')
|
|
82
76
|
|
|
83
77
|
const names = []
|
|
78
|
+
let addTypescriptDevDep = false
|
|
84
79
|
while (true) {
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
const serviceData = await createRuntimeService({ servicesDir, names, logger })
|
|
81
|
+
if (!addTypescriptDevDep && serviceData.typescript) {
|
|
82
|
+
addTypescriptDevDep = true
|
|
87
83
|
}
|
|
88
|
-
|
|
89
84
|
const { shouldBreak } = await inquirer.prompt([
|
|
90
85
|
{
|
|
91
86
|
type: 'list',
|
|
@@ -100,6 +95,18 @@ export async function createPlatformaticRuntime (_args) {
|
|
|
100
95
|
break
|
|
101
96
|
}
|
|
102
97
|
}
|
|
98
|
+
const devDependencies = {}
|
|
99
|
+
if (addTypescriptDevDep) {
|
|
100
|
+
const typescriptVersion = await getDependencyVersion('typescript')
|
|
101
|
+
devDependencies.typescript = `^${typescriptVersion}`
|
|
102
|
+
devDependencies['@types/node'] = await getDependencyVersion('@types/node')
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Create the package.json, notes that we don't have the option for TS (yet) so we don't generate
|
|
106
|
+
// the package.json with the TS build
|
|
107
|
+
await createPackageJson(version, fastifyVersion, logger, projectDir, false, {}, {}, devDependencies)
|
|
108
|
+
await createGitignore(logger, projectDir)
|
|
109
|
+
await createReadme(logger, projectDir, 'runtime')
|
|
103
110
|
|
|
104
111
|
let entrypoint = ''
|
|
105
112
|
|
|
@@ -126,7 +133,8 @@ export async function createPlatformaticRuntime (_args) {
|
|
|
126
133
|
staticWorkspaceGitHubAction,
|
|
127
134
|
dynamicWorkspaceGitHubAction,
|
|
128
135
|
serviceNames: names,
|
|
129
|
-
initGitRepository
|
|
136
|
+
initGitRepository,
|
|
137
|
+
typescript: addTypescriptDevDep
|
|
130
138
|
}
|
|
131
139
|
|
|
132
140
|
await createRuntime(params, logger, projectDir, version)
|
|
@@ -168,7 +176,7 @@ export async function createRuntimeService ({ servicesDir, names, logger }) {
|
|
|
168
176
|
|
|
169
177
|
const serviceDir = join(servicesDir, name)
|
|
170
178
|
|
|
171
|
-
await chooseKind([], {
|
|
179
|
+
const serviceData = await chooseKind([], {
|
|
172
180
|
skip: 'runtime',
|
|
173
181
|
serviceName: name,
|
|
174
182
|
dir: serviceDir,
|
|
@@ -185,5 +193,5 @@ export async function createRuntimeService ({ servicesDir, names, logger }) {
|
|
|
185
193
|
}
|
|
186
194
|
})
|
|
187
195
|
|
|
188
|
-
return
|
|
196
|
+
return serviceData
|
|
189
197
|
}
|
|
@@ -122,5 +122,9 @@ const createPlatformaticService = async (_args, opts = {}) => {
|
|
|
122
122
|
logger.trace({ err })
|
|
123
123
|
spinner.fail('Failed to generate Types. Try again by running "platformatic service types"')
|
|
124
124
|
}
|
|
125
|
+
// returns metadata that can be used to make some further actions
|
|
126
|
+
return {
|
|
127
|
+
typescript: useTypescript
|
|
128
|
+
}
|
|
125
129
|
}
|
|
126
130
|
export default createPlatformaticService
|
package/src/utils.mjs
CHANGED
|
@@ -4,10 +4,13 @@ import { resolve, join, dirname } from 'path'
|
|
|
4
4
|
import { createRequire } from 'module'
|
|
5
5
|
import semver from 'semver'
|
|
6
6
|
import * as desm from 'desm'
|
|
7
|
+
import * as url from 'url'
|
|
8
|
+
|
|
7
9
|
import ConfigManager from '@platformatic/config'
|
|
8
10
|
|
|
9
11
|
export const sleep = ms => new Promise((resolve) => setTimeout(resolve, ms))
|
|
10
12
|
export const randomBetween = (min, max) => Math.floor(Math.random() * (max - min + 1) + min)
|
|
13
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
|
11
14
|
|
|
12
15
|
export async function isFileAccessible (filename, directory) {
|
|
13
16
|
try {
|
|
@@ -73,11 +76,44 @@ export const findRuntimeConfigFile = async (directory) => (ConfigManager.findCon
|
|
|
73
76
|
* @returns string
|
|
74
77
|
*/
|
|
75
78
|
export const getDependencyVersion = async (dependencyName) => {
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
|
|
79
|
+
const rootPackageJson = join(__dirname, '..', 'package.json')
|
|
80
|
+
const packageJsonContents = JSON.parse(await readFile(rootPackageJson, 'utf8'))
|
|
81
|
+
const dependencies = packageJsonContents.dependencies
|
|
82
|
+
const devDependencies = packageJsonContents.devDependencies
|
|
83
|
+
const regexp = /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/
|
|
84
|
+
if (dependencies[dependencyName]) {
|
|
85
|
+
const match = dependencies[dependencyName].match(regexp)
|
|
86
|
+
if (!match) {
|
|
87
|
+
return await resolveWorkspaceDependency(dependencyName)
|
|
88
|
+
}
|
|
89
|
+
return match[0]
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (devDependencies[dependencyName]) {
|
|
93
|
+
const match = devDependencies[dependencyName].match(regexp)
|
|
94
|
+
if (!match) {
|
|
95
|
+
return await resolveWorkspaceDependency(dependencyName)
|
|
96
|
+
}
|
|
97
|
+
return match[0]
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function resolveWorkspaceDependency (dependencyName) {
|
|
101
|
+
const require = createRequire(import.meta.url)
|
|
102
|
+
let dependencyPath = dirname(require.resolve(dependencyName))
|
|
103
|
+
// some deps are resolved not at their root level
|
|
104
|
+
// for instance 'typescript' will be risolved in its own ./lib directory
|
|
105
|
+
// next loop is to find the nearest parent directory that contains a package.json file
|
|
106
|
+
while (!await isFileAccessible(join(dependencyPath, 'package.json'))) {
|
|
107
|
+
dependencyPath = join(dependencyPath, '..')
|
|
108
|
+
if (dependencyPath === '/') {
|
|
109
|
+
throw new Error(`Cannot find package.json for ${dependencyName}`)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const pathToPackageJson = join(dependencyPath, 'package.json')
|
|
113
|
+
const packageJsonFile = await readFile(pathToPackageJson, 'utf-8')
|
|
114
|
+
const packageJson = JSON.parse(packageJsonFile)
|
|
115
|
+
return packageJson.version
|
|
116
|
+
}
|
|
81
117
|
}
|
|
82
118
|
|
|
83
119
|
export const minimumSupportedNodeVersions = ['18.8.0', '20.6.0']
|