@shortlink-org/portolan 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -205
- package/cli/init.mjs +285 -0
- package/cli/init.test.mjs +158 -0
- package/cli/portolan.mjs +37 -73
- package/index.html +19 -0
- package/package.json +5 -10
- package/plugins/README.md +66 -27
- package/plugins/portolan-go.wasm +0 -0
- package/portolan.json +52 -73
- package/public/landing/cats/bug-hunter.webp +0 -0
- package/public/landing/cats/compass-nap.webp +0 -0
- package/public/landing/cats/diagrammer.webp +0 -0
- package/public/landing/cats/docs-reader.webp +0 -0
- package/public/landing/cats/laptop.webp +0 -0
- package/public/landing/cats/map-inspector.webp +0 -0
- package/public/landing/cats/server-break.webp +0 -0
- package/public/landing/cats/star-mapper.webp +0 -0
- package/public/landing/cats/system-builder.webp +0 -0
- package/public/landing/cats/thread-tangle.webp +0 -0
- package/public/og.png +0 -0
- package/public/readme-header.webp +0 -0
- package/schema/portolan.schema.json +180 -0
- package/scripts/builtin-plugins.mjs +14 -0
- package/scripts/delivery-presets.mjs +353 -0
- package/scripts/gen.mjs +37 -4
- package/scripts/history.mjs +126 -0
- package/scripts/history.test.mjs +110 -0
- package/scripts/host-plugins/fetch-bsr.mjs +351 -0
- package/{plugins/fetch-bsr/options.schema.json → scripts/host-plugins/fetch-bsr.options.json} +4 -0
- package/scripts/host-plugins/fetch-bsr.test.mjs +212 -0
- package/scripts/host-plugins/fetch-csr.mjs +386 -0
- package/scripts/host-plugins/fetch-csr.test.mjs +178 -0
- package/scripts/host-plugins/fetch-git.mjs +379 -0
- package/scripts/host-plugins/fetch-git.test.mjs +210 -0
- package/scripts/local-api.mjs +22 -4
- package/scripts/local-api.test.mjs +84 -2
- package/scripts/manifest.mjs +3 -2
- package/scripts/package-smoke.mjs +6 -2
- package/scripts/plugin-host.mjs +77 -18
- package/scripts/plugin-host.test.mjs +50 -1
- package/scripts/plugin-wasm-worker.mjs +6 -3
- package/scripts/run-builtin.mjs +6 -26
- package/scripts/schema.mjs +6 -1
- package/src/app/App.tsx +24 -429
- package/src/app/Breadcrumbs.test.ts +7 -0
- package/src/app/Breadcrumbs.tsx +15 -2
- package/src/app/CatalogApp.tsx +436 -0
- package/src/app/Sidebar.tsx +0 -1
- package/src/chat/ChatPanel.tsx +98 -41
- package/src/chat/Composer.tsx +4 -2
- package/src/chat/Conversation.tsx +79 -15
- package/src/chat/Header.tsx +43 -9
- package/src/chat/Starter.tsx +64 -3
- package/src/chat/Steps.tsx +1 -1
- package/src/chat/flags.test.ts +51 -14
- package/src/chat/flags.ts +8 -2
- package/src/chat/page-context.test.ts +51 -0
- package/src/chat/page-context.ts +128 -0
- package/src/chat/prompt.test.ts +49 -1
- package/src/chat/prompt.ts +42 -1
- package/src/chat/tools.ts +7 -2
- package/src/chat/transport.ts +16 -4
- package/src/components/ProblemRow.tsx +182 -0
- package/src/data.ts +20 -5
- package/src/er/ErCanvas.tsx +1 -1
- package/src/graph/DependencyGraph.tsx +10 -1
- package/src/graph/FocusedEventGraph.tsx +1 -1
- package/src/graph/GraphToolbar.tsx +2 -4
- package/src/index.css +220 -2
- package/src/landing/DraggableReveal.tsx +168 -0
- package/src/landing/EstateGraph.tsx +28 -0
- package/src/landing/FlowPlayback.tsx +282 -0
- package/src/landing/HeroMap.tsx +128 -0
- package/src/landing/LandingPage.tsx +757 -0
- package/src/landing/ProductFrame.tsx +68 -0
- package/src/landing/ProductTour.tsx +371 -0
- package/src/landing/catalog.ts +25 -0
- package/src/landing/motion.tsx +52 -0
- package/src/lib/all-problems.ts +28 -0
- package/src/lib/local-api.ts +35 -1
- package/src/lib/setup-info.test.ts +8 -0
- package/src/lib/setup-info.ts +3 -2
- package/src/lib/source-code.ts +2 -1
- package/src/likec4/C4View.tsx +5 -0
- package/src/likec4/InteractiveView.tsx +5 -1
- package/src/map/ContextMapGraph.tsx +47 -20
- package/src/pages/ContextMap.tsx +5 -1
- package/src/pages/FlowDetail.tsx +24 -7
- package/src/pages/Overview.tsx +68 -12
- package/src/pages/Problems.tsx +6 -193
- package/src/pages/Settings.tsx +133 -108
- package/src/pages/settings/DeliverySettings.tsx +229 -0
- package/src/pages/settings/PreferencesSettings.tsx +101 -0
- package/src/routes.test.ts +20 -0
- package/src/routes.ts +13 -1
- package/vite.config.ts +12 -8
- package/catalog/enum_test.go +0 -46
- package/catalog/model.go +0 -932
- package/catalog/roundtrip_test.go +0 -185
- package/catalog/via_test.go +0 -38
- package/go.mod +0 -14
- package/go.sum +0 -14
- package/internal/commands/cargo.go +0 -154
- package/internal/commands/commands.go +0 -143
- package/internal/commands/commands_test.go +0 -323
- package/internal/commands/gradle.go +0 -77
- package/internal/commands/justfile.go +0 -82
- package/internal/commands/makefile.go +0 -106
- package/internal/commands/maven.go +0 -93
- package/internal/commands/packagejson.go +0 -159
- package/internal/commands/pyproject.go +0 -169
- package/internal/commands/taskfile.go +0 -101
- package/internal/commands/testdata/estate/.cargo/config.toml +0 -7
- package/internal/commands/testdata/estate/Makefile +0 -33
- package/internal/commands/testdata/estate/Taskfile.yml +0 -21
- package/internal/commands/testdata/estate/build.gradle.kts +0 -21
- package/internal/commands/testdata/estate/justfile +0 -20
- package/internal/commands/testdata/estate/package.json +0 -13
- package/internal/commands/testdata/estate/pom.xml +0 -29
- package/internal/commands/testdata/estate/pyproject.toml +0 -27
- package/internal/commands/testdata/estate/xtask/src/main.rs +0 -27
- package/internal/commands/testdata/golden/commands.json +0 -305
- package/internal/gohttp/analyze.go +0 -2500
- package/internal/gohttp/endpoints.go +0 -1067
- package/internal/gohttp/roots.go +0 -320
- package/internal/gohttp/typed.go +0 -143
- package/internal/goscan/constants.go +0 -85
- package/internal/goscan/goscan_test.go +0 -227
- package/internal/goscan/names.go +0 -52
- package/internal/goscan/parse_test.go +0 -11
- package/internal/goscan/source.go +0 -36
- package/internal/goscan/tree.go +0 -155
- package/internal/goscan/types.go +0 -99
- package/internal/wsdl/ids.go +0 -127
- package/internal/wsdl/ids_test.go +0 -21
- package/internal/wsdl/model.go +0 -62
- package/internal/wsdl/parse.go +0 -920
- package/internal/wsdl/parse_test.go +0 -133
- package/plugin/describe.go +0 -107
- package/plugin/describe_test.go +0 -114
- package/plugin/protocol.go +0 -117
- package/plugin/schematest/schematest.go +0 -126
- package/plugins/extract-adr/describe.go +0 -19
- package/plugins/extract-adr/describe_test.go +0 -11
- package/plugins/extract-adr/extract.go +0 -153
- package/plugins/extract-adr/extract_test.go +0 -350
- package/plugins/extract-adr/history.go +0 -99
- package/plugins/extract-adr/main.go +0 -65
- package/plugins/extract-adr/parse.go +0 -642
- package/plugins/extract-adr/parse_test.go +0 -405
- package/plugins/extract-asyncapi/describe.go +0 -19
- package/plugins/extract-asyncapi/describe_test.go +0 -11
- package/plugins/extract-asyncapi/extract.go +0 -315
- package/plugins/extract-asyncapi/extract_test.go +0 -197
- package/plugins/extract-asyncapi/main.go +0 -48
- package/plugins/extract-asyncapi/spec.go +0 -151
- package/plugins/extract-commands/describe.go +0 -19
- package/plugins/extract-commands/describe_test.go +0 -11
- package/plugins/extract-commands/extract.go +0 -79
- package/plugins/extract-commands/extract_test.go +0 -92
- package/plugins/extract-commands/main.go +0 -55
- package/plugins/extract-csr/avro.go +0 -258
- package/plugins/extract-csr/describe.go +0 -19
- package/plugins/extract-csr/describe_test.go +0 -11
- package/plugins/extract-csr/extract.go +0 -338
- package/plugins/extract-csr/extract_test.go +0 -374
- package/plugins/extract-csr/jsonschema.go +0 -343
- package/plugins/extract-csr/lock.go +0 -25
- package/plugins/extract-csr/main.go +0 -84
- package/plugins/extract-csr/subject.go +0 -102
- package/plugins/extract-flows/describe.go +0 -19
- package/plugins/extract-flows/describe_test.go +0 -11
- package/plugins/extract-flows/extract.go +0 -91
- package/plugins/extract-flows/main.go +0 -45
- package/plugins/extract-flows/parse.go +0 -593
- package/plugins/extract-flows/parse_test.go +0 -204
- package/plugins/extract-glossary/describe.go +0 -19
- package/plugins/extract-glossary/describe_test.go +0 -11
- package/plugins/extract-glossary/extract.go +0 -115
- package/plugins/extract-glossary/extract_test.go +0 -220
- package/plugins/extract-glossary/main.go +0 -59
- package/plugins/extract-glossary/parse.go +0 -214
- package/plugins/extract-glossary/parse_test.go +0 -203
- package/plugins/extract-go/aggregate.go +0 -214
- package/plugins/extract-go/client.go +0 -409
- package/plugins/extract-go/client_test.go +0 -266
- package/plugins/extract-go/describe.go +0 -19
- package/plugins/extract-go/describe_test.go +0 -11
- package/plugins/extract-go/enum.go +0 -195
- package/plugins/extract-go/enum_test.go +0 -82
- package/plugins/extract-go/event.go +0 -99
- package/plugins/extract-go/extract.go +0 -191
- package/plugins/extract-go/extract_test.go +0 -261
- package/plugins/extract-go/flow.go +0 -1441
- package/plugins/extract-go/flow_test.go +0 -609
- package/plugins/extract-go/httpclient.go +0 -174
- package/plugins/extract-go/httpclient_test.go +0 -296
- package/plugins/extract-go/ids.go +0 -92
- package/plugins/extract-go/layout.go +0 -225
- package/plugins/extract-go/layout_test.go +0 -125
- package/plugins/extract-go/lifecycle.go +0 -324
- package/plugins/extract-go/lifecycle_test.go +0 -108
- package/plugins/extract-go/main.go +0 -79
- package/plugins/extract-go/operation.go +0 -157
- package/plugins/extract-go/source.go +0 -316
- package/plugins/extract-go/transport.go +0 -321
- package/plugins/extract-go/transport_test.go +0 -145
- package/plugins/extract-go/wiring.go +0 -434
- package/plugins/extract-go-nats/describe.go +0 -19
- package/plugins/extract-go-nats/describe_test.go +0 -11
- package/plugins/extract-go-nats/extract.go +0 -177
- package/plugins/extract-go-nats/extract_test.go +0 -389
- package/plugins/extract-go-nats/index.go +0 -379
- package/plugins/extract-go-nats/main.go +0 -42
- package/plugins/extract-go-nats/resolve.go +0 -161
- package/plugins/extract-go-nats/sites.go +0 -224
- package/plugins/extract-graphql/describe.go +0 -19
- package/plugins/extract-graphql/describe_test.go +0 -11
- package/plugins/extract-graphql/extract.go +0 -433
- package/plugins/extract-graphql/extract_test.go +0 -256
- package/plugins/extract-graphql/ids.go +0 -49
- package/plugins/extract-graphql/lex.go +0 -237
- package/plugins/extract-graphql/main.go +0 -51
- package/plugins/extract-graphql/parse.go +0 -621
- package/plugins/extract-graphql/parse_test.go +0 -122
- package/plugins/extract-http-clients/describe.go +0 -19
- package/plugins/extract-http-clients/describe_test.go +0 -11
- package/plugins/extract-http-clients/extract.go +0 -705
- package/plugins/extract-http-clients/extract_test.go +0 -1263
- package/plugins/extract-http-clients/main.go +0 -42
- package/plugins/extract-openapi/describe.go +0 -19
- package/plugins/extract-openapi/describe_test.go +0 -11
- package/plugins/extract-openapi/discover.go +0 -243
- package/plugins/extract-openapi/extract.go +0 -526
- package/plugins/extract-openapi/extract_test.go +0 -545
- package/plugins/extract-openapi/main.go +0 -75
- package/plugins/extract-openapi/spec.go +0 -350
- package/plugins/extract-project/describe.go +0 -19
- package/plugins/extract-project/describe_test.go +0 -11
- package/plugins/extract-project/extract.go +0 -221
- package/plugins/extract-project/extract_test.go +0 -109
- package/plugins/extract-project/main.go +0 -41
- package/plugins/extract-proto/ast.go +0 -125
- package/plugins/extract-proto/consumes.go +0 -77
- package/plugins/extract-proto/describe.go +0 -19
- package/plugins/extract-proto/extract.go +0 -293
- package/plugins/extract-proto/extract_test.go +0 -459
- package/plugins/extract-proto/ids.go +0 -89
- package/plugins/extract-proto/ids_test.go +0 -57
- package/plugins/extract-proto/lex.go +0 -285
- package/plugins/extract-proto/main.go +0 -100
- package/plugins/extract-proto/module.go +0 -120
- package/plugins/extract-proto/parse.go +0 -720
- package/plugins/extract-proto/parse_test.go +0 -307
- package/plugins/extract-proto/provides.go +0 -236
- package/plugins/extract-proto/resolve.go +0 -222
- package/plugins/extract-proto/resolve_test.go +0 -119
- package/plugins/extract-redis/describe.go +0 -19
- package/plugins/extract-redis/describe_test.go +0 -11
- package/plugins/extract-redis/extract.go +0 -183
- package/plugins/extract-redis/extract_test.go +0 -168
- package/plugins/extract-redis/keyspaces.go +0 -469
- package/plugins/extract-redis/main.go +0 -44
- package/plugins/extract-river/describe.go +0 -19
- package/plugins/extract-river/describe_test.go +0 -11
- package/plugins/extract-river/extract.go +0 -507
- package/plugins/extract-river/extract_test.go +0 -132
- package/plugins/extract-river/main.go +0 -42
- package/plugins/extract-sql/ddl.go +0 -893
- package/plugins/extract-sql/ddl_test.go +0 -401
- package/plugins/extract-sql/describe.go +0 -19
- package/plugins/extract-sql/describe_test.go +0 -11
- package/plugins/extract-sql/layout.go +0 -221
- package/plugins/extract-sql/layout_test.go +0 -55
- package/plugins/extract-sql/lineage.go +0 -107
- package/plugins/extract-sql/main.go +0 -141
- package/plugins/extract-sql/maps.go +0 -564
- package/plugins/extract-sql/maps_java.go +0 -117
- package/plugins/extract-sql/maps_rust.go +0 -333
- package/plugins/extract-sql/maps_rust_test.go +0 -70
- package/plugins/extract-sql/maps_test.go +0 -204
- package/plugins/extract-sql/maps_ts.go +0 -398
- package/plugins/extract-sql/maps_ts_test.go +0 -136
- package/plugins/extract-sql/projection.go +0 -70
- package/plugins/extract-sql/projection_test.go +0 -50
- package/plugins/extract-sql/store.go +0 -420
- package/plugins/extract-sql/store_test.go +0 -233
- package/plugins/extract-sql/view.go +0 -295
- package/plugins/extract-watermill/describe.go +0 -19
- package/plugins/extract-watermill/describe_test.go +0 -11
- package/plugins/extract-watermill/extract.go +0 -1228
- package/plugins/extract-watermill/extract_test.go +0 -234
- package/plugins/extract-watermill/main.go +0 -41
- package/plugins/extract-wsdl/describe.go +0 -19
- package/plugins/extract-wsdl/describe_test.go +0 -11
- package/plugins/extract-wsdl/extract.go +0 -148
- package/plugins/extract-wsdl/extract_test.go +0 -45
- package/plugins/extract-wsdl/main.go +0 -53
- package/plugins/fetch-bsr/auth.go +0 -114
- package/plugins/fetch-bsr/bsr.go +0 -240
- package/plugins/fetch-bsr/cache.go +0 -66
- package/plugins/fetch-bsr/describe.go +0 -19
- package/plugins/fetch-bsr/fetch.go +0 -192
- package/plugins/fetch-bsr/fetch_test.go +0 -465
- package/plugins/fetch-bsr/lock.go +0 -71
- package/plugins/fetch-bsr/main.go +0 -117
- package/plugins/fetch-csr/auth.go +0 -95
- package/plugins/fetch-csr/cache.go +0 -69
- package/plugins/fetch-csr/describe.go +0 -19
- package/plugins/fetch-csr/describe_test.go +0 -11
- package/plugins/fetch-csr/fetch.go +0 -254
- package/plugins/fetch-csr/fetch_test.go +0 -494
- package/plugins/fetch-csr/lock.go +0 -95
- package/plugins/fetch-csr/main.go +0 -122
- package/plugins/fetch-csr/registry.go +0 -209
- package/plugins/fetch-git/cache.go +0 -65
- package/plugins/fetch-git/describe.go +0 -19
- package/plugins/fetch-git/describe_test.go +0 -11
- package/plugins/fetch-git/fetch.go +0 -181
- package/plugins/fetch-git/fetch_test.go +0 -332
- package/plugins/fetch-git/git.go +0 -169
- package/plugins/fetch-git/lock.go +0 -72
- package/plugins/fetch-git/main.go +0 -127
- package/plugins/fetch-git/offline.go +0 -39
- package/plugins/fetch-git/pin.go +0 -90
- package/plugins/fetch-git/pin_test.go +0 -74
- package/plugins/gen-backstage/describe.go +0 -17
- package/plugins/gen-backstage/main.go +0 -22
- package/plugins/gen-backstage/plugin.go +0 -473
- package/plugins/gen-backstage/plugin_test.go +0 -145
- package/plugins/gen-backstage.wasm +0 -0
- package/plugins/gen-markdown/adr.go +0 -162
- package/plugins/gen-markdown/aggregate.go +0 -362
- package/plugins/gen-markdown/canonical.go +0 -93
- package/plugins/gen-markdown/context.go +0 -90
- package/plugins/gen-markdown/coverage_test.go +0 -89
- package/plugins/gen-markdown/describe.go +0 -19
- package/plugins/gen-markdown/describe_test.go +0 -11
- package/plugins/gen-markdown/external.go +0 -71
- package/plugins/gen-markdown/flow.go +0 -277
- package/plugins/gen-markdown/glossary.go +0 -76
- package/plugins/gen-markdown/glossary_test.go +0 -148
- package/plugins/gen-markdown/llms.go +0 -302
- package/plugins/gen-markdown/main.go +0 -22
- package/plugins/gen-markdown/markdown.go +0 -254
- package/plugins/gen-markdown/markdown_test.go +0 -100
- package/plugins/gen-markdown/module.go +0 -107
- package/plugins/gen-markdown/plugin.go +0 -39
- package/plugins/gen-markdown/quality_test.go +0 -176
- package/plugins/gen-markdown/redis_test.go +0 -38
- package/plugins/gen-markdown/render.go +0 -344
- package/plugins/gen-markdown/render_test.go +0 -186
- package/plugins/gen-markdown/service.go +0 -456
- package/plugins/gen-markdown/source.go +0 -177
- package/plugins/gen-markdown/store.go +0 -201
- package/plugins/gen-markdown.wasm +0 -0
- package/plugins/gen-mermaid/describe.go +0 -17
- package/plugins/gen-mermaid/main.go +0 -22
- package/plugins/gen-mermaid/plugin.go +0 -104
- package/plugins/gen-mermaid/plugin_test.go +0 -33
- package/plugins/gen-mermaid.wasm +0 -0
- package/plugins/openapi/ids.go +0 -261
- package/plugins/openapi/ids_test.go +0 -98
- package/plugins/verify-codeowners/describe.go +0 -19
- package/plugins/verify-codeowners/describe_test.go +0 -11
- package/plugins/verify-codeowners/main.go +0 -75
- package/plugins/verify-codeowners/match.go +0 -85
- package/plugins/verify-codeowners/match_test.go +0 -47
- package/plugins/verify-codeowners/owners.go +0 -164
- package/plugins/verify-codeowners/owners_test.go +0 -225
- package/plugins/verify-codeowners/parse.go +0 -90
- package/plugins/verify-codeowners/parse_test.go +0 -62
- package/plugins/verify-otel/describe.go +0 -19
- package/plugins/verify-otel/describe_test.go +0 -11
- package/plugins/verify-otel/main.go +0 -53
- package/plugins/verify-otel/match.go +0 -336
- package/plugins/verify-otel/otlp.go +0 -200
- package/plugins/verify-otel/verify.go +0 -734
- package/plugins/verify-otel/verify_test.go +0 -460
- /package/{plugins/fetch-csr/options.schema.json → scripts/host-plugins/fetch-csr.options.json} +0 -0
- /package/{plugins/fetch-git/options.schema.json → scripts/host-plugins/fetch-git.options.json} +0 -0
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
package commands
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"encoding/json"
|
|
5
|
-
"strings"
|
|
6
|
-
|
|
7
|
-
"github.com/shortlink-org/portolan/catalog"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
// readPackageJSON lists the scripts of a package manifest, in the order the
|
|
11
|
-
// file lists them, because the author put `build` before `deploy` for a
|
|
12
|
-
// reason and a sorted list would lose it. `pre` and `post` hooks of a listed
|
|
13
|
-
// script are folded into it, the way the runner runs them. The line to type
|
|
14
|
-
// is the runner's: npm keeps `start`, `test`, `stop` and `restart` as
|
|
15
|
-
// commands of their own, and a checkout with a pnpm or yarn lockfile is
|
|
16
|
-
// typed at that tool instead.
|
|
17
|
-
func readPackageJSON(file, src, runner string) ([]catalog.Command, []string) {
|
|
18
|
-
scripts, lines, err := packageScripts(src)
|
|
19
|
-
if err != nil {
|
|
20
|
-
return nil, []string{file + ": " + err.Error()}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
out := make([]catalog.Command, 0, len(scripts))
|
|
24
|
-
for _, script := range scripts {
|
|
25
|
-
out = append(out, catalog.Command{
|
|
26
|
-
Runner: runner,
|
|
27
|
-
Name: script.name,
|
|
28
|
-
Run: runLine(runner, script.name),
|
|
29
|
-
Body: script.body,
|
|
30
|
-
Source: at(file, lines[script.name]),
|
|
31
|
-
})
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return hooks(out, "pre", "post"), nil
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
type script struct{ name, body string }
|
|
38
|
-
|
|
39
|
-
// packageScripts walks the document token by token, which is the one way
|
|
40
|
-
// encoding/json will give back an object's keys in file order.
|
|
41
|
-
func packageScripts(src string) ([]script, map[string]int, error) {
|
|
42
|
-
dec := json.NewDecoder(strings.NewReader(src))
|
|
43
|
-
tok, err := dec.Token()
|
|
44
|
-
if err != nil || tok != json.Delim('{') {
|
|
45
|
-
return nil, nil, wrap("not a JSON object", err)
|
|
46
|
-
}
|
|
47
|
-
for dec.More() {
|
|
48
|
-
keyTok, err := dec.Token()
|
|
49
|
-
if err != nil {
|
|
50
|
-
return nil, nil, wrap("not a JSON object", err)
|
|
51
|
-
}
|
|
52
|
-
key, _ := keyTok.(string)
|
|
53
|
-
if key != "scripts" {
|
|
54
|
-
var skip json.RawMessage
|
|
55
|
-
if err := dec.Decode(&skip); err != nil {
|
|
56
|
-
return nil, nil, wrap("not a JSON object", err)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
continue
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
offset := int(dec.InputOffset())
|
|
63
|
-
var raw json.RawMessage
|
|
64
|
-
if err := dec.Decode(&raw); err != nil {
|
|
65
|
-
return nil, nil, wrap("scripts could not be read", err)
|
|
66
|
-
}
|
|
67
|
-
var byName map[string]string
|
|
68
|
-
if err := json.Unmarshal(raw, &byName); err != nil {
|
|
69
|
-
return nil, nil, wrap("scripts is not an object of strings", err)
|
|
70
|
-
}
|
|
71
|
-
order := keyOrder(raw)
|
|
72
|
-
scripts := make([]script, 0, len(order))
|
|
73
|
-
for _, name := range order {
|
|
74
|
-
scripts = append(scripts, script{name: name, body: byName[name]})
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return scripts, keyLines(src, offset, raw), nil
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return nil, nil, nil
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
func wrap(what string, err error) error {
|
|
84
|
-
if err == nil {
|
|
85
|
-
return errString(what)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return errString(what + ": " + err.Error())
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
type errString string
|
|
92
|
-
|
|
93
|
-
func (e errString) Error() string { return string(e) }
|
|
94
|
-
|
|
95
|
-
// keyOrder reads the keys of a JSON object in the order they are written.
|
|
96
|
-
func keyOrder(raw json.RawMessage) []string {
|
|
97
|
-
dec := json.NewDecoder(strings.NewReader(string(raw)))
|
|
98
|
-
if tok, err := dec.Token(); err != nil || tok != json.Delim('{') {
|
|
99
|
-
return nil
|
|
100
|
-
}
|
|
101
|
-
var keys []string
|
|
102
|
-
for dec.More() {
|
|
103
|
-
tok, err := dec.Token()
|
|
104
|
-
if err != nil {
|
|
105
|
-
return keys
|
|
106
|
-
}
|
|
107
|
-
if key, ok := tok.(string); ok {
|
|
108
|
-
keys = append(keys, key)
|
|
109
|
-
}
|
|
110
|
-
var skip json.RawMessage
|
|
111
|
-
if err := dec.Decode(&skip); err != nil {
|
|
112
|
-
return keys
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return keys
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// keyLines finds the line each script's key sits on. The decoder says where
|
|
120
|
-
// the `scripts` key ended, the object opens at the next brace, and each key's
|
|
121
|
-
// position inside the object is then a position in the file.
|
|
122
|
-
func keyLines(src string, offset int, raw json.RawMessage) map[string]int {
|
|
123
|
-
lines := map[string]int{}
|
|
124
|
-
brace := strings.Index(src[offset:], "{")
|
|
125
|
-
if brace < 0 {
|
|
126
|
-
return lines
|
|
127
|
-
}
|
|
128
|
-
start := offset + brace
|
|
129
|
-
object := string(raw)
|
|
130
|
-
for _, key := range keyOrder(raw) {
|
|
131
|
-
quoted := `"` + key + `"`
|
|
132
|
-
at := strings.Index(object, quoted)
|
|
133
|
-
if at < 0 {
|
|
134
|
-
continue
|
|
135
|
-
}
|
|
136
|
-
lines[key] = 1 + strings.Count(src[:start+at], "\n")
|
|
137
|
-
// Blank the key so a second script whose name contains this one
|
|
138
|
-
// (`build` inside `build:watch`) is not found at the first.
|
|
139
|
-
object = object[:at] + strings.Repeat(" ", len(quoted)) + object[at+len(quoted):]
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return lines
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
func runLine(runner, name string) string {
|
|
146
|
-
switch runner {
|
|
147
|
-
case "npm":
|
|
148
|
-
switch name {
|
|
149
|
-
case "start", "test", "stop", "restart":
|
|
150
|
-
return "npm " + name
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return "npm run " + name
|
|
154
|
-
case "bun":
|
|
155
|
-
return "bun run " + name
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return runner + " " + name
|
|
159
|
-
}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
package commands
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"regexp"
|
|
5
|
-
"strings"
|
|
6
|
-
|
|
7
|
-
"github.com/shortlink-org/portolan/catalog"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
var tomlHeader = regexp.MustCompile(`^\[([^\]]+)\]\s*$`)
|
|
11
|
-
var tomlKey = regexp.MustCompile(`^([A-Za-z0-9_.-]+|"[^"]+")\s*=\s*(.*)$`)
|
|
12
|
-
var tomlString = regexp.MustCompile(`^(?:"((?:[^"\\]|\\.)*)"|'([^']*)')`)
|
|
13
|
-
var tomlInlineField = regexp.MustCompile(`(\w+)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|'([^']*)'|\[([^\]]*)\])`)
|
|
14
|
-
|
|
15
|
-
// readPyproject lists the tasks of the two task runners that live in
|
|
16
|
-
// pyproject.toml: poe (`[tool.poe.tasks]`) and pdm (`[tool.pdm.scripts]`).
|
|
17
|
-
// Python has no runner of its own, and uv has no task section, so a
|
|
18
|
-
// pyproject without one of these tables declares no commands.
|
|
19
|
-
//
|
|
20
|
-
// The reader is a line scanner, not a TOML parser: it follows table headers
|
|
21
|
-
// and reads `name = "cmd"`, `name = ["cmd", "arg"]`, `name = { cmd = "...",
|
|
22
|
-
// help = "..." }` and `[tool.poe.tasks.name]` subtables. That is the whole of
|
|
23
|
-
// what either runner's documentation shows, and a full parser would be a
|
|
24
|
-
// dependency for the sake of shapes nobody writes.
|
|
25
|
-
func readPyproject(file, src string) []catalog.Command {
|
|
26
|
-
runners := []struct {
|
|
27
|
-
table string
|
|
28
|
-
runner string
|
|
29
|
-
run string
|
|
30
|
-
}{
|
|
31
|
-
{"tool.poe.tasks", "poe", "poe "},
|
|
32
|
-
{"tool.pdm.scripts", "pdm", "pdm run "},
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
lines := strings.Split(src, "\n")
|
|
36
|
-
var out []catalog.Command
|
|
37
|
-
for _, r := range runners {
|
|
38
|
-
var cmds []catalog.Command
|
|
39
|
-
byName := map[string]int{}
|
|
40
|
-
upsert := func(cmd catalog.Command) {
|
|
41
|
-
if i, ok := byName[cmd.Name]; ok {
|
|
42
|
-
if cmd.Doc != "" {
|
|
43
|
-
cmds[i].Doc = cmd.Doc
|
|
44
|
-
}
|
|
45
|
-
if cmd.Body != "" {
|
|
46
|
-
cmds[i].Body = cmd.Body
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return
|
|
50
|
-
}
|
|
51
|
-
byName[cmd.Name] = len(cmds)
|
|
52
|
-
cmds = append(cmds, cmd)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
table := ""
|
|
56
|
-
for i, line := range lines {
|
|
57
|
-
text := strings.TrimSpace(line)
|
|
58
|
-
if m := tomlHeader.FindStringSubmatch(text); m != nil {
|
|
59
|
-
table = strings.TrimSpace(m[1])
|
|
60
|
-
|
|
61
|
-
continue
|
|
62
|
-
}
|
|
63
|
-
if text == "" || strings.HasPrefix(text, "#") {
|
|
64
|
-
continue
|
|
65
|
-
}
|
|
66
|
-
m := tomlKey.FindStringSubmatch(text)
|
|
67
|
-
if m == nil {
|
|
68
|
-
continue
|
|
69
|
-
}
|
|
70
|
-
key, value := strings.Trim(m[1], `"`), strings.TrimSpace(m[2])
|
|
71
|
-
|
|
72
|
-
switch {
|
|
73
|
-
case table == r.table:
|
|
74
|
-
// `name = ...` in the tasks table itself.
|
|
75
|
-
cmd := catalog.Command{Runner: r.runner, Name: key, Run: r.run + key, Source: at(file, i+1)}
|
|
76
|
-
cmd.Body, cmd.Doc = tomlTask(value)
|
|
77
|
-
upsert(cmd)
|
|
78
|
-
case strings.HasPrefix(table, r.table+"."):
|
|
79
|
-
// `[tool.poe.tasks.name]` and its fields.
|
|
80
|
-
name := strings.Trim(strings.TrimPrefix(table, r.table+"."), `"`)
|
|
81
|
-
cmd := catalog.Command{Runner: r.runner, Name: name, Run: r.run + name}
|
|
82
|
-
if _, known := byName[name]; !known {
|
|
83
|
-
cmd.Source = at(file, i+1)
|
|
84
|
-
for j := i - 1; j >= 0; j-- {
|
|
85
|
-
if tomlHeader.MatchString(strings.TrimSpace(lines[j])) {
|
|
86
|
-
cmd.Source = at(file, j+1)
|
|
87
|
-
|
|
88
|
-
break
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
switch key {
|
|
93
|
-
case "cmd", "script", "shell", "call", "expr", "ref":
|
|
94
|
-
cmd.Body = tomlScalar(value)
|
|
95
|
-
case "sequence", "composite":
|
|
96
|
-
cmd.Body = strings.Join(tomlList(value), "\n")
|
|
97
|
-
case "help":
|
|
98
|
-
cmd.Doc = tomlScalar(value)
|
|
99
|
-
}
|
|
100
|
-
upsert(cmd)
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
out = append(out, cmds...)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return hooks(filterTypeable(out), "pre_", "post_")
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
func filterTypeable(cmds []catalog.Command) []catalog.Command {
|
|
110
|
-
kept := cmds[:0]
|
|
111
|
-
for _, cmd := range cmds {
|
|
112
|
-
if typeable(cmd.Name) {
|
|
113
|
-
kept = append(kept, cmd)
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return kept
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// tomlTask reads the value of a task entry: a string, a list, or an inline
|
|
121
|
-
// table with a cmd and a help.
|
|
122
|
-
func tomlTask(value string) (body, doc string) {
|
|
123
|
-
switch {
|
|
124
|
-
case strings.HasPrefix(value, "{"):
|
|
125
|
-
for _, m := range tomlInlineField.FindAllStringSubmatch(value, -1) {
|
|
126
|
-
field := m[1]
|
|
127
|
-
text := unescape(m[2] + m[3])
|
|
128
|
-
switch field {
|
|
129
|
-
case "cmd", "script", "shell", "call", "expr", "ref":
|
|
130
|
-
body = text
|
|
131
|
-
case "sequence", "composite":
|
|
132
|
-
body = strings.Join(tomlList("["+m[4]+"]"), "\n")
|
|
133
|
-
case "help":
|
|
134
|
-
doc = text
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return body, doc
|
|
139
|
-
case strings.HasPrefix(value, "["):
|
|
140
|
-
return strings.Join(tomlList(value), " "), ""
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return tomlScalar(value), ""
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
func tomlScalar(value string) string {
|
|
147
|
-
if m := tomlString.FindStringSubmatch(value); m != nil {
|
|
148
|
-
return unescape(m[1] + m[2])
|
|
149
|
-
}
|
|
150
|
-
if strings.HasPrefix(value, `"""`) {
|
|
151
|
-
return strings.TrimSpace(strings.Trim(value, `"`))
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return strings.TrimSpace(value)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
func tomlList(value string) []string {
|
|
158
|
-
inner := strings.TrimSuffix(strings.TrimPrefix(strings.TrimSpace(value), "["), "]")
|
|
159
|
-
var items []string
|
|
160
|
-
for _, m := range regexp.MustCompile(`"((?:[^"\\]|\\.)*)"|'([^']*)'`).FindAllStringSubmatch(inner, -1) {
|
|
161
|
-
items = append(items, unescape(m[1]+m[2]))
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return items
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
func unescape(s string) string {
|
|
168
|
-
return strings.NewReplacer(`\"`, `"`, `\\`, `\`, `\n`, "\n", `\t`, "\t").Replace(s)
|
|
169
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
package commands
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"strings"
|
|
5
|
-
|
|
6
|
-
"gopkg.in/yaml.v3"
|
|
7
|
-
|
|
8
|
-
"github.com/shortlink-org/portolan/catalog"
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
// readTaskfile lists the tasks of a Taskfile, in the order the file lists
|
|
12
|
-
// them. A task marked `internal` is not one `task --list` offers and is not
|
|
13
|
-
// one here. `desc` is the doc, and `summary` stands in when there is no desc.
|
|
14
|
-
// The cmds are the body; a cmd that calls another task is written as the
|
|
15
|
-
// runner would show it.
|
|
16
|
-
func readTaskfile(file, src string) ([]catalog.Command, []string) {
|
|
17
|
-
var doc yaml.Node
|
|
18
|
-
if err := yaml.Unmarshal([]byte(src), &doc); err != nil {
|
|
19
|
-
return nil, []string{file + ": not YAML, so no tasks were read: " + err.Error()}
|
|
20
|
-
}
|
|
21
|
-
root := doc.Content
|
|
22
|
-
if len(root) == 0 || root[0].Kind != yaml.MappingNode {
|
|
23
|
-
return nil, nil
|
|
24
|
-
}
|
|
25
|
-
tasks := mappingValue(root[0], "tasks")
|
|
26
|
-
if tasks == nil || tasks.Kind != yaml.MappingNode {
|
|
27
|
-
return nil, nil
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
var out []catalog.Command
|
|
31
|
-
for i := 0; i+1 < len(tasks.Content); i += 2 {
|
|
32
|
-
key, value := tasks.Content[i], tasks.Content[i+1]
|
|
33
|
-
name := key.Value
|
|
34
|
-
if !typeable(name) {
|
|
35
|
-
continue
|
|
36
|
-
}
|
|
37
|
-
cmd := catalog.Command{
|
|
38
|
-
Runner: "task",
|
|
39
|
-
Name: name,
|
|
40
|
-
Run: "task " + name,
|
|
41
|
-
Source: at(file, key.Line),
|
|
42
|
-
}
|
|
43
|
-
switch value.Kind {
|
|
44
|
-
case yaml.ScalarNode:
|
|
45
|
-
cmd.Body = value.Value
|
|
46
|
-
case yaml.SequenceNode:
|
|
47
|
-
cmd.Body = strings.Join(cmdLines(value), "\n")
|
|
48
|
-
case yaml.MappingNode:
|
|
49
|
-
if internal := mappingValue(value, "internal"); internal != nil && internal.Value == "true" {
|
|
50
|
-
continue
|
|
51
|
-
}
|
|
52
|
-
if desc := mappingValue(value, "desc"); desc != nil {
|
|
53
|
-
cmd.Doc = strings.TrimSpace(desc.Value)
|
|
54
|
-
} else if summary := mappingValue(value, "summary"); summary != nil {
|
|
55
|
-
cmd.Doc = strings.TrimSpace(summary.Value)
|
|
56
|
-
}
|
|
57
|
-
if cmds := mappingValue(value, "cmds"); cmds != nil {
|
|
58
|
-
cmd.Body = strings.Join(cmdLines(cmds), "\n")
|
|
59
|
-
} else if single := mappingValue(value, "cmd"); single != nil {
|
|
60
|
-
cmd.Body = single.Value
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
out = append(out, cmd)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return out, nil
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
func mappingValue(node *yaml.Node, key string) *yaml.Node {
|
|
70
|
-
if node == nil || node.Kind != yaml.MappingNode {
|
|
71
|
-
return nil
|
|
72
|
-
}
|
|
73
|
-
for i := 0; i+1 < len(node.Content); i += 2 {
|
|
74
|
-
if node.Content[i].Value == key {
|
|
75
|
-
return node.Content[i+1]
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return nil
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
func cmdLines(node *yaml.Node) []string {
|
|
83
|
-
var lines []string
|
|
84
|
-
if node.Kind == yaml.ScalarNode {
|
|
85
|
-
return []string{strings.TrimSpace(node.Value)}
|
|
86
|
-
}
|
|
87
|
-
for _, item := range node.Content {
|
|
88
|
-
switch item.Kind {
|
|
89
|
-
case yaml.ScalarNode:
|
|
90
|
-
lines = append(lines, strings.TrimSpace(item.Value))
|
|
91
|
-
case yaml.MappingNode:
|
|
92
|
-
if cmd := mappingValue(item, "cmd"); cmd != nil {
|
|
93
|
-
lines = append(lines, strings.TrimSpace(cmd.Value))
|
|
94
|
-
} else if task := mappingValue(item, "task"); task != nil {
|
|
95
|
-
lines = append(lines, "task "+task.Value)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return lines
|
|
101
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# The stubs are generated from the contracts vendored in this tree.
|
|
2
|
-
GRPC := internal/transport/grpc
|
|
3
|
-
BIN ?= bin/pricing
|
|
4
|
-
|
|
5
|
-
.PHONY: help
|
|
6
|
-
help: ## List the targets
|
|
7
|
-
@grep -E '^[a-z].*##' $(MAKEFILE_LIST)
|
|
8
|
-
|
|
9
|
-
.PHONY: gen build
|
|
10
|
-
gen: ## Regenerate the gRPC stubs
|
|
11
|
-
buf generate $(GRPC)/quote/proto -o $(GRPC)/quote/gen
|
|
12
|
-
buf generate $(GRPC)/price_list/proto -o $(GRPC)/price_list/gen
|
|
13
|
-
|
|
14
|
-
# Compiles every package. Nothing is installed.
|
|
15
|
-
build:
|
|
16
|
-
go build ./...
|
|
17
|
-
|
|
18
|
-
test lint: build
|
|
19
|
-
go test ./...
|
|
20
|
-
|
|
21
|
-
_internal:
|
|
22
|
-
@true
|
|
23
|
-
|
|
24
|
-
$(BIN): build
|
|
25
|
-
cp out $(BIN)
|
|
26
|
-
|
|
27
|
-
%.pb.go: %.proto
|
|
28
|
-
protoc $<
|
|
29
|
-
|
|
30
|
-
ifeq ($(CI),1)
|
|
31
|
-
ci: test
|
|
32
|
-
@echo done
|
|
33
|
-
endif
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
version: "3"
|
|
2
|
-
|
|
3
|
-
tasks:
|
|
4
|
-
default:
|
|
5
|
-
cmds:
|
|
6
|
-
- task: build
|
|
7
|
-
build:
|
|
8
|
-
desc: Compile the binary
|
|
9
|
-
cmds:
|
|
10
|
-
- go build -o bin/svc ./cmd/svc
|
|
11
|
-
migrate:
|
|
12
|
-
summary: Apply pending migrations
|
|
13
|
-
cmd: goose up
|
|
14
|
-
_shared:
|
|
15
|
-
cmds:
|
|
16
|
-
- echo hidden
|
|
17
|
-
lint:
|
|
18
|
-
internal: true
|
|
19
|
-
cmds:
|
|
20
|
-
- golangci-lint run
|
|
21
|
-
fmt: gofmt -w .
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
plugins {
|
|
2
|
-
id("org.springframework.boot") version "4.1.1"
|
|
3
|
-
application
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
tasks.register<Exec>("generateProto") {
|
|
7
|
-
description = "Regenerate the gRPC stubs"
|
|
8
|
-
commandLine("buf", "generate")
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
tasks.register("_shared") {
|
|
12
|
-
doLast { println("hidden") }
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
val smokeTest by tasks.registering(Test::class) {
|
|
16
|
-
description = "Run the tests that need the compose stack"
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
task legacyTask {
|
|
20
|
-
doLast { println("old syntax") }
|
|
21
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
set shell := ["bash", "-cu"]
|
|
2
|
-
port := "8080"
|
|
3
|
-
|
|
4
|
-
alias t := test
|
|
5
|
-
|
|
6
|
-
# Run the service against the compose stack
|
|
7
|
-
dev:
|
|
8
|
-
docker compose up -d
|
|
9
|
-
cargo run
|
|
10
|
-
|
|
11
|
-
[doc("Run the tests, unit and integration")]
|
|
12
|
-
test *args:
|
|
13
|
-
cargo test {{args}}
|
|
14
|
-
|
|
15
|
-
[private]
|
|
16
|
-
release:
|
|
17
|
-
cargo build --release
|
|
18
|
-
|
|
19
|
-
_setup:
|
|
20
|
-
rustup default stable
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "cart",
|
|
3
|
-
"scripts": {
|
|
4
|
-
"build": "tsc -p tsconfig.build.json",
|
|
5
|
-
"prebuild": "rimraf dist",
|
|
6
|
-
"start": "node dist/main.js",
|
|
7
|
-
"test": "vitest run",
|
|
8
|
-
"build:watch": "tsc -w",
|
|
9
|
-
"generate": "npm run generate:api && npm run generate:auth",
|
|
10
|
-
"generate:api": "openapi-typescript openapi.yaml -o types.ts"
|
|
11
|
-
},
|
|
12
|
-
"dependencies": {}
|
|
13
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project>
|
|
3
|
-
<groupId>org.portolan.payments</groupId>
|
|
4
|
-
<artifactId>ledger</artifactId>
|
|
5
|
-
<packaging>jar</packaging>
|
|
6
|
-
<dependencies>
|
|
7
|
-
<dependency>
|
|
8
|
-
<artifactId>flyway-maven-plugin</artifactId>
|
|
9
|
-
</dependency>
|
|
10
|
-
</dependencies>
|
|
11
|
-
<build>
|
|
12
|
-
<pluginManagement>
|
|
13
|
-
<plugins>
|
|
14
|
-
<plugin>
|
|
15
|
-
<artifactId>jib-maven-plugin</artifactId>
|
|
16
|
-
</plugin>
|
|
17
|
-
</plugins>
|
|
18
|
-
</pluginManagement>
|
|
19
|
-
<plugins>
|
|
20
|
-
<plugin>
|
|
21
|
-
<groupId>org.springframework.boot</groupId>
|
|
22
|
-
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
23
|
-
</plugin>
|
|
24
|
-
<plugin>
|
|
25
|
-
<artifactId>protobuf-maven-plugin</artifactId>
|
|
26
|
-
</plugin>
|
|
27
|
-
</plugins>
|
|
28
|
-
</build>
|
|
29
|
-
</project>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "billing"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
|
|
5
|
-
[project.scripts]
|
|
6
|
-
billing = "billing.cli:main"
|
|
7
|
-
|
|
8
|
-
[tool.poe.tasks]
|
|
9
|
-
test = "pytest"
|
|
10
|
-
lint = ["ruff", "check", "."]
|
|
11
|
-
serve = { cmd = "python manage.py runserver", help = "Run the dev server" }
|
|
12
|
-
_hidden = "echo no"
|
|
13
|
-
|
|
14
|
-
[tool.poe.tasks.migrate]
|
|
15
|
-
help = "Apply pending migrations"
|
|
16
|
-
cmd = "python manage.py migrate"
|
|
17
|
-
|
|
18
|
-
[tool.poe.tasks.check]
|
|
19
|
-
sequence = ["lint", "test"]
|
|
20
|
-
|
|
21
|
-
[tool.pdm.scripts]
|
|
22
|
-
pre_test = "echo before"
|
|
23
|
-
test = "pytest -x"
|
|
24
|
-
|
|
25
|
-
[tool.pdm.scripts.worker]
|
|
26
|
-
shell = "celery -A billing worker"
|
|
27
|
-
help = "Run the celery worker"
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
use clap::{Parser, Subcommand};
|
|
2
|
-
|
|
3
|
-
#[derive(Parser)]
|
|
4
|
-
struct Cli {
|
|
5
|
-
#[command(subcommand)]
|
|
6
|
-
command: Command,
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
#[derive(Subcommand)]
|
|
10
|
-
enum Command {
|
|
11
|
-
/// Regenerate the gRPC stubs from the vendored protos
|
|
12
|
-
Gen,
|
|
13
|
-
/// Run fmt, clippy and the tests the way CI does
|
|
14
|
-
Ci { #[arg(long)] fix: bool },
|
|
15
|
-
#[command(about = "Build the release artefacts")]
|
|
16
|
-
Dist(DistArgs),
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
fn main() {
|
|
20
|
-
let arg = std::env::args().nth(1);
|
|
21
|
-
match arg.as_deref() {
|
|
22
|
-
Some("gen") => gen(),
|
|
23
|
-
// Run the benchmarks against the compose stack
|
|
24
|
-
Some("bench") | Some("perf") => bench(),
|
|
25
|
-
_ => usage(),
|
|
26
|
-
}
|
|
27
|
-
}
|