Skip to content

Commit

Permalink
Bumb to v0.0.8
Browse files Browse the repository at this point in the history
JadenSimon committed Jun 27, 2024
1 parent b64bfc7 commit 95af171
Showing 18 changed files with 373 additions and 80 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-integration-local.yml
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ jobs:
id-token: write
contents: read
steps:
- uses: Cohesible/get-credentials-action@d2795224e6f0ea7b2e41c4d3dbdb8bc3c873f450
- uses: Cohesible/get-credentials-action@670287aebd309e1890507ab8ee7c8ed7eefa4c10
- uses: actions/checkout@v3
- run: curl -fsSL https://synap.sh/install | bash
- run: synapse --version
16 changes: 16 additions & 0 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
@@ -173,6 +173,22 @@ synapse run -- alice
# hello, alice!
```

### `repl`

Enters an interactive REPL session, optionally using a target file. The target file's exports are placed in the global scope.

```main.ts
export function foo() {
return 'foo'
}
```

```shell
synapse repl main.ts
> foo()
# 'foo'
```

### `quote`

Prints a motivational quote fetched from a public Synapse application.
8 changes: 3 additions & 5 deletions integrations/aws/src/services/api-gateway.ts
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ import { LambdaFunction } from './lambda'
import { signRequest } from '../sigv4'
import { NodeHttpHandler } from '@smithy/node-http-handler'
import { HostedZone } from './route53'
import { HttpHandler, Middleware, RouteRegexp, buildRouteRegexp, matchRoutes, HttpResponse, HttpError, HttpRoute, PathArgs, createPathBindings, applyRoute, kHttpResponseBody, compareRoutes, HttpRequest } from 'synapse:http'
import { HttpHandler, Middleware, RouteRegexp, buildRouteRegexp, matchRoutes, HttpResponse, HttpError, HttpRoute, PathArgs, createPathBindings, applyRoute, compareRoutes, HttpRequest } from 'synapse:http'
import { createSerializedPolicy } from './iam'
import { generateIdentifier } from 'synapse:lib'
import * as net from 'synapse:srl/net'
@@ -307,9 +307,7 @@ async function runHandler<T>(fn: () => Promise<T> | T): Promise<T | HttpResponse
} as any
}

const body = kHttpResponseBody in resp
? Buffer.from(resp[kHttpResponseBody] as Uint8Array).toString('utf-8')
: resp.body ? await resp.text() : undefined
const body = resp.body ? await resp.text() : undefined

return {
body,
@@ -667,7 +665,7 @@ export class WebsocketGateway {
'Effect': 'Allow',
'Action': 'execute-api:ManageConnections',
// 'Resource': 'arn:{context.Partition}:execute-api:${context.Region}:${context.Account}:${this.resource.id}/Default/${replace(0, " ", "/")}'
'Resource': `arn:${context.partition}:execute-api:${context.region ?? 'us-west-2'}:${context.accountId}:*` // XXX
'Resource': `arn:${context.partition}:execute-api:${context.regionId}:${context.accountId}:*` // XXX
})
this.requestRouter!.fn.principal.addPolicy({
// [\w+=,.@-]+{1,128}
6 changes: 2 additions & 4 deletions integrations/local/src/gateway.ts
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ import * as path from 'node:path'
import * as stream from 'node:stream'
import * as child_process from 'node:child_process'
import type * as http from 'node:http'
import { fetch, HttpError, HttpHandler, HttpRequest, HttpResponse, HttpRoute, PathArgs, RouteRegexp, buildRouteRegexp, compareRoutes, createPathBindings, kHttpResponseBody, matchRoutes } from 'synapse:http'
import { fetch, HttpError, HttpHandler, HttpRequest, HttpResponse, HttpRoute, PathArgs, RouteRegexp, buildRouteRegexp, compareRoutes, createPathBindings, matchRoutes } from 'synapse:http'
import { upgradeToWebsocket, WebSocket } from 'synapse:ws'
import * as compute from 'synapse:srl/compute'
import { randomUUID } from 'node:crypto'
@@ -388,9 +388,7 @@ async function runHandler<T>(response: http.ServerResponse, fn: () => Promise<T>
return await sendResponse(response, resp.body, resp.headers, resp.status)
}

const body = kHttpResponseBody in resp
? Buffer.from(resp[kHttpResponseBody] as Uint8Array)
: resp.body
const body = resp.body

return await sendResponse(response, body, resp.headers, resp.status)
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "synapse",
"version": "0.0.7",
"version": "0.0.8",
"bin": "./src/cli/index.ts",
"dependencies": {
"esbuild": "^0.20.2",
Binary file modified packages/resources.tgz
Binary file not shown.
22 changes: 14 additions & 8 deletions src/cli/buildInternal.ts
Original file line number Diff line number Diff line change
@@ -646,16 +646,22 @@ function stripComments(text: string) {
return result.join('\n')
}

export async function createSynapseTarball(dir: string) {
const files = await glob(getFs(), dir, ['**/*', '**/.synapse'])
const tarball = createTarball(await Promise.all(files.map(async f => ({
contents: Buffer.from(await getFs().readFile(f)),
mode: 0o755,
path: path.relative(dir, f),
}))))

const zipped = await gzip(tarball)

return zipped
}

export async function createArchive(dir: string, dest: string, sign?: boolean) {
if (path.extname(dest) === '.tgz') {
const files = await glob(getFs(), dir, ['**/*', '**/.synapse'])
const tarball = createTarball(await Promise.all(files.map(async f => ({
contents: Buffer.from(await getFs().readFile(f)),
mode: 0o755,
path: path.relative(dir, f),
}))))

const zipped = await gzip(tarball)
const zipped = await createSynapseTarball(dir)
await getFs().writeFile(dest, zipped)
} else if (path.extname(dest) === '.zip') {
try {
16 changes: 8 additions & 8 deletions src/cli/commands.ts
Original file line number Diff line number Diff line change
@@ -613,7 +613,7 @@ registerTypedCommand(
hidden: true,
options: [
{ name: 'local', type: 'boolean' },
{ name: 'global', type: 'boolean', hidden: true },
{ name: 'remote', type: 'boolean', hidden: true },
{ name: 'dry-run', type: 'boolean', hidden: true },
{ name: 'skip-install', type: 'boolean', hidden: true },
{ name: 'archive', type: 'string', hidden: true },
@@ -640,7 +640,7 @@ registerTypedCommand(
options: [
{ name: 'dry-run', type: 'boolean' }
],
},
},
async (opt) => {
await synapse.collectGarbage('', {
...opt,
@@ -765,7 +765,7 @@ registerTypedCommand(
'import-identity',
{
internal: true,
args: [{ name: 'file', type: 'string' }],
args: [{ name: 'file', type: 'string', optional: true }],
requirements: { program: false }
},
async (target) => {
@@ -962,11 +962,11 @@ registerTypedCommand(
registerTypedCommand(
'repl',
{
internal: true, // Temporary
args: [{ name: 'file', type: typescriptFileType }],
description: 'Enters an interactive REPL session, optionally using a target file. The target file\'s exports are placed in the global scope.',
args: [{ name: 'targetFile', type: typescriptFileType, optional: true }],
options: buildTargetOptions,
},
(a, opt) => synapse.replCommand(a)
(a, opt) => synapse.replCommand(a, opt),
)

registerTypedCommand(
@@ -1407,7 +1407,7 @@ async function parseArgs(args: string[], desc: CommandDescriptor) {
const minArgs = (desc.args?.filter(x => !x.allowMultiple && !x.optional).length ?? 0) + (allowMultipleArg?.minCount ?? 0)
const providedArgs = parsedArgs.length + invalidPositionalArgs
if (providedArgs < minArgs) {
for (let i = providedArgs; i < parsedArgs.length; i++) {
for (let i = providedArgs; i < minArgs; i++) {
const a = desc.args![i]
if (a.allowMultiple) break

@@ -1425,7 +1425,7 @@ async function parseArgs(args: string[], desc: CommandDescriptor) {
if (errors.length > 0) {
throw new RenderableError('Invalid arguments', () => {
for (const [n, e] of errors) {
printLine(colorize('brightRed', `${n} - ${e.message}`))
printLine(colorize('brightRed', `${e.message} - ${n}`))
}
})
}
2 changes: 1 addition & 1 deletion src/compiler/entrypoints.ts
Original file line number Diff line number Diff line change
@@ -185,7 +185,7 @@ function findInterestingSpecifiers(sf: ts.SourceFile, resolveBareSpecifier: (spe
return { bare, zig }
}

function createSpecifierResolver(cmd: ts.ParsedCommandLine, dir: string) {
function createSpecifierResolver(cmd: Pick<ts.ParsedCommandLine, 'options' | 'fileNames'>, dir: string) {
const baseUrl = cmd.options.baseUrl
const paths = cmd.options.paths
const resolveDir = baseUrl ?? dir
1 change: 0 additions & 1 deletion src/compiler/resourceGraph.ts
Original file line number Diff line number Diff line change
@@ -23,7 +23,6 @@ interface SymbolNameComponents {

interface ResourceInstantiation {
readonly kind: string // FQN/Symbol

}

export interface TypeInfo {
30 changes: 23 additions & 7 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ import { createTemplateService, getHash, parseModuleName } from './templates'
import { createImportMap, createModuleResolver } from './runtime/resolver'
import { createAuth, getAuth } from './auth'
import { generateOpenApiV3, generateStripeWebhooks } from './codegen/schemas'
import { addImplicitPackages, createMergedView, createNpmLikeCommandRunner, dumpPackage, emitPackageDist, getPkgExecutables, getProjectOverridesMapping, installToUserPath, linkPackage } from './pm/publish'
import { addImplicitPackages, createMergedView, createNpmLikeCommandRunner, dumpPackage, emitPackageDist, getPkgExecutables, getProjectOverridesMapping, installToUserPath, linkPackage, publishToRemote } from './pm/publish'
import { ResolvedProgramConfig, getResolvedTsConfig, resolveProgramConfig } from './compiler/config'
import { createProgramBuilder, getDeployables, getEntrypointsFile, getExecutables } from './compiler/programBuilder'
import { loadCpuProfile } from './perf/profiles'
@@ -62,6 +62,7 @@ import { createBlock, openBlock } from './build-fs/block'
import { seaAssetPrefix } from './bundler'
import { buildWindowsShim } from './zig/compile'
import { openRemote } from './git'
import { getTypesFile } from './compiler/resourceGraph'

export { runTask, getLogger } from './logging'

@@ -111,7 +112,11 @@ export async function syncModule(deploymentId: string, bt = getBuildTargetOrThro
}
}

export async function publish(target: string, opt?: CompilerOptions & DeployOptions & { newFormat?: boolean; archive?: string; dryRun?: boolean; local?: boolean; globalInstall?: boolean; skipInstall?: boolean }) {
export async function publish(target: string, opt?: CompilerOptions & DeployOptions & { remote?: boolean; newFormat?: boolean; archive?: string; dryRun?: boolean; local?: boolean; skipInstall?: boolean }) {
if (opt?.remote) {
return publishToRemote(opt.archive)
}

if (opt?.archive) {
const packageDir = getWorkingDir()
const dest = path.resolve(packageDir, opt.archive)
@@ -129,10 +134,11 @@ export async function publish(target: string, opt?: CompilerOptions & DeployOpti
}

if (opt?.local) {
await linkPackage({ dryRun: opt?.dryRun, globalInstall: opt?.globalInstall, skipInstall: opt?.skipInstall, useNewFormat: opt?.newFormat })
} else {
throw new Error(`Publishing non-local packages is not implemented`)
await linkPackage({ dryRun: opt?.dryRun, skipInstall: opt?.skipInstall, useNewFormat: opt?.newFormat })
return
}

throw new Error(`Publishing non-local packages is not implemented`)
}

async function findOrphans() {
@@ -2391,11 +2397,19 @@ function normalizeToRelative(fileName: string, workingDir = getWorkingDir()) {
return path.relative(workingDir, path.resolve(workingDir, fileName))
}

export async function replCommand(target: string, opt?: { entrypoint?: string; cwd?: string }) {
export async function replCommand(target?: string, opt?: {}) {
target = target ? normalizeToRelative(target) : target
await compileIfNeeded(target)

const repl = await runTask('', 'repl', async () => {
if (!target) {
const moduleLoader = await getModuleLoader(false)

return enterRepl(undefined, moduleLoader, {})
}

const files = await getEntrypointsFile()
const typesFile = await getTypesFile()
const deployables = files?.deployables ?? {}
const status = await validateTargetsForExecution(target, deployables)
const outfile = status.sources?.[target]?.outfile
@@ -2411,7 +2425,9 @@ export async function replCommand(target: string, opt?: { entrypoint?: string; c

const moduleLoader = await runTask('init', 'loader', () => getModuleLoader(false), 1) // 8ms on simple hello world no infra

return enterRepl(resolved, moduleLoader, {})
return enterRepl(resolved, moduleLoader, {
types: typesFile?.[target.replace(/\.tsx?$/, '.d.ts')],
})
}, 1)

return repl.promise
24 changes: 24 additions & 0 deletions src/pm/packages.ts
Original file line number Diff line number Diff line change
@@ -31,6 +31,7 @@ import { cleanDir, fastCopyDir, removeDir } from '../zig/fs-ext'
import { colorize, printLine } from '../cli/ui'
import { OptimizedPackageManifest, PackageManifest, PublishedPackageJson, createManifestRepo, createMultiRegistryClient, createNpmRegistryClient } from './manifests'
import { createGitHubPackageRepo, downloadGitHubPackage, githubPrefix } from './repos/github'
import { createSynapsePackageRepo, sprPrefix } from './repos/spr'

// legacy
const providerRegistryHostname = ''
@@ -756,6 +757,7 @@ function createSprRepoWrapper(
const fileRepo = createFilePackageRepo(fs, workingDirectory)
const toolRepo = createToolRepo()
const githubRepo = createGitHubPackageRepo()
const sprRepo = createSynapsePackageRepo()

const _getTerraformPath = memoize(getTerraformPath)
async function _getProviderVersions(name: string) {
@@ -802,6 +804,10 @@ function createSprRepoWrapper(
return _getProviderVersions(name.slice(providerPrefix.length))
}

if (name.startsWith(sprPrefix)) {
return sprRepo.listVersions(name.slice(sprPrefix.length))
}

if (name.startsWith('cspm:')) {
const manifest = await getPrivatePackageManifest(parseCspmRef(name))

@@ -835,6 +841,10 @@ function createSprRepoWrapper(
}
}

if (name.startsWith(sprPrefix)) {
return sprRepo.getPackageJson(name.slice(sprPrefix.length), version)
}

if (name.startsWith('cspm:')) {
const manifest = await getPrivatePackageManifest(parseCspmRef(name))
const pkgJson = manifest.versions[version]
@@ -888,6 +898,12 @@ function createSprRepoWrapper(
return { name: `file:${override}`, version: parseVersionConstraint('*') }
}

if (pattern.startsWith(sprPrefix)) {
const resolved = await sprRepo.resolvePattern(spec, pattern)

return { name: `spr:${resolved.name}`, version: resolved.version }
}

return { name: pattern, version: parseVersionConstraint('*') }
}

@@ -934,6 +950,10 @@ function createSprRepoWrapper(
return
}

if (name.startsWith(sprPrefix)) {
return sprRepo.getDependencies(name.slice(sprPrefix.length), version)
}

if (name.startsWith('cspm:')) {
const manifest = await getPrivatePackageManifest(parseCspmRef(name))
const inst = manifest.versions[version]
@@ -964,6 +984,10 @@ function createSprRepoWrapper(
return
}

if (name.startsWith(sprPrefix)) {
return
}

if (name.startsWith('cspm:')) {
// const manifest = await getPrivatePackageManifest(parseCspmRef(name))
// const inst = manifest.versions[version]
Loading

0 comments on commit 95af171

Please sign in to comment.