mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-21 13:35:49 +02:00
added timestamp to the generated JSVM types file to prevent creating it every time on app startup
This commit is contained in:
parent
0b4f3b2adf
commit
d6569b445c
@ -15,6 +15,8 @@
|
|||||||
A negative or zero value means no tests timeout.
|
A negative or zero value means no tests timeout.
|
||||||
If a single API test takes more than 3s to complete it will have a log message visible when the test fails or when `go test -v` flag is used.
|
If a single API test takes more than 3s to complete it will have a log message visible when the test fails or when `go test -v` flag is used.
|
||||||
|
|
||||||
|
- Added timestamp at the beginning of the generated JSVM types file to avoid creating it everytime with the app startup.
|
||||||
|
|
||||||
|
|
||||||
## v0.20.0
|
## v0.20.0
|
||||||
|
|
||||||
|
8973
plugins/jsvm/internal/types/generated/types.d.ts
vendored
8973
plugins/jsvm/internal/types/generated/types.d.ts
vendored
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/plugins/jsvm"
|
"github.com/pocketbase/pocketbase/plugins/jsvm"
|
||||||
@ -1095,6 +1097,10 @@ func main() {
|
|||||||
result = strings.ReplaceAll(result, "ORIGINAL_CORE_APP", "core.App")
|
result = strings.ReplaceAll(result, "ORIGINAL_CORE_APP", "core.App")
|
||||||
result = strings.ReplaceAll(result, "ORIGINAL_POCKETBASE", "pocketbase.PocketBase")
|
result = strings.ReplaceAll(result, "ORIGINAL_POCKETBASE", "pocketbase.PocketBase")
|
||||||
|
|
||||||
|
// prepend a timestamp with the generation time
|
||||||
|
// so that it can be compared without reading the entire file
|
||||||
|
result = fmt.Sprintf("// %d\n%s", time.Now().Unix(), result)
|
||||||
|
|
||||||
parentDir := filepath.Dir(filename)
|
parentDir := filepath.Dir(filename)
|
||||||
typesFile := filepath.Join(parentDir, "generated", "types.d.ts")
|
typesFile := filepath.Join(parentDir, "generated", "types.d.ts")
|
||||||
|
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
package jsvm
|
package jsvm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -77,6 +79,9 @@ type Config struct {
|
|||||||
// TypeScript declarations file.
|
// TypeScript declarations file.
|
||||||
//
|
//
|
||||||
// If not set it fallbacks to "pb_data".
|
// If not set it fallbacks to "pb_data".
|
||||||
|
//
|
||||||
|
// Note: Avoid using the same directory as the HooksDir when HooksWatch is enabled
|
||||||
|
// to prevent unnecessary app restarts when the types file is initially created.
|
||||||
TypesDir string
|
TypesDir string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,10 +122,9 @@ func Register(app core.App, config Config) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error {
|
p.app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error {
|
||||||
// always update the app types on start to ensure that
|
// ensure that the user has the latest types declaration
|
||||||
// the user has the latest generated declarations
|
if err := p.refreshTypesFile(); err != nil {
|
||||||
if err := p.saveTypesFile(); err != nil {
|
color.Yellow("Unable to refresh app types file: %v", err)
|
||||||
color.Yellow("Unable to save app types file: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -423,8 +427,8 @@ func (p *plugin) relativeTypesPath(basepath string) string {
|
|||||||
return rel
|
return rel
|
||||||
}
|
}
|
||||||
|
|
||||||
// saveTypesFile saves the embedded TS declarations as a file on the disk.
|
// refreshTypesFile saves the embedded TS declarations as a file on the disk.
|
||||||
func (p *plugin) saveTypesFile() error {
|
func (p *plugin) refreshTypesFile() error {
|
||||||
fullPath := p.fullTypesPath()
|
fullPath := p.fullTypesPath()
|
||||||
|
|
||||||
// ensure that the types directory exists
|
// ensure that the types directory exists
|
||||||
@ -439,11 +443,20 @@ func (p *plugin) saveTypesFile() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.WriteFile(fullPath, data, 0644); err != nil {
|
// read the first timestamp line of the old file (if exists) and compare it to the embedded one
|
||||||
return err
|
// (note: ignore errors to allow always overwriting the file if it is invalid)
|
||||||
|
existingFile, err := os.Open(fullPath)
|
||||||
|
if err == nil {
|
||||||
|
timestamp := make([]byte, 13)
|
||||||
|
io.ReadFull(existingFile, timestamp)
|
||||||
|
existingFile.Close()
|
||||||
|
|
||||||
|
if len(data) >= len(timestamp) && bytes.Equal(data[:13], timestamp) {
|
||||||
|
return nil // nothing new to save
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return os.WriteFile(fullPath, data, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
// prependToEmptyFile prepends the specified text to an empty file.
|
// prependToEmptyFile prepends the specified text to an empty file.
|
||||||
|
@ -203,7 +203,7 @@ func (pb *PocketBase) eagerParseFlags(config *Config) error {
|
|||||||
&pb.devFlag,
|
&pb.devFlag,
|
||||||
"dev",
|
"dev",
|
||||||
config.DefaultDev,
|
config.DefaultDev,
|
||||||
"enable dev mode, aka. printing logs and sql statements",
|
"enable dev mode, aka. printing logs and sql statements to the console",
|
||||||
)
|
)
|
||||||
|
|
||||||
return pb.RootCmd.ParseFlags(os.Args[1:])
|
return pb.RootCmd.ParseFlags(os.Args[1:])
|
||||||
|
Loading…
Reference in New Issue
Block a user