- Add support for new ESM-only import error message when importing plugins in Node.js 22; thanks @lpsinger!
- Updated dependencies
- Updated
package.json
engines.node
property to reflect changes from v4
- Updated dependencies
- Updated
aws-lite
- Fixed format of
@sandbox-start
pragma in preferences (which is preferred to@sandbox-startup
)
- Transitioned from
aws-sdk
toaws-lite
- Breaking change:
arm64
is now the default Lambda architecture - Breaking change:
nodejs20.x
andpython3.12
are now the default Node.js and Python Lambda runtimes, respectively - Breaking change: removed support for Node.js 14.x (now EOL, and no longer available to created in AWS Lambda)
- AWS Lambda no longer supports Go-specific runtimes; as such,
go
andgolang
runtime aliases are no longer available - Added Node.js 20.x to test matrix
- Internal updates and test suite fixes to enable Node.js 20.x testing
- Updated dependencies
- Fix HTTP route sorting issue where trailing catchalls win over trailing params; fixes #1467
- Updated dependencies
- Added ability for unknown function-level configuration settings to be arrays / vectors
- Fixed AWS Lambda handler configuration for Python, Ruby, and custom handlers
- Added support for additional Python + Ruby Lambda handler filenames, including:
- Python:
lambda.py
,handler.py
(and legacyindex.py
) - Ruby:
lambda.rb
,handler.rb
(and legacyindex.rb
)
- Python:
- Allow lowcase
ttl
@tables
property type
- Improved path validation for multi-tenant Lambdae
- Updated dependencies
- Fixed subtle
@http
sorting issue where path params may be prioritized over paths with static URL parts in the same position
- Compiled runtimes now default to
provided.al2
, and no longer require abaseRuntime
specified by the Arc runtime plugin
- Added support for
create
plugin API - Added support for
buildSubpath
property forcompiled
runtime plugins - Added map of custom runtimes to plugin names in
inv._project.runtimePlugins.customRuntimes
- Unpinned
aws-sdk
from Lambda-specific version to enable SSO and resolve (unrelated) npm vulnerability warnings
- Retired
nodejs12.x
related logic (deprecated in Lambda 2023-03-31)
- Fixed issue where an
index.mjs
handler in the project root would not be properly detected if apackage.json
file is present (which it almost certainly would be)
- Added plugin ES module support for ES2020+ syntax,
node:*
imports, etc.; fixes #1401 - Added support for loading ESM plugins via
package.json
"type": "module"
, respectingmain
, etc.
- Added support for plugins authored as ES modules; retains support for plugins authored as CommonJS modules
- Added support for specifying DynamoDB index projection attributes; incremental support for #1083
set.static
plugins now mergeignore
patterns with userlandignore
settings (if present)
- Added Node.js 18.x to test matrix
- Updated default runtime to
nodejs16.x
- Updated dependencies
- Fixed issue where projects with plugins that define >1 transpiled Lambdas would all build to the same directory; thanks @Scorsi!
- Fixed issue where plugins may not be found if attempted to be loaded from a subfolder in a monorepo; thanks @Scorsi!
- Fixed issue where
@static spa true
setting wouldn't be respected when the root handler is not explicitly defined; thanks @oliverturner!
- Fixed issue where
set.http
plugins would not haveconfig.views
respected if set tofalse
- Node 14+ Lambda handler selection now defaults to ESM (unless otherwise specified)
- Enabled
hydrate
plugin API support
- By default, when a
set.shared|views
plugin sets asrc
path, if it is not present on the filesystem, Inventory falls back to default paths (e.g.src/shared|views
)set.shared|views
plugins now accept arequired
flag to enforce a validation error should asrc
path conflict with the project manifest (or not be found on the filesystem)
- Fixed an obscure internal reference passing bug in
set.proxy|shared|static|views
plugins
- Added support for new setter plugin APIs, specifically:
@proxy
,@shared
,@static
,@tables
,@tables-indexes
,@views
- Added new
@static
setting:compression
- Lambdas defined in the userland Architect project manifest now override conflicting Lambdas returned by plugins (instead of throwing validation errors); fixes #1352
- Plugin developers can now use a
required
flag to enforce a validation error should their plugin conflict with userland Lambdas
- Plugin developers can now use a
@tables
and@tables-indexes
can now accept lower case key types (e.g.*string
instead of*String
)@tables
and@tables-indexes
can also accept*
and**
as a shortcut for string-type primary and sort keys- Changed plugin function property tags from
plugin|type
to_plugin|_type
to indicate internal property namespacing - Added
@static
pragma validation - Fixed obscure case where
@static
ignore
setting might only use the first list item
- Fixed issue where Lambdas created by plugins that returned arrays did not have their
plugin
andtype
properties set - Fixed issue where an absolute path in
@shared|views
src
would incorrectly resolve - Fixed issue where
@views
might incorrectly return a validation error when only HTTP setter plugins are used to define@http
routes
- Updated dependencies;
lambda-runtimes
enablesnodejs16.x
- Added support for configuring Lambda's ephemeral storage feature
- Architect 10 plugin API support! Specifically:
plugins.set.runtimes
- custom runtime support (still in beta)plugins.set.env
- add environment variables to all Lambdasplugins.set.events|http|scheduled|tables-streams|ws
- generate or drop in Lambdas in Architect pragmasplugins.set.customLambdas
- generate or drop in unique Lambdas with custom event sources- More below...
- Added
inv|get.plugins
tree + methods- What used to be
plugins
in the plugins beta is nowcustomLambdas
(see next item)
- What used to be
- Added
inv|get.customLambdas
- Formerly
inv|get.plugins
- Formerly
- Added
inv._project.customRuntimes
- Added low-level support for
build
destinations to runtime plugins that register typetranspiled
orcompiled
- Added
handlerModuleSystem
property fornodejs14.x
Lambdas, with a value ofcjs
oresm
based on Lambda + Node.js conventions - Added
handlerFile
detection fornodejs14.x
+deno
Lambdas- This will detect the correct handler file on the filesystem, and fall back to a default handler file if none are found (e.g.
index.js
innodejs14.x
)
- This will detect the correct handler file on the filesystem, and fall back to a default handler file if none are found (e.g.
- Added
inv._arc.deployStage
property, enabling Inventory to be aware of an intended deploy stage; (this property may change, consider it in beta!) - Added built-in support for reading
.env
files when enumerating local env var preferences
- Breaking change: changed
_project.src
, added_project.cwd
, making both the pair significantly more literal and descriptive_project.src
is now the default source tree folder (eg$cwd/src
)_project.cwd
refers to the current working directory of the project
- Breaking change:
_project.env
is now by default an object populated by three properties:local
,plugins
, andaws
, reflecting the env vars found for each environment - Breaking change: AWS region prioritizes a region passed via param over
AWS_REGION
env var; this should realistically have little or no effect in practice - Breaking change: legacy
@tables-streams
folders (src/tables/...
andsrc/streams/...
) are now deprecated- Existing functions can be simply moved to
src/tables-streams/{name}
(or use a customsrc
property)
- Existing functions can be simply moved to
- Breaking change: renamed
lambda.handlerFunction
tolambda.handlerMethod
- Breaking change: prioritize
mod.ts|js
handlers in Deno Lambdas - Breaking change: removed
toml
support - Breaking change: removed
get.macros
method; as@macros
are now automatically mapped to the Architect plugins, you can simply useget.plugins
instead - Performance improvements to building
inv.shared
+inv.views
- Improved memory footprint of Inventory object by preserving references in
lambdaSrcDirs
,lambdasBySrcDir
- Added
pragma
property to all Lambdas to aid in reference preservation
- Added
- Tidy up order of enumerated properties in each Lambda Update CI
- Stop publishing to the GitHub Package registry
- Added file path validation because
aws-sdk
blows up on !ascii paths; fixes #1292, thanks @GustMartins! - Fixed env var validation from preference files
- Fixed error bubbling when reading a preferences file with issues
- Fixed HTTP route sorting; however you've organized your
@http
pragma, Sandbox should now behave much more like API Gateway; fixes #977 - Fixed overly strict path parameter validation; allow
_
,.
,-
; thanks @jkarsrud!
- Finally formalized
@tables-streams
, the fully customizable successor to@tables
withstream true
- Added
@tables-indexes
pragma@tables-indexes
has identical semantics as (and will eventually supersede)@indexes
- Until Arc 10.0 + Inventory 3.0, consumers should now check both
inv.indexes
ANDinv.tables-indexes
- Hardened runtime validation by ensuring non-string values will fail gracefully
- Added memory / timeout configuration validation
- Improved layer validation error formatting
- Added
config.runtimeAlias
property to Lambdas whoseconfig.runtime
is interpolated by way of latest-runtime aliasing (e.g.node
orpy
)
- Internal change: implement Lambda runtimes module instead of maintaining valid runtime list in Inventory
- Fixed
@scheduled
parsing inapp.json
+package.json
>arc.scheduled
- Added latest-runtime version aliasing
- Example: you want your app to always run the latest Lambda version of Python (instead of specifying
python3.9
(and changing it every time a new version of Python is released); now you can specifypython
orpy
- Valid shortcuts: Node.js:
node
,nodejs
,node.js
; Python:python
,py
; Ruby:ruby
,rb
; Java:java
; Go:go
,golang
; .NET:dotnet
,.net
; and custom runtimes:custom
- Example: you want your app to always run the latest Lambda version of Python (instead of specifying
- Added runtime validation
- Updated dependencies
- Added support for AWS's new Lambda
arm64
architecture via@aws architecture
setting; default remainsx86_64
- Internal: removed unused
@tables
flag
- Internal: Updated Architect Parser to v5
- When a valid root handler is configured by the user,
inv._project.rootHandler
is no longerconfigured
, and is instead the specific root handler'sname
property- Example:
@http get /
would result ininventory._project.rootHandler
beingget /
- Example:
- Fix
@aws
policies
+layers
where multiple policies or layers listed in one line would ignore all but the first
- Default runtime is now
nodejs14.x
, fixes #1164 - Breaking change: removed support for Node.js 10.x (now EOL, and no longer available to created in AWS Lambda) and Node.js 12.x
- Breaking change: removed support for Architect 5 WebSocket folder paths (prepended by
ws-
) - Updated ASAP to v4
- Updated dependencies
- Include registry of all Architect pragmas + Lambda pragmas in
inventory.inv._arc.pragmas
metadata
- Update deps
- Fixed error reporting for missing function dirs
- De-dupe
@shared
+@views
items - Fixed
@shared
+@views
errors
- Adds comprehensive pragma-level validation
- Added structured
ARC_ERRORS
property to returned Inventory errors
- Refactors error handling to support aggregation of multiple validation errors (instead of just one at a time, as before)
- 💯% unit test coverage
- Add support for @tables
pitr
option, start phasing outPointInTimeRecovery
option (which is still supported for a while); fixes #1155 - Removes
aws-sdk
frompeerDependencies
to resolve large Lambda dependency payloads when Arc is run on machines using npm 7- See also: readme >
aws-sdk
caveat
- See also: readme >
- Fixed a bunch of smol bugs
- Plugins may implement either
pluginFunctions
orfunctions
interface methods; both will be used.
- Fix weird behavior in
lambdasBySrcDir
when >2 functions are mapped to the same folder
- Bumped utils dependency to 2.0.5.
- Added beta support for
plugins
pragma (see https://arc.codes/docs/en/guides/extend/architect-plugins)inventory.inv.plugins
houses all Lambdas created by pluginsinventory._project.plugins
maps plugin names to plugin modules
- Wired up plugin modules into
lambdasBySrcDir
andlambdaSrcDirs
- First steps towards allowing plugin authors to add their own Lambdas to arc projects
- Added
name
param for@indexes
pragma to allow explict naming of GSIs; thanks @anatomic!
- Added
@sandbox-startup
to preferences to replace the sometimes-wonky@sandbox startup
setting, fixes #1032 - Added ability for
@static
buckets – otherwise enabled by default – to be disabled with@static false
- Adds
lambdasBySrcDir
param for looking up a Lambda by its source dir dir- Useful for when the only thing known about a Lambda is its source directory (see: hydration, direct deploys, etc.)
- Adds
inv._project.asapSrc
shortcut for getting the configured ASAP dist path
- Added new
@shared
pragma - Customizable shared + views folders
- Added global preferences lookup (
~/.preferences.arc
+~/.prefs.arc
, etc.) and global / local preference merging
- Breaking change:
inv.views
shape has now changed - Breaking change:
inv._project.preferencesFile
has been deprecated in favor ofinv._project.globalPreferencesFile
+inv._project.localPreferencesFile
- Deprecates legacy
localPaths
array (which has since been moved over tolambdaSrcDirs
)
- Moved
@architect/asap
from Package into Inventory - Added test case
- Fixed side effect of ASAP mutating default function configurations project-wide
- Added
@proxy
support - Added
@views
support - Added
@cdn
support - Added
@http
any
,head
, andoptions
method support - Added
@http
*
(catchall) syntax support - Added async/await interface
- Added
config.arc
(formerly.arc-config
) support for@arc
settings - Added
inventory._project.rootHandler
property for determining whether a user explicitly configured a root handler - Added local preferences via
preferences.arc
orprefs.arc
- Added additional params to tables (
ttl
,encrypt
,PointInTimeRecovery
,legacy
) - Added ability to pass raw Architect manifest string (
rawArc
) for stateless Inventory runs - Added ability to define JSON-formatted Architect manifest in
package.json
(viaarc
orarchitect
param)
- Moved
inventory.arc
metadata toinventory._arc
(should we need to use an Architect-specific@arc
pragma) - Moved
inventory.project
metadata toinventory._project
to better denote that it is indeed project metadata - Renamed primary inventory output to
inv
- Updated AWS SDK
- Getter returns arrays for certain pragmas that may have duplicative names (e.g.
@indexes
)
- Fixed issue with overwriting a Lambda's base config if Arc config is present
- Fixed missing
handlerFile
extension for deno functions - Fixed legacy
@ws
folder pathing issue - Fixed ASAP behavior to only be defined when
@http
is present, not@static
- Disabled shared files in ASAP
- Fixed issue where ASAP was overtaking
@proxy
- Fixed manual override of queue fifo config
- Added graceful failure when attempting to read an empty manifest or config file
- Fixed issue where projects without
get /
would return an error during Lambda source dir population - Fixed inventory rules around @http + @static inferring each other
- Fixed getter when accessing pragmas with null values
Here we go!
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.