Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/bom/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export * from './fetch'
export * from './navigator'
export * from './performance'
export * from './storage'
export * from './raf'
63 changes: 63 additions & 0 deletions src/bom/storage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import Taro from '@tarojs/taro'

export class TaroStorage implements Storage {
/**
* Returns the number of key/value pairs currently present in the list associated with the object.
*/
get length(): number {
const { keys } = Taro.getStorageInfoSync()
return keys.length
}

/**
* Empties the list associated with the object of all key/value pairs, if there are any.
*/
clear(): void {
Taro.clearStorageSync()
}

/**
* Returns the current value associated with the given key, or null if the given key does not exist in the list associated with the object.
*/
getItem(keyName: string): string | null {
const { keys } = Taro.getStorageInfoSync()
if (!keys.includes(keyName)) return null

const value = Taro.getStorageSync(keyName)
if (typeof value === 'string') return value
return JSON.stringify(value)
}

/**
* Returns the name of the nth key in the list, or null if n is greater than or equal to the number of key/value pairs in the object.
*/
key(index: number): string | null {
const { keys } = Taro.getStorageInfoSync()
if (index >= keys.length || index < 0) return null
return keys[index]
}

/**
* Removes the key/value pair with the given key from the list associated with the object, if a key/value pair with the given key exists.
*/
removeItem(keyName: string): void {
Taro.removeStorageSync(keyName)
}

/**
* Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
*
* Throws a "QuotaExceededError" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
*/
setItem(keyName: string, keyValue: any): void {
try {
const value = String(keyValue)
Taro.setStorageSync(keyName, value)
} catch (e) {
// should throw a "QuotaExceededError" DOMException
throw e
}
}
}

export const localStorage = new Storage()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里应该是 new TaroStorage()

19 changes: 18 additions & 1 deletion src/plugins/TaroProvidePlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ const cancelAnimationFrame = [`${prefix}/bom/raf`, 'caf']

const Intl = ['intl']

const Storage = [`${prefix}/bom/storage`, 'TaroStorage']
const localStorage = [`${prefix}/bom/storage`, 'localStorage']

let taroRuntimeVersion = '0.0.0'
try {
const { version } = require(path.join(
Expand All @@ -45,7 +48,12 @@ export class TaroProvidePlugin extends ProvidePlugin {
}

static buildDefinitions(identifiers = ['default'] as TaroProvidePluginIdentifiers[]): Record<string, string[]> {
const defaultIdentifiers: TaroProvidePluginIdentifiers[] = ['fetch', 'performanceNow', 'requestAnimationFrame']
const defaultIdentifiers: TaroProvidePluginIdentifiers[] = [
'fetch',
'performanceNow',
'requestAnimationFrame',
'Storage',
]

// if (semver.lt(taroRuntimeVersion, '3.0.0-rc.1')) defaultIdentifiers.push('requestAnimationFrame')
if (semver.lt(taroRuntimeVersion, '3.0.0-alpha.6')) defaultIdentifiers.push('navigator')
Expand Down Expand Up @@ -99,5 +107,14 @@ export class TaroProvidePlugin extends ProvidePlugin {
['window.Intl']: Intl,
}
},

get Storage() {
return {
Storage,
localStorage,
['window.Storage']: Storage,
['window.localStorage']: localStorage,
}
},
}
}