PageSourceSearch

https://awspilot.dev/pages/changelog/

html awspilot.dev collected 2026-10-05 01:56:38 UTC 17,005 bytes, 277 lines download raw bytes

1<!DOCTYPE html> <html><head><meta charset="utf-8"> <title>Amazon DynamoDB npm module for nodejs - AWSPilot</title> <meta content="chrome=1" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport"> <link type="text/css" rel="stylesheet" href="//fonts.googleapis.com/css?family=Raleway:400,100,200,300,500,600"> <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" rel="stylesheet"> <link media="screen" href="/stylesheets/stylesheet.css" type="text/css" rel="stylesheet"> <link media="print" href="/stylesheets/print.css" type="text/css" rel="stylesheet"> <link href="/stylesheets/tree.css" type="text/css" rel="stylesheet"> <link href="/css/tabs.css" type="text/css" rel="stylesheet"> 
1<script src="/js/libs/ractive.min.js"></script>
1 
1<script src="/js/libs/aws-sdk-2.442.0.min.js"></script>
1 
1<script src="/js/libs/dynamodbjs.js"></script>
1 
1<script src="/js/libs/jquery/2.1.3/jquery.min.js"></script>
1 
1<script src="/js/tabs.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/ace.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/mode-javascript.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/mode-sql.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/mode-html.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/theme-twilight.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/theme-monokai.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/theme-textmate.js"></script>
1 
1<script src="/js/libs/ace/1.2.6/theme-iplastic.js"></script>
1 
1<script>
vendor: 126 bytes, lines 1-3
1    (function(h,o,t,j,a,r){
2        h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
3        h._hjSettings={hjid:
32749845
vendor: 262 bytes, lines 3-8
3,hjsv:6};
4        a=o.getElementsByTagName('head')[0];
5        r=o.createElement('script');r.async=1;
6        r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
7        a.appendChild(r);
8    })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
8</script>
8 
8<script>	//(function(A,s,a,y,e,r){
9	//r=window.OpenReplay=[s,r,e,[y-1]];
10	//s=document.createElement('script');s.src=a;s.async=!A;
11	//document.getElementsByTagName('head')[0].appendChild(s);
12	//r.start=function(v){r.push([0])};
13	//r.stop=function(v){r.push([1])};
14	//r.setUserID=function(id){r.push([2,id])};
15	//r.setUserAnonymousID=function(id){r.push([3,id])};
16	//r.setMetadata=function(k,v){r.push([4,k,v])};
17	//r.event=function(k,p,i){r.push([5,k,p,i])};
18	//r.issue=function(k,p){r.push([6,k,p])};
19	//r.isActive=function(){return false};
20	//r.getSessionToken=function(){};
21	//})(0, "7sCA8hXprixgftfJMSIG", "//static.openreplay.com/latest/openreplay.js",1,29);
22	</script>
22</head> <body><header><h1><b>@awspilot</b>/dynamodb</h1> <div class="gh" style="position: absolute;top: 15px;right: 40px;"><a class="github-button" aria-label="Issue awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-issue-opened" href="https://github.com/awspilot/dynamodb-oop/issues">Issue</a> <a class="github-button" aria-label="Star awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-star" href="https://github.com/awspilot/dynamodb-oop">Star</a> <a class="github-button" aria-label="Fork awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-repo-forked" href="https://github.com/awspilot/dynamodb-oop/fork">Fork</a></div> </header> <div id="content-wrapper"><aside id="sidebar"><ul class="tree"><li><input type="checkbox" id="awspilot" checked> <label class="tree_label sub" for="awspilot"><img src="/images/folder_flat.png"> @awspilot</label> <ul><li><input type="checkbox" id="dynamodb" checked> <label class="tree_label sub" for="dynamodb"><img src="/images/folder_flat.png"> dynamodb</label> <ul><li><span class="tree_label"><a href="/"><img src="/images/text.png"> README.md</a></span> </li><li><span class="tree_label"><a href="/pages/apidef/"><img src="/images/text.png"> API_REF.md</a></span> </li><li><span class="tree_label"><a href="/pages/sql/"><img src="/images/text.png"> SQL.md</a> <li><span class="tree_label"><a href="/pages/layer/"><img src="/images/text.png"> Layers.md</a> <li><span class="tree_label"><a href="/pages/changelog/"><img src="/images/text.png"> ChangeLog.md</a> <li><span class="tree_label"><a href="/pages/create-table/"><img src="/images/code.png"> create_table.js</a> <li><span class="tree_label"><a href="/pages/insert/"><img src="/images/code.png"> insert.js</a> <li><span class="tree_label"><a href="/pages/insert-or-update/"><img src="/images/code.png"> insert_or_update.js</a> <li><span class="tree_label"><a href="/pages/insert-or-replace/"><img src="/images/code.png"> insert_or_replace.js</a> <li><span class="tree_label"><a href="/pages/batch-insert/"><img src="/images/code.png"> batch_insert.js</a> <li><span class="tree_label"><a href="/pages/update/"><img src="/images/code.png"> update.js</a> <li><span class="tree_label"><a href="/pages/replace/"><img src="/images/code.png"> replace.js</a> <li><span class="tree_label"><a href="/pages/delete/"><img src="/images/code.png"> delete.js</a> <li><span class="tree_label"><a href="/pages/get/"><img src="/images/code.png"> get.js</a> <li><span class="tree_label"><a href="/pages/batch-get/"><img src="/images/code.png"> batch_get.js</a> <li><span class="tree_label"><a href="/pages/query/"><img src="/images/code.png"> query.js</a> <li><span class="tree_label"><a href="/pages/scan/"><img src="/images/code.png"> scan.js</a> <li><span class="tree_label"><a href="/pages/transaction/"><img src="/images/code.png"> transactions.js</a> <li><span class="tree_label"><a href="/pages/drop-index/"><img src="/images/code.png"> drop_index.js</a> <li><span class="tree_label"><a href="/pages/drop-table/"><img src="/images/code.png"> drop_table.js</a> <li><input type="checkbox" id="misc" checked> <label class="tree_label sub" for="misc"><img src="/images/folder_flat.png"> Misc</label> <ul><li><span class="tree_label"><a href="/pages/empty-strings/"><img src="/images/text.png"> empty_strings.md</a> <li><span class="tree_label"><a href="/pages/datatypes/"><img src="/images/text.png"> data_types.md</a> <li><span class="tree_label"><a href="/pages/deprecated/"><img src="/images/text.png"> deprecated.md</a> <li><span class="tree_label"><a href="/pages/test/"><img src="/images/text.png"> test.md</a><span></span></span></li></span></li></span></li></span></li></ul> </li><li><span class="tree_label"><a href="/pages/disqus/"><img src="/images/text.png"> Disqus.md</a></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></ul> </li><li> <input type="checkbox" id="dynamodbui" checked> <label class="tree_label sub" for="dynamodbui"><img src="/images/folder_flat.png"> dynamodb-ui</label> <ul><li><span class="tree_label"><a href="/pages/ui-readme/"><img src="/images/text.png"> README.md</a></span> </li><li><span class="tree_label"><a href="/pages/ui-demo/"><img src="/images/text.png"> DEMO.md</a></span></li></ul></li></ul></li></ul></aside> <section id="main-content"><div class="content">
23
24<h1>2.0.2</h1>
25support for delete attribute in transaction() update() and insert_or_update()<br>
26console.warn every time schema is not provided and a describeTable is called ( 3.x.x will throw err instead of calling describeTable )<br>
27moved testing from Travis to Github Actions<br>
28fix describeTable()<br>
29fix ProvisionedThroughput in sql 'DESCRIBE TABLE tbl_name' ( updated @awspilot/dynamodb-sql-util)<br>
30fix 'DESCRIBE TABLE tbl_name' when AWS does not return BillingModeSummary<br>
31updated (dev)dependencies<br>
32
33
34<h1>2.0.0</h1>
35removed npm-shrinkwrap, was causing npm install to also install dev dependencies ( npm bug ?)<br>
36aws-sdk as peer dependency ( shrinks deply size for environments with embedded aws-sdk eg. Lambda )<br>
37experimental transactWrite support<br>
38
39<h1>1.5.1</h1>
40import only dynamodb from aws-sdk<br>
41
42<h1>1.5.0</h1>
43wrap around batchGetItem - .batch().table().get().get().read()<br>
44wrap around batchWriteItem - .batch().table().put().del().write()<br>
45
46<h1>1.4.0</h1>
47.batch().table().put().put().del().write() - wrap around batchWriteItem<br>
48updated dev dependencies for security reasons<br>
49
50<h1>1.3.0</h1>
511.3.0+ will follow SemVer (major.minor.patch) and increment "minor" for new features <br>
52JSON keys in SQL can now be keywords without the need of wrapping: eg. { "keyword": 1 } can now be just { keyword: 1 }<br>
53
54
55<h1>1.2.11</h1>
56SQL LIST and MAP support nested StringSet, NumberSet, BinarySet and Binary<br>
57SQL support insert/update BinarySet data type (BS) using Buffer.from( &lt;STRING>, 'base64')<br>
58SQL support insert/update binary data type (B) using Buffer.from( &lt;STRING>, 'base64')<br>
59
60<h1>1.2.10</h1>
61SQL support for CREATE TABLE<br>
62pass an Array as parameter to select eg. .select(['attr1','attr2'])<br>
63
64<h1>1.2.9</h1>
65SQL support for DROP TABLE<br>
66SQL support for DROP INDEX index_name ON tbl_name<br>
67updated SQL parser to support keywords in attribute names, table names and index names (eg: WHERE where = 5)<br>
68<h1>1.2.8</h1>
69
70<h1>1.2.7</h1>
71fixes a HUGE bug where float numbers may lose decimals in OOP .query(), SQL .query() do not have this bug<br>
72<h1>1.2.6</h1>
73schema() : new method to supply primary key definitions for tables to avoid unnecesary describeTable calls<br>
74
75
76<h1>1.2.5</h1>
77basic arithmetic operations can be used instead of String or Number, anywhere in SQL, <br>
78new function in SQL: uuid()<br>
79Eg.:<br>
80  UPDATE tbl SET width = 100 + 20 WHERE `hash` = 'foo' + 'bar' AND `range` = ... ;<br>
81  INSERT INTO tbl SET accountId = uuid('acct-############'), created_at = new Date().getTime()<br>
82
83<h1>1.2.4</h1>
84@awspilot/dynamodb can now replace empty strings with custom values and convert back to empty strings when fetching data.
85
86<h1>1.2.3</h1>
87You can now use Javascript Math object in SQL queries as well as basic arithmetic operations as parameters for Date and Math Object<br>
88 Eg.:<br>
89  UPDATE tbl SET x = Math.round( Math.random() * 1000  ) WHERE ... ;<br>
90  UPDATE tbl SET x = Math.round( new Date().getTime() / 1000 )   WHERE ... ;<br>
91  UPDATE tbl SET x = new Date( new Date().getTime() - 1000*60*60*24 ).toISOString()   WHERE ... ;<br>
92
93<h1>1.2.2</h1>
94Support for SELECT without HAVING ( FilterExpression )<br>
95Eg.:<br>
96  SELECT attr1, attr2 FROM tbl WHERE partition_key = 'value';<br>
97  SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key LIKE 'word%'; <br>
98  SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key >= 5; <br>
99  SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key BETWEEN 'aaa' AND 'zzz'; <br>
100
101<h1>1.2.1</h1>
102Basic support for SCAN sql statement<br>
103Eg.:<br>
104  SCAN attr1,attr2 FROM tbl
105
106
107<h1>1.1.7</h1>
108Support for javascript Date object in SQL queries<br>
109Eg.:<br>
110  UPDATE tbl SET updated_at = new Date().getTime() WHERE ... ;<br>
111
112
113</div>
114</section> </div> 
114<script>$(function() {
115
116
117
118
119	$('.code').each(function() {
120		var $newid = 'ace-' + Math.random()
121
122		if ($(this).attr('id'))
123			$newid = $(this).attr('id')
124
125		$(this).attr('id', $newid)
126		if (! $(this).hasClass('wide') )
127			$(this).height( $(this).height() + 24 )
128
129		var $e = ace.edit($newid)
130		if ($(this).hasClass('bash')) {
131
132		} else if ($(this).hasClass('sql')) {
133			$e.getSession().setMode("ace/mode/sql")
134		} else if ($(this).hasClass('html')) {
135			$e.getSession().setMode("ace/mode/html")
136		} else {
137			$e.getSession().setMode("ace/mode/javascript")
138		}
139
140		if ($(this).hasClass('iplastic'))
141			$e.setTheme("ace/theme/iplastic")
142		else if ($(this).hasClass('textmate'))
143			$e.setTheme("ace/theme/textmate")
144		else
145			$e.setTheme("ace/theme/monokai")
146
147		if ($(this).hasClass('rw'))
148			$e.setReadOnly(false)
149		else
150			$e.setReadOnly(true)
151
152		$e.setShowPrintMargin(false)
153		$e.setOption("highlightActiveLine", false)
154		$e.setOption("showInvisibles", false)
155		$e.setOption("displayIndentGuides", false)
156		$e.getSession().setUseWorker(false)
157	})
158	$('.btn-describe').on('click', function() {
159		if ($(this).hasClass('disabled'))
160			return;
161		describe_code(ace.edit($('.activeTab').attr('id')).getValue())
162	})
163	$('.btn-execute').on('click', function() {
164		if ($(this).hasClass('disabled'))
165			return;
166		execute_code(ace.edit($('.activeTab').attr('id')).getValue())
167	})
168});</script>
168 
168<script>
169
170describe_code = function(code) {
171	var editor = ace.edit('result-out')
172	editor.setValue('')
173	setTimeout(function() {
174
175		(function(code) {
176
177			var fakedynamo = {
178				config: {dynamoDbCrc32: true,},
179				describeTable: function( params ,callback) {
180					editor.setValue( editor.getValue() + "\n\tdescribeTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
181					callback(null, {
182						Table: {
183							KeySchema: [
184								{AttributeName: 'partition_key', KeyType: 'HASH' },
185								{AttributeName: 'sort_key', KeyType: 'RANGE' }
186							]
187						}
188					})
189				},
190
191				createTable: function( params ,callback) {
192					editor.setValue(editor.getValue() + "\n\tcreateTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
193				},
194				updateTable: function( params ,callback) {
195					editor.setValue(editor.getValue() + "\n\tupdateTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
196				},
197				putItem: function( params ,callback) {
198					editor.setValue(editor.getValue() + "\n\tputItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
199				},
200				updateItem: function( params ,callback) {
201					editor.setValue(editor.getValue() + "\n\tupdateItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
202				},
203				batchWriteItem: function( params ,callback) {
204					editor.setValue(editor.getValue() + "\n\tbatchWriteItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
205				},
206				deleteItem: function( params ,callback) {
207					editor.setValue(editor.getValue() + "\n\tdeleteItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
208				},
209				getItem: function( params ,callback) {
210					editor.setValue(editor.getValue() + "\n\tgetItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
211				},
212				query: function( params ,callback) {
213					editor.setValue(editor.getValue() + "\n\tquery\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
214				},
215				scan: function( params ,callback) {
216					editor.setValue(editor.getValue() + "\n\tscan\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
217				},
218				deleteTable: function( params ,callback) {
219					editor.setValue(editor.getValue() + "\n\tdeleteTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
220				},
221				transactWriteItems: function( params ,callback) {
222					editor.setValue(editor.getValue() + "\n\ttransactWrite\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1)
223				},
224
225			}
226			DynamoDB = new window['@awspilot/dynamodb'](fakedynamo)
227			var origainal_cl = console.log;
228			console.log = function() {
229				[].slice.apply(arguments).map(function(argument) {
230					editor.setValue(editor.getValue() + argument + ' ',-1)
231				})
232				editor.setValue(editor.getValue() + "\n" ,-1)
233			}
234			eval(code)
235
236		})(code)
237
238	}, 500)
239
240}
241
242
243
244execute_code = function(code) {
245	var editor = ace.edit('result-out')
246	editor.setValue('')
247	setTimeout(function() {
248		;
249		(function(code) {
250
251			var ddb = new window.AWS.DynamoDB({ endpoint: 'https://djaorxfotj9hr.cloudfront.net/v1/dynamodb', region: 'us-east-1', credentials: { accessKeyId: 'myKeyId', secretAccessKey: 'y'} })
252
253			DynamoDB = new window['@awspilot/dynamodb'](ddb)
254			var origainal_cl = console.log;
255			console.log = function() {
256				[].slice.apply(arguments).map(function(argument) {
257					if (typeof argument === "object")
258						return editor.setValue(editor.getValue() + JSON.stringify(argument,null,"\t") + ' ',-1)
259
260					editor.setValue(editor.getValue() + argument + ' ',-1)
261				})
262				editor.setValue(editor.getValue() + "\n" ,-1)
263			}
264			eval(code)
265
266		})(code)
267
268	}, 500)
269
270}
271
272
273// describe_code(ace.edit($('.activeTab').attr('id')).getValue())</script>
vendor: 58 bytes, line 273
273 <script src="https://www.googletagmanager.com/gtag/js?id=
273UA-119179002-1
vendor: 18 bytes, line 273
273" async></script> 
273<script>  
vendor: 138 bytes, lines 273-277
273window.dataLayer = window.dataLayer || [];
274  function gtag(){dataLayer.push(arguments);}
275  gtag('js', new Date());
276
277  gtag('config', '
277UA-119179002-1
vendor: 3 bytes, line 277
277');
277</script>
277 
277<script src="https://buttons.github.io/buttons.js" async defer></script>
277</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.