|
1 | 1 | package golang |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bufio" |
4 | 5 | "bytes" |
5 | 6 | "errors" |
6 | 7 | "fmt" |
@@ -49,18 +50,21 @@ func (s *GolangServerless) Init(opts *serverless.Options) error { |
49 | 50 |
|
50 | 51 | // append main function |
51 | 52 | ctx := Context{ |
52 | | - Name: s.opts.Name, |
53 | | - ZipperAddr: s.opts.ZipperAddr, |
54 | | - Credential: s.opts.Credential, |
55 | | - UseEnv: s.opts.UseEnv, |
| 53 | + Name: s.opts.Name, |
| 54 | + ZipperAddr: s.opts.ZipperAddr, |
| 55 | + Credential: s.opts.Credential, |
| 56 | + UseEnv: s.opts.UseEnv, |
| 57 | + WithInitFunc: containsInitWithoutComment(source), |
56 | 58 | } |
57 | 59 |
|
58 | 60 | // determine: rx stream serverless or raw bytes serverless. |
59 | 61 | isRx := strings.Contains(string(source), "rx.Stream") |
60 | 62 | isWasm := true |
61 | 63 | mainFuncTmpl := "" |
62 | | - mainFunc := WasmMainFuncTmpl |
63 | | - var err error |
| 64 | + mainFunc, err := RenderTmpl(string(WasmMainFuncTmpl), &ctx) |
| 65 | + if err != nil { |
| 66 | + return fmt.Errorf("Init: %s", err) |
| 67 | + } |
64 | 68 | if isRx { |
65 | 69 | if isWasm { |
66 | 70 | return errors.New("wasm does not support rx.Stream") |
@@ -251,6 +255,18 @@ func generateCode(fset *token.FileSet, file *ast.File) ([]byte, error) { |
251 | 255 | return buffer.Bytes(), nil |
252 | 256 | } |
253 | 257 |
|
| 258 | +func containsInitWithoutComment(source []byte) bool { |
| 259 | + scanner := bufio.NewScanner(bytes.NewReader(source)) |
| 260 | + for scanner.Scan() { |
| 261 | + line := strings.TrimLeft(scanner.Text(), " ") |
| 262 | + |
| 263 | + if strings.Contains(line, "Init()") && !strings.HasPrefix(line, "//") { |
| 264 | + return true |
| 265 | + } |
| 266 | + } |
| 267 | + return false |
| 268 | +} |
| 269 | + |
254 | 270 | func init() { |
255 | 271 | serverless.Register(&GolangServerless{}, ".go") |
256 | 272 | } |
0 commit comments