qcobjects-cli 2.5.148-beta → 2.5.150-beta
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/.github/workflows/codeql-analysis.yml +1 -1
- package/.github/workflows/{npmpublish-lts.yml → npmpublish.yml} +11 -6
- package/AGENTS.md +23 -24
- package/VERSION +1 -1
- package/build-esbuild-esm.js +22 -0
- package/docs/launch-and-server.md +253 -0
- package/docs/release-pipeline.md +122 -0
- package/package.json +2 -2
- package/public/cjs/cli-main.js +1 -1
- package/public/esm/backend/backend-microservice-static.mjs +1 -1
- package/public/esm/backend/backend-microservice-static.mjs.map +2 -2
- package/public/esm/cli-commands-version.mjs +9 -24
- package/public/esm/cli-commands-version.mjs.map +2 -2
- package/public/esm/cli-main.mjs +22 -24
- package/public/esm/cli-main.mjs.map +2 -2
- package/public/types/index.d.ts +1 -1
- package/transpile.js +32 -0
- package/.github/workflows/npmpublish-beta.yml +0 -43
- package/.github/workflows/npmpublish-main.yml +0 -44
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
|
3
|
-
|
|
4
|
-
name: Node.js Publish LTS version
|
|
1
|
+
name: Node.js Publish
|
|
5
2
|
|
|
6
3
|
on:
|
|
7
4
|
push:
|
|
8
5
|
tags:
|
|
9
|
-
- 'v
|
|
6
|
+
- 'v*.*.*'
|
|
10
7
|
|
|
11
8
|
jobs:
|
|
12
9
|
build:
|
|
@@ -39,4 +36,12 @@ jobs:
|
|
|
39
36
|
- name: Upgrade npm for OIDC support (requires >=11.5.1)
|
|
40
37
|
run: npm install -g npm@latest
|
|
41
38
|
- run: npm i --legacy-peer-deps
|
|
42
|
-
-
|
|
39
|
+
- name: Publish to npm
|
|
40
|
+
run: |
|
|
41
|
+
if [[ "${{ github.ref }}" == *-beta ]]; then
|
|
42
|
+
npm publish --tag beta
|
|
43
|
+
elif [[ "${{ github.ref }}" == *-lts ]]; then
|
|
44
|
+
npm publish --tag lts
|
|
45
|
+
else
|
|
46
|
+
npm publish
|
|
47
|
+
fi
|
package/AGENTS.md
CHANGED
|
@@ -3,57 +3,56 @@
|
|
|
3
3
|
TypeScript CLI tool and HTTP/HTTP2 server for the [QCObjects](https://qcobjects.dev) framework.
|
|
4
4
|
Node >=22, npm >=10.
|
|
5
5
|
|
|
6
|
-
## Git workflow
|
|
7
|
-
|
|
8
|
-
See `.opencode/instructions/git-workflow.md` — topic branches from `development`, no rebase, SemVer tags.
|
|
9
|
-
|
|
10
6
|
## Commands
|
|
11
7
|
|
|
12
8
|
| Action | Command |
|
|
13
9
|
|--------|---------|
|
|
14
|
-
| Install | `npm
|
|
15
|
-
| Lint | `npm run lint`
|
|
16
|
-
| Test | `npm test` (lint
|
|
10
|
+
| Install | `npm i --legacy-peer-deps` (peer deps don't auto-install on npm >=10) |
|
|
11
|
+
| Lint | `npm run lint` |
|
|
12
|
+
| Test | `npm test` (lint + jasmine) |
|
|
17
13
|
| Run single test | `npx ts-node --project ./tsconfig.jasmine.json ./node_modules/jasmine/bin/jasmine` |
|
|
18
|
-
|
|
|
19
|
-
| Build
|
|
14
|
+
| Full build (types → CJS → ESM) | `npm run build` |
|
|
15
|
+
| Build CJS only | `npm run build:ts` — runs test first |
|
|
20
16
|
| Build types only | `npm run build:ts-types` |
|
|
21
|
-
| Build ESM
|
|
22
|
-
| Dev server | `npm start` (
|
|
17
|
+
| Build ESM + browser IIFE | `npm run build:esbuild` |
|
|
18
|
+
| Dev server | `npm start` (aliases to `qcobjects-shell`) |
|
|
23
19
|
|
|
24
20
|
## Architecture
|
|
25
21
|
|
|
26
22
|
- **CLI framework:** Commander (`src/cli-main.ts` — `SwitchCommander` class)
|
|
27
23
|
- **Commands** in `src/cli-commands-*.ts`, registered via `src/cli-commands.ts`
|
|
28
24
|
- **Servers:** HTTP (`src/main-http-server.ts`), HTTP/2 (`src/main-http2-server.ts`), GAE variant
|
|
29
|
-
- **Build pipeline:** Custom `transpile.js` (TS compiler API)
|
|
25
|
+
- **Build pipeline:** Custom `transpile.js` (TS compiler API) → CJS, then `build-esbuild-esm.js` → ESM + browser IIFE
|
|
30
26
|
- **Output:** `public/cjs/`, `public/esm/`, `public/browser/`, `public/types/`
|
|
27
|
+
- Also ships `deno.json` + `mod.ts` for Deno compatibility
|
|
31
28
|
|
|
32
|
-
## Testing
|
|
29
|
+
## Testing
|
|
33
30
|
|
|
34
|
-
- **Framework:** Jasmine v3.7
|
|
35
|
-
-
|
|
31
|
+
- **Framework:** Jasmine v3.7, single spec at `spec/testsSpec.ts`
|
|
32
|
+
- Verifies `qcobjects` version matches between `peerDependencies` and `devDependencies`
|
|
36
33
|
- Mock path in `tsconfig.jasmine.json`: `qcobjects-sdk` → `spec/mocks/qcobjects-sdk.mock.ts`
|
|
37
34
|
- Config: `stopSpecOnExpectationFailure: true`, `failSpecWithNoExpectations: true`, `random: false`
|
|
38
35
|
|
|
39
|
-
## QCObjects patterns
|
|
36
|
+
## QCObjects patterns in source
|
|
40
37
|
|
|
41
38
|
- `InheritClass`, `Package()`, `Export()`, `CONFIG`, `logger`, `Service`, `Component`
|
|
42
39
|
- Plugin autodiscovery: scans `dependencies`/`devDependencies` for packages with `qcobjects-lib`, `qcobjects-handler`, `qcobjects-command` keywords
|
|
43
40
|
|
|
44
41
|
## Config & env
|
|
45
42
|
|
|
46
|
-
- `config.json` at root —
|
|
43
|
+
- `config.json` at root — **gitignored** (local dev only), default: `{"devmode":"debug"}`
|
|
47
44
|
- `src/defaultsettings.ts` — `$ENV(VAR)` template syntax resolved at runtime
|
|
48
45
|
- `process.env.PORT` overrides HTTP listen port
|
|
49
|
-
-
|
|
46
|
+
- Version tracked in `VERSION` file, CLI has built-in `v-patch`/`v-minor`/`v-major`/`v-sync`/`v-changelog` commands
|
|
50
47
|
|
|
51
|
-
##
|
|
48
|
+
## Gotchas
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
- **Duplicate files:** Source has `* 2.ts`, `* 2.json`, `* 2.yml` files — always edit the version without ` 2` suffix
|
|
51
|
+
- **ESLint** uses `recommendedTypeChecked` but many core rules are explicitly disabled (`no-explicit-any: off`, `no-unused-vars: off`, `no-var: off`, etc.) — lint is permissive
|
|
52
|
+
- **CI workflows** (`ci.yml`) are placeholders with TODOs; real publish happens via `.github/workflows/npmpublish.yml` (single OIDC workflow handling all 3 channels)
|
|
53
|
+
- **Postversion** configured as `"git push"` (only pushes the branch) to avoid duplicate CI — the tag is pushed separately by `syncGit`
|
|
55
54
|
|
|
56
|
-
##
|
|
55
|
+
## Git workflow
|
|
57
56
|
|
|
58
|
-
-
|
|
59
|
-
|
|
57
|
+
See `.opencode/instructions/git-workflow.md` — topic branches from `development`, no rebase, SemVer tags.
|
|
58
|
+
See `docs/release-pipeline.md` — branch model, release channels, archive info.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.5.
|
|
1
|
+
2.5.151-beta
|
package/build-esbuild-esm.js
CHANGED
|
@@ -112,6 +112,28 @@ const buildConfigs = {
|
|
|
112
112
|
content = content
|
|
113
113
|
.replace(/const\s+{([^}]+)}\s*=\s*require\(['"]([^'"]+)['"]\)/g, 'import { $1 } from "$2"')
|
|
114
114
|
.replace(/const\s+([^=]+)\s*=\s*require\(['"]([^'"]+)['"]\)/g, 'import $1 from "$2"');
|
|
115
|
+
|
|
116
|
+
// Convert await import(var) → JSON.parse(fs.readFileSync(var, "utf8"))
|
|
117
|
+
// for variables referencing paths ending in .json/.jsonp/.md/.mdc/.text/.txt
|
|
118
|
+
const extensionsToConvert = ['json', 'jsonp', 'md', 'mdc', 'text', 'txt'];
|
|
119
|
+
const extPattern = extensionsToConvert.join('|');
|
|
120
|
+
const varDeclRegex = new RegExp(
|
|
121
|
+
`(?:const|let|var)\\s+(\\w+)\\s*=[^;]*?\\.(?:${extPattern})["'\`][^;]*;`,
|
|
122
|
+
'g'
|
|
123
|
+
);
|
|
124
|
+
const jsonVars = new Set();
|
|
125
|
+
let match;
|
|
126
|
+
while ((match = varDeclRegex.exec(content)) !== null) {
|
|
127
|
+
jsonVars.add(match[1]);
|
|
128
|
+
}
|
|
129
|
+
if (jsonVars.size > 0) {
|
|
130
|
+
const importRegex = new RegExp(
|
|
131
|
+
`await import\\((${[...jsonVars].join('|')})\\)`,
|
|
132
|
+
'g'
|
|
133
|
+
);
|
|
134
|
+
content = content.replace(importRegex, 'JSON.parse(fs.readFileSync($1, "utf8"))');
|
|
135
|
+
}
|
|
136
|
+
|
|
115
137
|
writeFileSync(file, content, 'utf8');
|
|
116
138
|
});
|
|
117
139
|
});
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Launch & Server Architecture
|
|
2
|
+
|
|
3
|
+
## How to launch an app
|
|
4
|
+
|
|
5
|
+
After creating a project with `qcobjects create myapp --pwa`, enter the project directory and run:
|
|
6
|
+
|
|
7
|
+
```shell
|
|
8
|
+
npm start
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This executes `npm run createcert && npm run serve` (defined in the generated `package.json`). The `serve` script runs `qcobjects-server`.
|
|
12
|
+
|
|
13
|
+
Alternatively, from anywhere:
|
|
14
|
+
|
|
15
|
+
```shell
|
|
16
|
+
qcobjects launch <appname>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Note:** The `<appname>` argument is accepted for interface consistency but is not used by the server — the server discovers the app from the current working directory.
|
|
20
|
+
|
|
21
|
+
## The launch chain
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
qcobjects launch <appname>
|
|
25
|
+
│
|
|
26
|
+
▼
|
|
27
|
+
src/cli-main.ts:455-472
|
|
28
|
+
└─ exec("qcobjects-server")
|
|
29
|
+
│
|
|
30
|
+
▼
|
|
31
|
+
package.json bin → public/cjs/qcobjects-http2-server.js
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
src/qcobjects-http2-server.ts
|
|
35
|
+
├─ import "./defaultsettings" ← loads CONFIG defaults + project config.json
|
|
36
|
+
├─ choose server class:
|
|
37
|
+
│ CONFIG.get("useLegacyHTTP", false)
|
|
38
|
+
│ → false (default): HTTP2Server (src/main-http2-server.ts)
|
|
39
|
+
│ → true: HTTPServer (src/main-http-server.ts)
|
|
40
|
+
└─ New(serverClass).start()
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## CLI command handler
|
|
44
|
+
|
|
45
|
+
**File:** `src/cli-main.ts:455-472`
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
switchCommander.program.command("launch <appname>")
|
|
49
|
+
.description("Launches the application")
|
|
50
|
+
.action(function () {
|
|
51
|
+
logger.info("Launching...");
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
logger.info("Go to the browser and open https://localhost ");
|
|
54
|
+
logger.info("Press Ctrl-C to stop serving ");
|
|
55
|
+
exec("qcobjects-server", () => {})
|
|
56
|
+
.stdout?.on("data", data => console.log(data));
|
|
57
|
+
}, 5000);
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The handler:
|
|
62
|
+
1. Logs `"Launching..."` immediately
|
|
63
|
+
2. Waits 5 seconds
|
|
64
|
+
3. Spawns `qcobjects-server` (the HTTP/2 server binary) via `child_process.exec()`
|
|
65
|
+
4. Pipes the server's stdout to the console
|
|
66
|
+
|
|
67
|
+
The 5-second delay exists so the CLI process can exit gracefully before the server takes over.
|
|
68
|
+
|
|
69
|
+
## Server binary
|
|
70
|
+
|
|
71
|
+
The `qcobjects-server` binary is defined in `package.json`:
|
|
72
|
+
|
|
73
|
+
| Binary | Path | Source |
|
|
74
|
+
|--------|------|--------|
|
|
75
|
+
| `qcobjects-server` | `public/cjs/qcobjects-http2-server.js` | `src/qcobjects-http2-server.ts` |
|
|
76
|
+
| `qcobjects-http-server` | `public/cjs/qcobjects-http-server.js` | `src/qcobjects-http-server.ts` |
|
|
77
|
+
| `qcobjects-gae-server` | `public/cjs/qcobjects-gae-http-server.js` | `src/qcobjects-gae-http-server.ts` |
|
|
78
|
+
|
|
79
|
+
## Server selection
|
|
80
|
+
|
|
81
|
+
**File:** `src/qcobjects-http2-server.ts`
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import "./defaultsettings";
|
|
85
|
+
import { CONFIG, New } from "qcobjects";
|
|
86
|
+
import { HTTPServer } from "./main-http-server";
|
|
87
|
+
import { HTTP2Server } from "./main-http2-server";
|
|
88
|
+
|
|
89
|
+
const _ServerClass_ = CONFIG.get("useLegacyHTTP", false)
|
|
90
|
+
? HTTPServer
|
|
91
|
+
: HTTP2Server;
|
|
92
|
+
const app = New(_ServerClass_);
|
|
93
|
+
app.start();
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The default is **HTTP/2** (`useLegacyHTTP: false`). Set `useLegacyHTTP: true` in the project's `config.json` to use HTTP/1.1.
|
|
97
|
+
|
|
98
|
+
| Server | File | Listens on | Default port |
|
|
99
|
+
|--------|------|------------|--------------|
|
|
100
|
+
| HTTP/2 (default) | `src/main-http2-server.ts` | HTTP redirect (port 8080 → 8443) + HTTPS/2 (port 8443) | 8443 |
|
|
101
|
+
| Legacy HTTP | `src/main-http-server.ts` | HTTP (plain, single port) | `process.env.PORT` \|\| 8080 |
|
|
102
|
+
| GAE HTTP | `src/main-http-gae-server.ts` | HTTP (single port, GAE compatible) | `process.env.PORT` \|\| 8080 |
|
|
103
|
+
|
|
104
|
+
## App discovery
|
|
105
|
+
|
|
106
|
+
The server does not use the `<appname>` argument. Instead, the app is discovered through the **current working directory**:
|
|
107
|
+
|
|
108
|
+
1. **`src/defaultsettings.ts:133`** — `CONFIG.set("projectPath", \`${process.cwd()}/\`)`
|
|
109
|
+
2. **`src/defaultsettings.ts:173-178`** — reads `<projectPath>/config.json` and merges every key into CONFIG, overriding all defaults
|
|
110
|
+
3. **`src/defaultsettings.ts:90`** — `documentRoot` defaults to `<projectPath>/public/`
|
|
111
|
+
4. **`src/main-file.ts`** — `FileDispatcher` resolves all file requests relative to `documentRoot`
|
|
112
|
+
|
|
113
|
+
The implicit contract is that the user is `cd`'d into the project directory, and the project contains a `config.json` and a `public/` directory.
|
|
114
|
+
|
|
115
|
+
## CONFIG settings reference
|
|
116
|
+
|
|
117
|
+
All defaults are set in `src/defaultsettings.ts:83-136`.
|
|
118
|
+
|
|
119
|
+
### Server & network
|
|
120
|
+
|
|
121
|
+
| Setting | Default | Description |
|
|
122
|
+
|---------|---------|-------------|
|
|
123
|
+
| `serverPortHTTP` | `"8080"` | Port for HTTP (and HTTP→HTTPS redirect in HTTP/2 mode) |
|
|
124
|
+
| `serverPortHTTPS` | `"8443"` | Port for HTTPS/HTTP/2 |
|
|
125
|
+
| `useLegacyHTTP` | `false` | Use HTTP/1.1 instead of HTTP/2 |
|
|
126
|
+
| `allowHTTP1` | `true` | Allow HTTP/1.1 fallback on the HTTP/2 server |
|
|
127
|
+
| `documentRoot` | `$config(projectPath)public/` | Root directory for static file serving |
|
|
128
|
+
| `documentRootFileIndex` | `"index.html"` | Default file served for directory paths |
|
|
129
|
+
| `cacheControl` | `"max-age=31536000"` | Cache-Control header for static files |
|
|
130
|
+
| `backendTimeout` | `20000` | Request timeout in ms (set at runtime) |
|
|
131
|
+
|
|
132
|
+
### TLS / certificates
|
|
133
|
+
|
|
134
|
+
| Setting | Default | Description |
|
|
135
|
+
|---------|---------|-------------|
|
|
136
|
+
| `private-key-pem` | `$config(domain)-privkey.pem` | TLS private key file |
|
|
137
|
+
| `private-cert-pem` | `$config(domain)-cert.pem` | TLS certificate file |
|
|
138
|
+
| `certificate_provider` | `$ENV(CERTIFICATE_PROVIDER)` | `self_signed` or `letsencrypt` |
|
|
139
|
+
|
|
140
|
+
### Backend
|
|
141
|
+
|
|
142
|
+
| Setting | Default | Description |
|
|
143
|
+
|---------|---------|-------------|
|
|
144
|
+
| `backend.db_engine.name` | `$ENV(ENGINE_NAME)` | Database engine name |
|
|
145
|
+
| `backend.auth.enabled` | `true` | Enable authentication |
|
|
146
|
+
| `backend.routes` | `[]` | Route definitions (microservice dispatch) |
|
|
147
|
+
|
|
148
|
+
### Autodiscovery
|
|
149
|
+
|
|
150
|
+
| Setting | Default | Description |
|
|
151
|
+
|---------|---------|-------------|
|
|
152
|
+
| `autodiscover` | `true` | Master switch for plugin autodiscovery |
|
|
153
|
+
| `autodiscover_commands` | `true` | Auto-load `qcobjects-command` plugins |
|
|
154
|
+
| `autodiscover_handlers` | `true` | Auto-load `qcobjects-handler` plugins |
|
|
155
|
+
|
|
156
|
+
### Config resolution order
|
|
157
|
+
|
|
158
|
+
1. Hardcoded defaults (`defaultsettings.ts:83-136`)
|
|
159
|
+
2. `$ENV(VAR)` template literals resolved at runtime from environment variables
|
|
160
|
+
3. `$config(key)` template literals resolved from CONFIG values
|
|
161
|
+
4. Project `<projectPath>/config.json` values merged on top (overrides all)
|
|
162
|
+
|
|
163
|
+
## HTTP/2 server start
|
|
164
|
+
|
|
165
|
+
**File:** `src/main-http2-server.ts:433-448`
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
start() {
|
|
169
|
+
var server = this.server;
|
|
170
|
+
|
|
171
|
+
const httpServer = http.createServer((req, res) => {
|
|
172
|
+
res.writeHead(301, {
|
|
173
|
+
Location: `https://${req.headers.host}${req.url}`
|
|
174
|
+
});
|
|
175
|
+
res.end();
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
httpServer.listen(CONFIG.get("serverPortHTTP")); // 8080 → redirects to HTTPS
|
|
179
|
+
server.listen(CONFIG.get("serverPortHTTPS")); // 8443 → HTTP/2
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- Creates an HTTP redirector on `serverPortHTTP` (8080) that sends 301 redirects to HTTPS
|
|
184
|
+
- Creates the HTTP/2 secure server on `serverPortHTTPS` (8443) using `http2.createSecureServer()` with TLS key and cert from CONFIG
|
|
185
|
+
|
|
186
|
+
## Legacy HTTP server start
|
|
187
|
+
|
|
188
|
+
**File:** `src/main-http-server.ts:595-598`
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
start() {
|
|
192
|
+
var server = this.server;
|
|
193
|
+
server.listen(process.env.PORT || CONFIG.get("serverPortHTTP"));
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Single HTTP listener on `process.env.PORT || serverPortHTTP` (default 8080).
|
|
198
|
+
|
|
199
|
+
## Request handling flow
|
|
200
|
+
|
|
201
|
+
Both server variants follow the same pattern on each request:
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
Incoming request
|
|
205
|
+
│
|
|
206
|
+
▼
|
|
207
|
+
Check global.get("backendAvailable")?
|
|
208
|
+
│
|
|
209
|
+
├─ Yes (project config.json has "backend" key)
|
|
210
|
+
│ │
|
|
211
|
+
│ ├─ Load interceptors from CONFIG.get("backend").interceptors
|
|
212
|
+
│ ├─ Match request path against CONFIG.get("backend").routes
|
|
213
|
+
│ │
|
|
214
|
+
│ ├─ Route matched?
|
|
215
|
+
│ │ ├─ Yes → Instantiate route.microservice + ".Microservice"
|
|
216
|
+
│ │ │ via New(microServiceClassFactory, { ...CONFIG values })
|
|
217
|
+
│ │ └─ No → Fall through to HTTPServerResponse / HTTP2ServerResponse
|
|
218
|
+
│ │
|
|
219
|
+
│ └─ Response class serves file via FileDispatcher
|
|
220
|
+
│
|
|
221
|
+
└─ No (no backend config)
|
|
222
|
+
│
|
|
223
|
+
└─ HTTPServerResponse / HTTP2ServerResponse
|
|
224
|
+
└─ FileDispatcher resolves <documentRoot>/<path>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Key files
|
|
228
|
+
|
|
229
|
+
| File | Role |
|
|
230
|
+
|------|------|
|
|
231
|
+
| `src/qcobjects-http2-server.ts` | Server bootstrap — chooses HTTP vs HTTP/2 |
|
|
232
|
+
| `src/qcobjects-http-server.ts` | Legacy HTTP bootstrap |
|
|
233
|
+
| `src/qcobjects-gae-http-server.ts` | GAE-compatible bootstrap |
|
|
234
|
+
| `src/main-http2-server.ts` | HTTP2Server, HTTP2ServerResponse, HTTP2ServerRequest |
|
|
235
|
+
| `src/main-http-server.ts` | HTTPServer, BackendMicroservice, HTTPServerResponse |
|
|
236
|
+
| `src/main-http-gae-server.ts` | GAE-compatible server classes |
|
|
237
|
+
| `src/main-file.ts` | FileDispatcher — filesystem resolution |
|
|
238
|
+
| `src/defaultsettings.ts` | All CONFIG defaults + config.json loading + plugin autodiscovery |
|
|
239
|
+
| `src/common-pipelog.ts` | PipeLog logging utility |
|
|
240
|
+
|
|
241
|
+
## Template-generated app scripts
|
|
242
|
+
|
|
243
|
+
Running `qcobjects create myapp --pwa` generates a `package.json` with these relevant scripts:
|
|
244
|
+
|
|
245
|
+
| Script | Command | Purpose |
|
|
246
|
+
|--------|---------|---------|
|
|
247
|
+
| `start` | `npm run createcert && npm run serve` | Full launch (generate TLS cert then serve) |
|
|
248
|
+
| `serve` | `qcobjects-server` | Start HTTP/2 server |
|
|
249
|
+
| `http-server` | `qcobjects-http-server` | Start legacy HTTP server |
|
|
250
|
+
| `createcert` | `qcobjects-createcert` | Generate self-signed TLS certificate |
|
|
251
|
+
| `prestart` | `npm run publish:web` | Build before launching |
|
|
252
|
+
|
|
253
|
+
The recommended workflow: `npm start` → generates a self-signed cert (if needed) → builds the web assets → starts the HTTP/2 server.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Release Pipeline
|
|
2
|
+
|
|
3
|
+
## Why this change
|
|
4
|
+
|
|
5
|
+
Previously the repo used version-specific branches (v2.3, v2.4-beta, v2.4-ts,
|
|
6
|
+
v2.5-beta) to track different architecture waves (ECMA5, ES6+JS, full TS+JS).
|
|
7
|
+
As the number of active tracks grew, branch-based management added complexity:
|
|
8
|
+
CI workflows needed per-branch configuration, PR paths were unclear, and
|
|
9
|
+
promoting a beta to LTS required manual cross-branch coordination.
|
|
10
|
+
|
|
11
|
+
## What changed
|
|
12
|
+
|
|
13
|
+
- Removed all version-specific branches (v2.3, v2.4-beta, v2.4-ts, v2.5-beta)
|
|
14
|
+
- Single active development branch: `development`
|
|
15
|
+
- Release channel is encoded in the tag suffix, not in a branch name
|
|
16
|
+
- Old version tracks preserved as archive tags
|
|
17
|
+
|
|
18
|
+
## Branch model
|
|
19
|
+
|
|
20
|
+
main ← release digest (merged from development via PR)
|
|
21
|
+
development ← single active development branch
|
|
22
|
+
feature/* ← topic branches, PR into development
|
|
23
|
+
fix/*
|
|
24
|
+
bugfix/*
|
|
25
|
+
|
|
26
|
+
No more version-specific branches. Every release is a tag on `main`.
|
|
27
|
+
|
|
28
|
+
## Release channels (tags)
|
|
29
|
+
|
|
30
|
+
| Tag pattern | npm dist-tag | Triggered by |
|
|
31
|
+
|-------------|-------------|--------------|
|
|
32
|
+
| `vX.Y.Z` | `latest` | `npmpublish.yml` (suffix detection) |
|
|
33
|
+
| `vX.Y.Z-lts` | `lts` | `npmpublish.yml` (suffix detection) |
|
|
34
|
+
| `vX.Y.Z-beta` | `beta` | `npmpublish.yml` (suffix detection) |
|
|
35
|
+
| (future) `-dev` | `dev` | (add pattern to `npmpublish.yml`) |
|
|
36
|
+
| (future) `-alpha` | `alpha` | (add pattern to `npmpublish.yml`) |
|
|
37
|
+
|
|
38
|
+
## Promotion workflow
|
|
39
|
+
|
|
40
|
+
1. Daily work on `development` branch
|
|
41
|
+
2. `v-patch --git --npm` → tag `vX.Y.Z-beta` (beta publish)
|
|
42
|
+
3. Change VERSION suffix → `v-patch --git --npm` → tag `vX.Y.Z-lts` (LTS publish)
|
|
43
|
+
4. PR `development` → `main` → merge → tag `vX.Y.Z` on `main` (latest publish)
|
|
44
|
+
|
|
45
|
+
## Branch snapshot and removal steps
|
|
46
|
+
|
|
47
|
+
These steps preserve the latest state of every old version branch as a tag,
|
|
48
|
+
then delete the branches. Run them once during migration.
|
|
49
|
+
|
|
50
|
+
### Prerequisites
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git fetch --all --prune
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 1. Archive v2.4-beta
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git tag archive/v2.4-beta origin/v2.4-beta
|
|
60
|
+
git push origin archive/v2.4-beta
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2. Archive v2.4-ts
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
git tag archive/v2.4-ts origin/v2.4-ts
|
|
67
|
+
git push origin archive/v2.4-ts
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 3. Bootstrap development from v2.5-beta
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
git checkout -b development origin/v2.5-beta
|
|
74
|
+
git push -u origin development
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 4. Delete old remote branches
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git push origin --delete v2.5-beta v2.4-beta v2.4-ts
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 5. Delete old local branches
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git branch -d v2.5-beta
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 6. Verify
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
git branch -a # should show only main, development
|
|
93
|
+
git tag -ln archive/* # should show archive/v2.4-beta, archive/v2.4-ts
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Archived tracks
|
|
97
|
+
|
|
98
|
+
v2.3 is already captured by existing tags `v2.3.1` through `v2.3.50` — no
|
|
99
|
+
separate archive tag needed. Its commits are ancestors of `main`.
|
|
100
|
+
|
|
101
|
+
| Archive tag | Source branch | Created |
|
|
102
|
+
|-------------|--------------|---------|
|
|
103
|
+
| `archive/v2.4-beta` | `origin/v2.4-beta` | migration date |
|
|
104
|
+
| `archive/v2.4-ts` | `origin/v2.4-ts` | migration date |
|
|
105
|
+
| `v2.3.50` (existing tag) | `v2.3` branch (GitLab, merged to master) | n/a |
|
|
106
|
+
|
|
107
|
+
## CI pipeline updates
|
|
108
|
+
|
|
109
|
+
| File | Change |
|
|
110
|
+
|------|--------|
|
|
111
|
+
| `.github/workflows/codeql-analysis.yml` | branch targets from `[v2.3, v2.4]` to `[main, development]` |
|
|
112
|
+
| `.github/workflows/npmpublish.yml` | consolidated single workflow (was 3 separate) |
|
|
113
|
+
| `.github/workflows/open-pr-to-development.yml` | already targets `development`, no changes needed |
|
|
114
|
+
| `.github/workflows/main-pr-source.yml` | already enforces `development` → `main`, no changes needed |
|
|
115
|
+
| `.github/workflows/ci.yml` | already targets `main`/`development`, no changes needed |
|
|
116
|
+
|
|
117
|
+
## Future considerations
|
|
118
|
+
|
|
119
|
+
- When starting a new architecture wave (e.g. v2.6), branch from `main` into a
|
|
120
|
+
feature branch, develop on `development`, and release via the same tag flow
|
|
121
|
+
- Archived branches are never deleted from git history — the tags ensure
|
|
122
|
+
the code is always accessible for reference or hotfix branching
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qcobjects-cli",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.150-beta",
|
|
4
4
|
"description": "qcobjects cli command line tool",
|
|
5
5
|
"main": "public/cjs/index.js",
|
|
6
6
|
"module": "public/esm/index.mjs",
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"@types/node": "^22.10.2",
|
|
157
157
|
"@typescript-eslint/eslint-plugin": "^5.58.0",
|
|
158
158
|
"@typescript-eslint/parser": "^5.58.0",
|
|
159
|
-
"esbuild": "^0.
|
|
159
|
+
"esbuild": "^0.28.0",
|
|
160
160
|
"esbuild-plugin-alias": "^0.2.1",
|
|
161
161
|
"eslint": "^8.56.0",
|
|
162
162
|
"eslint-config-prettier": "^8.10.0",
|
package/public/cjs/cli-main.js
CHANGED
|
@@ -132,7 +132,7 @@ class SwitchCommander extends qcobjects_1.InheritClass {
|
|
|
132
132
|
}
|
|
133
133
|
(0, node_child_process_1.exec)(`npm i --save-dev ${appTemplateName}`, () => {
|
|
134
134
|
(async () => {
|
|
135
|
-
const _package_json_template_file =
|
|
135
|
+
const _package_json_template_file = require(_package_json_template_fname);
|
|
136
136
|
_package_json_template_file.name = appName;
|
|
137
137
|
_package_json_template_file.version = "1.0.0";
|
|
138
138
|
_package_json_template_file.repository = {};
|
|
@@ -125,7 +125,7 @@ Package("com.qcobjects.backend.microservice.static", [
|
|
|
125
125
|
resolve();
|
|
126
126
|
} catch (e) {
|
|
127
127
|
logger.warn("\u{1F926} Something went wrong \u{1F926} when trying to deliver a static path: " + microservice.fileName);
|
|
128
|
-
reject(e);
|
|
128
|
+
reject(e instanceof Error ? e : new Error(String(e)));
|
|
129
129
|
}
|
|
130
130
|
} else {
|
|
131
131
|
logger.info("There is no redirect_to setting declared in route properties. \n Skipping static delivery...");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/backend/backend-microservice-static.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * QCObjects CLI 2.3.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-redeclare: \"off\" */\n/* eslint no-empty: \"off\" */\n/* eslint strict: \"off\" */\n/* eslint no-mixed-operators: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-useless-escape: \"off\" */\n\"use strict\";\nimport mime from \"mime\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Package, BackendMicroservice, CONFIG, logger } from \"qcobjects\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\n\nPackage(\"com.qcobjects.backend.microservice.static\", [\n class Microservice extends BackendMicroservice {\n stream: any;\n fileName: any;\n route: any;\n request: any;\n body!: void;\n\n finishWithBody() { }\n done() {\n // read and send file content in the stream\n\n const microservice = this;\n const stream = microservice.stream;\n const fileName = (!microservice.fileName.startsWith(\"/\")) ? (`${process.cwd()}/${microservice.fileName}`) : (microservice.fileName);\n\n const sendFileHTTP2 = function (stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n let headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\n\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.warn(\"[ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n\n };\n\n const sendFileLegacyHTTP = function (stream: { writeHead: (arg0: number, arg1: { status: number; \"Content-Type\": string; }) => void; write: (arg0: string) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; }, fileName: string) {\n // read and send file content in the stream\n let headers;\n try {\n logger.info(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n headers = {\n \"Content-Length\": stat.size,\n \"Last-Modified\": stat.mtime.toUTCString(),\n \"Content-Type\": mime.getType(fileName),\n \"Cache-Control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\n\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n\n stream.writeHead(200, headers);\n\n stream.write(fs.readFileSync(fileName).toString());\n stream.on(\"close\", () => {\n logger.info(\"closing static file\", fileName);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n headers = {\n \"status\": 404,\n \"Content-Type\": \"text/html\"\n };\n stream.writeHead(404, headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.info(\"closing static file with error: \", fileName);\n });\n }\n logger.warn(e);\n stream.end();\n }\n stream.end();\n\n };\n\n if (typeof stream.respondWithFD !== \"undefined\") {\n sendFileHTTP2(stream, fileName);\n } else {\n sendFileLegacyHTTP(stream, fileName);\n }\n\n }\n\n static(method: string, data: any) {\n const microservice = this;\n const redirect_to = microservice.route.redirect_to;\n return new Promise<void>(function (resolve, reject) {\n const supported_methods = microservice.route.supported_methods;\n let _method_allowed_ = false;\n if (typeof supported_methods !== \"undefined\") {\n if (supported_methods == \"*\" || (typeof method === \"undefined\") || [...supported_methods].map(m => m.toLowerCase()).indexOf(method.toLowerCase()) !== -1) {\n _method_allowed_ = true;\n }\n } else {\n _method_allowed_ = true;\n }\n\n logger.debug(\"Starting static delivery microservice call for method: \" + method);\n if (_method_allowed_) {\n logger.info(\"I'm going to deliver a static path...\");\n if (redirect_to) {\n const request_path = microservice.request.path;\n const re = (new RegExp(microservice.route.path.replace(/{(.*?)}/g, \"\\(\\?\\<$1\\>\\.\\*\\)\"), \"g\"));\n microservice.fileName = request_path.replace(re, microservice.route.redirect_to);\n try {\n resolve();\n } catch (e) {\n logger.warn(\"\\u{1F926} Something went wrong \\u{1F926} when trying to deliver a static path: \" + microservice.fileName);\n reject(e as Error);\n }\n } else {\n logger.info(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\");\n reject(new Error(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\"));\n }\n } else {\n logger.debug(\"Method: \" + method + \" will be skipped\");\n resolve();\n }\n\n });\n }\n\n head(formData: any) {\n const microservice = this;\n microservice.static(\"head\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n }\n\n get(formData: any) {\n const microservice = this;\n microservice.static(\"get\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n }).catch(error => {\n console.error(error);\n });\n }\n\n post(formData: any) {\n const microservice = this;\n microservice.static(\"post\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n put(formData: any) {\n const microservice = this;\n microservice.static(\"put\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n delete(formData: any) {\n const microservice = this;\n microservice.static(\"delete\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n connect(formData: any) {\n const microservice = this;\n microservice.static(\"connect\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n options(formData: any) {\n const microservice = this;\n microservice.static(\"options\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n trace(formData: any) {\n const microservice = this;\n microservice.static(\"trace\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n patch(formData: any) {\n const microservice = this;\n microservice.static(\"patch\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n }\n\n]);\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * QCObjects CLI 2.3.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-redeclare: \"off\" */\n/* eslint no-empty: \"off\" */\n/* eslint strict: \"off\" */\n/* eslint no-mixed-operators: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-useless-escape: \"off\" */\n\"use strict\";\nimport mime from \"mime\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Package, BackendMicroservice, CONFIG, logger } from \"qcobjects\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\n\nPackage(\"com.qcobjects.backend.microservice.static\", [\n class Microservice extends BackendMicroservice {\n stream: any;\n fileName: any;\n route: any;\n request: any;\n body!: void;\n\n finishWithBody() { }\n done() {\n // read and send file content in the stream\n\n const microservice = this;\n const stream = microservice.stream;\n const fileName = (!microservice.fileName.startsWith(\"/\")) ? (`${process.cwd()}/${microservice.fileName}`) : (microservice.fileName);\n\n const sendFileHTTP2 = function (stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n let headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\n\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.warn(\"[ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n\n };\n\n const sendFileLegacyHTTP = function (stream: { writeHead: (arg0: number, arg1: { status: number; \"Content-Type\": string; }) => void; write: (arg0: string) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; }, fileName: string) {\n // read and send file content in the stream\n let headers;\n try {\n logger.info(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n headers = {\n \"Content-Length\": stat.size,\n \"Last-Modified\": stat.mtime.toUTCString(),\n \"Content-Type\": mime.getType(fileName),\n \"Cache-Control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\n\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n\n stream.writeHead(200, headers);\n\n stream.write(fs.readFileSync(fileName).toString());\n stream.on(\"close\", () => {\n logger.info(\"closing static file\", fileName);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n headers = {\n \"status\": 404,\n \"Content-Type\": \"text/html\"\n };\n stream.writeHead(404, headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.info(\"closing static file with error: \", fileName);\n });\n }\n logger.warn(e);\n stream.end();\n }\n stream.end();\n\n };\n\n if (typeof stream.respondWithFD !== \"undefined\") {\n sendFileHTTP2(stream, fileName);\n } else {\n sendFileLegacyHTTP(stream, fileName);\n }\n\n }\n\n static(method: string, data: any) {\n const microservice = this;\n const redirect_to = microservice.route.redirect_to;\n return new Promise<void>(function (resolve, reject) {\n const supported_methods = microservice.route.supported_methods;\n let _method_allowed_ = false;\n if (typeof supported_methods !== \"undefined\") {\n if (supported_methods == \"*\" || (typeof method === \"undefined\") || [...supported_methods].map(m => m.toLowerCase()).indexOf(method.toLowerCase()) !== -1) {\n _method_allowed_ = true;\n }\n } else {\n _method_allowed_ = true;\n }\n\n logger.debug(\"Starting static delivery microservice call for method: \" + method);\n if (_method_allowed_) {\n logger.info(\"I'm going to deliver a static path...\");\n if (redirect_to) {\n const request_path = microservice.request.path;\n const re = (new RegExp(microservice.route.path.replace(/{(.*?)}/g, \"\\(\\?\\<$1\\>\\.\\*\\)\"), \"g\"));\n microservice.fileName = request_path.replace(re, microservice.route.redirect_to);\n try {\n resolve();\n } catch (e) {\n logger.warn(\"\\u{1F926} Something went wrong \\u{1F926} when trying to deliver a static path: \" + microservice.fileName);\n reject(e instanceof Error ? e : new Error(String(e)));\n }\n } else {\n logger.info(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\");\n reject(new Error(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\"));\n }\n } else {\n logger.debug(\"Method: \" + method + \" will be skipped\");\n resolve();\n }\n\n });\n }\n\n head(formData: any) {\n const microservice = this;\n microservice.static(\"head\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n }\n\n get(formData: any) {\n const microservice = this;\n microservice.static(\"get\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n }).catch(error => {\n console.error(error);\n });\n }\n\n post(formData: any) {\n const microservice = this;\n microservice.static(\"post\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n put(formData: any) {\n const microservice = this;\n microservice.static(\"put\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n delete(formData: any) {\n const microservice = this;\n microservice.static(\"delete\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n connect(formData: any) {\n const microservice = this;\n microservice.static(\"connect\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n options(formData: any) {\n const microservice = this;\n microservice.static(\"options\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n trace(formData: any) {\n const microservice = this;\n microservice.static(\"trace\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n patch(formData: any) {\n const microservice = this;\n microservice.static(\"patch\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n }\n\n]);\n"],
|
|
5
|
+
"mappings": ";;AAgCA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,SAAS,qBAAqB,QAAQ,cAAc;AAE7D,MAAM,eAAe,KAAK,QAAQ,WAAW,IAAI;AAGjD,QAAQ,6CAA6C;AAAA,EACnD,MAAM,qBAAqB,oBAAoB;AAAA,IAzCjD,OAyCiD;AAAA;AAAA;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,iBAAiB;AAAA,IAAE;AAAA,IACnB,OAAO;AAGL,YAAM,eAAe;AACrB,YAAM,SAAS,aAAa;AAC5B,YAAM,WAAY,CAAC,aAAa,SAAS,WAAW,GAAG,IAAM,GAAG,QAAQ,IAAI,CAAC,IAAI,aAAa,QAAQ,KAAO,aAAa;AAE1H,YAAM,gBAAgB,gCAAUA,SAAqUC,WAAkB;AAGrX,YAAI;AACF,gBAAM,KAAK,GAAG,SAASA,WAAU,GAAG;AACpC,gBAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,cAAI,UAAU;AAAA,YACZ,kBAAkB,KAAK;AAAA,YACvB,iBAAiB,KAAK,MAAM,YAAY;AAAA,YACxC,gBAAgB,KAAK,QAAQA,SAAQ;AAAA,YACrC,iBAAiB,OAAO,IAAI,gBAAgB,kBAAkB;AAAA,UAChE;AACA,cAAI,OAAO,aAAa,MAAM,oBAAoB,aAAa;AAC7D,sBAAU,OAAO,OAAO,SAAS,aAAa,MAAM,eAAe;AAAA,UACrE;AAEA,UAAAD,QAAO,cAAc,IAAI,OAAO;AAChC,UAAAA,QAAO,GAAG,SAAS,MAAM;AACvB,mBAAO,MAAM,kBAAkBC,SAAQ;AACvC,eAAG,UAAU,EAAE;AAAA,UACjB,CAAC;AACD,UAAAD,QAAO,IAAI;AAAA,QAEb,SAAS,GAAQ;AACf,iBAAO,KAAK,2EAA2EC,SAAQ;AAC/F,cAAI,EAAE,SAAS,IAAI;AACjB,kBAAM,UAAU;AAAA,cACd,WAAW;AAAA,cACX,gBAAgB,KAAK,QAAQA,SAAQ;AAAA,YACvC;AACA,YAAAD,QAAO,QAAQ,OAAO;AACtB,YAAAA,QAAO,MAAM,+BAA+B;AAC5C,YAAAA,QAAO,GAAG,SAAS,MAAM;AACvB,qBAAO,MAAM,kBAAkBC,SAAQ;AAAA,YACzC,CAAC;AACD,YAAAD,QAAO,IAAI;AAAA,UACb;AAAA,QACF;AAAA,MAEF,GAvCsB;AAyCtB,YAAM,qBAAqB,gCAAUA,SAA8MC,WAAkB;AAEnQ,YAAI;AACJ,YAAI;AACF,iBAAO,KAAK,oBAAoBA,SAAQ;AACxC,gBAAM,KAAK,GAAG,SAASA,WAAU,GAAG;AACpC,gBAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,oBAAU;AAAA,YACR,kBAAkB,KAAK;AAAA,YACvB,iBAAiB,KAAK,MAAM,YAAY;AAAA,YACxC,gBAAgB,KAAK,QAAQA,SAAQ;AAAA,YACrC,iBAAiB,OAAO,IAAI,gBAAgB,kBAAkB;AAAA,UAChE;AACA,cAAI,OAAO,aAAa,MAAM,oBAAoB,aAAa;AAC7D,sBAAU,OAAO,OAAO,SAAS,aAAa,MAAM,eAAe;AAAA,UACrE;AAEA,iBAAO,MAAM,kBAAkBA,SAAQ;AACvC,aAAG,UAAU,EAAE;AAEf,UAAAD,QAAO,UAAU,KAAK,OAAO;AAE7B,UAAAA,QAAO,MAAM,GAAG,aAAaC,SAAQ,EAAE,SAAS,CAAC;AACjD,UAAAD,QAAO,GAAG,SAAS,MAAM;AACvB,mBAAO,KAAK,uBAAuBC,SAAQ;AAAA,UAC7C,CAAC;AAAA,QAEH,SAAS,GAAQ;AACf,cAAI,EAAE,SAAS,IAAI;AACjB,sBAAU;AAAA,cACR,UAAU;AAAA,cACV,gBAAgB;AAAA,YAClB;AACA,YAAAD,QAAO,UAAU,KAAK,OAAO;AAC7B,YAAAA,QAAO,MAAM,+BAA+B;AAC5C,YAAAA,QAAO,GAAG,SAAS,MAAM;AACvB,qBAAO,KAAK,oCAAoCC,SAAQ;AAAA,YAC1D,CAAC;AAAA,UACH;AACA,iBAAO,KAAK,CAAC;AACb,UAAAD,QAAO,IAAI;AAAA,QACb;AACA,QAAAA,QAAO,IAAI;AAAA,MAEb,GA5C2B;AA8C3B,UAAI,OAAO,OAAO,kBAAkB,aAAa;AAC/C,sBAAc,QAAQ,QAAQ;AAAA,MAChC,OAAO;AACL,2BAAmB,QAAQ,QAAQ;AAAA,MACrC;AAAA,IAEF;AAAA,IAEA,OAAO,QAAgB,MAAW;AAChC,YAAM,eAAe;AACrB,YAAM,cAAc,aAAa,MAAM;AACvC,aAAO,IAAI,QAAc,SAAU,SAAS,QAAQ;AAClD,cAAM,oBAAoB,aAAa,MAAM;AAC7C,YAAI,mBAAmB;AACvB,YAAI,OAAO,sBAAsB,aAAa;AAC5C,cAAI,qBAAqB,OAAQ,OAAO,WAAW,eAAgB,CAAC,GAAG,iBAAiB,EAAE,IAAI,OAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,OAAO,YAAY,CAAC,MAAM,IAAI;AACxJ,+BAAmB;AAAA,UACrB;AAAA,QACF,OAAO;AACL,6BAAmB;AAAA,QACrB;AAEA,eAAO,MAAM,4DAA4D,MAAM;AAC/E,YAAI,kBAAkB;AACpB,iBAAO,KAAK,uCAAuC;AACnD,cAAI,aAAa;AACf,kBAAM,eAAe,aAAa,QAAQ;AAC1C,kBAAM,KAAM,IAAI,OAAO,aAAa,MAAM,KAAK,QAAQ,YAAY,WAAkB,GAAG,GAAG;AAC3F,yBAAa,WAAW,aAAa,QAAQ,IAAI,aAAa,MAAM,WAAW;AAC/E,gBAAI;AACF,sBAAQ;AAAA,YACV,SAAS,GAAG;AACV,qBAAO,KAAK,oFAAoF,aAAa,QAAQ;AACrH,qBAAO,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC;AAAA,YACtD;AAAA,UACF,OAAO;AACL,mBAAO,KAAK,8FAA8F;AAC1G,mBAAO,IAAI,MAAM,8FAA8F,CAAC;AAAA,UAClH;AAAA,QACF,OAAO;AACL,iBAAO,MAAM,aAAa,SAAS,kBAAkB;AACrD,kBAAQ;AAAA,QACV;AAAA,MAEF,CAAC;AAAA,IACH;AAAA,IAEA,KAAK,UAAe;AAClB,YAAM,eAAe;AACrB,mBAAa,OAAO,QAAQ,QAAQ,EAAE,KAAK,cAAY;AACrD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IACjE;AAAA,IAEA,IAAI,UAAe;AACjB,YAAM,eAAe;AACrB,mBAAa,OAAO,OAAO,QAAQ,EAAE,KAAK,cAAY;AACpD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EAAE,MAAM,WAAS;AAChB,gBAAQ,MAAM,KAAK;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IAEA,KAAK,UAAe;AAClB,YAAM,eAAe;AACrB,mBAAa,OAAO,QAAQ,QAAQ,EAAE,KAAK,cAAY;AACrD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,IAAI,UAAe;AACjB,YAAM,eAAe;AACrB,mBAAa,OAAO,OAAO,QAAQ,EAAE,KAAK,cAAY;AACpD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,OAAO,UAAe;AACpB,YAAM,eAAe;AACrB,mBAAa,OAAO,UAAU,QAAQ,EAAE,KAAK,cAAY;AACvD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,QAAQ,UAAe;AACrB,YAAM,eAAe;AACrB,mBAAa,OAAO,WAAW,QAAQ,EAAE,KAAK,cAAY;AACxD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,QAAQ,UAAe;AACrB,YAAM,eAAe;AACrB,mBAAa,OAAO,WAAW,QAAQ,EAAE,KAAK,cAAY;AACxD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,MAAM,UAAe;AACnB,YAAM,eAAe;AACrB,mBAAa,OAAO,SAAS,QAAQ,EAAE,KAAK,cAAY;AACtD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,IAEA,MAAM,UAAe;AACnB,YAAM,eAAe;AACrB,mBAAa,OAAO,SAAS,QAAQ,EAAE,KAAK,cAAY;AACtD,qBAAa,OAAO;AACpB,qBAAa,KAAK;AAAA,MACpB,CAAC,EACE,MAAM,CAAC,MAAW;AAAE,eAAO,KAAK,qBAAqB,CAAC,EAAE;AAAA,MAAG,CAAC;AAAA,IAEjE;AAAA,EAEF;AAEF,CAAC;",
|
|
6
6
|
"names": ["stream", "fileName"]
|
|
7
7
|
}
|
|
@@ -142,34 +142,19 @@ class CommandHandler extends InheritClass {
|
|
|
142
142
|
});
|
|
143
143
|
}
|
|
144
144
|
syncGit(versionString, commitMsg, syncNpm = false) {
|
|
145
|
-
let _commands_ = [];
|
|
145
|
+
let _commands_ = ["git fetch --tags -f"];
|
|
146
|
+
_commands_.push(`git add . && git commit -am "${commitMsg}"`);
|
|
146
147
|
if (syncNpm) {
|
|
147
|
-
_commands_
|
|
148
|
-
[
|
|
149
|
-
"git fetch --tags -f",
|
|
150
|
-
`npm version "${versionString}" -m "${commitMsg}"`
|
|
151
|
-
]
|
|
152
|
-
);
|
|
148
|
+
_commands_.push(`npm version "${versionString}" -m "${commitMsg}"`);
|
|
153
149
|
}
|
|
154
|
-
_commands_ = _commands_.concat(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
"git tag -ln"
|
|
159
|
-
]
|
|
160
|
-
);
|
|
150
|
+
_commands_ = _commands_.concat([
|
|
151
|
+
"git fetch origin --tags",
|
|
152
|
+
"git tag -ln"
|
|
153
|
+
]);
|
|
161
154
|
if (!syncNpm) {
|
|
162
|
-
_commands_
|
|
163
|
-
[
|
|
164
|
-
`git tag -a "v${versionString}" -m "${commitMsg}"`
|
|
165
|
-
]
|
|
166
|
-
);
|
|
155
|
+
_commands_.push(`git tag -a "v${versionString}" -m "${commitMsg}"`);
|
|
167
156
|
}
|
|
168
|
-
_commands_
|
|
169
|
-
[
|
|
170
|
-
"git push && git push --tags"
|
|
171
|
-
]
|
|
172
|
-
);
|
|
157
|
+
_commands_.push("git push && git push --tags");
|
|
173
158
|
this.switchCommander.shellCommands(_commands_).then(function(response) {
|
|
174
159
|
logger.info("Synced to Git");
|
|
175
160
|
logger.debug(response);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/cli-commands-version.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * QCObjects CLI 2.5\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { exec, execSync } from \"node:child_process\";\n\nimport { Package, InheritClass, logger } from \"qcobjects\";\nimport { SwitchCommander } from \"./cli-main\";\n\nexport class CommandHandler extends InheritClass {\n choiceOption: {\n getVersionStringFromFile(filename: string): string;\n parseVersionSuffix(versionString: any): string;\n parseVersionString(versionString: any): string;\n buildNewVersionString(arg0: { major: number; minor: number; patch: number; }, versionSuffix: any): string;\n saveNewVersionFile(filename: string, newVersion: any): string;\n syncGit(newVersion: any, commitMsg: any, syncNpm: any): string;\n switchCommander: any; v_major(filename: string, options: any): void; v_minor(filename: string, options: any): void; v_patch(filename: string, options: any): void; v_sync(filename: string, options: any): void; v_changelog(): void;\n };\n switchCommander: SwitchCommander;\n\n constructor({ switchCommander }:{switchCommander:SwitchCommander}) {\n super({ switchCommander });\n this.switchCommander = switchCommander;\n\n const commandHandler = this;\n\n this.choiceOption = {\n v_major(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major + 1, minor: minor, patch: patch }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_minor(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major, minor: minor + 1, patch: patch }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_patch(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major, minor: minor, patch: patch + 1 }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_sync(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n var commandHandler = this;\n commandHandler.switchCommander.shellCommands([\n \"echo $(git describe)\"\n ]).then(function (response: any) {\n const versionString = response[0].split(\"-\")[0].slice(1).replace(\"\\n\", \"\");\n console.log(versionString);\n const versionSuffix = commandHandler.parseVersionSuffix(versionString);\n const versionObject = commandHandler.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = commandHandler.buildNewVersionString({ major: major, minor: minor, patch: patch }, versionSuffix);\n commandHandler.saveNewVersionFile(filename, newVersion);\n var commitMsg = options.commitMsg || `Synced Version v${newVersion}`;\n commandHandler.switchCommander.shellCommands(\n [\n \"git fetch --tags -f\",\n `git add . && git commit -am \"${commitMsg}\"`,\n \"git fetch origin --tags\",\n \"git tag -ln\",\n `npm version \"${newVersion}\" --allow-same-version -m \"${commitMsg}\"`,\n \"git push && git push --tags\"\n ]\n ).then(function (response: any) {\n console.log(response);\n });\n });\n },\n v_changelog() {\n const commandHandler = this;\n commandHandler.switchCommander.shellCommands(\n [\n \"git tag -ln\"\n ]\n ).then(function (response: any) {\n var versionTags = response[0].split(\"\\n\").map((tag: any) => tag.split(\" \").unique()).unique().map(\n (tag: any) => {\n return {\n \"version\": tag[0],\n \"major\": tag[0].split(\".\")[0],\n \"minor\": tag[0].split(\".\")[0] + \".\" + tag[0].split(\".\")[1],\n \"description\": tag.slice(1).join(\" \").trim()\n };\n }\n );\n var minorVersionTags = versionTags.filter((tag: { version: string; }) => tag.version !== \"\").map((tag: { version: string; }) => tag.version.split(\".\")[0] + \".\" + tag.version.split(\".\")[1]).unique();\n var history = minorVersionTags.map((minor: string) => {\n return {\n \"major\": minor.split(\".\")[0],\n \"minor\": minor,\n \"history\": \"\\n\\t- \" + versionTags.filter((tag: { minor: any; }) => tag.minor === minor).map(\n function (tag: { description: any; }) {\n return tag.description;\n }\n ).filter((desc: string) => !desc.startsWith(minor.slice(1))).sort().unique().join(\"\\n\\t- \")\n };\n }).map((hist: { major: any; minor: any; history: string; }) => { return `## ${hist.major} -> ${hist.minor}` + \"\\n\" + hist.history; }).join(\"\\n\");\n const subtitle = \"This is an automatic Changelog history of versions generated using the command: **qcobjects v-changelog > CHANGELOG.md**\";\n console.log(\"# Changelog \\n\\n\" + subtitle + \"\\n\\n\" + history);\n\n });\n }\n } as any;\n\n switchCommander.program.command(\"v-major [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new major version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_major.call(commandHandler, args, options);\n });\n switchCommander.program.command(\"v-minor [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new minor version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_minor.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-patch [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new patch version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_patch.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-sync [filename]\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Sync the version of NPM with version of GIT\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_sync.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-changelog\")\n .description(\"Semantic Versioning: Shows a changelog using Semantic Versioning\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_changelog.call(commandHandler);\n });\n\n\n }\n\n\n syncGit(versionString: any, commitMsg: any, syncNpm = false) {\n let _commands_: any[] = [];\n if (syncNpm) {\n _commands_ = _commands_.concat(\n [\n \"git fetch --tags -f\",\n `npm version \"${versionString}\" -m \"${commitMsg}\"`\n ]\n );\n }\n _commands_ = _commands_.concat(\n [\n `git add . && git commit -am \"${commitMsg}\"`,\n \"git fetch origin --tags\",\n \"git tag -ln\"\n ]);\n\n if (!syncNpm) {\n _commands_ = _commands_.concat(\n [\n `git tag -a \"v${versionString}\" -m \"${commitMsg}\"`,\n ]\n );\n }\n\n _commands_ = _commands_.concat([\n \"git push && git push --tags\"\n ]\n );\n\n this.switchCommander.shellCommands(_commands_).then(function (response: any) {\n logger.info(\"Synced to Git\");\n logger.debug(response);\n }).catch(function (e: any) {\n logger.info(\"Something went wrong trying to sync to git\");\n logger.debug(e);\n });\n }\n\n parseVersionString(versionString: string): { major: string, minor: string, patch: string } {\n versionString = versionString.replace(\"\\n\", \"\");\n const regexpVer = /^(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n const versionObject = { ...versionString.match(regexpVer)?.groups };\n return versionObject as { major: string, minor: string, patch: string };\n }\n\n getVersionStringFromFile(filename: any) {\n let versionString;\n try {\n versionString = fs.readFileSync(filename).toString().replace(\"\\n\", \"\");\n } catch (e) {\n versionString = \"0.0.1\";\n }\n return versionString;\n }\n\n buildNewSemVersionString({ major, minor, patch }: { major: string, minor: string, patch: string }) {\n return `${major}.${minor}.${patch}`;\n }\n\n parseVersionSuffix(versionString: string) {\n versionString = versionString.replace(\"\\n\", \"\");\n const versionObject = this.parseVersionString(versionString);\n const semVersionString = this.buildNewSemVersionString(versionObject);\n return versionString.replace(semVersionString, \"\");\n }\n\n buildNewVersionString({ major, minor, patch }: any, suffix: any) {\n const semVersionString = this.buildNewSemVersionString({ major, minor, patch });\n return `${semVersionString}${suffix}`;\n }\n\n saveNewVersionFile(filename: any, versionString: any) {\n fs.writeFileSync(filename, versionString);\n }\n\n\n\n\n\n}\n\n\nPackage(\"com.qcobjects.cli.commands.version\", [\n CommandHandler\n]);\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * QCObjects CLI 2.5\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { exec, execSync } from \"node:child_process\";\n\nimport { Package, InheritClass, logger } from \"qcobjects\";\nimport { SwitchCommander } from \"./cli-main\";\n\nexport class CommandHandler extends InheritClass {\n choiceOption: {\n getVersionStringFromFile(filename: string): string;\n parseVersionSuffix(versionString: any): string;\n parseVersionString(versionString: any): string;\n buildNewVersionString(arg0: { major: number; minor: number; patch: number; }, versionSuffix: any): string;\n saveNewVersionFile(filename: string, newVersion: any): string;\n syncGit(newVersion: any, commitMsg: any, syncNpm: any): string;\n switchCommander: any; v_major(filename: string, options: any): void; v_minor(filename: string, options: any): void; v_patch(filename: string, options: any): void; v_sync(filename: string, options: any): void; v_changelog(): void;\n };\n switchCommander: SwitchCommander;\n\n constructor({ switchCommander }:{switchCommander:SwitchCommander}) {\n super({ switchCommander });\n this.switchCommander = switchCommander;\n\n const commandHandler = this;\n\n this.choiceOption = {\n v_major(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major + 1, minor: minor, patch: patch }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_minor(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major, minor: minor + 1, patch: patch }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_patch(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n const versionString = this.getVersionStringFromFile(filename);\n const versionSuffix = this.parseVersionSuffix(versionString);\n const versionObject = this.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = this.buildNewVersionString({ major: major, minor: minor, patch: patch + 1 }, versionSuffix);\n this.saveNewVersionFile(filename, newVersion);\n if (options.syncGit) {\n var commitMsg = options.commitMsg || `New Version v${newVersion}`;\n this.syncGit(newVersion, commitMsg, options.syncNpm);\n }\n },\n v_sync(filename: string, options: any) {\n filename = (typeof filename === \"undefined\") ? (\"VERSION\") : (filename);\n var commandHandler = this;\n commandHandler.switchCommander.shellCommands([\n \"echo $(git describe)\"\n ]).then(function (response: any) {\n const versionString = response[0].split(\"-\")[0].slice(1).replace(\"\\n\", \"\");\n console.log(versionString);\n const versionSuffix = commandHandler.parseVersionSuffix(versionString);\n const versionObject = commandHandler.parseVersionString(versionString);\n const major = parseInt(versionObject.major);\n const minor = parseInt(versionObject.minor);\n const patch = parseInt(versionObject.patch);\n const newVersion = commandHandler.buildNewVersionString({ major: major, minor: minor, patch: patch }, versionSuffix);\n commandHandler.saveNewVersionFile(filename, newVersion);\n var commitMsg = options.commitMsg || `Synced Version v${newVersion}`;\n commandHandler.switchCommander.shellCommands(\n [\n \"git fetch --tags -f\",\n `git add . && git commit -am \"${commitMsg}\"`,\n \"git fetch origin --tags\",\n \"git tag -ln\",\n `npm version \"${newVersion}\" --allow-same-version -m \"${commitMsg}\"`,\n \"git push && git push --tags\"\n ]\n ).then(function (response: any) {\n console.log(response);\n });\n });\n },\n v_changelog() {\n const commandHandler = this;\n commandHandler.switchCommander.shellCommands(\n [\n \"git tag -ln\"\n ]\n ).then(function (response: any) {\n var versionTags = response[0].split(\"\\n\").map((tag: any) => tag.split(\" \").unique()).unique().map(\n (tag: any) => {\n return {\n \"version\": tag[0],\n \"major\": tag[0].split(\".\")[0],\n \"minor\": tag[0].split(\".\")[0] + \".\" + tag[0].split(\".\")[1],\n \"description\": tag.slice(1).join(\" \").trim()\n };\n }\n );\n var minorVersionTags = versionTags.filter((tag: { version: string; }) => tag.version !== \"\").map((tag: { version: string; }) => tag.version.split(\".\")[0] + \".\" + tag.version.split(\".\")[1]).unique();\n var history = minorVersionTags.map((minor: string) => {\n return {\n \"major\": minor.split(\".\")[0],\n \"minor\": minor,\n \"history\": \"\\n\\t- \" + versionTags.filter((tag: { minor: any; }) => tag.minor === minor).map(\n function (tag: { description: any; }) {\n return tag.description;\n }\n ).filter((desc: string) => !desc.startsWith(minor.slice(1))).sort().unique().join(\"\\n\\t- \")\n };\n }).map((hist: { major: any; minor: any; history: string; }) => { return `## ${hist.major} -> ${hist.minor}` + \"\\n\" + hist.history; }).join(\"\\n\");\n const subtitle = \"This is an automatic Changelog history of versions generated using the command: **qcobjects v-changelog > CHANGELOG.md**\";\n console.log(\"# Changelog \\n\\n\" + subtitle + \"\\n\\n\" + history);\n\n });\n }\n } as any;\n\n switchCommander.program.command(\"v-major [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new major version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_major.call(commandHandler, args, options);\n });\n switchCommander.program.command(\"v-minor [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new minor version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_minor.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-patch [filename]\")\n .option(\"--git, --sync-git\", \"Sync with Git\")\n .option(\"--npm, --sync-npm\", \"Sync with NPM\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Upgrade to a new patch version\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_patch.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-sync [filename]\")\n .option(\"-m, --commit-msg [message]\", \"Commit Message\")\n .description(\"Semantic Versioning: Sync the version of NPM with version of GIT\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_sync.call(commandHandler, args, options);\n });\n\n switchCommander.program.command(\"v-changelog\")\n .description(\"Semantic Versioning: Shows a changelog using Semantic Versioning\")\n .action(function (args: any, options: any) {\n commandHandler.choiceOption.v_changelog.call(commandHandler);\n });\n\n\n }\n\n\n syncGit(versionString: any, commitMsg: any, syncNpm = false) {\n let _commands_: any[] = [\"git fetch --tags -f\"];\n\n // Commit VERSION file first so working directory is clean\n // (v_patch/v_minor/v_major write to VERSION before calling syncGit)\n _commands_.push(`git add . && git commit -am \"${commitMsg}\"`);\n\n if (syncNpm) {\n // npm version requires a clean working directory\n _commands_.push(`npm version \"${versionString}\" -m \"${commitMsg}\"`);\n }\n\n _commands_ = _commands_.concat([\n \"git fetch origin --tags\",\n \"git tag -ln\",\n ]);\n\n if (!syncNpm) {\n _commands_.push(`git tag -a \"v${versionString}\" -m \"${commitMsg}\"`);\n }\n\n _commands_.push(\"git push && git push --tags\");\n\n this.switchCommander.shellCommands(_commands_).then(function (response: any) {\n logger.info(\"Synced to Git\");\n logger.debug(response);\n }).catch(function (e: any) {\n logger.info(\"Something went wrong trying to sync to git\");\n logger.debug(e);\n });\n }\n\n parseVersionString(versionString: string): { major: string, minor: string, patch: string } {\n versionString = versionString.replace(\"\\n\", \"\");\n const regexpVer = /^(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n const versionObject = { ...versionString.match(regexpVer)?.groups };\n return versionObject as { major: string, minor: string, patch: string };\n }\n\n getVersionStringFromFile(filename: any) {\n let versionString;\n try {\n versionString = fs.readFileSync(filename).toString().replace(\"\\n\", \"\");\n } catch (e) {\n versionString = \"0.0.1\";\n }\n return versionString;\n }\n\n buildNewSemVersionString({ major, minor, patch }: { major: string, minor: string, patch: string }) {\n return `${major}.${minor}.${patch}`;\n }\n\n parseVersionSuffix(versionString: string) {\n versionString = versionString.replace(\"\\n\", \"\");\n const versionObject = this.parseVersionString(versionString);\n const semVersionString = this.buildNewSemVersionString(versionObject);\n return versionString.replace(semVersionString, \"\");\n }\n\n buildNewVersionString({ major, minor, patch }: any, suffix: any) {\n const semVersionString = this.buildNewSemVersionString({ major, minor, patch });\n return `${semVersionString}${suffix}`;\n }\n\n saveNewVersionFile(filename: any, versionString: any) {\n fs.writeFileSync(filename, versionString);\n }\n\n\n\n\n\n}\n\n\nPackage(\"com.qcobjects.cli.commands.version\", [\n CommandHandler\n]);\n"],
|
|
5
|
+
"mappings": ";;AA+BA,OAAO,QAAQ;AAIf,SAAS,SAAS,cAAc,cAAc;AAGvC,MAAM,uBAAuB,aAAa;AAAA,EAtCjD,OAsCiD;AAAA;AAAA;AAAA,EAC/C;AAAA,EASA;AAAA,EAEA,YAAY,EAAE,gBAAgB,GAAqC;AACjE,UAAM,EAAE,gBAAgB,CAAC;AACzB,SAAK,kBAAkB;AAEvB,UAAM,iBAAiB;AAEvB,SAAK,eAAe;AAAA,MAClB,QAAQ,UAAkB,SAAc;AACtC,mBAAY,OAAO,aAAa,cAAgB,YAAc;AAC9D,cAAM,gBAAgB,KAAK,yBAAyB,QAAQ;AAC5D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,aAAa,KAAK,sBAAsB,EAAE,OAAO,QAAQ,GAAG,OAAc,MAAa,GAAG,aAAa;AAC7G,aAAK,mBAAmB,UAAU,UAAU;AAC5C,YAAI,QAAQ,SAAS;AACnB,cAAI,YAAY,QAAQ,aAAa,gBAAgB,UAAU;AAC/D,eAAK,QAAQ,YAAY,WAAW,QAAQ,OAAO;AAAA,QACrD;AAAA,MACF;AAAA,MACA,QAAQ,UAAkB,SAAc;AACtC,mBAAY,OAAO,aAAa,cAAgB,YAAc;AAC9D,cAAM,gBAAgB,KAAK,yBAAyB,QAAQ;AAC5D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,aAAa,KAAK,sBAAsB,EAAE,OAAc,OAAO,QAAQ,GAAG,MAAa,GAAG,aAAa;AAC7G,aAAK,mBAAmB,UAAU,UAAU;AAC5C,YAAI,QAAQ,SAAS;AACnB,cAAI,YAAY,QAAQ,aAAa,gBAAgB,UAAU;AAC/D,eAAK,QAAQ,YAAY,WAAW,QAAQ,OAAO;AAAA,QACrD;AAAA,MACF;AAAA,MACA,QAAQ,UAAkB,SAAc;AACtC,mBAAY,OAAO,aAAa,cAAgB,YAAc;AAC9D,cAAM,gBAAgB,KAAK,yBAAyB,QAAQ;AAC5D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,cAAM,aAAa,KAAK,sBAAsB,EAAE,OAAc,OAAc,OAAO,QAAQ,EAAE,GAAG,aAAa;AAC7G,aAAK,mBAAmB,UAAU,UAAU;AAC5C,YAAI,QAAQ,SAAS;AACnB,cAAI,YAAY,QAAQ,aAAa,gBAAgB,UAAU;AAC/D,eAAK,QAAQ,YAAY,WAAW,QAAQ,OAAO;AAAA,QACrD;AAAA,MACF;AAAA,MACA,OAAO,UAAkB,SAAc;AACrC,mBAAY,OAAO,aAAa,cAAgB,YAAc;AAC9D,YAAIA,kBAAiB;AACrB,QAAAA,gBAAe,gBAAgB,cAAc;AAAA,UAC3C;AAAA,QACF,CAAC,EAAE,KAAK,SAAU,UAAe;AAC/B,gBAAM,gBAAgB,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,MAAM,EAAE;AACzE,kBAAQ,IAAI,aAAa;AACzB,gBAAM,gBAAgBA,gBAAe,mBAAmB,aAAa;AACrE,gBAAM,gBAAgBA,gBAAe,mBAAmB,aAAa;AACrE,gBAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,gBAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,gBAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,gBAAM,aAAaA,gBAAe,sBAAsB,EAAE,OAAc,OAAc,MAAa,GAAG,aAAa;AACnH,UAAAA,gBAAe,mBAAmB,UAAU,UAAU;AACtD,cAAI,YAAY,QAAQ,aAAa,mBAAmB,UAAU;AAClE,UAAAA,gBAAe,gBAAgB;AAAA,YAC7B;AAAA,cACE;AAAA,cACA,gCAAgC,SAAS;AAAA,cACzC;AAAA,cACA;AAAA,cACA,gBAAgB,UAAU,8BAA8B,SAAS;AAAA,cACjE;AAAA,YACF;AAAA,UACF,EAAE,KAAK,SAAUC,WAAe;AAC9B,oBAAQ,IAAIA,SAAQ;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MACA,cAAc;AACZ,cAAMD,kBAAiB;AACvB,QAAAA,gBAAe,gBAAgB;AAAA,UAC7B;AAAA,YACE;AAAA,UACF;AAAA,QACF,EAAE,KAAK,SAAU,UAAe;AAC9B,cAAI,cAAc,SAAS,CAAC,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,QAAa,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE;AAAA,YAC5F,CAAC,QAAa;AACZ,qBAAO;AAAA,gBACL,WAAW,IAAI,CAAC;AAAA,gBAChB,SAAS,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,gBAC5B,SAAS,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,gBACzD,eAAe,IAAI,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AACA,cAAI,mBAAmB,YAAY,OAAO,CAAC,QAA8B,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,QAA8B,IAAI,QAAQ,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO;AACpM,cAAI,UAAU,iBAAiB,IAAI,CAAC,UAAkB;AACpD,mBAAO;AAAA,cACL,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,cAC3B,SAAS;AAAA,cACT,WAAW,UAAW,YAAY,OAAO,CAAC,QAAyB,IAAI,UAAU,KAAK,EAAE;AAAA,gBACtF,SAAU,KAA4B;AACpC,yBAAO,IAAI;AAAA,gBACb;AAAA,cACF,EAAE,OAAO,CAAC,SAAiB,CAAC,KAAK,WAAW,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,OAAQ;AAAA,YAC5F;AAAA,UACF,CAAC,EAAE,IAAI,CAAC,SAAuD;AAAE,mBAAO,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,IAAY,KAAK;AAAA,UAAS,CAAC,EAAE,KAAK,IAAI;AAC/I,gBAAM,WAAW;AACjB,kBAAQ,IAAI,qBAAqB,WAAW,SAAS,OAAO;AAAA,QAE9D,CAAC;AAAA,MACH;AAAA,IACF;AAEA,oBAAgB,QAAQ,QAAQ,oBAAoB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,eAAe,EAC3C,OAAO,8BAA8B,gBAAgB,EACrD,YAAY,qDAAqD,EACjE,OAAO,SAAU,MAAW,SAAc;AACzC,qBAAe,aAAa,QAAQ,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACxE,CAAC;AACH,oBAAgB,QAAQ,QAAQ,oBAAoB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,eAAe,EAC3C,OAAO,8BAA8B,gBAAgB,EACrD,YAAY,qDAAqD,EACjE,OAAO,SAAU,MAAW,SAAc;AACzC,qBAAe,aAAa,QAAQ,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACxE,CAAC;AAEH,oBAAgB,QAAQ,QAAQ,oBAAoB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,eAAe,EAC3C,OAAO,8BAA8B,gBAAgB,EACrD,YAAY,qDAAqD,EACjE,OAAO,SAAU,MAAW,SAAc;AACzC,qBAAe,aAAa,QAAQ,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACxE,CAAC;AAEH,oBAAgB,QAAQ,QAAQ,mBAAmB,EAChD,OAAO,8BAA8B,gBAAgB,EACrD,YAAY,kEAAkE,EAC9E,OAAO,SAAU,MAAW,SAAc;AACzC,qBAAe,aAAa,OAAO,KAAK,gBAAgB,MAAM,OAAO;AAAA,IACvE,CAAC;AAEH,oBAAgB,QAAQ,QAAQ,aAAa,EAC1C,YAAY,kEAAkE,EAC9E,OAAO,SAAU,MAAW,SAAc;AACzC,qBAAe,aAAa,YAAY,KAAK,cAAc;AAAA,IAC7D,CAAC;AAAA,EAGL;AAAA,EAGA,QAAQ,eAAoB,WAAgB,UAAU,OAAO;AAC3D,QAAI,aAAoB,CAAC,qBAAqB;AAI9C,eAAW,KAAK,gCAAgC,SAAS,GAAG;AAE5D,QAAI,SAAS;AAEX,iBAAW,KAAK,gBAAgB,aAAa,SAAS,SAAS,GAAG;AAAA,IACpE;AAEA,iBAAa,WAAW,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,iBAAW,KAAK,gBAAgB,aAAa,SAAS,SAAS,GAAG;AAAA,IACpE;AAEA,eAAW,KAAK,6BAA6B;AAE7C,SAAK,gBAAgB,cAAc,UAAU,EAAE,KAAK,SAAU,UAAe;AAC3E,aAAO,KAAK,eAAe;AAC3B,aAAO,MAAM,QAAQ;AAAA,IACvB,CAAC,EAAE,MAAM,SAAU,GAAQ;AACzB,aAAO,KAAK,4CAA4C;AACxD,aAAO,MAAM,CAAC;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,mBAAmB,eAAwE;AACzF,oBAAgB,cAAc,QAAQ,MAAM,EAAE;AAC9C,UAAM,YAAY;AAClB,UAAM,gBAAgB,EAAE,GAAG,cAAc,MAAM,SAAS,GAAG,OAAO;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,yBAAyB,UAAe;AACtC,QAAI;AACJ,QAAI;AACF,sBAAgB,GAAG,aAAa,QAAQ,EAAE,SAAS,EAAE,QAAQ,MAAM,EAAE;AAAA,IACvE,SAAS,GAAG;AACV,sBAAgB;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,yBAAyB,EAAE,OAAO,OAAO,MAAM,GAAoD;AACjG,WAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,EACnC;AAAA,EAEA,mBAAmB,eAAuB;AACxC,oBAAgB,cAAc,QAAQ,MAAM,EAAE;AAC9C,UAAM,gBAAgB,KAAK,mBAAmB,aAAa;AAC3D,UAAM,mBAAmB,KAAK,yBAAyB,aAAa;AACpE,WAAO,cAAc,QAAQ,kBAAkB,EAAE;AAAA,EACnD;AAAA,EAEA,sBAAsB,EAAE,OAAO,OAAO,MAAM,GAAQ,QAAa;AAC/D,UAAM,mBAAmB,KAAK,yBAAyB,EAAE,OAAO,OAAO,MAAM,CAAC;AAC9E,WAAO,GAAG,gBAAgB,GAAG,MAAM;AAAA,EACrC;AAAA,EAEA,mBAAmB,UAAe,eAAoB;AACpD,OAAG,cAAc,UAAU,aAAa;AAAA,EAC1C;AAMF;AAGA,QAAQ,sCAAsC;AAAA,EAC5C;AACF,CAAC;",
|
|
6
6
|
"names": ["commandHandler", "response"]
|
|
7
7
|
}
|
package/public/esm/cli-main.mjs
CHANGED
|
@@ -59,7 +59,7 @@ class SwitchCommander extends InheritClass {
|
|
|
59
59
|
}
|
|
60
60
|
exec(`npm i --save-dev ${appTemplateName}`, () => {
|
|
61
61
|
(async () => {
|
|
62
|
-
const _package_json_template_file =
|
|
62
|
+
const _package_json_template_file = JSON.parse(fs.readFileSync(_package_json_template_fname, "utf8"));
|
|
63
63
|
_package_json_template_file.name = appName;
|
|
64
64
|
_package_json_template_file.version = "1.0.0";
|
|
65
65
|
_package_json_template_file.repository = {};
|
|
@@ -133,29 +133,27 @@ class SwitchCommander extends InheritClass {
|
|
|
133
133
|
super();
|
|
134
134
|
this.program = commander;
|
|
135
135
|
}
|
|
136
|
-
shellCommands(_shell_commands) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
);
|
|
158
|
-
}).catch((e) => console.log(e));
|
|
136
|
+
async shellCommands(_shell_commands) {
|
|
137
|
+
const results = [];
|
|
138
|
+
for (const shell_command of _shell_commands) {
|
|
139
|
+
const result = await new Promise((resolve, reject) => {
|
|
140
|
+
logger.debug(shell_command);
|
|
141
|
+
const child = exec(shell_command, (err, stdout, stderr) => {
|
|
142
|
+
if (!err) {
|
|
143
|
+
resolve(stdout);
|
|
144
|
+
} else {
|
|
145
|
+
logger.debug(`[FAILED]: ${shell_command}`);
|
|
146
|
+
logger.debug(`${stderr}`);
|
|
147
|
+
reject(stderr);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
child.stdout?.on("data", function(data) {
|
|
151
|
+
logger.info(data);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
results.push(result);
|
|
155
|
+
}
|
|
156
|
+
return results;
|
|
159
157
|
}
|
|
160
158
|
fileListRecursive(dir) {
|
|
161
159
|
var instance = this;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/cli-main.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * QCObjects CLI 2.5\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport \"qcobjects\";\n\nexport * as EnterpriseCommands from \"./enterprise-commands\";\nimport { Component, CONFIG, findPackageNodePath, InheritClass, logger, New, Service, serviceLoader, global, Package, Export } from \"qcobjects\";\nimport { QCObjectsEnterprise } from \"./enterprise-commands\";\nexport * as QuickCorpServices from \"./api-client_services\";\nimport { QuickCorpCloud } from \"./api-client_services\";\nexport * as customCommands from \"./cli-commands\";\nimport { __get_version__, __get_version_string__ } from \"./defaultsettings\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { exec, execSync } from \"node:child_process\";\nimport commander from \"commander\";\n\nconst templatePwaPath = path.resolve(__dirname, \"./templates/pwa/\") + \"/\";\n\nexport const getPluginCommandsList = () => {\n return global.ClassesList?.filter((c: { packageName: string; }) => c.packageName.startsWith(\"com.qcobjects.cli.commands.\"))\n .filter((p: { classFactory: { name: string; }; }) => p.classFactory.name.endsWith(\"CommandHandler\"));\n};\n\n\nexport class SwitchCommander extends InheritClass {\n\n choiceOption = {\n generateSw: (_appName: boolean, options: { dir: any; }) => {\n const dirPrefix = options.dir;\n const switchCommander = this;\n const appName = (typeof _appName === \"undefined\" || _appName === true) ? (\"MyAppName\") : (_appName);\n switchCommander.generateServiceWorker(appName, dirPrefix)\n .catch((e: any) => { logger.warn(`An error ocurred while creating service worker: ${e}`); });\n\n },\n create: (_appName: boolean, options: { createAmp: any; createPwa: any; createPhp: any; createCustom: any; }) => {\n const version = __get_version__();\n const switchCommander = this;\n const appName = (typeof _appName === \"undefined\" || _appName === true) ? (\"MyAppName\") : (_appName);\n\n\n let appTemplateName;\n\n if (options.createAmp) {\n appTemplateName = \"qcobjects-ecommerce-amp\";\n } else if (options.createPwa) {\n appTemplateName = \"qcobjectsnewapp\";\n } else if (options.createPhp) {\n appTemplateName = \"qcobjectsnewphp\";\n } else if (options.createCustom) {\n appTemplateName = options.createCustom;\n } else {\n appTemplateName = \"qcobjectsnewapp\";\n }\n CONFIG.set(\"qcobjectsnewapp_path\", CONFIG.get(\"node_modules_path\") + \"/\" + appTemplateName);\n\n const _package_json_template_fname = path.resolve(CONFIG.get(\"qcobjectsnewapp_path\", \"qcobjectsnewapp\"), \"./package.json\");\n\n /* if (!process.platform.toLowerCase().startsWith(\"win\")){\n _package_json_content = _package_json_content.replace(/(\")/g, String.fromCharCode(92)+\"\\\"\");\n }*/\n\n const createAppCommand = \"npm init -y\";\n const _package_json_file = path.resolve(CONFIG.get(\"projectPath\"), \"./package.json\");\n logger.debug(\"_package_json_file: \" + _package_json_file);\n logger.debug(createAppCommand);\n\n exec(createAppCommand, (err) => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n exec(`npm i --save-dev ${appTemplateName}`, () => {\n\n (async () => {\n const _package_json_template_file = await import(_package_json_template_fname);\n _package_json_template_file.name = appName;\n _package_json_template_file.version = \"1.0.0\";\n _package_json_template_file.repository = {};\n fs.writeFileSync(_package_json_file, JSON.stringify(_package_json_template_file, null, 4));\n logger.info(\"Good! App Templates was installed!\");\n\n console.log(`Starting to copy files from app template ${appTemplateName} to your project...`);\n\n switchCommander.copyTemplate(path.resolve(findPackageNodePath(appTemplateName), appTemplateName), path.resolve(CONFIG.get(\"projectPath\"), \"./\"))\n .then(() => {\n\n exec(\"npm uninstall \" + appTemplateName + \" --save && npm cache verify\", err => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n /*\n switchCommander.generateServiceWorker(appName)\n .then(()=>{\n execSync(\"npm install --save-dev qcobjects-cli \");\n });\n */\n execSync(\"npm install --save-dev qcobjects-cli \");\n });\n\n exec(\"npm cache verify && npm i \", (err) => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n logger.info(\"Good! Your application is done. You can play with QCObjects now!\");\n\n logger.info(\"I will create the SSL certificates now. It may take some time...\");\n exec(\"qcobjects-createcert\", () => {\n logger.info(\"Test certificates generated\");\n\n const githubService = New(Service);\n githubService.url = \"https://raw.githubusercontent.com/QuickCorp/QCObjects/main/.gitignore\";\n githubService.headers = {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n \"User-Agent\": \"qcobjects-cli\"\n };\n githubService.done = () => { };\n serviceLoader(githubService)\n .then(({ service }: { service: any }) => {\n fs.writeFileSync(path.resolve(CONFIG.get(\"projectPath\"), \"./.gitignore\"), service.template);\n try {\n execSync(\"git init\");\n logger.debug(\"Git initialized.\");\n } catch (e) {\n logger.debug(\"Could not initialize git.\");\n }\n });\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n })\n .catch((e: any) => {\n console.log(e);\n });\n\n })().catch(e => console.error(e));\n\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n }).stdout?.on(\"data\", function () {\n console.log(\"App generation started...\");\n });\n\n },\n publish(_appName: any, _options: any) {\n logger.debug(\"publish is not yet implemented\");\n },\n upgradeToEnterprise(_appName: any, _options: any) {\n const switchCommander = this;\n void QCObjectsEnterprise.upgrade(switchCommander);\n }\n };\n program: any;\n\n constructor() {\n super();\n this.program = commander;\n }\n\n shellCommands(_shell_commands: any[]) {\n return new Promise(function (resolve_all, reject_all) {\n var _promises_set = _shell_commands.map(\n function (shell_command: any) {\n return (new Promise(\n function (resolve, reject) {\n logger.debug(shell_command);\n exec(shell_command, (err: any, stdout: unknown, stderr: any) => {\n if (!err) {\n resolve(stdout);\n } else {\n logger.debug(`[FAILED]: ${shell_command}`);\n logger.debug(`${stderr}`);\n reject(stderr as Error);\n }\n }).stdout?.on(\"data\", function (data: any) {\n logger.info(data);\n });\n })).catch(e => reject_all(e as Error));\n }\n );\n }).catch(e => console.log(e));\n }\n\n fileListRecursive(dir: string): string | string[] {\n var instance = this;\n return (fs.statSync(dir).isDirectory())\n ? (Array.prototype.concat(...fs.readdirSync(dir).map((f: any) => instance.fileListRecursive(path.join(dir, f))))\n .filter((f) => {\n return !f.startsWith(\".git\")\n && f.lastIndexOf(\".DS_Store\") == -1;\n })\n )\n : (dir);\n }\n\n register(email: any, phonenumber: any) {\n return new Promise(function (resolve, reject) {\n logger.info(\"I'm going to register your profile on the cloud...\");\n const cloudClient = New(QuickCorpCloud, {\n apiMethod: \"register\",\n data: { email: email, phonenumber: phonenumber }\n });\n // logger.debugEnabled = true;\n try {\n } catch (e) {\n console.log(\"\\u{1F926} Something went wrong \\u{1F926} when trying to register you in the cloud\");\n reject(e as Error);\n }\n\n });\n }\n\n generateServiceWorker(appName: any, dirPrefix = \"./\") {\n const writeContent = (component: any) => {\n const parsedText = component.parsedAssignmentText;\n logger.debug(\"Starting to write the sw file...\");\n fs.writeFile(`${dirPrefix}/sw.js`, parsedText, (err) => {\n if (err) {\n throw Error(err as never);\n }\n logger.info(\"Service Worker Generated\");\n console.log(\"\");\n console.log(\"Now simply put:\");\n console.log(\"CONFIG.set('serviceWorkerURI','/sw.js');\");\n console.log(\" In your init.js file \");\n console.log(\"\");\n console.log(\"To start your app in a local server \");\n console.log(\"Execute the command: \");\n console.log(\"> qcobjects launch <appname>\");\n console.log(\"\");\n });\n\n };\n\n\n class ServiceWorkerComponent extends Component {\n cached = false;\n templateURI = \"sw.js\";\n basePath = templatePwaPath;\n name = \"sw\";\n tplsource = \"default\";\n template = \"\";\n data: any;\n\n constructor({ name, data }: { name: string, data: any }) {\n super({ name, data });\n this.data = data;\n }\n\n done({ request, component }: { request: any, component: any }) {\n super.done({ request, component });\n writeContent(component);\n }\n }\n\n return new Promise(() => {\n var filelist = [\"/\"].concat(this.fileListRecursive(`${dirPrefix}`));\n if (typeof dirPrefix !== \"undefined\" && dirPrefix !== \"./\" && dirPrefix !== \".\") {\n filelist = filelist.map(f => f.replace(new RegExp(`${dirPrefix}/`), \"\"));\n }\n filelist = filelist.filter(function (fl) { return fl !== \"sw.js\" && (!fl.startsWith(\"node_modules/\")); });\n filelist = filelist.filter(fname => !fname.endsWith(\".pem\"));\n filelist = filelist.filter(fname => !fname.endsWith(\".sh\"));\n filelist = filelist.filter(fname => !(new RegExp(\"^package(.*).json$\")).test(fname));\n filelist = filelist.filter(fname => !fname.startsWith(\".\"));\n var fileListString = \"\\n\\t\\\"\" + filelist.join(\"\\\",\\n\\t\\\"\") + \"\\\"\";\n const component = new ServiceWorkerComponent({\n name: \"sw\",\n data: {\n appName: appName,\n appVersion: \"1.0.0\",\n filelist: fileListString\n }\n });\n\n setTimeout(() => {\n component.done({ request: null, component });\n }, 1000);\n\n\n });\n }\n\n copyTemplate(source: any, dest: any) {\n return new Promise<void>((resolve, reject) => {\n\n const copyDir = (source: any, dest: any, exclude: string[]) => {\n source = path.resolve(source);\n dest = path.resolve(dest);\n const dname = path.basename(source);\n const dirExcluded = (exclude.includes(dname));\n\n const isDir = (d: any) => {\n return (fs.existsSync(d) && fs.statSync(d).isDirectory()) ? (true) : (false);\n };\n\n const isFile = (d: any) => {\n return (fs.existsSync(d) && fs.statSync(d).isFile()) ? (true) : (false);\n };\n\n if (isDir(source) && !dirExcluded) {\n fs.mkdirSync(dest, { recursive: true });\n const paths = fs.readdirSync(source, { withFileTypes: true });\n const dirs = paths.filter((d: { isDirectory: () => any; }) => d.isDirectory());\n const files = paths.filter((f: { isFile: () => any; }) => f.isFile());\n ((paths, dirs, files, exclude) => {\n files.map((f: { name: any; }) => {\n const sourceFile = path.resolve(source, f.name);\n const destFile = path.resolve(dest, f.name);\n const fileExcluded = exclude.includes(f.name);\n if (isFile(sourceFile) && !fileExcluded) {\n logger.debug(`[publish:static] Copying files from ${sourceFile} to ${destFile} excluding ${exclude.join(\",\")}...`);\n fs.copyFileSync(sourceFile, destFile);\n logger.debug(`[publish:static] Copying files from ${sourceFile} to ${destFile} excluding ${exclude.join(\",\")}...DONE!`);\n }\n });\n dirs.map((d: { name: any; }) => {\n const sourceDir = path.resolve(source, d.name);\n const destDir = path.resolve(dest, d.name);\n copyDir(sourceDir, destDir, exclude);\n });\n })(paths, dirs, files, exclude);\n }\n\n };\n\n try {\n const exclude = [\n \"package.json\",\n \"node_modules\",\n \".DS_Store\"\n ];\n logger.info(`[create] Copying files from ${source} to ${dest} excluding ${exclude.join(\",\")}...`);\n copyDir(source, dest, (typeof exclude !== \"undefined\") ? (exclude) : ([]));\n resolve();\n } catch (e: any) {\n logger.warn(`Something went wrong trying to publish static files: ${e.message}`);\n reject(e as Error);\n }\n\n });\n\n }\n\n initCommand() {\n const switchCommander = this;\n if (process.argv.length > 1) {\n logger.debug(\"Installing Commands...\");\n\n switchCommander.program\n .version(__get_version_string__());\n switchCommander.program\n .command(\"create <appname>\")\n .description(\"Creates an app with <appname>\")\n .option(\"--pwa, --create-pwa\", \"Creates the progressive web app assets\")\n .option(\"--amp, --create-amp\", \"Creates the accelerated mobile pages assets\")\n .option(\"--php, --create-php\", \"Creates the PWA PHP assets\")\n .option(\"--custom, --create-custom <templateappname>\", \"Creates an App from any NPM package template\")\n .option(\"--tests, --create-tests\", \"Creates the test suite\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.create.call(switchCommander, args, options);\n });\n\n\n try {\n logger.debug(\"Loading Plugin Commands...\");\n const importPluginCommands = (switchCommander: any) => {\n return getPluginCommandsList()?.map((pluginCommand: { packageName: any; classFactory: any; plugin: any; }) => {\n try {\n logger.debug(`Loading plugin ${pluginCommand.packageName}`);\n const classFactory = pluginCommand.classFactory;\n pluginCommand.plugin = new classFactory({ switchCommander: switchCommander });\n } catch (e) {\n throw Error(`Something went wrong loading ${pluginCommand.packageName}`);\n }\n return pluginCommand;\n });\n };\n importPluginCommands(switchCommander);\n } catch (e: any) {\n throw Error(`Something went wrong loading plugins: ${e.message}`);\n }\n\n switchCommander.program.command(\"publish <appname>\")\n .description(\"Publishes an app with <appname>\")\n .option(\"--pwa, --create-pwa\", \"Publishes the progressive web app assets\")\n .option(\"--amp, --create-amp\", \"Publishes the accelerated mobile pages assets\")\n .option(\"--php, --create-php\", \"Creates the PWA PHP assets\")\n .option(\"--custom, --create-custom\", \"Creates an App from any NPM package template\")\n .option(\"--tests, --create-tests\", \"Publishes the test suite\")\n .action((args: any, options: any) => {\n switchCommander.choiceOption.publish.bind(switchCommander)(args, options);\n });\n\n switchCommander.program.command(\"upgrade-to-enterprise\")\n .description(\"Upgrades to QCObjects Enterprise Edition\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.upgradeToEnterprise.call(switchCommander, args, options);\n });\n switchCommander.program.command(\"generate-sw <appname>\")\n .option(\"-d, --dir <dirPrefix> \", \"creates the service worker in a specific dir <dirPrefix>\")\n .description(\"Generates the service worker <appname>\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.generateSw.call(switchCommander, args, options);\n });\n switchCommander.program.command(\"launch <appname>\")\n .description(\"Launches the application\")\n .action(function () {\n logger.info(\"Launching...\");\n setTimeout(() => {\n logger.info(\"Go to the browser and open https://localhost \");\n logger.info(\"Press Ctrl-C to stop serving \");\n exec(\"qcobjects-server\", () => {\n })\n .stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n }, 5000);\n // setTimeout(()=>{\n // execSync(\"open -a \\\"google chrome\\\" https://localhost\");\n // },6000);\n\n });\n\n switchCommander.program.on(\"--help\", function () {\n console.log(\"\");\n console.log(\"Use:\");\n console.log(\" $ qcobjects-cli [command] --help\");\n console.log(\" For detailed information of a command \");\n console.log(\"\");\n process.exit(0);\n });\n\n switchCommander.program.on(\"command:*\", function () {\n console.error(\"Invalid command: %s\\nSee --help for a list of available commands.\", switchCommander.program.args.join(\" \"));\n process.exit(1);\n });\n switchCommander.program.parse(process.argv);\n } else {\n console.log(\"\");\n console.log(\"Use:\");\n console.log(\" $ qcobjects-cli [command] --help\");\n console.log(\" For detailed information of a command \");\n console.log(\"\");\n process.exit(0);\n\n }\n\n }\n\n}\n\n\n\n\n CONFIG.set(\"node_modules_path\", \"./node_modules/\");\n CONFIG.set(\"qcobjectsnewapp_path\", CONFIG.get(\"node_modules_path\") + \"/qcobjectsnewapp\");\n\n\n Package(\"org.quickcorp.qcobjects.cli\", [\n\n SwitchCommander\n ]);\n Export(SwitchCommander);\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * QCObjects CLI 2.5\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport \"qcobjects\";\n\nexport * as EnterpriseCommands from \"./enterprise-commands\";\nimport { Component, CONFIG, findPackageNodePath, InheritClass, logger, New, Service, serviceLoader, global, Package, Export } from \"qcobjects\";\nimport { QCObjectsEnterprise } from \"./enterprise-commands\";\nexport * as QuickCorpServices from \"./api-client_services\";\nimport { QuickCorpCloud } from \"./api-client_services\";\nexport * as customCommands from \"./cli-commands\";\nimport { __get_version__, __get_version_string__ } from \"./defaultsettings\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { exec, execSync } from \"node:child_process\";\nimport commander from \"commander\";\n\nconst templatePwaPath = path.resolve(__dirname, \"./templates/pwa/\") + \"/\";\n\nexport const getPluginCommandsList = () => {\n return global.ClassesList?.filter((c: { packageName: string; }) => c.packageName.startsWith(\"com.qcobjects.cli.commands.\"))\n .filter((p: { classFactory: { name: string; }; }) => p.classFactory.name.endsWith(\"CommandHandler\"));\n};\n\n\nexport class SwitchCommander extends InheritClass {\n\n choiceOption = {\n generateSw: (_appName: boolean, options: { dir: any; }) => {\n const dirPrefix = options.dir;\n const switchCommander = this;\n const appName = (typeof _appName === \"undefined\" || _appName === true) ? (\"MyAppName\") : (_appName);\n switchCommander.generateServiceWorker(appName, dirPrefix)\n .catch((e: any) => { logger.warn(`An error ocurred while creating service worker: ${e}`); });\n\n },\n create: (_appName: boolean, options: { createAmp: any; createPwa: any; createPhp: any; createCustom: any; }) => {\n const version = __get_version__();\n const switchCommander = this;\n const appName = (typeof _appName === \"undefined\" || _appName === true) ? (\"MyAppName\") : (_appName);\n\n\n let appTemplateName;\n\n if (options.createAmp) {\n appTemplateName = \"qcobjects-ecommerce-amp\";\n } else if (options.createPwa) {\n appTemplateName = \"qcobjectsnewapp\";\n } else if (options.createPhp) {\n appTemplateName = \"qcobjectsnewphp\";\n } else if (options.createCustom) {\n appTemplateName = options.createCustom;\n } else {\n appTemplateName = \"qcobjectsnewapp\";\n }\n CONFIG.set(\"qcobjectsnewapp_path\", CONFIG.get(\"node_modules_path\") + \"/\" + appTemplateName);\n\n const _package_json_template_fname = path.resolve(CONFIG.get(\"qcobjectsnewapp_path\", \"qcobjectsnewapp\"), \"./package.json\");\n\n /* if (!process.platform.toLowerCase().startsWith(\"win\")){\n _package_json_content = _package_json_content.replace(/(\")/g, String.fromCharCode(92)+\"\\\"\");\n }*/\n\n const createAppCommand = \"npm init -y\";\n const _package_json_file = path.resolve(CONFIG.get(\"projectPath\"), \"./package.json\");\n logger.debug(\"_package_json_file: \" + _package_json_file);\n logger.debug(createAppCommand);\n\n exec(createAppCommand, (err) => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n exec(`npm i --save-dev ${appTemplateName}`, () => {\n\n (async () => {\n const _package_json_template_file = await import(_package_json_template_fname);\n _package_json_template_file.name = appName;\n _package_json_template_file.version = \"1.0.0\";\n _package_json_template_file.repository = {};\n fs.writeFileSync(_package_json_file, JSON.stringify(_package_json_template_file, null, 4));\n logger.info(\"Good! App Templates was installed!\");\n\n console.log(`Starting to copy files from app template ${appTemplateName} to your project...`);\n\n switchCommander.copyTemplate(path.resolve(findPackageNodePath(appTemplateName), appTemplateName), path.resolve(CONFIG.get(\"projectPath\"), \"./\"))\n .then(() => {\n\n exec(\"npm uninstall \" + appTemplateName + \" --save && npm cache verify\", err => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n /*\n switchCommander.generateServiceWorker(appName)\n .then(()=>{\n execSync(\"npm install --save-dev qcobjects-cli \");\n });\n */\n execSync(\"npm install --save-dev qcobjects-cli \");\n });\n\n exec(\"npm cache verify && npm i \", (err) => {\n if (err) {\n throw Error(err.message);\n // eslint-disable-next-line no-unreachable\n process.exit(1);\n return;\n }\n\n logger.info(\"Good! Your application is done. You can play with QCObjects now!\");\n\n logger.info(\"I will create the SSL certificates now. It may take some time...\");\n exec(\"qcobjects-createcert\", () => {\n logger.info(\"Test certificates generated\");\n\n const githubService = New(Service);\n githubService.url = \"https://raw.githubusercontent.com/QuickCorp/QCObjects/main/.gitignore\";\n githubService.headers = {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n \"User-Agent\": \"qcobjects-cli\"\n };\n githubService.done = () => { };\n serviceLoader(githubService)\n .then(({ service }: { service: any }) => {\n fs.writeFileSync(path.resolve(CONFIG.get(\"projectPath\"), \"./.gitignore\"), service.template);\n try {\n execSync(\"git init\");\n logger.debug(\"Git initialized.\");\n } catch (e) {\n logger.debug(\"Could not initialize git.\");\n }\n });\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n })\n .catch((e: any) => {\n console.log(e);\n });\n\n })().catch(e => console.error(e));\n\n\n }).stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n\n }).stdout?.on(\"data\", function () {\n console.log(\"App generation started...\");\n });\n\n },\n publish(_appName: any, _options: any) {\n logger.debug(\"publish is not yet implemented\");\n },\n upgradeToEnterprise(_appName: any, _options: any) {\n const switchCommander = this;\n void QCObjectsEnterprise.upgrade(switchCommander);\n }\n };\n program: any;\n\n constructor() {\n super();\n this.program = commander;\n }\n\n async shellCommands(_shell_commands: any[]) {\n const results: any[] = [];\n for (const shell_command of _shell_commands) {\n const result = await new Promise((resolve, reject) => {\n logger.debug(shell_command);\n const child = exec(shell_command, (err: any, stdout: unknown, stderr: any) => {\n if (!err) {\n resolve(stdout);\n } else {\n logger.debug(`[FAILED]: ${shell_command}`);\n logger.debug(`${stderr}`);\n reject(stderr as Error);\n }\n });\n child.stdout?.on(\"data\", function (data: any) {\n logger.info(data);\n });\n });\n results.push(result);\n }\n return results;\n }\n\n fileListRecursive(dir: string): string | string[] {\n var instance = this;\n return (fs.statSync(dir).isDirectory())\n ? (Array.prototype.concat(...fs.readdirSync(dir).map((f: any) => instance.fileListRecursive(path.join(dir, f))))\n .filter((f) => {\n return !f.startsWith(\".git\")\n && f.lastIndexOf(\".DS_Store\") == -1;\n })\n )\n : (dir);\n }\n\n register(email: any, phonenumber: any) {\n return new Promise(function (resolve, reject) {\n logger.info(\"I'm going to register your profile on the cloud...\");\n const cloudClient = New(QuickCorpCloud, {\n apiMethod: \"register\",\n data: { email: email, phonenumber: phonenumber }\n });\n // logger.debugEnabled = true;\n try {\n } catch (e) {\n console.log(\"\\u{1F926} Something went wrong \\u{1F926} when trying to register you in the cloud\");\n reject(e as Error);\n }\n\n });\n }\n\n generateServiceWorker(appName: any, dirPrefix = \"./\") {\n const writeContent = (component: any) => {\n const parsedText = component.parsedAssignmentText;\n logger.debug(\"Starting to write the sw file...\");\n fs.writeFile(`${dirPrefix}/sw.js`, parsedText, (err) => {\n if (err) {\n throw Error(err as never);\n }\n logger.info(\"Service Worker Generated\");\n console.log(\"\");\n console.log(\"Now simply put:\");\n console.log(\"CONFIG.set('serviceWorkerURI','/sw.js');\");\n console.log(\" In your init.js file \");\n console.log(\"\");\n console.log(\"To start your app in a local server \");\n console.log(\"Execute the command: \");\n console.log(\"> qcobjects launch <appname>\");\n console.log(\"\");\n });\n\n };\n\n\n class ServiceWorkerComponent extends Component {\n cached = false;\n templateURI = \"sw.js\";\n basePath = templatePwaPath;\n name = \"sw\";\n tplsource = \"default\";\n template = \"\";\n data: any;\n\n constructor({ name, data }: { name: string, data: any }) {\n super({ name, data });\n this.data = data;\n }\n\n done({ request, component }: { request: any, component: any }) {\n super.done({ request, component });\n writeContent(component);\n }\n }\n\n return new Promise(() => {\n var filelist = [\"/\"].concat(this.fileListRecursive(`${dirPrefix}`));\n if (typeof dirPrefix !== \"undefined\" && dirPrefix !== \"./\" && dirPrefix !== \".\") {\n filelist = filelist.map(f => f.replace(new RegExp(`${dirPrefix}/`), \"\"));\n }\n filelist = filelist.filter(function (fl) { return fl !== \"sw.js\" && (!fl.startsWith(\"node_modules/\")); });\n filelist = filelist.filter(fname => !fname.endsWith(\".pem\"));\n filelist = filelist.filter(fname => !fname.endsWith(\".sh\"));\n filelist = filelist.filter(fname => !(new RegExp(\"^package(.*).json$\")).test(fname));\n filelist = filelist.filter(fname => !fname.startsWith(\".\"));\n var fileListString = \"\\n\\t\\\"\" + filelist.join(\"\\\",\\n\\t\\\"\") + \"\\\"\";\n const component = new ServiceWorkerComponent({\n name: \"sw\",\n data: {\n appName: appName,\n appVersion: \"1.0.0\",\n filelist: fileListString\n }\n });\n\n setTimeout(() => {\n component.done({ request: null, component });\n }, 1000);\n\n\n });\n }\n\n copyTemplate(source: any, dest: any) {\n return new Promise<void>((resolve, reject) => {\n\n const copyDir = (source: any, dest: any, exclude: string[]) => {\n source = path.resolve(source);\n dest = path.resolve(dest);\n const dname = path.basename(source);\n const dirExcluded = (exclude.includes(dname));\n\n const isDir = (d: any) => {\n return (fs.existsSync(d) && fs.statSync(d).isDirectory()) ? (true) : (false);\n };\n\n const isFile = (d: any) => {\n return (fs.existsSync(d) && fs.statSync(d).isFile()) ? (true) : (false);\n };\n\n if (isDir(source) && !dirExcluded) {\n fs.mkdirSync(dest, { recursive: true });\n const paths = fs.readdirSync(source, { withFileTypes: true });\n const dirs = paths.filter((d: { isDirectory: () => any; }) => d.isDirectory());\n const files = paths.filter((f: { isFile: () => any; }) => f.isFile());\n ((paths, dirs, files, exclude) => {\n files.map((f: { name: any; }) => {\n const sourceFile = path.resolve(source, f.name);\n const destFile = path.resolve(dest, f.name);\n const fileExcluded = exclude.includes(f.name);\n if (isFile(sourceFile) && !fileExcluded) {\n logger.debug(`[publish:static] Copying files from ${sourceFile} to ${destFile} excluding ${exclude.join(\",\")}...`);\n fs.copyFileSync(sourceFile, destFile);\n logger.debug(`[publish:static] Copying files from ${sourceFile} to ${destFile} excluding ${exclude.join(\",\")}...DONE!`);\n }\n });\n dirs.map((d: { name: any; }) => {\n const sourceDir = path.resolve(source, d.name);\n const destDir = path.resolve(dest, d.name);\n copyDir(sourceDir, destDir, exclude);\n });\n })(paths, dirs, files, exclude);\n }\n\n };\n\n try {\n const exclude = [\n \"package.json\",\n \"node_modules\",\n \".DS_Store\"\n ];\n logger.info(`[create] Copying files from ${source} to ${dest} excluding ${exclude.join(\",\")}...`);\n copyDir(source, dest, (typeof exclude !== \"undefined\") ? (exclude) : ([]));\n resolve();\n } catch (e: any) {\n logger.warn(`Something went wrong trying to publish static files: ${e.message}`);\n reject(e as Error);\n }\n\n });\n\n }\n\n initCommand() {\n const switchCommander = this;\n if (process.argv.length > 1) {\n logger.debug(\"Installing Commands...\");\n\n switchCommander.program\n .version(__get_version_string__());\n switchCommander.program\n .command(\"create <appname>\")\n .description(\"Creates an app with <appname>\")\n .option(\"--pwa, --create-pwa\", \"Creates the progressive web app assets\")\n .option(\"--amp, --create-amp\", \"Creates the accelerated mobile pages assets\")\n .option(\"--php, --create-php\", \"Creates the PWA PHP assets\")\n .option(\"--custom, --create-custom <templateappname>\", \"Creates an App from any NPM package template\")\n .option(\"--tests, --create-tests\", \"Creates the test suite\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.create.call(switchCommander, args, options);\n });\n\n\n try {\n logger.debug(\"Loading Plugin Commands...\");\n const importPluginCommands = (switchCommander: any) => {\n return getPluginCommandsList()?.map((pluginCommand: { packageName: any; classFactory: any; plugin: any; }) => {\n try {\n logger.debug(`Loading plugin ${pluginCommand.packageName}`);\n const classFactory = pluginCommand.classFactory;\n pluginCommand.plugin = new classFactory({ switchCommander: switchCommander });\n } catch (e) {\n throw Error(`Something went wrong loading ${pluginCommand.packageName}`);\n }\n return pluginCommand;\n });\n };\n importPluginCommands(switchCommander);\n } catch (e: any) {\n throw Error(`Something went wrong loading plugins: ${e.message}`);\n }\n\n switchCommander.program.command(\"publish <appname>\")\n .description(\"Publishes an app with <appname>\")\n .option(\"--pwa, --create-pwa\", \"Publishes the progressive web app assets\")\n .option(\"--amp, --create-amp\", \"Publishes the accelerated mobile pages assets\")\n .option(\"--php, --create-php\", \"Creates the PWA PHP assets\")\n .option(\"--custom, --create-custom\", \"Creates an App from any NPM package template\")\n .option(\"--tests, --create-tests\", \"Publishes the test suite\")\n .action((args: any, options: any) => {\n switchCommander.choiceOption.publish.bind(switchCommander)(args, options);\n });\n\n switchCommander.program.command(\"upgrade-to-enterprise\")\n .description(\"Upgrades to QCObjects Enterprise Edition\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.upgradeToEnterprise.call(switchCommander, args, options);\n });\n switchCommander.program.command(\"generate-sw <appname>\")\n .option(\"-d, --dir <dirPrefix> \", \"creates the service worker in a specific dir <dirPrefix>\")\n .description(\"Generates the service worker <appname>\")\n .action(function (args: any, options: any) {\n switchCommander.choiceOption.generateSw.call(switchCommander, args, options);\n });\n switchCommander.program.command(\"launch <appname>\")\n .description(\"Launches the application\")\n .action(function () {\n logger.info(\"Launching...\");\n setTimeout(() => {\n logger.info(\"Go to the browser and open https://localhost \");\n logger.info(\"Press Ctrl-C to stop serving \");\n exec(\"qcobjects-server\", () => {\n })\n .stdout?.on(\"data\", function (data: any) {\n console.log(data);\n });\n }, 5000);\n // setTimeout(()=>{\n // execSync(\"open -a \\\"google chrome\\\" https://localhost\");\n // },6000);\n\n });\n\n switchCommander.program.on(\"--help\", function () {\n console.log(\"\");\n console.log(\"Use:\");\n console.log(\" $ qcobjects-cli [command] --help\");\n console.log(\" For detailed information of a command \");\n console.log(\"\");\n process.exit(0);\n });\n\n switchCommander.program.on(\"command:*\", function () {\n console.error(\"Invalid command: %s\\nSee --help for a list of available commands.\", switchCommander.program.args.join(\" \"));\n process.exit(1);\n });\n switchCommander.program.parse(process.argv);\n } else {\n console.log(\"\");\n console.log(\"Use:\");\n console.log(\" $ qcobjects-cli [command] --help\");\n console.log(\" For detailed information of a command \");\n console.log(\"\");\n process.exit(0);\n\n }\n\n }\n\n}\n\n\n\n\n CONFIG.set(\"node_modules_path\", \"./node_modules/\");\n CONFIG.set(\"qcobjectsnewapp_path\", CONFIG.get(\"node_modules_path\") + \"/qcobjectsnewapp\");\n\n\n Package(\"org.quickcorp.qcobjects.cli\", [\n\n SwitchCommander\n ]);\n Export(SwitchCommander);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["err", "source", "dest", "paths", "dirs", "files", "exclude", "switchCommander"]
|
|
7
7
|
}
|
package/public/types/index.d.ts
CHANGED
|
@@ -152,7 +152,7 @@ declare module "cli-main" {
|
|
|
152
152
|
};
|
|
153
153
|
program: any;
|
|
154
154
|
constructor();
|
|
155
|
-
shellCommands(_shell_commands: any[]): Promise<
|
|
155
|
+
shellCommands(_shell_commands: any[]): Promise<any[]>;
|
|
156
156
|
fileListRecursive(dir: string): string | string[];
|
|
157
157
|
register(email: any, phonenumber: any): Promise<unknown>;
|
|
158
158
|
generateServiceWorker(appName: any, dirPrefix?: string): Promise<unknown>;
|
package/transpile.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
const ts = require('typescript');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const { readFileSync, writeFileSync } = require('fs');
|
|
4
|
+
const glob = require('glob');
|
|
3
5
|
|
|
4
6
|
// Get the tsconfig file name from command line arguments
|
|
5
7
|
const configFileName = process.argv[2];
|
|
@@ -59,6 +61,36 @@ if (emittedFiles.length > 0) {
|
|
|
59
61
|
emittedFiles.forEach(file => console.log(file));
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
// Post-process CJS output: convert await import(var) → require(var) for data file imports
|
|
65
|
+
// Detects variables assigned to paths ending in .json/.jsonp/.md/.mdc/.text/.txt
|
|
66
|
+
const extensionsToConvert = ['json', 'jsonp', 'md', 'mdc', 'text', 'txt'];
|
|
67
|
+
const extPattern = extensionsToConvert.join('|');
|
|
68
|
+
const varDeclRegex = new RegExp(
|
|
69
|
+
`(?:const|let|var)\\s+(\\w+)\\s*=[^;]*?\\.(?:${extPattern})["'\`][^;]*;`,
|
|
70
|
+
'g'
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
glob.sync('public/cjs/**/*.js').forEach(file => {
|
|
74
|
+
const content = readFileSync(file, 'utf8');
|
|
75
|
+
|
|
76
|
+
const jsonVars = new Set();
|
|
77
|
+
let match;
|
|
78
|
+
while ((match = varDeclRegex.exec(content)) !== null) {
|
|
79
|
+
jsonVars.add(match[1]);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (jsonVars.size > 0) {
|
|
83
|
+
const importRegex = new RegExp(
|
|
84
|
+
`await import\\((${[...jsonVars].join('|')})\\)`,
|
|
85
|
+
'g'
|
|
86
|
+
);
|
|
87
|
+
const newContent = content.replace(importRegex, 'require($1)');
|
|
88
|
+
if (newContent !== content) {
|
|
89
|
+
writeFileSync(file, newContent, 'utf8');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
62
94
|
// Exit with an appropriate code
|
|
63
95
|
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
|
64
96
|
console.log(`Process exiting with code '${exitCode}'.`);
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
|
3
|
-
|
|
4
|
-
name: Node.js Publish Beta version
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
push:
|
|
8
|
-
tags:
|
|
9
|
-
- 'v*.*.*-beta'
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
build:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
with:
|
|
17
|
-
token: ${{ secrets.GITHUB_TOKEN }}
|
|
18
|
-
ref: ${{ github.ref }}
|
|
19
|
-
- uses: actions/setup-node@v4
|
|
20
|
-
with:
|
|
21
|
-
node-version: 22
|
|
22
|
-
- run: npm i --legacy-peer-deps
|
|
23
|
-
- run: npm test
|
|
24
|
-
|
|
25
|
-
publish-npm:
|
|
26
|
-
needs: build
|
|
27
|
-
runs-on: ubuntu-latest
|
|
28
|
-
permissions:
|
|
29
|
-
contents: read
|
|
30
|
-
id-token: write
|
|
31
|
-
steps:
|
|
32
|
-
- uses: actions/checkout@v4
|
|
33
|
-
with:
|
|
34
|
-
token: ${{ secrets.GITHUB_TOKEN }}
|
|
35
|
-
ref: ${{ github.ref }}
|
|
36
|
-
- uses: actions/setup-node@v4
|
|
37
|
-
with:
|
|
38
|
-
node-version: 22
|
|
39
|
-
- name: Upgrade npm for OIDC support (requires >=11.5.1)
|
|
40
|
-
run: npm install -g npm@latest
|
|
41
|
-
- run: npm i --legacy-peer-deps
|
|
42
|
-
- run: npm test
|
|
43
|
-
- run: npm publish --tag beta
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
|
3
|
-
|
|
4
|
-
name: Node.js Publish Package
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
push:
|
|
8
|
-
tags:
|
|
9
|
-
- 'v*.*.*'
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
build:
|
|
13
|
-
if: ${{ !contains(github.ref, '-') }}
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
steps:
|
|
16
|
-
- uses: actions/checkout@v4
|
|
17
|
-
with:
|
|
18
|
-
token: ${{ secrets.GITHUB_TOKEN }}
|
|
19
|
-
ref: ${{ github.ref }}
|
|
20
|
-
- uses: actions/setup-node@v4
|
|
21
|
-
with:
|
|
22
|
-
node-version: 22
|
|
23
|
-
- run: npm i --legacy-peer-deps
|
|
24
|
-
- run: npm test
|
|
25
|
-
|
|
26
|
-
publish-npm:
|
|
27
|
-
needs: build
|
|
28
|
-
if: ${{ !contains(github.ref, '-') }}
|
|
29
|
-
runs-on: ubuntu-latest
|
|
30
|
-
permissions:
|
|
31
|
-
contents: read
|
|
32
|
-
id-token: write
|
|
33
|
-
steps:
|
|
34
|
-
- uses: actions/checkout@v4
|
|
35
|
-
with:
|
|
36
|
-
token: ${{ secrets.GITHUB_TOKEN }}
|
|
37
|
-
ref: ${{ github.ref }}
|
|
38
|
-
- uses: actions/setup-node@v4
|
|
39
|
-
with:
|
|
40
|
-
node-version: 22
|
|
41
|
-
- name: Upgrade npm for OIDC support (requires >=11.5.1)
|
|
42
|
-
run: npm install -g npm@latest
|
|
43
|
-
- run: npm i --legacy-peer-deps
|
|
44
|
-
- run: npm publish
|